컨볼루션 신경망, CNN

:: 이미지 분야를 다루는데 최적화 된 인공신경망 구조

: 크게 컨볼루션층(Convolution Layer), 풀링층(Pooling, 서브샘플링 Subsampling Layer) 으로 구성되어 있다.

CNN 구조/ 출처 http://taewan.kim/post/cnn/

 


1. 컨볼루션 Convolution 층

: 컨볼루션 연산(합성곱 연산)을 통해서 이미지의 특징을 추출해내는 역할

 

- 컨볼루션

: 커널(Kernel) 또는 필터(Filter)라고 불리는 윈도우 크기만큼의 X×X 크기의 행렬을 Y×Y 크기의 이미지 행렬의 X×X 크기

부분과 곱해서 모두 더하는 수학 연산자

 

출처 https://halfundecided.medium.com/%EB%94%A5%EB%9F%AC%EB%8B%9D-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-cnn-convolutional-neural-networks-%EC%89%BD%EA%B2%8C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-836869f88375

 

이렇게 원본 이미지에 커널을 이용해서 컨볼루션을 수행하면 커널의 종류에 따라 원본 이미지의 특징들(Features)이 활성화 맵(Activation Map) 으로 추출되게 된다.

 

이때, 어떤 커널을 사용하느냐에 따라 원본 이미지에서 다양한 특징을 추출할 수 있다.

커널 종류에 따른 다양한 추출 이미지 / 출처 https://en.wikipedia.org/wiki/Kernel_(image_processing)

 

이렇게 추출한 활성화 맵은 원본 이미지에서 명확히 드러나지 않던 특징들을 보여준다.

자동차와 사람을 분류하고자 할 때, 원본 이미지 자체를 사용하는 것보다 모서리만 추출된 특징 이미지를 사용하는 것이 더 효율적일 것이다.

 


2. 풀링 Pooling 층

: 차원을 축소하는 연산 수행

 

종류?

- 최대값 풀링 Max Pooling , 평균값 풀링 Average Pooling, 최소값 풀링 Min Pooling 등

 

Max Pooling / 출처 https://developers.google.com/machine-learning/practica/image-classification/convolutional-neural-networks

최대값 풀링은 이미지의 X×X 크기 부분에서 가장 큰 값 하나를 추출해서 원본 이미지의  X×X개의 값을 1개의 값으로 축소한다.

 

동일한 원리로 평균값 풀링, 최소값 풀링은 평균값, 최소값으로 축소한다.

풀링층 역시 이미지의 좌측 상단에서 우측하단으로 순차적으로 전체 이미지에 대해 풀링을 수행한다.

 

 

이러한 이미지 차원 축소를 통해 필요한 연산량을 감소시킬 수 있고, 이미지의 가장 강한 특징만을 추출하는 특징 선별 효과가 있다. 

 

 


→ 컨볼루션층을 거치면 인풋 이미지의 가로, 세로 차원이 축소된다. 

출력 이미지 가로 길이 계산법

(W in = 인풋 이미지의 가로 길이, W out = 출력 이미지의 가로 길이, F = 필터의 크기, S = 스트라이드)

 

+) 스트라이드? 컨볼루션 연산시 건너뛰는 정도

스트라이드가 크면 컨볼루션 수행 시 차원이 많이 축소되고 스트라이드가 작으면 차원이 조금 축소된다.

 

또한 모든 차원이 정수로 나누어 떨어지지 않을 수 있으므로 인풋 이미지의 상하좌우 모서리에 P만큼 0을 채워주는 제로패딩(Zero-Padding)을 P만큼 적용해준다.

제로 패딩 / 출처 https://excelsior-cjh.tistory.com/180 

 

 

출력 이미지 세로 길이 계산법

출력 이미지 세로 길이 계산법은 가로 길이 계산법과 같다.

 

 

 

마지막으로, 컨볼루션층의 출력결과와 3번째 차원은 컨볼루션 필터 개수 K가 된다.

따라서 컨볼루션층의 결과로 출력되는 차원은 [W out, H out, K] 이다.

 

예를 들어, [28x28x1] MNIST 이미지에 4x4 크기의 필터(F=4)에 스트라이드가 2(S=2)이고, 제로 패딩을 1만큼 적용한(P=1) 64개의 필터개수(K=64)를 가진 컨볼루션층을 적용하면 출력 결과로 [14,14,64]

즉, 14x14 크기의 64개의 활성화맵이 추출된다.

 

 

이런 과정을 거친 활성화 맵들은 마지막에 Flattening으로 펼친 다음 완전연결층(ANN)의 인풋으로 들어가서 Softmax 분류를 수행하게 된다.

+ Recent posts