CNN - Convolution

CNN - Convolution


Convolution

수식을 보면 아래와 같다.

image.png

이 식을 그림으로 확인해 보면,

image.png

image.png

위와 같이 filter계산이 진행이 된다.



RGB Image Convolution

image.png

여기서 input의 채널의 크기가 3이므로 filter도 같이 3차원의 값이 3이 되어야한다. 출력값은 filter가 1개이기 때문에 28x28x1이 된다.

✅ 만약 출력의 값을 늘리고 싶다면?

image.png

filter의 개수를 늘리게 되면 출력의 개수도 같은 수 만큼 늘어나게 된 것을 확인할 수 있다.

image.png

filter의 개수는 출력의 깊이에 의해 결정되고, filter의 깊이는 입력의 깊이에 의해 결정된다.

Convolutional Neural Networks

image.png

CNN은 convolution layer, pooling layer, fully connected layer로 구성되어 있다.

  • Convolution and pooling layers: 특징을 추출
  • Fully connected layer: 분류를 하거나 회귀를 해서 원하는 출력값을 결정



Stride

image.png

Stride는 filter을 찍고 옮길 때의 이동 거리를 의미한다. 지금까지는 기본으로 1로 진행해 왔다.



Padding

image.png

입력에 padding값을 추가하여 입력과 출력의 개수를 같게 만들어 준다.


image.png

각각의 input, output에 따라 stride와 padding을 알 수 있다.



Convolution Arithmetic

image.png

✅ 이 모델에서 parameter의 개수는 몇개인가?

먼저 위 조건을 보면 padding은 1이고 stride도 1이다. input의 채널이 128이므로 kernel은 3x3x128의 크기를 가진다. 그 다음 출력의 채널이 64인걸 보면 kernel의 개수가 64개인 것을 알 수 있다.

따라서 parameter의 개수는 3 x 3 x 128 x 64 = 73,728 이다.


📌 예시

image.png

  • 1번: 11 x 11 x 3 x 48 $*$2 $\approx35k$ → 2개로 나눠져서 $*2$
  • 2번: 5 x 5 x 48 x 128 $*$2 $\approx307k$
  • 3번: 3 x 3 x 128 $*$2 x 192 $*$2 $\approx884k$ → filter가 2번 적용, 2개로 나눠짐
  • 4번: 3 x 3 x 192 x 192 $*$ 2 $\approx663k$
  • 5번: 3 x 3 x 192 x 128 $*$2 $\approx442k$
  • 6번: 13 x 13 x 128 $*$2 x 2048 $*$2 $\approx177M$ → 현재 layer에 2개가 있고 다음 layer에 2개에 적용
  • 7번: 2048 $*$2 x 2048 $*$2 $\approx16M$
  • 8번: 2048 $*$2 x 1000 $\approx4M$
    빨간색은 Convolution layer, 파란색은 dense layer



1x1 Convolution

image.png

🤔 왜 사용할까?

  • Dimension을 줄이기 위해서
  • 깊이가 늘어나면서 증가하는 parameter들을 줄이기 위해서

'AI > 이론' 카테고리의 다른 글

RNN - Sequential Models  (0) 2021.02.04
RNN 맛보기  (0) 2021.02.04
Computer Vision Applications  (0) 2021.02.03
CNN - 1x1 Convolution  (0) 2021.02.03
CNN Preview  (0) 2021.02.02
Optimization  (0) 2021.02.02
뉴럴 네트워크 - MLP(이론)  (0) 2021.02.01
PyTorch basic  (0) 2021.02.01

+ Recent posts