CNN - Convolution¶
Convolution¶
수식을 보면 아래와 같다.
이 식을 그림으로 확인해 보면,
위와 같이 filter계산이 진행이 된다.
RGB Image Convolution¶
여기서 input의 채널의 크기가 3이므로 filter도 같이 3차원의 값이 3이 되어야한다. 출력값은 filter가 1개이기 때문에 28x28x1이 된다.
✅ 만약 출력의 값을 늘리고 싶다면?
filter의 개수를 늘리게 되면 출력의 개수도 같은 수 만큼 늘어나게 된 것을 확인할 수 있다.
filter의 개수는 출력의 깊이에 의해 결정되고, filter의 깊이는 입력의 깊이에 의해 결정된다.
Convolutional Neural Networks¶
CNN은 convolution layer, pooling layer, fully connected layer로 구성되어 있다.
- Convolution and pooling layers: 특징을 추출
- Fully connected layer: 분류를 하거나 회귀를 해서 원하는 출력값을 결정
Stride¶
Stride는 filter을 찍고 옮길 때의 이동 거리를 의미한다. 지금까지는 기본으로 1로 진행해 왔다.
Padding¶
입력에 padding값을 추가하여 입력과 출력의 개수를 같게 만들어 준다.
각각의 input, output에 따라 stride와 padding을 알 수 있다.
Convolution Arithmetic¶
✅ 이 모델에서 parameter의 개수는 몇개인가?
먼저 위 조건을 보면 padding은 1이고 stride도 1이다. input의 채널이 128이므로 kernel은 3x3x128의 크기를 가진다. 그 다음 출력의 채널이 64인걸 보면 kernel의 개수가 64개인 것을 알 수 있다.
따라서 parameter의 개수는 3 x 3 x 128 x 64 = 73,728 이다.
📌 예시¶
- 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¶
🤔 왜 사용할까?
- 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 |