DeepLearning/Basic

[Paper Review] Very Deep Convolutional Networks for Large-Scale Image Recognition (VGGNet)

yooj_lee 2022. 5. 1. 14:18
300x250

이전에 정리해두었던 vgg net review를 올립니다. 간단한 구조를 채택하여, 성능이 보다 높았던 inception 보다 더 많이 활용되었던 구조입니다. 지금도 backbone으로 종종 쓰이나 resnet보다는 그 활용성이 떨어집니다. 기존의 network 깊이를 19 layer까지 쌓음으로써 성능을 끌어올렸다는 점에서 주목을 받았고, 그 비법은 작은 필터 사이즈의 convolution layer를 여러 개 쌓은 것입니다. 자세한 내용은 후술하겠습니다. 목차는 다음과 같습니다.

Context

  1. Introduction
  2. VGG Net 구조
  3. Classification Framework
  4. Experiments
  5. Conclusion

1. Introduction

  • ILSVRC 2014 second-winner
  • 대규모 이미지 데이터셋 구축이 가능해지고 GPU 등을 활용한 병렬 계산이 가능해지면서 CNN이 image recognition challenge에서 두각을 보이기 시작함.
  • LeNet, AlexNet 등을 이어서 zfnet에서는 첫번째 conv layer에서filter size와 stride를 기존보다 작은 값으로 설정하며 성능 향상을 꾀함.
  • 또한 train, test 과정에서 전체 이미지와 또한 다양한 scale에서 network를 다룸으로써 역시 성능 향상을 꾀함.
  • VGG Net의 경우에는 신경망의 깊이에 초점을 맞추어 성능 향상을 꾀함.
  • Convolutional layer를 여러 개 쌓음으로써 전체적인 네트워크의 구조를 더 깊게 쌓음.
  • 이때 모든 convolutional layer의 커널 크기를 3으로 고정시킴으로써 네트워크를 깊게 쌓을 수 있었음.
    → 작은 필터 크기가 핵심
  • 단순히 ILSVRC 이외에도 다른 데이터셋에도 뛰어난 성능을 보여줌 (generalized well)

네트워크 구조 1

 

  • 논문에서는 네트워크 내 layer의 구성에 따라 A, B, C, D, E + A- LRN 구조의 총 6개의 구조를 제안하고 있음. C의 경우에는 1X1 convolution이 추가된 형태임.
    → 1X1 convolution을 통해 conv layers 내의 receptive fields에 대해서는 영향을 주지 않고 non-linearity를 증가시키기 위함.
  • LRN(local response normalization)은 alexnet에서 사용이 되었던 normalization 방법임.
    → 매우 높은 하나의 픽셀값이 주변 픽셀에 영향을 주는 것을 방지하기 위해 다른 activation map의 같은 위치에 있는 픽셀끼리 정규화 (하지만, 현재는 batch norm을 더 많이 사용함)

 

 

2. VGG Net Architecture

네트워크 구조 2 (출처: https://neurohive.io/en/popular-networks/vgg16/)

  • Kernel size = 3 for all layers in the network
  • Stride = 1
  • Padding은 convolution 이후에도 resolution의 보존이 되도록 적용
  • 2X2 Max pooling with stride = 2
  • n_classes = 1000

 

  • Fixed-size 224X224 RGB image (train set에 대해 계산된 RGB mean 값을 모든 픽셀에서 빼주는 전처리 과정을 거침)
  • 이때 필터 크기를 3이라는 작은 숫자로 고정해줌. (4개의 방향으로 모든 맥락을 파악하기 위해서는 최소 3은 설정해주어야 함.)
  • 기존의 cnn은 filter size를 크게 설정하였지만, vgg net에서는 작은 숫자로 고정하고 이를 pooling 없이 여러 개 쌓는 구조로 실제 filter size를 크게하는 것과 동일한 효과를 갖도록 receptive field를 구성함. 
    (e.g. 2 of 3X3 -> 5X5; 3 of 3X3 -> 7X7)

 

 

왜 3X3을 여러 개 쌓은 것이 7X7보다 효과적인가?

1) 각 convolution 후에 relu가 온다는 것을 고려했을 때, non-linearity를 강화함으로써 여러 개의 layer를 쌓는 것이 보다 효과적인 decision function을 만들 수 있음.
2) Parameter 수를 줄일 수 있음. (49𝑐2→ 27𝑐2)
→ 이는 7X7 필터를 3개의 3X3으로 분해시킴으로써 7X7 convolution 필터에 regularization을 적용한 것과 동일한 맥락이라고 볼 수 있음. (가중치 개수를 감소시킴으로써 모델 복잡도를 감소)

 


1X1 convolution 

convolutional layers의 receptive fields에는 영향을 끼치지 않고 decision function의 non-linearity를 증가시켜줌.

즉, spatial size는 유지하지만 convolution 레이어 뒤에 오는 non-linear activation을 추가적으로 거침으로써 non-linearity를 더할 수 있는 구조가 됨. 이러한 1x1 convolution concept은 google inception에서는 spatial size는 유지하면서 parameter 수를 줄일 수 있는 bottleneck 구조 전략으로 활용됨.

 

[5X5 vs 2 of 3X3]

 

[1X1 Convolution]

→ 1X1 convolution은 실제로 input, output resolution을 동일하게 유지할 수 있기 때문에 convolutional layers의 receptive fields에는 영향을 끼치지 않는다.
→ 채널 간의 값이 fully connected되어 있는 구조로 (이때의 가중치는 1X1XC 필터의 값) fc layer와 유사함

 

 

3. Classification Framework

  • 목적함수: multinomial logistic regression objective (a.k.a. cross entropy loss)
    $$ CE = - \sum_i^c{t_i log(s_i)} $$
  • mini-batch gradient descent with momentum
  • Momentum = 0.9, batch size = 256
  • Learning rate decay도 적용 (init = .01, decay factor 10)
  • Regularization
    • Weight decay 적용 (L2 penalty parameter set to .00005)
             $$ E(W) = MSE_{train} + \frac{1}{2}\lambda W^TW $$
    • drop-out (where rate set to .5)

  • 가중치 초기화
    • Config A부터 랜덤으로 가중치를 초기화하여 학습, A로부터 앞쪽 4개의 convolutional layer, 뒤쪽 3개의 fully connected layer에서의 가중치를 가져와 initialization
    • 나머지 중간 부분은 random initialization
    • 위의 과정은 Xavier initialization으로 대체 가능함. (실제 코드 구현에 있어서는 He init을 활용함)
    • 가중치는 N(0, .01)로부터 sampling.
    • Bias의 초기값은 0으로 설정.

  • Training Image Size 
    • 인풋 사이즈를 크기 224의 정사각형으로 맞춰주기 위해, 이미지를 rescaling해준 후, random crop을 통해 인풋 이미지 crop을 얻어옴. Augmentation 시에는 해당 이미지 crop에 대해 horizontal flip과 random RGB color shift를 적용
    • Crop을 할 때, rescaling된 이미지 중 가장 짧은 면의 길이 (S; Training Scale)가 224보다 매우 길다면 이미지 crop은 실제 이미지의 small part만을 반영할 것. (→ 어떻게 s를 설정할것인가? 가 유의미)
    • S의 설정
      1) single-scale training (S가 하나의 값만 가짐)
      : 256과 384 두 가지로 실험
      2) multi-scale training (S: 여러 개의 값)
      : S의 값을 특정 범위(논문에서는 [256, 512])로부터 random sampling.

 

  • Testing
    1. Image rescaling (Test scale Q)
      : 이때 Q는 꼭 training scale인 S와 일치하지 않아도 되며, 실제로 하나의 s당 여러 개의 q를 사용하
      는 것이 성능을 향상시켰음.
    2. FC layer를 convolution 연산으로 변경하여 fully convolutional network로 구성
      (inference 시 인풋으로 crop을 사용하지 않고 연산 효율성을 높이기 위함)
    3. Train 시에는 image crop을 이용하였으나, test 시에는 fully convolutional하게 구현했기 때문에 crop 대신에 전체 이미지를 받아서 inference가 가능함.

      → 실제 마지막 classifier 부분의 fully connected layer는 입력 사이즈가 고정이지만, convolution은 그럴 필요가 없기 때문. 만약에 classifier 부분의 인풋이 기존의 7X7보다 큰 경우에는, 클래스 개수만큼 쌓여있는 각 feature map별로 sum pooling(=mean pooling)을 진행.

 

 

4. Experiments

  • Dataset (ILSVRC-2012 dataset)
    ▪ 클래스 개수: 1000
    ▪ 학습 데이터 개수: 1.3M / val: 50K / test: 100K
    ▪ Evaluation metrics
    - top-1 error (the proportion of incorrectly classified images)
    - top-5 error (정답 카테고리가 가장 높은 확률값을 보인 5개의 카테고리 내에 속하지 않
    는 비율)
    ▪ Validation set을 주로 test set으로 활용함.

 

  • Single Scale Evaluation (test 시, image resizing scale이 고정)
    • Single scale training: S = Q
    • Multi-scale training: Q = 384 (mean of S_min and S_max)

 

  • Multi-Scale Evaluation (test 시, 입력 이미지 사이즈를 다양하게)
    • single scale training의 경우, q의 범위를 s에 가깝게 설정. Multi scale training의 경우 q의 범위를 조금 더 넓게 설정.

 

  • Multi-crop evaluation (Test 이미지에도 Crop을 적용한 경우)
    • 실제로, fully convolutional net으로 구성하여 테스트한 결과보다 더 성능이 향상됨. (논문
      에서는 이러한 성능 향상이 실제 연산량 감소 효과 대비 미미하다고 판단하여 추론 시 fully
      convolutional net으로 구성하는 걸 제안함)

 

  • ConvNet Fusion
    • 여러 configuration의 softmax class score 값을 평균 내어 앙상블

 

 

5. Conclusion

  • 기존 SOTA의 top-5 test error인 11.7%에서 6.8%로 큰 폭의 성능 향상
  • GoogLeNet과 성능 차이는 크지 않지만 (0.1%), 모형의 구조는 훨씬 간단함.
  • 대규모 이미지 분류의 성능을 향상시키기 위해 convolutional network의 깊이를 깊게 쌓았다는 점에서 큰 의의가 있음.
  • Very deep cnn은 보다 작은 필터를 여러 개 쌓아 큰 필터로 convolution하는 효과를 볼 수 있다는 점과 동시에 파라미터는 적게 가져감으로써 과적합을 방지할 수 있다는 점을 기반으로 함.
  • 하지만 19개 이상으로 더 쌓는 것은 오히려 성능을 저하시켰기 때문에, 보다 깊게 쌓을 수 있는 방안을 모색할 필요가 있다.
    → ResNet
300x250