이번에 리뷰하는 논문은 2015년 Oxford 대학에서 발표한 논문으로, 현재 잘 알려진 VGG Net을 제안하는 논문이다. 앞서 리뷰한 ResNet과 같이 독창적인 아이디어로 ILSVRC 대회에서 좋은 성적을 거둔 모델이다. 다만 2015년 대회였던 ResNet과 달리 VGG Net은 2014년 대회에서 2위의 자리를 차지했던 모델이다. 따라서 당시 AlexNet 이후에 eep network에 대한 연구가 한창 진행되던 시기라는 것을 알면 좋을 것 같다. 2014년 1위 모델인 GoogleNet은 다음 논문으로 리뷰 할 예정이다.
아래 사진은 각각 ILSVRC 대회의 1등 모델들과 에러율 그리고 2014년 대회에서의 결과이다.


문제 정의
이 논문은 제목에서도 알 수 있듯이 모델 성능의 향상을 위해 deep convolutional network를 고안하는 것을 목표로 하고 있다. 당시 CNN의 성능을 향상시키기 위해서 사용하던 방법으로는 first convolutional layer에 smaller receptive window size 혹은 smaller stride를 사용하여 더욱 세부적인 feature들을 찾아내고자 하였다. 또는 학습, 테스트 이미지를 전체 사이즈 뿐만 아니라 mulitiple scale을 사용하여 성능을 향상시키고자 하였다. 이 논문에서는 또 다른 특징인 깊이에 주목하여 성능 향상을 달성하고자 하였다.
하지만 층이 깊어질수록 필터 크기에 따른 파라미터 수가 크게 증가하는 것은 당연했다. 따라서 저자도 작은 필터의 중요성을 서술하고있다. 하지만 이렇게 되면 이미지의 너무 작은 부분만 network가 학습하기 때문에 이미지의 전체적인 정보를 학습하지 못한다는 단점도 존재한다. 이것을 해결하기 위해 VGG의 핵심 아이디어인 3x3 convolution의 stack이 등장한다.
해결 방법 및 원리
1. Stack of 3x3 conv
논문의 저자가 제시하는 아이디어는 5x5 conv를 3x3 conv 2개의 stack으로 치환하는 것, 그리고 7x7 conv를 3x3 conv 3개의 stack으로 치환하는 것이다. 이것이 어떻게 동일하고 어떤 효과가 있을까? 먼저 이해를 쉽게 하기 위해 그림으로 보자.

위의 그림에서 알 수 있듯이 3x3 conv가 연속으로 2개 쌓이면 결과적으로 5x5 conv와 동일한 역할을 하게 된다. 7x7 conv도 3개의 3x3 conv로 마찬가지로 치환이 가능하다. 저자는 stack 사이에 비선형 함수까지 추가한다. 그렇다면 이게 어떠한 이점이 있을까?

먼저 특징을 더욱 잘 구별할 수 있다는 장점이 있다. 비선형 연산이 더욱 많이 사용되었을 뿐만 아니라, 직관적으로 해석해도 5x5 conv에서는 모든 부분에 대해 1번씩 반영하였다면, 3x3 conv를 2번 적용하면 가운데 3x3 영역은 두번 반영되기 때문이다.
다음으로는 파라미터의 수를 줄일 수 있다. 입력, 출력 채널 수를 모두 C라고 가정하면 5x5 conv만 사용하는 경우 파라미터 수는 25C^2이 된다. 3x3 conv 2개를 사용하는 경우는 2x9xC^2 = 18C^2이 된다. 이것은 7x7 conv의 경우 더욱 큰 차이를 보이는데, 49C^2 (7x7 conv) > 27C^2 (3x3 conv 3개) 이 되기 때문이다.
따라서 이 아이디어를 통해 큰 filter를 사용하는 것과 동일한 결과를 얻으면서 파라미터 수는 줄어드는 큰 장점을 얻는 셈이다.
2. 1x1 conv
추가적으로 1x1 conv를 사용하였다. 기본적으로 1x1 conv는 channel끼리만 연산하는 linear 연산으로 생각될 수 있다. 따라서 1x1 conv 뒤에는 비선형 함수를 추가하여 receptive field에는 영향을 주지 않으면서 비선형성을 더해주는 역할을 하였다. 이 방법으로 채널 간 정보를 조합하여 새로운 특성을 학습하고 표현력을 강화할 수 있다.
VGG Net에서는 사용하지 않았지만, 1x1 conv는 채널의 수를 줄여주는 역할을 하여 파라미터 수를 줄이는 역할도 할 수 있다.
모델 구조

이를 고려하여 완성된 모델의 구조를 살펴보면 다음과 같다. 224x224 RGB 이미지로 input은 고정되었다고 쓰여있다. 연구를 진행할 때는 11 layer, 13 layer, 16 layer, 19 layer로 구성하였고, 3개의 layer는 분류를 위한 마지막 Fully Connected layer임을 알 수 있다. 문제 해결에서 본 것과 같이 3x3 conv와 1x1 conv만으로 모델이 구성된 것을 알 수 있다. 각 conv layer에서 stride는 1로 고정되고 padding은 'same'으로 진행했다. Max pooling layer는 2x2 window와 stride 2로 진행하였다. 모든 conv layer에는 ImageNet에서와 같이 ReLU를 적용하였다고 설명한다. 11 layer 모델에서 LRN(Local Response Normalisation)을 시도하였으나 성능 향상이 없어서 이후 깊은 모델에서는 실험하지 않았다고 서술한다.
학습 과정
모델을 학습시키는 과정에서도 다양한 기법들이 사용되었다. 먼저 mini-batch gradient descent with momentum을 통해 최적화를 진행하였다. weight decay와 dropout을 통해 정규화도 시도하였다고 한다. weight 초기화를 위해 첫 11 layer 모델을 사용하였다고 한다. 11 layer 모델 (A 모델)은 랜덤 초기화를 하기에 충분히 얕은 모델이라고 생각하여 random weight initialization을 진행하였다. 이때 learning rate는 감소시키지 않고 충분히 학습이 가능하도록 하였다. 이후 A 모델의 weight를 사용하여 더 깊은 모델들의 첫 4개의 conv layers와 마지막 3개의 fc layers를 initialization 시켰다고 한다. 추가적으로 training input image에 대해 multi-crop을 시도하였다.
Multi-crop: 이미지를 다양한 crop으로 잘라서 input image로 사용하는 것
당연하게도 multi-crop을 위해서는 input size인 224x224 보다 크게 이미지를 rescale 한 뒤 crop을 시도해야한다. 이때 rescale 사이즈인 S를 정하는 것이 결과에 영향을 미쳤다고 한다.
1. Fixed S
실험에서는 S=256, S=384 두 가지로 고정된 S에서 multi-crop을 시도했다. 속도를 빠르게 하기 위해서 S=256인 network를 먼저 학습한 뒤 이것을 pre-trained network로 사용하여 S=384인 network를 학습하였다.
2. Multi-scale training
이 경우는 S 값을 고정하고 실험하는 것이 아니라 최소 S값과 최대 S값을 정해두고 각 이미지를 학습할 때 매번 그 사이에서 랜덤하게 정하는 방법이다. 서로 다른 이미지에는 서로 다른 크기의 객체가 존재하고, 고정된 S를 사용하는 것보다 더욱 좋은 효과를 얻을 수 있다는 추정이 가능하다. 또한 scale jittering에 의해서 data augmentation 효과까지 있다. 실험에서는 최소 S를 256, 최대 S를 512로 정했고, 학습 속도를 위해 S가 384인 경우로 pre-trained 시킨 후 학습을 진행하였다.
[2025.01.22 업데이트]
SPP net 논문을 읽다가 문득 VGG net에서 multi-scale training과 test를 적용했던 것이 떠올랐고, 왜 잘 작동했던거지? 하는 궁금증이 생겼다. 이것도 아래 질문 파트에 자세하게 추가하였다.
테스트 과정
테스트 과정에서도 다양한 시도를 한 것을 알 수 있다. 먼저 테스트 이미지 사이즈 Q에 대한 결정이다. 이것은 학습 이미지 사이즈인 S와 동일 할 필요가 없다고 서술한다. 이후 평가 방식에서 알 수 있듯이 다음과 같은 방법으로 Q를 정하였다.
1. Sigle scale evaluation
Fixed S -> Q=S
Multi-scale S -> Q = (Smin + Smax) / 2
2. Mult-scale evaluation
Fixed S -> Q = {S-32, S, S+32}
Multi-scale S -> Q = {Smin, (Smin + Smax)/2, Smax}
성능 향상을 위해 test 과정에서는 network의 마지막 FC layers를 conv layers로 변경하여 fully-convolutional network로 구현하였다. FC layer의 순서대로 7x7 conv, 1x1 conv, 1x1 conv로 변경하였다. FCN을 사용함으로써 input image의 사이즈 제한이 사라진다. 때문에 추가적인 계산을 필요로하는 multi-crop을 더 이상 사용하지 않고 전체 이미지를 그대로 테스트 input으로 사용할 수 있게 된다는 장점이 존재한다.
테스트 과정에서는 horizontal flip까지 적용했다고 서술한다.
결과
1. Single scale evaluation

먼저 single test scale에서의 결과해석이다.
I. 앞서 언급했듯이 LRN의 눈에 띄는 성능 향상이 나타나지 않는 것을 먼저 확인할 수 있다.
II. C와 D를 비교해보면 1x1 conv를 추가한 것보다 3x3 conv를 사용하는 것이 더욱 좋은 성능을 보여주는 것을 알 수 있다. 1x1은 non-linearity를 추가해주지만 3x3의 spatial context 학습이 더욱 큰 영향을 미친다는 것을 알 수 있다.
III. 추가 실험에서 B 모델의 3x3 stack을 5x5로 바꾸고 실험 한 결과 기존 B의 top-1 에러율보다 약 7프로 더 높은 에러율을 나타냈다고 한다. 즉 3x3 stack의 효과를 알 수 있는 결과이다.
IV. 마지막으로 train 과정에서 input image 크기인 S를 multi-scale로 학습한 것이 각 network에서 더욱 좋은 성능을 내는 것을 알 수 있다. scale jittering의 효과를 알 수 있는 결과이다.
2. Multi-scale evaluation

다음으로 test 이미지 사이즈인 Q의 크기를 다양하게 변화시킨 multi-scale evaluation의 결과이다. Single scale evaluation에서 살펴볼 수 있듯이 S의 multi-scale이 여전히 의미가 있음을 알 수 있다. 추가적으로 전체적인 결과를 비교해보자면 single scale evauation보다 눈에 띄게 결과가 개선되었음을 알 수 있다. 즉 test size인 Q를 single보다는 multi-scale로 설정하는 것이 유의미한 변화를 준다는 것을 알 수 있다.
3. Multi-crop evaluation

앞서 test 시 network를 FCN으로 바꾸면서 multi-crop의 필요성을 없앴다고 설명했다. 하지만 추가적인 성능 향상을 위해서 test 상황에서도 multi-crop을 적용하여 evaluation을 수행 한 결과이다. dense 모델은 앞선 시도에서 가장 좋은 성능을 보여준 multi-scale evaluation의 결과이다. Test 과정에 multi-crop만 적용한 경우는 큰 성능 향상이 없지만, dense evaluation과 multi-crop evaluation을 결합 한 경우 성능이 크게 향상되는 것을 알 수 있다. 결합 과정에서 두 평가의 softmax output을 averaging 하는 방법을 사용했다고 한다. 논문의 저자는 각 평가의 서로 다른 convolution boundary condition이 결합되어 상호 보완적으로 좋은 성능을 보여준다고 설명한다.
대회 제출 및 최종 성능
당시 대회에는 1개의 multi-scale D model과 single scale C, D, E model 6개로 앙상블하여 제출하였다고 한다. 대회 이후 성능이 좋은 multi-scale 2개 D, E 모델로 dense, multi-crop evaluation을 적용하여 최고 결과인 top-5 error 6.8%를 기록하였다고 한다.

결론
이 논문은 AlexNet 이후 인공 신경망의 깊이의 중요성을 확인시켜주며 3x3 conv의 stack과 1x1 conv의 사용, train과 test 과정에서의 다양한 기법 적용 등 CNN의 발전과 인공 신경망에 큰 영향을 주었다고 생각한다. 또한 ImageNet보다 깊어진 깊이에 비해 더욱 적어진 parameter 수와 적은 epoch 수로 훨씬 좋은 성능을 보여준다는 점이 놀라웠다.
또한 동일한 대회의 우승 모델이었던 GoogLeNet과의 비교에서 우수하다는 평가를 받기도 한다. GoogLeNet 또한 Inception이라는 독창적인 구조를 통해 deep learning을 위한 아이디어를 제시하였다. 하지만 VGG Net이 더욱 간단한 network와 3x3 conv의 stack으로 spatial resolution의 보존을 가능하게 하였기에 더욱 의미가 있다고 생각한다.
My Question
내가 이 논문을 읽으며 궁금했던 점과 그에 대한 답을 나름대로 찾아보았다. 아마 추가적으로 확인이 필요한 경우도 있을 것이다.
1. FCN이 효율적인 성능을 보여준다면 왜 train 과정에서는 적용하지 않았을까?
FCN (fully convolutional network)의 장점
- 고정적인 입력 사이즈 X
- 효율적인 dense prediction(detection, segmentation) 가능
- 공간 정보 보존
- FC layer에 비해 계산 효율 증가
- Transfer learning에 용이함
FC (fully connected layer)의 특징:
- 전통적인 모델들에 사용
- 이미지를 1개의 벡터로 압축하기에 안정적인 학습 가능
초기에는 FCN의 사용에 불확실성 존재, 최근에는 특히 densce prediction task의 경우 활발하게 사용
2. FCN에서 multi-crop을 하지 않아도 되는 이유?
Multi-crop의 장점
- 데이터 증강 효과
- 다양한 관점 학습 가능
- 작은 부분, 객체 학습 가능 (local feature에 유리)
Multi-crop의 단점
- 계산량 증가
- 데이터 일부 사용으로 정보의 손실 발생
FCN에서는 입력 제한이 없기에 전체 이미지를 사용해도 상관이 없음. 굳이 계산량을 증가시킬 필요가 없음. 하지만 이 논문에서는 다양한 실험 결과 multi-crop evaluation과 dense evaluation을 보완적으로 사용하는 것이 성능 향상시킴을 알아냈을 뿐.
3. Dense evaluation vs Multi-crop evaluation의 상호 보완적 작용?
Dense evaluation
- 입력으로 들어오는 전체 이미지에 대해서 평가
- 빠르다, 계산 추가 없음
Multi-crop evaluation
- crop으로 나누고 여러 관점에 대해서 학습
- 앞서 2번 질문에서 살펴본 장점과 단점 존재
따라서 평가 결과를 결합하면 서로 보완적인 작용 가능
4. 원하는 input size를 위해 Rescale vs Multi-crop, 어떤 방법을 써야하나?
각 방법은 전체 이미지 혹은 다양한 crop 이미지 사용으로 다른 방법을 사용한다. 따라서 주어진 task에 맞게 성능이 좋은 방법으로 size를 조절하여 input을 넣는 것.
[2025.01.22 업데이트]
5. VGG net에서는 multi-scale training/testing을 진행할 때 왜 fc layer에서 문제가 없었는가?
나도 기존에 전혀 생각하지 않던 문제였다. SPP net을 읽으며 배우고 나서야 겨우 생각이 든 것이다.
먼저 SPP net도 리뷰하긴 했지만 간단히 정리하자면, 기존 CNN에서 input scale이 고정되어야하는 것을 개선하고자 등장했다(물론 속도 및 성능 향상도 목표임). 때문에 이전 다양한 논문에서는 입력 크기를 고정시키기 위해서 crop이나 warping을 수행했고 정보 손실로 인해서 성능에 좋지 않은 영향을 끼쳤을 가능성이 있다. SPPnet에서 등장하는 spatial pyramid pooling layer 는 fc의 입력 전에 삽입되어 고정된 출력을 만들어주는 방법이다. 따라서 input size가 고정될 필요가 없는 것이다.
그런데 pyramid pooling layer가 사용되지 않은 VGG는 multi-scale 학습 방식을 사용할 때 어떻게 이런 문제가 발생하지 않은 것인가? 원래라면 input의 크기가 달라질 때마다 fc의 input도 달라져서 문제가 되었을 것이다.
다시 논문을 읽다가 까먹은 부분을 기억했고 그 이유를 알았다. VGG는 224x224라는 크기로 input image size를 고정하고 있다. VGG net에서 multi-scale 방식이라는 것이 의미하는 것은 지정된 input size인 224보다 큰 256~512 범위의 이미지를 224 크기로 crop해서 적용한 것을 의미했다. 즉 crop이란 기법이 추가된 것이었고, 이전 다른 논문들과 같이 size를 고정해주기 위한 방법을 사용했기에 문제가 발생하지 않은 것이다.
'딥러닝 > Paper Review' 카테고리의 다른 글
| [Paper Review] Spatial Transformer Networks (0) | 2025.01.19 |
|---|---|
| [Paper Review] Jigsaw Clustering for Unsupervised Visual Representation Learning (1) | 2025.01.18 |
| [Paper Review] Going deeper with convolutions (1) | 2025.01.07 |
| [Paper Review] Dense Contrastive Learning for Self-Supervised Visual Pre-Training (1) | 2025.01.06 |
| [Paper Review] Deep Residual Learning for Image Recognition (1) | 2024.11.11 |