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

강준영
10 min readJan 23, 2020

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

Very Deep Convolutional Networks for Large-Scale Image Recognition 논문의 내용을 살펴보면서 VGG 모델이 어떻게 이미지 분류 문제에서 이토록 좋은 성과에 도달할 수 있었는지 확인해보자.

참고로 VGG-16의 의미는 다음과 같다:

  • VGG : Visual Geometry Group
  • 16 : 16 layers

따라서, 신경망 모델의 깊이(레이어 수)에 따라 VGG-19 혹은 VGG-13이 될 수도 있다.

VGG-16 모델은

  • 어떻게 16–19 레이어와 같이 깊은 신경망 모델의 학습을 성공했을까?
  • 왜 모든 Convolutional layer에서 3x3 필터만 사용했을까?

이 두 질문에 답할 수 있는 것이 VGG 논문의 핵심이자 모든 것이다.

더 깊은 신경망

VGG 모델은 딥러닝 기반 컴퓨터 비전 모델의 시대를 열었던 AlexNet(2012)의 8-layers 모델보다 깊이가 2배 이상 깊은 네트워크의 학습에 성공했으며, 이를 통해 ImageNet Challenge에서 AlexNet의 오차율을 절반(16.4 > 7.3)으로 줄였다.

VGG 모델이 16–19 레이어에 달하는 깊은 신경망을 학습할 수 있었던 것은 모든 합성곱 레이어에서 3x3 필터를 사용했기 때문이다.

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

VGG-16 Architecture의 구성:

  • 13 Convolution Layers + 3 Fully-connected Layers
  • 3x3 convolution filters
  • stride: 1 & padding: 1
  • 2x2 max pooling (stride : 2)
  • ReLU

깊이에 따른 각 레이어의 크기는 논문의 표를 참고하자.

여기서 conv3은 3x3필터를, conv1은 1x1필터를 의미한다. 또한 conv3-N에서 N은 필터의 개수에 해당한다. 예를 들어, conv3–64는 64개의 3x3 필터를 학습 매개변수로 사용했다는 의미이다.

신경망의 마지막 3 Fully-Connected Layer는 각각 4096, 4096, 1000 개의 유닛으로 구성돼 있으며, 출력층(1000: class의 수)은 classification을 위한 Softmax 함수를 사용한다.

구성 ‘D’에 해당하는 VGG-16을 예를 들면, 다음과 같이 정리할 수 있다.

Batch Normalization이 포함된 버전이 주로 활용된다.
VGG-16 with BatchNorm Architecture

3x3 필터

VGG 모델 이전에 Convolutional Network를 활용하여 이미지 분류에서 좋은 성과를 보였던 모델들은 비교적 큰 Receptive Field를 갖는 11x11필터나 7x7 필터를 포함한다.

그러나 VGG 모델은 오직 3x3 크기의 작은 필터만 사용했음에도 이미지 분류 정확도를 비약적으로 개선시켰다. 이 부분에서 좋은 통찰을 얻을 수 있다.

예를 들어, 위와 같이 10x10 이미지가 있다고 하자. 이 이미지에 대해 7x7필터와 3x3필터로 각각 Convolution을 수행하면 다음과 같은 특성이 있다.

7x7 필터를 이용하여 Convolution 했을 경우 출력 특징 맵의 각 픽셀 당 Receptive Field는 7x7이다.
3x3필터를 이용할 경우 3-레이어 Convolution을 반복했을 때 원본 이미지의 7x7 영역을 수용할 수 있다.

Stride가 1일 때, 3차례의 3x3 Conv 필터링을 반복한 특징맵은 한 픽셀이 원본 이미지의 7x7 Receptive field의 효과를 볼 수 있다.

그렇다면, 7x7 필터를 이용해 이미지에 대해 한 번 Convolution을 수행한 것과 3x3 필터로 세 번 Convolution을 수행한 것에는 어떤 차이가 있을까?

  1. 결정 함수의 비선형성 증가

각 Convolution 연산은 ReLU 함수를 포함한다. 다시 말해, 1-layer 7x7 필터링의 경우 한 번의 비선형 함수가 적용되는 반면 3-layer 3x3 필터링은 세 번의 비선형 함수가 적용된다.

따라서, 레이어가 증가함에 따라 비선형성이 증가하게 되고 이것은 모델의 특징 식별성 증가로 이어진다.

2. 학습 파라미터 수의 감소

Convolutional Network 구조를 학습할 때, 학습 대상인 가중치(weight)는 필터의 크기에 해당한다.

따라서, 7x7필터 1개에 대한 학습 파라미터 수는 49이고 3x3 필터 3개에 대한 학습 파라미터 수는 27(3x3x3)이 된다.

파라미터 수가 크게 감소하는 것을 알 수 있다.

물론 위와 같은 특징이 모든 경우에 좋은 방향으로 작용하는 것은 아니니 주의할 필요가 있다. 다시 말해, 무작정 네트워크의 깊이를 깊게 만드는 것이 장점만 있는 것은 아니다.

여러 레이어를 거쳐 만들어진 특징 맵(Feature Map)은 동일한 Receptive Field에 대해 더 추상적인 정보를 담게 된다. 목적에 따라서는 더 선명한 특징 맵이 필요할 수도 있다.

모델 학습

VGG-16 원문에서는 학습 시 다음과 같은 최적화 알고리즘을 사용하였다:

  • Optimizing multinomial logistic regression
  • mini-batch gradient descent
  • Momentum(0.9)
  • Weight Decay(L2 Norm)
  • Dropout(0.5)
  • Learning rate 0.01로 초기화 후 서서히 줄임

이러한 학습 알고리즘은 본 논문의 핵심과는 벗어나며, 모델과 무관하게 얼마든지 변경될 수 있는 부분이므로 자세히 다루지는 않을 예정이다.

다만 각각의 알고리즘에 대한 개념과 특징을 개별적으로 리뷰할 계획이다.

가중치 초기화

딥러닝에서 신경망 가중치의 초기화는 학습 속도 및 안정성에 큰 영향을 줄 수 있기 때문에 어떤 방식으로 초기화할 것인지는 중요한 문제 중 하나이다.

VGG 연구팀은 이러한 문제를 보완하고자 다음과 같은 전략을 세웠다:

  • 상대적으로 얕은 11-Layer 네트워크를 우선적으로 학습한다. 이 때, 가중치는 정규분포를 따르도록 임의의 값으로 초기화한다.
  • 어느 정도 학습이 완료되면 입력층 부분의 4개 층과 마지막 3개의 fully-connected layer의 weight를 학습할 네트워크의 초기값으로 사용한다.

논문 제출 후 Glorot&Bengio (2010)의 무작위 초기화 절차를 이용하여 사전 훈련 없이 가중치를 초기화하는 것이 가능하다는 것을 알아냈다.

학습 이미지 크기

모델 학습(Training) 시 입력 이미지의 크기는 모두 224x224로 고정하였다.

학습 이미지는 각 이미지에 대해 256x256~512x512 내에서 임의의 크기로 변환하고, 크기가 변환된 이미지에서 개체(Object)의 일부가 포함된 224x224 이미지를 Crop하여 사용하였다.

이미지를 256x256 크기로 변환 후 224x224 크기를 샘플링한 경우
이미지를 512x512 크기로 변환후 224x224 크기를 샘플링한 경우

이처럼 학습 데이터를 다양한 크기로 변환하고 그 중 일부분을 샘플링해 사용함으로써 몇 가지 효과를 얻을 수 있다.

  1. 한정적인 데이터의 수를 늘릴 수 있다. — Data augmentation
  2. 하나의 오브젝트에 대한 다양한 측면을 학습 시 반영시킬 수 있다. 변환된 이미지가 작을수록 개체의 전체적인 측면을 학습할 수 있고, 변환된 이미지가 클수록 개체의 특정한 부분을 학습에 반영할 수 있다.

두 가지 모두 Overfitting을 방지하는 데 도움이 된다.

실제로 VGG 연구팀의 실험 결과에 따르면 다양한 스케일로 변환한 이미지에서 샘플링하여 학습 데이터로 사용한 경우가 단일 스케일 이미지에서 샘플링한 경우보다 분류 정확도가 좋았다.

Fully-convolutional Nets

Training 완료된 모델을 테스팅할 때는 신경망의 마지막 3 Fully-Connected layers를 Convolutional layers로 변환하여 사용하였다.

첫 번째 Fully-Connected layer는 7x7 Conv로, 마지막 두 Fully-Connected layer는 1x1 Conv로 변환하였다. 이런식으로 변환된 신경망을 Fully-Convolutional Networks라 부른다.

신경망이 Convolution 레이어로만 구성될 경우 입력 이미지의 크기 제약이 없어진다. 이에 따라 하나의 입력 이미지를 다양한 스케일로 사용한 결과들을 앙상블하여 이미지 분류 정확도를 개선하는 것도 가능해진다.

Fully-Convolutional Network는 컴퓨터 비전 분야에서 굉장히 중요한 개념이다. 따라서, 내용을 자세하게 다루기 위해 이와 관련된 대표적인 논문인 Jonathan Long의 [Fully convolutional networks for semantic segmentation] 리뷰를 통해 소개할 계획이다.

결론

VGG 연구팀의 실험 결과를 통해 네트워크의 깊이가 깊어질수록 이미지 분류 정확도가 높아지는 것을 확인할 수 있었다.

실험에서 네트워크의 깊이를 최대 19 레이어(VGG-19)까지만 사용한 이유는 해당 실험의 데이터에서는 분류 오차율이 VGG-19에서 수렴했기 때문이다. 학습 데이터 세트가 충분히 많다면 더 깊은 모델이 더 유용할 수도 있다.

TODO

  • [AlexNet] Paper Review (Not yet)
  • [Back-propagation] Paper Review (Not yet)
  • [Fully convolutional networks] Paper Review (Complete)
  • [OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks] Paper Review (Not yet)
  • [Random initialization] Paper Review (Not yet)

--

--