프로그래밍 공부
카테고리
작성일
2024. 6. 18. 00:35
작성자
WDmil
728x90

컨볼루션 신경망(CNN)

 

컨볼루션 신경망은 이미지 분야를 다루기에 최적화된 구조이다.

 

컨볼루선 신경망은 크게 컨볼루션층(COnvolution Layer)과 풀링층(Polling[Subsampling])Layer로 구성된다.

풀링은 서브샘플링 이라고 불린다.

 

컨볼루션 층에서 이루어지는 동작

3x3커널을 이용해서 5x5크기의 이미지 행렬에 컨볼루션 연산을 수행하는 과정이다.

 

입력에 해당되는 커널의 값을 1만큼, 0이라면 0을 곱해서 나온 모든 결과를 더해서 출력위치에 넣어서 압축하는것이다.

 

원본이미지에 커널을 이용해서 컨볼루션을 수행하면 커널의 종류에 따라 원본 이미지의 특징들이 화설화 맵으로 추출되게 한다.

 

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

이미지 노이즈처리를 한다고 생각하면 된다.

 

 

커널의 종류에 따라 원본 이미지의 모서리(Edge)를 추출하거나 더 명확한 이미지(Sharpen)으로 바꾸거나 원본 이미지를 흐리게(Blur)할 수 있다.

 

이렇게 추출한 활성화 맵은 원본 이미지에서 명확하게 드러나지 않던 특징을 볼 수 있다.

 

우리가 어떤 사진이 자동차인지 사람인지를 분류하고자 한다면, 원본 이미지 자체를 사용하는것 보다

모서리만 추출된 특징 이미지를 사용하는 것이 더 효율적일 것이다.

 

좀더 구체적으로 말하면, 모서리가 추출된 이미지를 통해 분류기를 학습하면

컴퓨터는 모서리가 각진 형태면 자동차, 모서리가 둥근 형태면 사람이라고 손쉽게 구분할 수 있을것이다.


풀링

 

풀링은 차원을 축소하는 연산을 수행한다.

 

풀링의 종류에는 최대값 풀링(Max Pooling), 평균값 풀링(Average Pooling), 최소값 풀링(Min Pooling)이 있다.

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

 

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

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

 

풀링 예시

풀링 수행과정을 보자.

 

풀링층은 크게 2가지 장점이 있다.

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

 

예를들어, 모서리만 추출된 활성화 맵에서 최대값 풀링을 수행하면, 차원은 축소되고 흐릿하던 모서리 부분이 더욱 뚜렷해질 것이다.


 

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

 

구체적으로 인풋 이미지의 가로 길이가 $ W_{in} $ 이라면, 컨볼루션 층을 거친 출력 이미지의 가로 길이 $ W_{out} $ 은 다음과 같이 계산된다.

 $  W_{out} = \frac{W_{in} - F + 2P}{S} + 1 $

 

여기서 F는 필터의 크기, S는 스트라이드 를 의미한다.

 

스트라이드

스트라이드는 컨볼루션 연산 시 건너뛰는 정도를 나타낸다.

 

만약, 스트라이드를 크게 잡아서 이미지를 성큼성큼 건너뛰어서 컨볼루션을 수행하면 차원이 많이 축소되고, 스트라이드를 작게 잡아서 이미지를 촘촘히 건너뛰면 차원이 조금 축소된다.

 

또한 $ \frac{W_{in} - F + 2P}{S} $ 의 차원이 정수로 나누어 떨어지지 않을 수도 있기 때문에 인풋 이미지의 상하좌우 모서리에 P만큼 0을 채워주는 제로패딩 을 P만큼 적용해준다.

제로패딩

 

마찬가지로, 인풋 이미지의 세로 길이가 $ H_{in} $ 이라면 컨볼루션층을 거친 출력 이미지의 세로길이 $ H_{out} $ 은 아래와 같이 계산된다.

 

$ H_{out} = \frac{H_{in} - F + 2P}{S} + 1 $

 

컨볼루션 층의 출력결과의 3번째 차원은 컨볼루션 필터 개수가 K가 된다.

따라서 컨볼루션층의 결과로 출력되는 차원은 $ [W_{out}, H_{out}, K] $ 이다.

 

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

 

$ W_{out} = \frac{28 - 4 + 2 * 1}{2} + 1 = 14 $

$ H_{out} = \frac{28 - 4 + 2 * 1}{2} + 1 = 14 $

$ K = 64 $

 

 

728x90

'알고리즘' 카테고리의 다른 글

드랍아웃(Dropout)  (0) 2024.06.18
CNN을 사용한 MNIST숫자분류기 구현  (0) 2024.06.18
CNN기반 컴퓨터비전처리  (0) 2024.06.17
AutoEncoder를 사용한 MNIST 데이터 재구축  (1) 2024.06.17
오토인코더(Autoencoder)  (0) 2024.06.16