- toc {:toc}
Introduction
LeNet을 통해 convolution(이하 conv)이 나온 이후, AlexNet을 통해 ConvNets이 large-scale 이미지, 비디오 인식에 좋은 성과를 거둠에 따라 ConvNets의 성능을 증가시키는 방법에 대한 연구로 방향이 이어졌다.
Related Work - Visualizing and Understanding Convolutional Networks
해당 논문은 conv의 특징맵을 시각화하고, 어떻게 사용해야 conv를 더 효과적으로 사용할 수 있는지 제시한 논문이다. 논문에서는 AlexNet을 모델로 설정해 실험을 진행했다.
논문에서는 Layer 1에서는 edge, corner와 같은 low-level의 특징을 뽑아내고, 층이 거듭될수록, 질감이나 형태와 같은 high-level의 특징을 뽑아낸다는 것을 제안했다.
Fig2의 (c)에서는 receptive window size와 stride를 더 작게 만드는 경우 더 뚜렷한 특징을 만들고 죽은 특징들이 더 덜 보인다고 제시한다.
다음과 같은 연구에 이어 VGGNet에서는 첫 번째 층에서 더 작은 receptive window size를 적용하고, 네트워크의 깊이를 증가시키는 방법을 제시했다.
VGGNet
VGGNet의 Layer 구조는 다음과 같다.
- Input : 224x224 RGB 이미지
- Pre-processing : Train set의 R, G, B 평균값을 각 픽셀에 빼준다.
- Conv
- Kernel size : 3x3
- Stride : 1
- Padding : same (출력 특징맵의 크기가 입력과 같게 만든다. Stride=1 이므로 Padding=1)
- 1x1Conv : Configuration C에 사용되는 1x1conv는 같은 차원으로의 선형 변환 후 ReLU로 인한 비선형성의 증가를 위해 적용했다.
- MaxPooling
- Size : 2x2
- Stride : 2
- Conv에서는 특징맵 크기를 유지하고 MaxPooling에서 크기를 줄인다.
- 특징맵의 크기가 1/4로 줄어들면 출력 채널은 2배로 증가시킴으로써 특징을 보존하고 깊은 특징을 뽑아내려 한다.
- Parameters : 138M (VGGNet-16 이 주로 많이 사용됨)
VGGNet의 특징맵 변화는 아래 그림과 같다.
Discussion
Why use smaller filters? (3x3 conv)
AlexNet과 Related Work에서 소개한 Visualizing and Understanding Convolutional Networks에서는 11x11conv를 stride 4로, 7x7conv를 stride 2로 첫 번째 층에서 사용하면서 넓은 범위의 특징을 뽑아내는 방식을 사용했으나, VGGNet에서는 3x3conv를 stride 1로 여러 번 사용하는 방식을 사용했다. 왜 VGGNet에서는 이런 방식을 사용했을지 분석해보자.
1. More non-linearity
위 그림은 10x10 입력에 7x7 conv와, 3x3 conv를 stride 1로 이동시키며 4x4 특징맵을 만드는 그림이다.
7x7conv의 경우 1번의 conv 연산을 통해서 4x4 특징맵을 출력한다. 하지만 3x3conv는 7x7conv가 1번의 연산을 3번의 연산을 통해서 출력한다. Conv 연산 이후 ReLU를 통과하기 때문에 conv 연산을 여러 번 수행할수록 다양한 특징공간으로 변형시키고 비선형성을 증가시키는 효과를 가져온다. 비선형성을 증가시키면 결정 함수가 더 뚜렷한 결정을 할 수 있도록 만든다.
2. Decrease the number of parameters
7x7conv와 3x3conv를 비교해봤을 때 파라미터의 수를 계산해보자.
-
파라미터의 계산
-
입력과 출력의 채널이 모두
채널이고 bias가 없다고 가정한다. -
7x7conv의 파라미터
-
3x3conv의 파라미터
즉, 3x3을 여러 번 사용하더라도 7x7을 할 때에 비해 파라미터의 수가 작다는 것을 알 수 있다.
파라미터의 수가 크다는 것은 그만큼 연산량이 많다는 의미이고, 이는 곧 깊게 쌓을 수 없다는 의미이다. 이를 VGGNet에서는 3x3conv를 사용하여 파라미터의 수를 감소시킴으로써 더 깊은 층을 쌓을 수 있도록 만들었다.
Result
A에서 E로 갈수록 층을 깊게 쌓은 구조임을 생각하면 층이 깊어질수록 오차가 더 줄어들어 성능이 증가하는 것을 확인할 수 있다.
VGGNet은 3x3conv를 사용함으로써 비선형성의 증가, 파라미터 감소의 효과를 통해 ConvNets의 더 좋은 성능을 이끌어냈다.
참고문헌
- Fig1, Fig2 - Visualizing and Understanding Convolutional Networks
- Fig3, Fig6 - VGGNet, Very Deep Convolutional Networks for Large-Scale Image Recognition
- Fig4 - https://neurohive.io/en/popular-networks/vgg16/
- Fig5 - https://medium.com/@msmapark2/vgg16-%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0-very-deep-convolutional-networks-for-large-scale-image-recognition-6f748235242a