본문 바로가기
논문 리뷰/CV

[D&A] VGG 논문 리뷰

by hyeon827 2024. 1. 21.

VGGNet은 ILSVRC 2014 대회에서 2등을 차지한 CNN 모델로 네트워크의 깊이가 모델의 정확도 향상에 중요한 역할을 한다는 것을 보여줬다. VGGNet의 주요 특징은 아래와 같다.

  • 3X3 크기의 Conv 필터 고정적으로 사용
  • 16~19개 weight layers 사용(네트워크 깊이)

Architecture

1) Input data는 고정된 크기의 224 x 224 RGB 이미지

  • 유일한 사전 처리 작업은 train set에서 평균 RGB 값을 각 픽셀에서 빼는 것

2) 3x3 크기의 Conv 필터 고정적으로 사용

  • 왼쪽/오른쪽, 위/아래, 중앙의 개념을 포착할 수 있는 가장 작은 크기
  • stride= 1, padding= 1
  • 1x1 Conv 필터도 사용 ->  layer 증가에 따른 비선형 함수 사용 빈도도 증가로 모델의 특징 식별성 향상

3) Pooling

  • Max pooling
  • 일부 Conv layer에 적용
  • 2x2 필터, stride=2

4) 3개의 FC layer

  • 1,2 layer는 4,096개의 채널
  • 3 layer는 1,000개의 채널(카테고리 수)

5) 활성화 함수

  • 모든 hidden layer에서 ReLU 함수 사용
  • 마지막 layer에서만 Softmax 함수 사용(분류 문제)

6) AlexNet에서 적용한 LRN 사용 X

 

* NOTE

  • VGG 이전 CNN을 활용하여 이미지 분류에서 좋은 성과를 낸 모델들은 11x11필터나 7x7 필터 사용
  • 그러나, VGG는 3x3 크기의 작은 필터를 사용했음에도 정확도를 비약적으로 개선
  • 3차례의 3x3 Conv을 반복한 특징맵은 한 픽셀이 원본 이미지의 7x7 Receptive field의 효과를 볼 수 있음

   [3x3 필터의 이점]

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

  • 1-layer 7x7 필터링은 ReLU 함수(비선형) 한 번 적용
  • 3-layer 3x3 필터링은 ReLU 함수(비선형) 세 번 적용하여 비선형성 증가
  • 비선형성 증가 = 모델의 식별성 증가

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

  • 7x7 필터 1개의 파라미터 수 = 49
  • 3x3 필터 3개의 파라미터 수 = 3x3x3 = 27(차이 22개)

  • 총 6개의 구조(A, A-LRN, B, C, D, E)를 만들어 깊이의 변화에 따른 성능 변화를 비교
  • 11 Layer(8 Conv, 3 FC) ~ 19 Layer(16 Conv, 3 FC)
  • Channels은 64에 시작해서 512까지 증가

Training

  • batch size : 256
  • momentum : 0.9
  • weight decay(L2 penalty)  : 0.0005 
  • dropout : FC layer 1,2에 적용, 50% 확률
  • learning rate : 처음엔 0.01 이후, validation셋의 accuracy 향상 없으면 1/10씩 감소(총 3번 감소)
  • epoch : 74(370K iter)

본 논문에서는 AlexNet보다 신경망이 깊고, parameter도 좀 더 많지만, 더 적은 epoch를 기록한 것은 implicit regularisation 과 pre-initialisation 때문이라고 언급

 

[pre-initialisation]

네트워크 가중치를 잘못 초기화하면 딥넷의 경사도가 불안정해져 학습이 지연될 수 있음

  • 해당 문제를 피하기 위해 상대적으로 얕은 11-weight layer부터 학습
  • 처음 4개의 Conv layers와 3개의 FC layer의 weight 값을 학습시킬 더욱 층이 깊은 네트워크에 적용
  • 무작위 초기화 경우 정규분포에서 가중치 샘플링

[Training image size]

  • Input image size는 224x224로 고정
  • crop된 이미를 무작위로 수평 뒤집기
  • 무작위로 RGB 값 변경하기

1) single-scale training

  • S(=training scale)를 256 또는 384로 고정
  • 먼저 S=256을 사용하여 네트워크 훈련
  • S=384 네트워크의 훈련 가속화 위해 S = 256으로 사전 훈련된 가중치로 초기화하고 learning rate를 10^-3으로 줄임

   2) multi-scale training

  • S를 일정 범위 [256, 512]에서 무작위로 샘플링하여 재조정
  • scale jittering에 의한 data augmentation으로 볼 수 있음
  • 속도 문제로 인해 S = 384로 사전 훈련시킨 후 무작위로 S를 선택해 fine-tuning

Testing

  • Q로 Rescale(S와 같은 필요 X)
  • FC를 Conv layer로 변환
  • 첫 번째 FC layer를 7x7 conv layer로 바꾸고, 마지막 두 FC layer를 1x1 conv layer로 바꿈

 

Single Scale Evaluation

 

  • test image size 고정 (S=Q / 0.5(256+512)=384)
  • 모델 A에 LRN을 적용한 결과 큰 성능향상이 없어 나머지 모델에서는 LRN을 적용 X
  • ConvNet 깊가 증가할수록 classification error가 감소 
  •  scale jittering이 더 좋은 성능을 보임

Multi Scale Evaluation

  • test image를 multi scale로 설정
  • 동일한 모델 학습에서 scale jittering을 적용한 것이 single scale 대비 더 좋은 성능을 보임

Comparison with the state of the art

  • 저자는 ILSVRC 대회에 모델 성능을 제출할 때 7개 모델의 ensemble 기법을 적용.
  • 최종적으로 VGGNet은  2014 ILSVRC에서 2등을 차지.

'논문 리뷰 > CV' 카테고리의 다른 글

[X:AI] InceptionV2/3 논문 리뷰  (2) 2024.03.14
[X:AI] SPPNet 논문 리뷰  (2) 2024.03.10
[D&A] GoogLeNet 논문 리뷰  (0) 2024.01.23
[D&A] LeNet 논문 리뷰  (1) 2024.01.19
[D&A] AlexNet 논문 리뷰  (1) 2024.01.15