안녕하세요. 이번에는 저번 포스팅에 이어서 CNN(Convolution Neural Network)에 대해 리뷰해보려고합니다. CNN Layer는 Keras 기준 크게 Conv1D, Conv2D, Conv3D 가 있는데 각각의 차원이 다를뿐 연산 방식은 동일합니다.
(출처 : 밑바닥부터 시작하는 딥러닝)
위 그림은 Convolution에서 연산방식을 이해하는데 표현이 잘된 그림이라 가져왔습니다. 첫번째 그림을 보면 좌측에 4 x 4 영역이 좌측상단부터 3x3 영역이 회색으로 표시되어 있습니다. 그리고 우측에는 3x3 행렬이 있죠. 좌측에 위치한 4x4 메트릭스에 3x3 커널이 회색영역에 겹쳐져 연산이 되는것입니다. 연산은 각각의 위치별로 모두 곱해지고 그 값의 합인 15가 output으로 나오는 것이죠.
마찬가지로 4개의 영역에 대해 연산을 진행하면 4x4 메트릭스가 3x3 kernel연산을 통해 2x2 메트릭스로 변합니다. 연산 방식 자체는 그리 복잡하지않고 여기서 다양한 경우가 있습니다. 가운데에 3x3 부분을 kernel이라고하는데 이 부분의 size가 2x2, 3x3 ,4x4 등등 될수있고 꼭 정사각형 모양만 가능한것은 아닙니다. 또한 지금은 좌측에 메트릭스가 4x4이기때문에 무조건 한칸 움직일수밖에 없지만 사진등에서는 꼭 한칸식 움직이라는 규칙은 없죠. 이 개념이 strides 인데 위는 1인 경우고 2는 2칸식 움직이게됩니다.
위의 그림은 또다른 예시라 5X5 메트릭스에 3x3 kernel을 적용한 형태입니다. 위의 케이스 역시 kernel_size = 3x3 이고 strides = 1입니다.
하나 차이점이 있다면 파란색 5x5 겉면에 흰색 공간이 있는데 이 부분은 padding이라고합니다. padding에는 대표적으로 zeropadding이 있는데 의미는 그 부분을 0으로 채우고 convolution연산을 진행한다는 의미입니다.
그 외에도 reflection padding, constant padding,replica padding 등 여러가지가 있는데 기회가된다면 나중에 리뷰를 하도록 하겠습닏다.
그 다음에는 2차원 메트릭스가 아닌 3차원 메트릭스에 컨벌루션 연산을 하는 그림입니다.
이전에 그림들은 전부 1차원 메트릭스로 흑백 이미지에 해당해선 맞는 그림입니다. 그러나 실제로 대부분 그림이나 사진은 흑백이 아닌 컬러인 경우가 더 많으며 이럴때는 보통 이미지가 3개의 채널을 가진 3차원 메트릭스가 됩니다. (720,1280,3) , (1080,1920,3) ... 등등의 모양입니다.
이럴때도 마찬가지로 컨벌루션 연산이 가능합니다. kerenl이 하나의 차원을 더 가지면 되는것이기 때문에 연산방식은 같으며 위의 그림과같이 이해하시면 됩니다.
여기서부터는 제가 convolution 연산이 왜 이미지처리에 좋은가에 대해 개인적으로 이해한 방법입니다. 공식적으로 맞는것은 아니며 약간 사이비(?)적인 이해이므로 한번 읽고 생각해보시면 좋을것같아 정리합니다.
이미지에서는 공간적인 정보가 굉장히 중요합니다. 가령 위의 그림에서 8에서 107값을 가지는 pixel은 주변에 주황색 박스에 있는 pixel들과 깊은 연관이 있지만 좌측 하단의 파란색 pixel과는 주황색 박스만큼의 연관은 없습니다.
공간적인 정보가 중요하다는것은 이 의미입니다. 자신과 위치적으로 가까이에있는 픽셀에 의해 의미가 정해지고 바뀌며 거리가 멀수록 그 중요도는 떨어집니다. convolution연산은 Fully Connected Layer와는 다르게 모든 픽셀에서 연결되는것이 아닌 정말 자기 자신의 중요한 주변부분에서 정보를 받는것이기때문에 이미지에 매우 강하며 convolution연산을 하면 할수록 이미지의 의미 없는 부분은 사라지고 특징이 강조되기때문에 이미지처리에 상당히 강한 것입니다. 이미지를 부분부분 볼수 있게되는것이죠.
여기까지가 제가 이해한 방식이고 정확하지 않을수 있으니 참고만 하시기 바랍니다.
Keras Callbacks (Model_CheckPoint,Early_Stopping,ReduceLROnPlateau) (0) | 2022.01.01 |
---|---|
CIFAR_10 (0) | 2021.12.19 |
Keras FCN Network (0) | 2021.11.28 |
Keras MNIST 예제코드 (0) | 2021.11.20 |
댓글 영역