1. VGG 개요
VGG는University of Oxford의 Visual Geometry Group에서 제안한 ILSVRC, 2014 대회에서 준우승한 CNN 구조 (VGG-19)입니다. 2014 대회의 우승은 GoogLeNet (inception - v1)이 차지했지만, VGG의 구조가 워낙 간결해서 더 많은 인기를 얻었습니다.
Simonyan et al., 2014 연구의 핵심은 네트워크의 깊이를 깊게 만드는 것과 모델 성능의 관계를 확인하는 것이었습니다. 때문에 kernel의 크기를 3x3으로 고정하고 layer를 깊게 만들어가며 성능을 비교했습니다.
논문에 실려있는 위 그림 Fig. 1에 다양한 VGG 실험 결과가 있습니다. 먼저 A, A-LRN에서는 구조 A에 Local Response Normalization을 추가하여 실험을 했는데, 성능에 큰 영향이 없어 이후 B, C, D, E에는 적용하지 않았다고 합니다. A 보다 더 깊은 구조인 B, C, D, E에서는 성능이 개선됨을확인했습니다. 다시 말해서 깊어질수록 성능이 좋아짐을 관찰 했습니다. 위 여러 구조에서 D, E가 각각 VGG-16, VGG-19이며 뒤에 붙는 숫자는 Layer의 수를 의미합니다.
VGG 이후로 CNN의 깊이가 깊어지기 시작했다는 점에서 역사적인 의의가 있습니다.
2. VGG 특징
VGG의 특징은 3x3 필터 사용과 zero-padding의 사용입니다.VGG 이전에는 주로 5x5 필터를 사용했는데, 더 작은 크기인 3x3 필터를 사용하고, zero-padding을 사용함으로써 convolution layer를 더 깊게 쌓을 수 있게 됩니다. Layer가 깊어지면 여러번 non-linear activation function (예를 들어 ReLU)을 거쳐 feature에 보다 많은 non-linearity를 줄 수 있게 됩니다. 작은 필터를 사용하면 convolution layer에 필요한 weight가 줄어듭니다.
예를 들어 10x10 input에 5x5 filter,1 stride를 적용하면 6x6 feature map을 얻고 이때 필요한 weight의 수는 25개 입니다. 반면에 10x10 input에 3x3 filter, 1 stride를 두 번 적용하면 마찬가지로, 6x6 feature map을 얻는데, 이때 필요한 weight의 수는 9x2=18개가 됩니다.
같은 맥락에서 3x3 filter, 1 stride를 두 번 적용하는 것은 5x5 filter, 1 stride를 한 번 적용하는 것과 비슷합니다. 또한 3x3 filter, 1 stride를 세 번 적용하는 것은 7x7 filter, 1 stride를 한 번 적용하는 것과 같은 효과를 지닙니다. VGG에서는 기존의 5x5 또는 7x7 filter를 적용하는 것 대신 3x3 filter를 여러번 적용합니다.
3. VGG 구조
VGG-16의 상세한 구조는 위 Fig. 2와 같습니다. 복잡한 내용 없이 convolution의 depth를 깊게 구성하여 좋은 성능을 보이는 것이 VGG의 큰 장점입니다. 하지만 네트워크가 깊어진 만큼 학습해야이 오래 걸린다는 단점도 갖고 있습니다.
이상으로 VGG 포스팅을 마치겠습니다.
감사합니다:)
References
- Simonyan, Karen, and Andrew Zisserman. "Very deep convolutional networks for large-scale image recognition." arXiv preprint arXiv:1409.1556 (2014).
- https://wikidocs.net/137251
- https://velog.io/@lighthouse97/VGG-Net%EC%9D%98-%EC%9D%B4%ED%95%B4
- https://wikidocs.net/164796
'Deep Learning > Convolutional Neural Networks' 카테고리의 다른 글
AlexNet, 2012 (0) | 2023.02.10 |
---|---|
LeNet-5, 1998 (0) | 2023.01.30 |
CNN 역전파 (Backpropagation for CNN) (6) | 2019.07.02 |
Convolution Neural Networks (합성곱 신경망) (42) | 2019.06.23 |
댓글