(VGG) Very Deep Convolutional Networks For Large-Scale Image Recognition 리뷰
- 상위포스트 : vision 분야 논문리뷰 및 구현
- 논문 : https://arxiv.org/pdf/1409.1556
- 구현 : https://github.com/000namc/paper-implementations/tree/main/vision
(VGG) Very Deep Convolutional Networks For Large-Scale Image Recognition
Abstract
VGG는 이미지 분류 작업에서 convolution network의 깊이가 정확도에 크게 영향을 줌을 밝힌 연구입니다. 이 모델은 매우 작은 3by3 convolution filter를 사용하는것이 특징이며, network의 깊이를 16~19 까지 확장하였다고 합니다. 이러한 설계로 2014년 imagenet challenge 및 다른 밴치마크 데이터셋에서 state of art 인 성능을 보였다고 설명합니다.
Introduction
Convolutional Network는 최근 대규모 이미지 및 비디오 인식분야에서 큰 성공을 거두고 있다고 설명합니다. 그 아키텍쳐에 관해 smaller stride 그리고 smaller window size를 선택하는 등의 개선작업이 이어지고 있는데, 이 논문에서는 또 하나의 중요한 측면인 깊이를 다루겠다고 설명합니다. 다른 매개변수는 고정하고 네트워크의 깊이를 늘린 결과 ILSVRC-2014에서 State of the art 를 달성했다고 합니다.
Convnet Configurations
Architecture
입력 데이터는 224by224인 이미지 라고 합니다. 이 데이터에 적용하는 유일한 전처리는 학습데이터의 각 픽셀의 평균 RGB값을 빼는 처리라고 설명합니다. 16~19 깊이까지의 convolution layer에 사용되는 kernel은 매우 작은 3by3 filter를 사용한다고 합니다. 가장 마지막에는 세개의 fully connected layer로 구성이 되고, 앞의 두 layer는 4096개의 channel을, 마지막 layer에는 1000개의 channel로 구성하여 1000개의 클래스에 대한 ILSVRC 분류를 한다고 설명합니다. activation function으로 ReLU를 활용하고, LRN 정규화는 크게 성능을 높이는데 기여하지않아 사용하지 않는다고 합니다.
Configurations
convolution network의 구성은 아래 표와같이 구성하였다고 합니다. architecture는 가벼운 모델에서부터 무거운 모델까지 A~E라 이름을 붙이고 있습니다. 가장 무거운 구성을 보면, 19layers로 구성되며 64channel 에서부터 max pooling layer를 거치며 2배씩 그 channel을 늘려 나갑니다. 이렇게 구성하였을때, kernel을 작게 고정한 이점으로 깊이는 얇고 더 큰 kernel을 사용한 모델에 비해 parameter수가 결코 많지 않음을 강조하고 있습니다.
Discussion
kernel size를 더 크게 잡는것과 이 연구에서 설정한 3by3 으로 잡는것을 비교합니다.
Classfication Framework
Training
SGD optimizer와 256 batch size를 이용하였다고 합니다. 이때 optimizer의 momentum은 0.9, weight decay는 0.0005로 설정하였다고 합니다. fully connected layer의 앞 두개의 layer에 0.5의 dropout을 적용하였다고 합니다. learning rate는 0.01로 설정한 후 검증 데이터셋에서의 성능향상이 이루어지지 않을때마다 10배씩 줄여 사용하였다고 설명합니다. 네트워크의 가중치 초기화를 어떻게 하느냐가 학습에 큰 영향을 준다고 주장합니다. 가장 작은 스케일의 A architecture를 랜덤 초기화하여 학습시킨후 점진적으로 큰 모델의 초기값을 이전 스케일의 학습된 가중치를 일부 활용함으로써 학습에 도움이 되었다고 설명합니다.
Training image size
S를 사진의 길이를 등비적으로 조절하는 상황에서 가장 작은 변의 길이라고 둔다고 하면, VGG에 입력은 crop된 이미지 224by224 이더라도, S는 224보다 큰 어떤 길이여도 괜찮은 상황이라고 설명합니다. 여기서 두가지 방법을 통해 실험을 진행하였다고 하는데, 첫번째로는 single-scale training으로, S를 256 혹은 384로 고정하여 모델을 구성하는 경우이고. 두번째로는 폐구간 [256,512] 에서 랜덤하게 추출된 값을 S로 하여 데이터마다 다른 scale을 통해 추출하는 방식으로 모델을 구성하는 경우라고 설명하고 있습니다.
Testing
테스트 데이터에 대해서도 같은 의미의 가장 작은 변의길이를 생각할 수 있고 이를 Q라 정의한다고 합니다. 이는 S와 같을 필요는 없고 Q와 S를 어떻게 결정하느냐에 따라 모델 성능에 차이가 있다고 설명합니다. 이때 입력데이터의 사이즈가 다른상황에서 모델의 예측결과를 내는 방법은, 학습된 fully connected layer (7by7by512 -> 1by1by4096) 를 이용하여 자연스럽게 만들 수 있는 convolutional layer로 해당 layer를 대채하는것으로 가능한데, 학습단계에서는 최종 1by1by1000 의 아웃풋을 얻을 수 있었다면, 태스트단계에서는 입력 사진의 크기에따라 n by m by 1000의 아웃풋을 얻을 수 있게 된다고 설명하고 있습니다(n과 m은 입력 길이 - 224).
Implementation Details
학습에 C++의 Caffe 툴박스를 이용하였으며, NVIDIA Titan Black GPU 4장을 사용하여 2~3주 가 소요되었다고 설명합니다.
Classification Experiments
S와 Q를 다르게 설정하면서 성능이 어떻게 달라지는지 설명합니다.
Conclusion
network의 깊이를 19layer까지 확장했고, State of the art인 성과를 얻었음을 강조합니다.