본문 바로가기
Make the Learning Curve/Data Science

[딥러닝] Convolution and Pooling in CNN

by 에이도 2020. 12. 12.

2020/12/12 - [2020/데이터사이언스개론] - [딥러닝] Convolution and Pooling in CNN

이전 글과 연결되는 합성곱신경망에서 Convolution과 Pooling입니다! 

 

[도입]

 

컴퓨터 비젼에서는 다음과 같이 선,모양(구조 간단) -> 부분 -> 전체 (구조 복잡) 순으로 탐지를 하게 됩니다! 

작은 모듈을 인식하고 모아서 결합하고 더 큰 모듈을 만드는 것을 반복합니다.

 

 

 

이를 이용하여 딥러닝에서도 사용하기 위해서

구조가 복잡하지 않은 선이나 모양( vertical edges : 수직 , horizontal edges : 수평)으로

detect하는 operation으로 나누어서 뽑으려고 합니다. 

이때 사용하는게 Convolution Operation(합성곱 연산자)입니다! 

 


Convolution operation 합성곱 연산자

이때 Matrix의 숫자는 색의 밝기를 표시합니다.

Convolution 연산자는 filter의 크기에 맞는 image크기만큼하여 구합니다.

(여기서는 z1 부터 z16까지 구하게 됩니다.) 

Image 6x6의 크기에서 3x3 행렬이 한 칸씩 오른쪽으로 4번 아래쪽으로 4번 총 16번 이동이 가능하고, 따라서 z1 부터 z16까지 4x4크기의 결과 행렬이 만들어집니다.

이때, z1 = 10*1 + 9*0 + -1*-1 + 4*1 + 0*0 +2*(-1) + 3*1 + 7*(-3) + -3*-1 = 20으로 계산이 됩니다.

 

 

이렇게 해서 z1 부터 z16까지 값을 구하고 시각화 할 수 있습니다.

이를 통해 input image convolutional operation을 통해 output을 만드는 이유는

기존 큰 이미지의 크기(6x6) 4x4로 축소할 수 있기 때문입니다. 

 

 

.참고 : http://taewan.kim/post/cnn/#1-1-%ED%95%A9%EC%84%B1%EA%B3%B1-convolution


 

 

 

각 각의 Matrix에 대한 image입니다.

이때, 이 filter는 matrix에 따라 역할이 달라집니다.

여기서의 filter는 세로형 edge filter로,  vertical edge filter입니다.

이미지를 보면 알 수 있듯이 1일때 White , 0일때 gray , -1일때 Black 입니다.

 

이 Vertical edge filter가 image Matrix와 합성곱을 하여 계산하면

맨 오른쪽의  4x4행렬이 나오게 됩니다! (이미지와 filter의 행렬 크기에 따라 달라집니다!)

이렇게 합성곱을 통해 vertical detected edge를 구할 수 있습니다! 

여기서는 가운데에 edge가 있구나! 라는 이미지의 해석을 할 수 있습니다 

 

따라서 Convolutional layer는 컴퓨터 비젼에서 사용하는 알고리즘 (특정 filter(여기서는 vertical filter)를 적용해서 image와 합성곱을 하여 만들어진 matrix를 image로 표현하는 방법)을 적용한 것 입니다.

 

다시 말해서,

Convolutional layer 신경망에서 퓨터비젼의 알고리즘 (filter를 사용하여 이미지에서 우리가 원하는 단위 edge( 또는 shape)를 새로 생성하는 것)을 사용한 것 입니다.  

 

 

따라서 특정 이미지가 있을때, vertical filter, Horizontal filter를 각 각 사용한다고 가정하면,

그 filter에 맞는 edges를 얻을 수 있습니다.

이러한 edge는 이미지를 조금 더 간단한 구조로 만들기 위하여 사용하는 것입니다!

 

 

이 외에도 X shape , 0 Shape filter 등 많은 filter들이 있다고 합니다! 


 

Convolutions on multi - channel images 

이제 RGB(칼라 이미지)처럼 여러개의 채널을 가진 이미지가 어떻게 convolution 되는지 알아보겠습니다! 

(RGB는 Red, Green, Blue 의 약자로 이미지의 색을 나타내기 위한 가장 기본이 되는 3가지 색상입니다!) 

 

 

여러개의 채널이 있다면, filter도 그 채널의 개수만큼 있습니다. 

따라서 convolution 연산자도 채널의 개수만큼 작동합니다.

 

하지만 채널이 여러개여도 output의 차원은 이전 1개의 채널에서의 output dimension(1차원)과 같습니다.

 


다양한 패턴을 한 이미지에서 알기 위해 여러가지의 filter를 사용할 수도 있습니다.

(여러가지 필터를 사용하면 여러가지 비쥬얼적인 속성을 가지는지 더 잘 알 수 있습니다! -> 보통 convolution layer에서도 많은 filter를 사용합니다.)

 

이때는 filter의 종류의 수만큼 output 이미지(feature map)가 발생합니다 ! 

 


그렇다면 Convolutional layer에서

1) 훈련은 어떻게 시키고

2) 어떻게 파라미터를 정하며,

3) 최적의 필터는 어떻게 정할까요? 

->  그것은 바로 Just Do it! 입니다.

왜냐하면 CNN( Convolutional Neural Network)에서는 특정 filter를 미리 지정하지 않고, 최적의 필터를 찾아갑니다!

다시 말해서, 필터에 들어있는 cell 값을 학습시켜나가는 과정 자체가 CNN을 학습 시키는 과정입니다.

 

따라서 어떤 필터가 효과가 좋은지에 대해  미리 지정하지 않고,

어떤 필터가 효과적인지는 데이터를 통해서 스스로 학습시키는 것입니다! 

 

하지만 필터를 몇개쓸지는 지정해야하고, 그 필터내의 cell값이 어떻게 학습할지는 지정하지 않습니다.

 

그러면 어떤 필터가 효과적인지 어떻게 알 수 있을까요?

->  input 이미지와  output의 classification 결과로 주어진 것을 보고 예측합니다! 

 

정리하자면, CNN에서는 효과적인 특정 필터를 미리 지정하지 않고 input 데이터를 통해 

필터 내의 parameter(cell)값들을 스스로 학습시킵니다! 

 

이때, 필터의 cell 수를 구하는 방법은  f*(k*k*c +1) 입니다.

f : 필터의 수

k : 필터의 (행,열)사이즈

c : 채널 개수 

1 : bias variable 입니다! 

 

이를 통해 중요한 한가지를 알 수 있습니다!

바로 필터의 parameter(cell)의 수는 이미지의 사이즈와 무관하다는 것입니다!

이 점이 Fully connected와 큰 차이점이고,

 

이 점을 통해 CNN의 장점으로 

1) 이미지의 크기에 비해 parameter수가 적고

2) 학습할 이미지의 sample의 개수가 줄어도 되고 

3) 컴퓨터비젼의 Convolution 연산을 이용하여 이미지의 특징을 잘 뽑아올 수 있는 장점이 됩니다! 

 

이렇게 필터의 파라미터를 구하는 방법을 알았습니다.

그렇다면 위에서 구한 convolutional layer의 계산 식을 구해보겠습니다! 

Convolutional layer의 계산은 일반 뉴런의 선형 결합 + 활동함수 조합과 동일합니다! 

 

따라서 필터의 파라미터와 bias 값을 학습하기 위한

back-propagation gradient descent 알고리즘을 그대로 적용할 수 있다는 장점이 있습니다! 

 

 


이제 마지막으로 간단하게 Pooling layer를 알아보겠습니다!

Pooling layer

https://www.quora.com/Are-convolutional-neural-networks-also-deep-networks

풀링레이어는 쉽게 말하면 input 이미지의 차원(dimension)을 감소시켜 이미지를 추상화(단순화) 시키는 것입니다.

이를 통해 후속 차원에서 학습 parameter의 개수를 줄이기 위한 목적이 있습니다.

또한 차원을 감소시킴으로써 알고리즘의 성능이 좋아지기도 합니다! (stride : filter를 shift하는 가로/세로 크기입니다.)

 

풀링 레이어는

 

Pooling에는 두 가지 방식(Max, Average)이 있습니다. 

1) Max pooling 

만약  input의 4x4 이미지를 필터의 사이즈(2x2)일때,  그 사이즈(2x2) 내에서 가장 큰 값을 pooled feature map에 전달합니다!

2) average pooling  

만약  input의 4x4 이미지를 필터의 사이즈(2x2)일때,  그 사이즈(2x2) 내에서 평균 값을 pooled feature map에 전달합니다!

(보통 Max pooling을 많이 사용한다고 합니다!)

 

또한 pooling layer에는 학습할 parameter도 없습니다! 

하지만, 풀링레이어를 통해서 이미지를 더 추상화 시키고 단순화 시킬 수 있어 parameter를 줄일 수 있고 학습 효율도 좋아집니다! :)

 

 


요약

1. Convolutional Layer

  • input 이미지의 특징들을 효과적으로 표현하는 feature map으로 필터(vertical, horizonal 등)이용하여 변환할 수 있습니다.
  • 필터의 각 cell(parameter) 값을 trainable parameter로 지정하며, 이는 학습을 통해 생성합니다.
  • 기존 컴퓨터비젼의 아이디어를 Neural Network와 결합하는 방식입니다.
  • 기존 뉴런과 동일한 backpropagation 방법으로 parameter들을 최적화 할 수 있습니다.

 

2. Pooling Layer

  • input feature map의 크기를 줄여주는 역할입니다.
  • input image를 추상화하는 개념입니다.
  • 후속 layer에서 parameter 개수를 줄여주는 역할을 합니다.
  • 자체적인 parameter는 없습니다!
  •  

 

 

 

 

댓글