초보 개발자의 이야기, 릿허브

[논문리뷰] VGG16 (Very Deep Convolutional Networks for Large-Scale Image Recognition) 본문

논문/📚 논문 리뷰

[논문리뷰] VGG16 (Very Deep Convolutional Networks for Large-Scale Image Recognition)

릿99 2023. 1. 19. 20:14
728x90
반응형

VGG16

https://arxiv.org/abs/1409.1556

 

Very Deep Convolutional Networks for Large-Scale Image Recognition

In this work we investigate the effect of the convolutional network depth on its accuracy in the large-scale image recognition setting. Our main contribution is a thorough evaluation of networks of increasing depth using an architecture with very small (3x

arxiv.org


 

 

1. INTRODUCTION

 

Convolution networks(ConvNets)는 large-scale 이미지 및 영상 인식에서 큰 성과를 이루었다.

이는 ImageNet과 같은 대용량 이미지 데이터셋과 GPU같은 고성능의 컴퓨팅 시스템,

그리고 ImageNet Large-Scale Visual Recognition Challenge(ILSVRC)과 같은 대회의 개최 등으로 인해 가능한 일이었다.

 

ConvNets가 컴퓨터 비전 분야에서 점차 주목받게 되면서,

original architecture를 개선하기 위한 수많은 시도들이 이루어졌는데,

그 예로 첫 번째 Convolution Layer에서 작은 receptive window size 와 작은 stride를 사용한 방법이 있다.

ILSVRC-2013에 제출된 위 방법은 뛰어난 성능을 보여주었으며,

이 외에도 전체 이미지와 multiple scales에 걸쳐 밀접하게 훈련 및 테스트하는 방법도 있다.

 

이 논문에서는, ConvNet의 디자인 구조 중 다른 중요한 면에 초점을 맞췄는데, 바로 깊이(depth)이다.

파라미터들을 고정시키고, 모든 Layer에 아주 작은 convolution filter(3 x 3) 을 적용함으로써,

Convolution Layer를 더해나가며 네트워크의 깊이를 점진적으로 늘려나갔다.

이는 결과적으로 더욱 정확한 ConvNet 구조를 실현시켰으며, 다른 이미지 인식 데이터셋에서도 완벽한 성능을 보여주었다.

 

 

 

 

2. CONVNET CONFIGURATIONS

 

2.1. ARCHITECTURE

 

Input : 224 x 224 RGB image

Preprocessing : Train Set의 각 픽셀에서 RGB 값의 평균 subtract

Convolution Layer : filter size= 3 x 3, stride = 1 (model C의 경우, filter size= 1 x 1, stride = 1 존재)

Padding : 1 pixel for 3 x 3 conv.layers

Pooling : 5 max pooling layers, 2 x 2 pixel window with stride = 2

FC-Layer : 처음 2 채널은 4096,  3번째 채널은 1000, 마지막은 softmax

 

 

 

2.2. CONFIGURATIONS

 

출처 : Very Deep Convolutional Networks for Large-Scale Image Recognition

A-E 까지 총 6개의 model을 나누어 비교했으며, conv1은 1 x 1 filter, conv3은 3 x 3 filter를 의미한다.

Table 1. ConvNet configurations의 model C를 보면, conv1, 즉  1 x 1 convolution layer를 볼 수 있는데,

이는 receptive field에 영향을 미치지 않고 모델의 비선형성을 증가시키는 방법 중 하나로 볼 수 있다.

위 표 중 model D에 해당하는 구조를 그림으로 나타내보면 다음과 같다.

 

출처 : https://neurohive.io/en/popular-networks/vgg16/

위와 같이 224 x 224 x 3 (RGB) 이미지를 input으로 받아 총 16개의 Layer에 걸쳐 인식하게 된다.

여기서 이야기하는 ConvNet,VGG16의 16은 16-Layer,

13개의 Convolution Layer + 3개의 Fully-Connected Layer를 의미한다.

 

 

 

2.3. DISCUSSION

 

해당 논문에서는 첫 번째 convolution layer에서 큰 receptive field와 stride

(11 x 11 with stride=4, 7 x 7 with stride=2)를 사용하지 않고,

전체 network에 걸쳐 비교적 작은 receptive field와 stride를 사용했다. (3 x 3 with stride=1)

그렇다면, 왜 이렇게 비교적 작은 사이즈의 3 x 3 convolution filter를 사용했을까?

하나의  7 x 7 filter를 사용하는 것보다 3개의 3 x 3 filter를 쌓아 사용하는 이유가 무엇일까?

그 이유는 아래와 같다.

 

1. 비선형성 (Non-linear)

단일 Layer 대신 3개의 3 x 3 convolution filter를 쌓아 사용하게 되면,

Decision function이 더욱 차이를 잘 분간하게 만들 수 있는

non-linear rectification layer 3개를 포함하는 것과 같다.

즉, 비선형성을 증가시켜, 해당 모델이 이미지를 더 잘 식별하도록 한다.

 

2. 파라미터 개수 감소 (Decrease number of parameters)

비교적 큰 사이즈의 단일 필터 하나를 사용하는 것이 파라미터의 개수가 적을 것 같지만,

실제 각각의 필터에 대한 파라미터의 개수를 계산해보면

7 x 7 filter 1개에 대한 학습 파라미터 수는 49(7x7), 3 x 3 filter 3개에 대한 학습 파라미터 수는 27(3x3x3)이다.

즉, 3개의 3 x 3 filter가 하나의  7 x 7 filter보다 훨씬 적은 파라미터를 갖는다.

 

 

이 논문은 비교적 작은 크기의 Convolution Filter를 사용했다는 점, Network의 깊이를 늘렸다는 점이 특징이다.

그렇다면, 다른 유사한 아이디어를 가진 논문들과의 차별점은 무엇일까?

먼저, 비교적 작은 크기의 convolution filter를 사용한 방식은 이전에도 존재했다.

하지만, 해당 논문에서처럼 깊게 Layer를 쌓지 못했으며, 대용량 ILSVRC 데이터셋에도 적용하지 못했다.[각주:1]

다른 연구에서는 깊은 ConvNet을 적용함으로써, 깊이를 깊게 만들면 더 나은 성능을 보일 수 있다는 점을 보였다.

하지만 이는 해당 논문에 비교하면 비교적 적은 Layer(11 weight layers)를 가졌다.[각주:2]

GoogLeNet[각주:3]ILSVRC-2014의 classification 부문에서 가장 좋은 성능을 낸 모델로,

깊은 ConvNet, 작은 convolution filter를 이용했다는 점에서 매우 유사하다.

(22 weight layers and use 3 x 3, 1 x 1, 5 x 5 convolutions)

 

 

 

 

3. CLASSIFICATION FRAMEWORK

 

3.1. TRAINING

 

Optimization: multinomial logistic regression using mini-batch gradient descent with momentum

(batch size = 256, momentum to 0.9)

Regularization : weight decay(L2 Norm with 5*10^-4), dropout = 0.5 (for first 2 FC-Layer)

Learning rate : 0.01 (단,validation set에 대한 accuracy가 증가하지 않을 시, 10배로 감소

해당 실험에서는 3번 감소하였으며, 74 epoch 학습)

 

가중치가 잘못 초기화된 경우 학습이 불안정해질 수 있기 때문에, 깊이가 깊은 네트워크에서 초기 네트워크 가중치 설정은 매우 중요하다.

이러한 문제를 피하고자, 해당 논문에서는 Table1.의 모델 A를 선학습했다.

이렇듯 먼저 학습된 모델 A를 이용해, 더 깊은 구조의 모델들을 학습 시킬 경우,

처음 4개의 Convolution Layer와 마지막 3개의 Fully Connected Layer를 A의 Layer로 초기화했다.

 

또한, ConvNet의 input 이미지로 일정한 크기의 이미지(224 x 224)를 얻기 위해,

(256 x 256) ~ (512 x 512) 사이의 사이즈로 rescale된 이미지들에서 랜덤하게 crop하여 사용했다.

(SGD iteration 당 하나의 crop image)

이와 같은 방법은 한정적인 데이터의 양을 늘리고,

하나의 object에 대해 다양한 면을 학습시킴으로서 classification 정확도를 향상시켰다.

또한 Training set을 강화하기 위해, 랜덤으로 좌우 반전 및 RGB color shift를 적용하기도 했다.

 

 

 

3.2. TESTING

 

오버피팅을 방지하기 위해, Train과 Test의 구조가 조금 다르다.

가장 주요한 차이점은 Test시, Fully-Connected Layer는 먼저 Convolution Layer로 변환된다는 것이다.

(첫 번째 FC Layer는 7 x 7 Convolution Layer, 마지막 2개의 FC Layer는 1 x 1 Convolution Layer로 변환)

이렇게 변환된 네트워크를 Fully-Convolutional Net(FCN) 이라고 부르며, 

FCN이 적용됨에 따라 input 이미지 사이즈에 대한 제약이 사라지며, 테스트 시 이미지를 crop 할 필요가 없어진다.

또한, 하나의 이미지를 다양한 크기로 변환 및 조합하여 이미지 classification 정확도를 개선할 수 있다.

 

 

 

3.3. IMPLEMENTATION DETAILS

 

해당 논문의 실험에서는 Multi-GPU training을 통해

병렬로 처리되는 여러 GPU 배치들로 각각의 training 이미지를 분할하여 사용했다.

GPU batch gradient를 계산 후 full batch의 gradient를 얻기 위해 평균을 계산했으며,

이는 평균화된 뒤 합쳐져서 full batch에 적용되었기 때문에 하나의 GPU를 사용한 것과 똑같은 결과가 나왔다.

사용한 GPU는 NVIDIA Titan black GPU 4개로, 하나의 네트워크를 훈련하는데 약 2~3주가 소요되었다.

 

 

 

 

4. CLASSIFICATION EXPERIMENTS

 

Dataset : 1000 class image 포함. 다음과 같이 3set로 나뉨

Training set (1.3M images)

Validation set (50K images)

Testing set (100K images)

Classification performance : 2 measures (top-1 error, top-5 error)

 

 

4.1. SINGLE SCALE EVALUATION

 

출처 : Very Deep Convolutional Networks for Large-Scale Image Recognition

Single Scale과 Multi-Scale은 이미지의 크기를 하나로 고정할지, 또는 여러개를 사용할지를 나타낸다.

위 표는 single-scale test 이미지를 적용했을 때의 결과를 나타낸 표이다.

 

상단의 표를 통해 첫 번째로, 모델 A와 A-LRN를 비교한 결과,

Local Response Normalisation(LRN)이 성능을 향상시키지 못한다는 것을 알 수 있다.

따라서, B~E 모델에서는 LRN을 적용하지 않았다.

두 번째로, 네트워크의 깊이가 깊어질수록 결과가 좋아진다는 것을 확인할 수 있다.

따라서 가장 깊은 모델인 E의 오차가 가장 적게 나왔으며, 얕은 모델인 A로 갈수록 오차가 커졌다.

마지막으로, 이미지 스케일에 변화를 주는 것(S = 256 ~ 512)이 성능이 보다 높다는 것을 확인할 수 있다.

이를 통해, 스케일 변화(scale jittering)를 사용한 데이터 증강이 훈련 시 도움이 된다는 것을 확인했다.

 

 

 

4.2. MULTI SCALE EVALUATION

 

출처 : Very Deep Convolutional Networks for Large-Scale Image Recognition

위 표는 multi-scale test 이미지를 적용했을 때의 결과를 나타낸 표이다.

jittering을 적용한 경우, 출력의 크기는 [256, 384, 512]로 테스트 이미지의 크기를 정했으며,

jittering을 적용하지 않은 것보다 결과가 좋음을 확인할 수 있다.

또한, single-scale 보다는 multi-scale의 결과가 좋다는 것을 확인할 수 있다.

 

 

 

4.3. MULTI CROP EVALUATION

 

출처 : Very Deep Convolutional Networks for Large-Scale Image Recognition

위 표는 Multi-crop evaluation과 Dense-evaluation, 그리고 이 두 기법을 합친 결과를 나타낸 표이다.

두 기법의 soft-max output을 평균화해서 complementarity를 평가했으며,

multi-crop 방식이 dense 방식보다 좋은 성능을 보이나 연산량이 많다는 점이 단점이다.

결과적으로는 두 기법의 조합이 각각의 기법보다 나은 성능을 보였다.

 

 

 

4.4. CONVNET FUSION

 

출처 : Very Deep Convolutional Networks for Large-Scale Image Recognition

앙상블을 통해 여러 모델을 조합한 결과를 나타낸 표이다.

Softmax class posterior을 평균화하여 여러 모델의 output을 조합, 실험한 결과,

모델의 보완성으로 인해 성능이 향상된 것을 확인 할 수 있다.

 

 

 

4.5. COMPARISON WITH THE STATE OF THE ART

 

출처 : Very Deep Convolutional Networks for Large-Scale Image Recognition

타 모델과의 성능을 비교한 결과를 나타낸 표이다.

다른 모델들에 비해 우수한 성능을 보여준 것을 확인할 수 있다.

 

 

 

 

5. CONCLUSION

 

논문에서는 깊은 Convolutional 네트워크(최대 19 weight layers)를 통해

대용량 이미지 classification을 수행했다.

이는 네트워크의 깊이가 classification 정확도에 효과적이며,

평범한 ConvNet 구조를 이용해 ImageNet challenge dataset과 같은 데이터셋을 분류할 수 있음을 입증했다.

 

 

 

< 논문 구현 >

 

논문 구현은 아래 링크를 참고하자.

https://beginnerdeveloper-lit.tistory.com/158

 

[논문구현] VGG16 (Very Deep Convolutional Networks for Large-Scale Image Recognition) Image Classification 구현

VGG16에 대한 논문 리뷰 https://beginnerdeveloper-lit.tistory.com/157 [논문리뷰] VGG16 (Very Deep Convolutional Networks for Large-Scale Image Recognition) VGG16 https://arxiv.org/abs/1409.1556 Very Deep Convolutional Networks for Large-Scale Ima

beginnerdeveloper-lit.tistory.com

 

 

 

 


 

REFERENCE

 

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

 

VGG16 논문 리뷰 — Very Deep Convolutional Networks for Large-Scale Image Recognition

VGG-16 모델은 ImageNet Challenge에서 Top-5 테스트 정확도를 92.7% 달성하면서 2014년 컴퓨터 비전을 위한 딥러닝 관련 대표적 연구 중 하나로 자리매김하였다.

medium.com

 

https://mountain96.tistory.com/37

 

[논문 리뷰] VGG16(ICLR 2015) 요약 및 리뷰

서론 1. 배경 Convolutional networks(ConvNets)는 대용량 이미지 및 영상 인식에서 큰 발전을 이룩하였는데, 이는 ImageNet과 같은 대용량 공공 이미지 데이터셋이 가능해지고, GPU와 같은 고성능 컴퓨팅 시

mountain96.tistory.com

 

https://ahnty0122.tistory.com/72

 

[논문 리뷰] Very Deep Convolutional Networks for Large-Scale Image Recognition 리뷰, VGG Net

무려 1년전에 정리해놓은 논문 올리기 ㅎㅅㅎ Image Recognition에 입문할 때 좋은 논문이라고 생각한다. Very Deep Convolutional Networks for Large-Scale Image Recognition arxiv.org/abs/1409.1556 Very Deep Convolutional Networks

ahnty0122.tistory.com

 

 

https://codebaragi23.github.io/machine%20learning/1.-VGGNet-paper-review/

 

VGGNet 논문 리뷰

논문명: Very Deep Convolutional Networks for Large-Scale Image Recognition

codebaragi23.github.io

 

 

 

 

 

  1. Ciresan, D. C., Meier, U., Masci, J., Gambardella, L. M., and Schmidhuber, J. Flexible, high performance convolutional neural networks for image classification. In IJCAI, pp. 1237–1242, 2011. [본문으로]
  2. Goodfellow, I. J., Bulatov, Y., Ibarz, J., Arnoud, S., and Shet, V. Multi-digit number recognition from street view imagery using deep convolutional neural networks. In Proc. ICLR, 2014. [본문으로]
  3. Szegedy, C., Liu, W., Jia, Y., Sermanet, P., Reed, S., Anguelov, D., Erhan, D., Vanhoucke, V., and Rabinovich, A. Going deeper with convolutions. CoRR, abs/1409.4842, 2014. [본문으로]
728x90
반응형