본문 바로가기
딥러닝/Paper Review

[Paper Review] VGGNet - Very Deep Convolutional Networks For Large-Scale Image Recognition

by AiDevHyo 2025. 4. 28.

1.  Introduction

딥러닝 기반의 이미지 분류 모델이 급격히 발전할 수 있었던 배경에는 ImageNet과 같은 대규모 데이터셋의 역할이 컸습니다.

특히 ImageNet에서 주최하는 ILSVRC 대회에서는 다양한 모델들이 성능을 겨루는 실험장이 되었고, 이는 CNN 기반의 시각 인식 기술이 비약적으로 성장할 수 있는 계기가 되었습니다.

저번 논문에서 소개했던 AlexNet이 등장하면서 기존 방식을 압도하며 많은 과학자들이 다양한 구조를 제안하였습니다. 주로 필터 크기, Stride, 입력 해상도, 학습 방식을 조정하며 성능 향상을 시도하였습니다.

이 논문에서는 기존의 접근 방식과 달리, 구조를 단순하게 유지하면서 깊이(depth)만 증가시키는 방법을 제안합니다. 모든 Convolution 층에 3x3 크기의 필터만을 사용하고, 나머지 구조를 동일하게 고정한 상태에서 층의 개수를 늘려가며 성능을 비교했습니다.

또한 이 구조는 fine-tuning 없이도 선형 SVM을 사용한 단순한 방식으로도 우수한 성능을 달성하였습니다.


 

2. ConvNet ConFigurations

2.1 Architecture

1) 입력

VGGNet의 입력은 항상 224x224 크기의 RGB 이미지입니다.

전처리도 간단한데, 저번 논문에서 언급했던 훈련 세트 전체의 RGB 값을 픽셀에서 뺴주는 작업을 수행합니다.

이해가 안가신 분은 저번 논문 포스팅을 참고해주시면 될것 같습니다.

2) Conv layer

VGGNet에서는 모든 convolution layer에서 3x3 필터만을 사용했다고 합니다.

stride 는 1,padding은 1로 고정하며 공간 해상도(spatial resolution)를 그대로 유지합니다.

3x3은 작은 필터인데, 사용하는 이유는 더 많은 영역을 커버하면서 표현력이 좋아지고, 파라미터 수를 줄일 수 있습니다.

일부 구성에서는 1x1 크기의 convolution도 등장한다고 소개하고있는데,

https://hyojgun.tistory.com/entry/1%C3%971-Convolution-CNN-%EB%AA%A8%EB%8D%B8%EC%9D%84-%EA%B0%80%EB%B3%8D%EA%B2%8C-%EB%A7%8C%EB%93%9C%EB%8A%94-%ED%95%B5%EC%8B%AC-%EA%B8%B0%EB%B2%95    

 

1×1 Convolution: CNN 모델을 가볍게 만드는 핵심 기법

INTRO현재 VGGNet의 관련 논문을 읽던 중 1x1 convolution 이용에 대한 많은 궁금중이 생겼었습니다. 3x3 convolution 으로 이용해서 feature를 요약하거나 주변 픽셀을 고려하는 경우는 이해가 갔지만 1x1 convol

hyojgun.tistory.com

티스토리에 잘 1x1 convolution에 관해 잘 정리해봤습니다!

 

3) Pooling

Conv layer 사이사이에는 총 5개의 max-pooling layer가 들어갑니다.

2x2 pixel window를 사용하고 stride 는 2로 설정합니다.

이로써, 이미지의 크기는 점점 줄어들게 됩니다.

하지만 모든 conv layer 뒤에 pooling이 붙는것이 아닌 필요한 지점에 선택적으로 사용됩니다.

4) FC layer

마지막 3층에는 Fully-Connected(FC) 레이어가 붙습니다.

첫 층과 두번째 층은 4096 유닛이 마지막은 ImageNet은 1000개의 클래스 대응하는 출력층입니다.

5) Normalization

AlexNet에서 LRN을 사용하였는데, 실험을 해보니 LRN은 성능 향상은 거의 없고, 메모리 사용량만 늘리는 결과를 보였기 때문에 한 가지 모델을 제외하고는 모두 제거하였다고 합니다.


2.2 Contiguration

 

A ~ E 모델의 configurations

VGGNet은 총 다섯 가지 모델 버전을 만들었습니다.

각 버전은 A,B,C,D,E 로 이름을 붙였고 각 모델의 서로 다른점은 층의 수가 다릅니다.

  • A 모델: 총 11개의 layer
  • E 모델: 총 19개의 layer

가장 얕은 A 모델부터 가장 깊은 E 모델까지 레이어 수를 늘려가며 차이를 비교해보려고 합니다.

모든 모델의 conv layer의 채널 수는 일정한 규칙을 따릅니다.

  • 첫 번째 conv layer는 64개의 채널로 시작합니다.
  • max-pooling 을 통과할때마다 채널 수를 두배로 늘립니다.
  • 최종적으로는 512개의 채널에 도달하게 됩니다.

2.3 Discussion - 왜 3x3의 필터를 반복했을까?

VGGNet은 구조를 단순하게 만드는 대신에 필터를 (3x3)과 같은 작은 필터를 사용했습니다.

이 당시에는 (7x7) 과같은 큰 필터를 사용하던것과 다른 방식을 사용한 것입니다.

이렇게 작은 필터를 반복하며 쌓으면 장점은 무엇일까?

  • 필터 파라미터 수가 줄어듭니다.
    • 필터의 칸마다 가중치가 들어가 있는데 7x7 필터에 채널수가 C라면 총 파라미터수는 7X7XC = 49C 입니다. 출력 채널수도 C라고 가정한다면 49C2이 됩니다.
    • 마찬가지로 3x3 conv 한개를 쌓으면, 3x3xCxC = 9C2 이것을 3개 쌓으면 총 27C2이 됩니다.
    • 비교를 해보면 7x7 필터 한개보다 3x3 필터 3개를 사용하는것이 더 유리해 보입니다.(약 81% 효율적)
  • 비선형성이 더 많이 들어가게 됩니다.
  • 정규화 효과가 생깁니다.
    • 큰 필터를 여러 개의 작은 필터로 분해하는 셈이기 때문에 과적합을 막아주는 효과를 기대할 수 있습니다.

결론적으로, 모델은 더 깊으면서 표현력을 가지고 가볍게 만들 수 있다는 장점이 존재합니다.

 

3. Classfication Framework

3.1 Training

항목
설정
최적화 방법
미니배치 SGD + Momentum (0.9)
손실 함수
다항 로지스틱 회귀 (Cross Entropy)
배치 크기
256
초기 학습률
10^(-2) (개선이 없다면 10배씩 감소)
학습 종료 시점
370K iteration (74 epoch)
규제 기법
L2 weight decay , Dropout(첫 두 FC layer에 0.5)
가중치 초기화
얕은 네트워크(A) 학습 후 깊은 네트워크에 복사
무작위 초기화
평균 0, 분산:10^(-2) 인 정규분포 사용
바이어스 초기화
0

초기 가중치 초기화

딥러닝에서 초기 기중치를 설정하는것이 가장 중요한데, 저자는 가장 얕은 모델인 A모델을 학습시킨 후 최적의 가중치를 다른 모델들의 앞쪽 conv layer 4개, 뒤쪽 FC layer 3개를 복사해서 초기화 하였쓰비낟.

중간 레이어들은 무작위로 초기화 했지만, 모든 레이어는 학습률을 따로 낮추지 않고 적극적으로 업데이트 하였습니다.

데이터 증강

  • 무작위 크롭(random crop)
  • 수평 반전(horizontal flipping)
  • RGB 색상 변화(random color)

을 적용해 데이터의 다양성을 키웠습니다.

저자는 이미지의 크기를 다르게 만들어 모델의 일반화를 강화시키려고 했는데, 두 개의 방법을 제시합니다.

 

1.Single-scale training (S=256 고정 or S=384 고정)

  • 이미지 크기를 하나로 통일해서 학습합니다.
    • 예를들어 S=256이라면, 항상 짧은 변을 256픽셀로 맞춰서 잘라 학습합니다.
  • 일정한 스케일에서 학습해서 빠르고 안정적이지만, 덜 일반화가 될 가능성이 있습니다.

2. Multi-scale training(S를 256~512 사이에서 무작위로 선택)

  • 이미지 크기를 매번 다르게 바꿔서 학습합니다.(256 ~ 512)
  • 모델이 다양한 크기 상황에 강해지지만 학습이 더 느려집니다.

3.2 Testing

1) 테스트 이미지 준비

입력 이미지를 가장 짧은 변 길이 Q로 리사이즈 하는데, Q(테스트 스케일) , S(학습 스케일)는 반드시 같은 필요가 없고 오히려 여러 값의 Q를 사용하는 것이 성능을 높이는 데 도움이 된다는 것을 발견했습니다.

2) FC층 변환

  • 마지막 FC 레이어들을 -> convolutional layer 로 바꿉니다.
  • FC층은 입력이 무조건 고정된 크기여야 하지만 Conv layer 로 바꾸면서 이미지 크기에 유연하게 대응할 수 있도록 만듭니다.

3) 수평 반전

  • 테스트의 정확도를 높이기 위해 이미지를 flip한 버전도 함께 테스트하여, 두 결과를 평균하여 최종 결과로 사용했습니다.

3.3 Implementation Details

1) VGGNet은 Caffe 프레임워크를 수정해서 학습했습니다.

2) Multi-GPU 데이터 병렬화를 사용하여 학습 속도를 개선했습니다.

3) 복잡한 모델 병렬화 없이도 4GPU로 3.75배 속도 향상을 달성했습니다.

 


4. CLASSIFICATION EXPERIMENTS

4.1 Single Scale Evaluation - 단일 스케일

모델
학습 스케일 (S)
테스트 스케일 (Q)
Top-1 에러(%)
Top-5 에러(%)
A
256
256
29.6
10.4
A-LRN
256
256
29.7
10.5
B
256
256
28.7
9.9
C
256
256
28.1
9.4
384
384
28.1
9.3
[256;512]
384
27.3
8.8
D
384
384
26.8
8.7
[256;512]
384
25.6
8.1
E
384
384
26.9
8.7
[256;512]
384
25.5
8.0

결과 분석

  • LRN 추가는 성능 개선에 도움이 되지 않았습니다.
  • 모델 깊이가 깊을수록 error rate 감소 했습니다.
  • 1x1 conv 추가 (C) 는 도움이 되지만 3x3 conv을 일관되게 쓴 D모델이 더 error rate가 감소했스비낟.
  • 5x5 큰 필터를 쓴 얕은 네트워크는, 작은 필터를 쌓은 깊은 네티워크보다 성능이 나쁩니다.
  • 스케일을 고정된것보다 유동적으로 적용하는것이 더 좋은 성능을 얻었습니다.


4.2 Multi-Scale Evaluation - 다양한 스케일?

모델
학습 스케일 (S)
테스트 스케일 (Q)
Top-1 에러(%)
Top-5 에러(%)
B
256
224, 256, 288
28.2
9.6
[256;512]
224, 256, 288
27.7
9.2
C
384
352, 384, 416
27.8
9.2
[256;512]
256, 384, 512
26.3
8.2
D
384
352, 384, 416
26.5
8.6
[256;512]
256, 384, 512
24.8
7.5
E
384
352, 384, 416
26.7
8.6
[256;512]
256, 384, 512
24.8
7.5

결과 분석

  • 학습할때 스케일 다양화를 해두면, 테스트에서도 다양한 스케일로 평가할 때 성능이 훨씬 좋아졌습니다.
  • 가장 깊은 모델인 D와 E가 Top-1 error, Top-2 error에서 각각 24.8% , 7.5%로 최고의 성능을 냈습니다.
  • 특히 D/E 모델은 다양한 스케일을 사용하니 확실히 에러가 많이 줄어든것을 확인했습니다.


4.3 Multi-Crop Evaluation - dense vs crop

모델
평가 방법
Top-1 에러(%)
Top-5 에러(%)
D
dense
24.8
7.5
multi-crop
24.6
7.5
multi-crop + dense
24.4
7.2
E
dense
24.8
7.5
multi-crop
24.6
7.4
multi-crop + dense
24.4
7.1

결과 분석

  • Dense 만 했을 때보단, multi-crop까지 하면 성능이 조금 더 좋아집니다.
  • D와 E 모델 모두 dense + multi-crop을 합친 방식이 가장 에러가 낮았습니다.


4.4 ConvNet Fusion - 여러 모델 합치기

모델 조합
평가 방법
Top-1 에러(%)
Top-5 에러(%)
D + E
dense
23.7
6.8
D + E
multi-crop
23.4
6.6
D + E
multi-crop + dense
23.2
6.4

결과 분석

  • D 모델과 E 모델을 결과를 단순히 내도 성능이 확실히 좋아졌습니다.
  • 특히, dense + multi-crop 까지 적용하면 6.4% 까지 떨어집니다.
  • 모델 구조가 비슷하더라도 다른 네트워크를 합치면 효과가 존재함을 의미합니다.


4.5 Comparison with the State of the Art - 기존 최고 모델과 비교

모델
Top-5 에러(%)
비고
OverFeat (Sermanet et al., 2014)
14.2
싱글 모델
Zeiler & Fergus (2013)
14.8
싱글 모델
GoogLeNet (Szegedy et al., 2014)
6.7
모델 앙상블
VGGNet (ours, D+E fusion)
6.8
모델 앙상블

결과 분석

  • 싱글 모델로 기준으라면 VGGNet이 최고 수준의 정확도를 기록했습니다.
  • 모델 앙상블 기준에서는 GoogLeNet(6.7%) 와 거의 비슷한 수준까지 성능을 올렸습니다.


5. Conclusion

VGGNet 연구지는 19개까지 깊어진 Convolutiona Network 를 실험하였고

깊어가 깊어질수록 accuracy가 향상됨을 확인했습니다.