2019년 3월 7일 목요일
2D 이미지에 대해 어떻게 컨볼루션이 작동하는지 보셨습니다. 이제 2D 이미지뿐만 아니라 3 차원 이상의 볼륨에서 컨볼루션을 구현하는 방법을 살펴 보겠습니다. 예시를 들어 시작해보죠. 특징들을 감지하고자 한다고 가정 해 봅시다. 큰 이미지에서뿐만 아니라 RGB 이미지에서도 말입니다. 따라서 RGB 이미지는 6x6 이미지가 아닌 6x6x3 이미지가 될 수 있습니다. 여기서 3 이 3 가지 색상 채널에 대응되는 것이죠. 이제, 이것을 6x6 개의 이미지 3개를 쌓을 것으로 으로 생각하십시오. 이 이미지에서 가장자리 또는 다른 기능을 감지하기 위해 이걸 컨볼브 합니다. 예전처럼 3×3 필터로 하는 게 아니라 이젠 3x3x3의 3D필터로 처리 합니다. 따라서 필터 자체에는 빨강, 녹색 및 파랑 채널에 세 개의 레이어가 있습니다. 세 개의 레이어가 있습니다. 그래서 이들에게 몇 가지 이름을 붙이면 이 처음 6 이건 이미지의 높이입니다. 이건 넓이, 그리고 이 3은 채널의 개수입니다. 그리고 필터도 비슷하게 높이, 넓이, 그리고 채널의 개수를 나타냅니다. 여러분이 가진 이미지에서 채널의 개수는 필터의 채널 수와 일치해야 하므로 이 두 숫자가 동일해야 합니다. 다음 슬라이드에서 이 컨볼루션 연산이 실제로 어떻게 작동하는지 알 수 있습니다 하지만 이 아웃풋은 4x4 이미지입니다. 이건 4x4x1이고 더 이상 끝이 3이 아니라는걸 주목해 주십시오. 이것이 어떻게 작동하는지 자세히 살펴 보도록 하겠습니다. 그러나 더 멋지게 그려진 이미지를 사용합시다. 여기 6×6x3이미지가 있습니다. 여기에는 3x3x3 크기의 필터가 있으며, 이 마지막 숫자, 즉, 채널의 수는 3D 이미지와 필터 모두 일치하고 있습니다. 3x3x3 필터의 그림을 단순화하기 위해서, 행렬을 쌓아올 리는 대신에 저는 3차원의 큐브모양으로 그리기도 합니다. 따라서 이 이 컨벌루션 연산의 아웃풋을 계산하려면 3x3x3 필터를 먼저 취하여 가장 왼쪽 상단에 배치하십시오. 따라서 이 3x3x3 필터에는 27개의 숫자, 혹은 27개의 파라미터가 있으며, 이는 곧 3개의 큐브와 마찬가지겠죠. 이제 하셔야 할 일은 27 개의 숫자를 각각을 가져 와서 이미지의 빨강, 초록, 파랑에 해당하는 숫자들과 곱하는 것입니다. 그래서 빨간 채널에서 처음 9 개의 숫자를 취한 다음 세 개의 숫자를 그 아래 녹색 채널에 넣고 3개를 그 아래 파란색 채널에 넣으십시오. 그리고 왼쪽에 있는 이 노란색 큐브 쇼에서 해당하는 27개의 숫자를 곱하십시오. 그리고 나서 이 모든 숫자를 더하면 아웃풋에 있는 첫 번째 숫자를 구할 수 있습니다. 그 다음 아웃풋을 계산하기 위해서, 이 큐브를 한 칸 밀어주세요. 그리고 다시 27개의 곱셈을 하고 27개의 숫자를 더하면 다음 아웃풋을 구할 수 있습니다. 다음 숫자를 위해, 옆 칸으로 밀어서, 다음 칸 숫자를 구하면 세 번째 아웃풋을 구할 수 있습니다. 이렇게 해서 네 번째 숫자를, 그리고 나면 한 행 아래로 가서 다음 숫자를, 또 다음으로, 또 다음으로 이렇게 숫자들을 계산해가며 끝까지 진행하면 이 위치에서 마지막 아웃풋을 찾을 수 있을 겁니다. 그래서, 이렇게 하면 여러 분이 할 수 있게 되는 건 무엇일 까요? 예시를 하나 들어보죠. 이건 3x3x3 필터죠. 이미지의 빨간 채널에서 모서리를 감지하고 싶다면, 첫 번째 필터에 1, 1, 1, -1, -1, -1 이렇게 하던 대로 하시면 됩니다. 그리고 녹색 채널은 모두 0 이 되어야 하고, 파란색 채널도 모두 0으로 채웁니다. 3x3x3크기의 필터를 만들기 위해서 이 세 가지를 함께 묶여두면, 이는 빨간색 채널에서만 수직 가장자리를 감지하는 필터가 될 것입니다. 또는 수직 모서리의 색상을 신경 쓰지 않으면 이와 비슷한 필터를 사용할 수 있습니다. 반면에 1, 1, 1 -1, -1, -1 세 가지 채널 모두 다 이렇게 될 수 있습니다, 따라서 이 두 번째 대안을 설정하여, 파라미터를 설정하십시오. 그럼 edge detector를 생성할 수 있게 되고, 이 3x3x3 edge detector는 어느 색상의 모서리도 감지할 수 있게 됩니다. 그리고 이러한 파라미터를 다르게 선택함으로써, 3x3x3 필터로부터 또 다른 feature detector를 얻을 수 있게 됩니다. 관례에 따라, computer vision에서는, 특정한 높이, 넓이, 그리고 채널의 수를 가지고 인풋을 하면, 여러분의 필터는 그 높이와 폭은 다르지만 채널 수가 같게 될 것입니다. 이론적으로 빨강 채널 만 보거나 아니면 녹색 채널만, 파란색 채널 만 보이는 필터를 사용할 수도 있습니다. 부피를 컨볼브 시켜서 6x6x6 를 3x3x3으로 합성하면 4x4, 즉 2D의 아웃풋을 산출하게 된다는 점을 기억해주세요. 여러분은 이제 부피를 합성하는 방법을 알고 있습니다. 컨볼루션 신경망을 구축하는데 있어 결정적인 부분을 마지막으로 이야기해봅시다 우리가 수직 모서리를 감지하고 싶지 않다면 어떻게 될까요? 수직 모서리와 수평 모서리, 혹시 45도 모서리와 아님 70도 모서리를 검출하기를 원하는데, 동시에 여러 필터를 사용하고 싶다면 어떻게 해야 할까요? 자, 이전 슬라이드에서 가져온 사진입니다. 3x3x3으로 합성된 6x6x3 이미지가 4x4로 되었습니다. 아마도 이것은 수직 모서리 감지기 일 수도 있고, 아니면 다른 feature를 감지 할 수도 있습니다. 이제, 두 번째 필터가 이 오렌지 빛 색상으로 표시 될 수 있습니다. 이건 수평 edge detector라고 생각해보죠. 따라서 첫 번째 필터로 컨볼루션하면 이 첫 번째 4x4 아웃풋이 나오고, 두 번째 필터와 컨볼루션하면 4x4 아웃풋이 달라집니다. 그리고 나서 우리가 할 수 있는 것은 이 두 개의 4x4 아웃풋을 산출해서, 앞에다가 이 첫 번째 것을 놓고 이 두 번째 필터를 취해서, 여기 그려보겠습니다. 이렇게 뒤에다 두십시오. 이 두 개를 쌓아두는 겁니다. 그럼 4x4x2 의 아웃풋 볼륨이 만들어지게 됩니다. 그렇죠? 그리고 우리는 이걸 하나의 상자인 것처럼 볼륨을 생각할 수 있습니다. 아마도 이런 모양 일 것입니다. 따라서 이것은 4x4x2 아웃풋 볼륨이 됩니다. 6x6x3 의 이미지를 가져와서 컨볼루션 하고 두 개의 서로 다른 3x3x3 필터를 적용하면 두 개의 4x4 아웃풋이 생겨나게 되죠. 그럼 이것들이 쌓아 올려지며 4x4x2 볼륨을 형성하게 됩니다. 그리고 여기 두 가지는 두 개의 다른 필터를 사용했기 때문입니다. 이 dimension을 요약해보도록 하죠. nxnxnc 즉 채널 개수, 이렇게 생긴 인풋 이미지를 가지고 있다고 가정해 봅시다. 예를 들어, 6x6x3 여기서 n 옆에 붙은 대문자 C는 채널의 수를 가리키는 겁니다. 이제 fxf xnC 이렇게 컨볼루션하십시오 이건 3x3x3 이렇게 됐었죠. 관례대로, 이 마지막 숫자는 같은 숫자여만 하죠. 이렇게 해서 도출되는 결과는 n-f+1 x n-f+1 x nC' 이렇게 나옵니다. 아니면 이 nC는 다음 레이어가 될 수도 있고, 여러분이 사용하는 필터의 개수가 될 수도 있겠죠. 이 예시에서 이는 곧 4x4x2 가 됩니다. 스트라이드 1을 쓰고, 패딩을 하지 않는다는 가정에서 이렇게 썼는데요, n-f+1이 아닌 다른 패딩 스트라이드를 사용한다면, n-f+1은 일반적인 방법으로 영향을 받을 겁니다. 이전 강의들에서 보셨던 대로 말이죠. 자, 볼륨에 대한 컨벌루션은 이렇게 정말 강력합니다. 그 중 극히 일부만이 3 채널로 RGB 이미지에서 직접 조작 할 수 있습니다. 그러나 더 중요한 것은 수직, 수평 모서리 같은 두 가지 feature들, 또는 10, 또는 어쩌면 128 또는 수백 가지의 서로 다른 feature를 감지 할 수 있다는 것입니다. 아웃풋은 탐지중인 필터의 수와 동일한 수의 채널을 가지게 될 것입니다. 표기법에 대한 설명을 덧붙이자면, 저는 문헌에 나오는 이 마지막 차원을 나타내기 위해 '채널의 수'라는 용어를 사용했습니다. 이는 종종 3D볼륨의 깊이라고 불리기도 합니다, channel 과 depth, 이 둘 모두 문헌들에서는 흔하게 사용되는 표현입니다. 하지만 depth 라는 표현은 더 혼란을 주기도 하는데요, 신경망의 depth 라는 용어도 사용하기 때문입니다. 그래서 저는 이 강의에서 필터의 세 번째 dimension의 사이즈를 가리킬 때 channel이라는 용어를 사용하려고 합니다. 볼륨을 컨볼루션에 어떻게 실행시킬 수 있을지 이제 배웠으니, 컨볼루션 신경망 레이어를 구현할 준비가 이제 되신 겁니다. 어떻게 하면 되는지 다음 강좌에서 같이 알아보도록 하겠습니다.
피드 구독하기:
댓글 (Atom)
댓글 없음:
댓글 쓰기