[논문리뷰 | CV] VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITION (2014) Summary

9e0na·2023년 4월 12일
1

[논문리뷰]

목록 보기
3/40
post-thumbnail

Title

  • VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITION (2014)
  • VGGNet


Abstract

  • 대규모 인식 설정에서 Convolutional Layers의 깊이가 정확도에 미치는 영향을 조사한 연구이다.
  • 3 x 3 Convolution Filters을 사용해서 깊이를 증가시킴으로써 성능 향상 및 일반화 성능에도 뛰어났다.
  • ImageNet Challenge 2014에 제출한 이미지의 기초가 되었다.
  • 최고 성능을 만들기 위해 두 가지 ConvNet 모델을 사용하였다.

0. Background

  • VGG란?
    -2014년 ILSVRC 대회 2위를 한 모델
    -'Very deep. convolutional networks for large-scale image recognition'에 수록
    -3 x 3의 작은 filter를 사용한 Convolution layer를 깊게 중첩한다는 것이 가장 큰 특징
  • ILSVRC 2010-2015 Winners?
    -아래 그림은 2010년부터 2015년까지 ILSVRC 대회 우승을 한 모델이다.
    -2014년에 우승은 GoogleNet으로 22 Layers로 구성되었다. 반면, 2등인 VGGNet는 19 Layers로 구성되었다. 그 이전 2012년 AlexNet과 비교했을 때 8 Layers로 구성되었는데 2014년부터는 깊게 쌓이고 있다는 것을 확인할 수 있다.
    -AlextNet과 비교했을 때 어떻게 오류율을 크게 줄였고, 어떤 기법으로 접근했는지 살펴 보는 것이 중요하다.

출처: https://www.researchgate.net/figure/The-evolution-of-the-winning-entries-on-the-ImageNet-Large-Scale-Visual-Recognition_fig1_321896881

Keypoint
: 네트워크를 깊게 쌓는다는 것은 당시에는 쉬운 일이 아니었다.
Gradient vasnishing와 exploding 같은 문제를 효과적으로 해결할 수 있어야 했고, parameter 수가 늘어나 overfitting을 야기할 수 있기 때문이다. Layers의 깊이에 따라 성능과 오류율이 어떻게 달라지는지 확인해보자.


1. Introduction

  • ConvNet는 대규모 이미지 및 비디오 인식 분야에서 큰 성공을 거두었다.
  • 심층 시각 인식 모형의 발전에 중요한 역할을 한 것은 ILSVRC 덕분이다.
  • 본 논문에서는 Convolutional Layers의 깊이에 따른 인식 결과에 대해 설명하고자 한다.
  • 굉장히 작은 Convolution Filter (3x3)를 모든 Layers에서 적용했기 때문에 깊이를 꾸준히 깊게 할 수 있었다.
  • ConvNet 구조를 발전시켜서 ILSVRC에서 SOTA(State-of-the-art)를 달성했고, 다른 데이터셋에서의 간단한 파이프라인에서 또한 높은 성능을 보였다.

2. Convnet Configurations

2.1 Architecture

출처: https://en.wikipedia.org/wiki/File:VGG_neural_network.png

  • 224x224 크기의 RGB 3 Channel 이미지를 input으로 사용한다.
  • 전처리는 training set의 평균 RGB 값을 각 픽셀에서 빼주는 것이다.
  • [Input - Conv1-Conv2-MaxPool2-Conv3-Conv4-MaxPool4-Conv5-Conv6-Conv7-MaxPool7-Conv8-Conv9-Conv10-MaxPool10-Conv11-Conv12-Conv13-FC14-FC15-FC16(output)]으로 구성된다.
  • Input 이미지는 3x3크기의 Filter를 사용한다.
  • Maxpooling: stride 2로 2x2 pixel을 window에서 수행한다.
  • A stack of Convolution Layer 뒤에는 세 개의 Fully-Connected Layer가 있다.
  • 모든 hidden Layers에는 비선형성을 갖는 ReLU를 갖는다.

2.2 Configurations

  • ConVet 구성
    : 모델들을 A-E까지 총 6개로 나누었고, Network A의 weight Layers는 11개(Conv Layers 8개, FC Layers 3개)~Network E weight Layers는 19개(Conv Layers 16개, FC Layers 3개)로 '깊이'만 다르다.
    -> 왼쪽(A)에서 오른쪽(E)로 깊이가 증가하며 Layer가 더 많이 추가된다. 첫 번째 Layer에서 64로 시작해서 최대 512까지만 늘어난다.

  • Number of parameters 개수
    : Network의 depth가 깊고 얕지만 weight의 개수가 많지는 않다는 것을 알 수 있다.

2.3 Discussion

Q: 굳이 3 x 3 Filter를 여러개 사용하는 이유가 무엇일까?
A:
첫번째, 작은 사이즈로 여러 번 나눠 적용하면 Conv Layers를 거칠 때마다 ReLU가 더 많이 통과할 수 있기 때문에 비선형성을 증가시켜 모델이 더 잘 구분하도록 돕는다.

두번째, 파라미터의 갯수를 감소하여 overfitting을 줄일 수 있다.
-> 3 x 3 Filter 3개가 7 x 7 Filter 1개보다 parameter 수가 줄어든다. 이것은 7 x 7 Filter에 일반화를 적용한 것과 같이 overfitting을 줄이는 효과가 있다.

정리하면, 3 x 3 Filter를 사용해서 여러 층을 구성하면 비선형성을 증가시켜 모델이 더 잘 구분되도록 돕고, 파라미터의 갯수를 최소화하여 overfitting을 줄일 수 있다는 이점이 있다. 즉, Filter 사이즈가 크면 금방 이미지 사이즈가 작아져서 깊게 만들기 어렵다.

여기서 주목해볼만한 점은 1 x 1 Conv Layer를 사용했다는 것이다. 채널수 조정, 비선형성 증가, 계산량 감소 등 여러 이점이 있지만, 이 중 논문에서는 '비선형성 증가'에 초점을 맞췄다.

1 x 1 Conv Layer는 receptive field를 건드리지 않고, 비선형성을 증가시키는 가장 좋은 방법이다. 하지만 너무 많은 1 x 1 filter는 오히려 필요한 만큼의 공간적인 정보를 찾아내는 것에 걸림돌이 될 수도 있다는 단점이 있다.

GoogLeNet과 비슷한 점은 모델을 깊게 만들고, 작은 Convolution Filter를 사용했다는 것이다. 그러나 GoogLeNet은 첫 번째 Layer에서 Feature Map의 크기를 과감하게 줄임으로써 계산량을 더욱 감소했고, 구조가 VGG보다 더 복잡하다는 것이 차이점이다.


3. Classification Framework

3.1 Training

ConvNet 훈련 절차는 AlexNet의 방법을 따른다.

  • Optimization: multinomial Logistic Regression
  • mini-batch gradient descent with momentum
  • Batch_size: 256
  • momentum: 0.9
  • Regularization : weight decay(L2 Norm with 5*10^-4)
  • Dropout : 0.5(처음,두 개의 FC Layer에 대해 적용)
  • Learning rate : 초기 0.01로 설정한 이후 validation accuracy가 더 이상 개선되지 않으면 0의 배수만큼 감소하여 최종적으로 3번 갱신된다.
    -> 최종 lr : 0.00001
  • 74 epochs후에 학습이 중지된다.

Q: 기존 AlexNet과 비교해봤을 때, VGG는 깊은 모델임에도 더 적은 epochs이 필요한 이유는 무엇일까?
A:
1) 더 깊어지고 작아진 Conv.Fiter로 인해 implicit 정규화
2) 특정 Layers에 대한 초기화 작업

  • 본 논문에서는 잘못된 초기화를 막기 위해 Configuration A를 먼저 학습시켰다. 이후 더 깊은 아키텍처를 훈련할 때는 초기 4개의 Conv Layers와 마지막 3개의 FC Layers를 A Layer와 함께 초기화하였고, 나머지 중간 레이어들은 무작위로 초기화하였다.
  • 무작위 초기화의 경우, 평균:0, 분산:0.01인 정규분포에서 가중치를 샘플링했고, 편향은 0으로 초기화하였다.

    이후 논문 발표 이후 가중치 초기화에 효과적인 'Xavier Iinitialization'을 발견하였다.


ㅁ Data Augmentation

<AlexNet / VGGNet / GooLeNet 비교>

1) AlexNet

  • 학습 이미지를 256 x 256 크기로 만든 후 그 이미지를 랜덤으로 잘라서 227 x 227 크기의 이미지로 생성하여 크기를 2,048배로 늘렸다. 또한 RGB 채널의 색상강도를 조절하기 위해 주성분분석(PCA)를 수행하였다. 여기서 알아야 할 점은 AlexNet은 모든 이미지를 Single Scale과 같이 256 x 256만으로 고정하였다는 것이다.

2) VGGNet

  • VGGNet에서는 Single Scale과 Multi Scale에 따라서 training scale이 다르다.
    -Single Scale의 경우, AlexNet과 같이 256 or 384 두개의 scale로 고정을 한다.
    -Multi Scale의 경우, 256과 512 범위에서 임의로 scaling 후 224 x 224로 crop하였다. 입력 이미지의 크기를 224로 고정하였다.

3) GooLeNet


3.2 Testing

  • Testing시, Single Scale과 Multi Scale로 나뉜다.
  • Single Scale의 경우, 미리 정의된 가장 작은 이미지 사이즈로 rescale해준다.
  • Multi Scale의 경우, FC Layers들을 ConV Layer로 변환하여 Fully Convolutinal Network(FCN)로 만든다.
  • 첫번째 FC Layer는 7 x 7 Conv Filter을 사용하고, 나머지 두 FC Layer에는 1 x 1 Conv Filter을 사용하였다.
  • 모든 이미지를 crop하지 않고 테스트할 수 있고, test set을 좌우반전하여 데이터를 증강시켰다.

Training시에는 Crop 방법을 사용했었는데, FC Layer가 1 x 1 Conv Layer로 바뀌었기에 Testing시에는 Crop을 할 필요가 없어진다.


3.3 Implementation Details

  • C++ Caffe Toolbox에서 파생되었다.
  • 여러 GPU에서 수행하였고, 데이터 병렬처리를 통해 각 batch를 여러 개의 GPU에 분산해서 계산하였다.
  • 사용한 GPU는 NVIDIA Titan black GPU이며, 하나의 아키텍처를 훈련하는 데 약 2~3주가 걸렸다.

4. Classification experiments

  • S: Train에 사용되는 rescale 비율
  • Q: Test에 사용되는 rescale 비율
  • 고정된 S로 훈련된 모델의 경우 Q=S
  • S가 계속 변화하면, Q=0.5 x (S_min + S_max)

4.1 Single Scale evaluation

  • 1) A와 A-LRN를 비교한 결과, LRN이 성능 향상에 크게 기여를 하지 못했다.

    이후 더 깊은 네트워크들에서는 LRN을 사용하지 않는다.

  • 2) ConvNet의 깊이가 깊어짐에 따라 Classification error가 낮아진다는 것을 알 수 있다. C는 3개의 1 x 1 Conv Layer를, D는 3 x 3 Conv Layer를 사용했기 때문에 둘의 깊이는 같지만 성능은 D가 좀 더 좋다.

    비선형성을 증가시키면 분류에 도움이 되지만 오히려 필요한 만큼의 receptive field를 사용하여 공간적인 특징을 추출하는 것이 중요하다.

  • 3) 3 x 3 Conv Layer를 5 x 5 Conv Layer로 바꾼 아키텍처와 B를 비교해봤는데, 전자가 후자보다 top-1 error가 약 7% 높았다.

    [deep net with small filters]가 [ shallow net with larger filters]보다 성능이 더 좋다.

  • 4) Training 시 이미지 scale을 하는 것이 scale을 고정하는 것보다 더 좋은 성능을 보여준다는 것을 확인하였다.

    즉, 스케일 변화(scale jittering)을 사용하는 것이 데이터 증강에 도움이 된다는 것을 알 수 있다.


4.2 Multi-scale evaluation

  • Test시 Scale Jittering을 준 경우
  • Test 이미지를 Multi Scale로 설정하여 evaluation하는 방식이다.
  • 고정된 S 사이즈의 경우, Q={S-32, S+32}로 평가하였다.
  • 변하는 S 사이즈의 경우, Q={S_min, 0.5(S_min + S_max), S_max}로 평가하였다.

    위의 결과를 살펴보면, Test시 Scale Jittering을 할 경우 성능 향상에 도움이 된다. 하지만 D의 Train [256;512]과 E의 [256;512]는 너무 스케일을 많이 했기 때문에 성능을 저하시킨다.


4.3 Multi-crop evalutation

  • 두 평가 기법인 Multi-Crop evaluation과 Dense evaluation의 Softmax를 통해 output의 평균화해서 두 평가 기법의 상호 보완성을 평가한다.
  • 결과를 확인해보면, Multi-crop이 dense보다 성능이 살짝 더 좋았고, 이 둘을 앙상블 한 경우 성능이 더 좋았다.

4.4 ConNet fusion (Ensemble)

  • Single Scale 모델 6개와 Multi-Scale 모델 D를 합쳐서 7개 모델의 앙상블을 시도한 결과, 7.3%의 ILSVRC Test errror를 보였다.
  • Multi Scale에서 가장 성능이 좋았던 D와 E를 앙상블 한 결과, test error 7.0%를 보였다.

4.5 COMPARISON WITH THE STATE OF THE ART(SOTA와 비교)

  • 외부 Training 데이터 없이 얻은 결과만 보고된다.

5. Conclusion

  • 깊이가 상당히 깊어진 기존의 ConvNet 모형을 사용하여 ImageNet 챌린지 데이터 세트에서 높은 성능을 달성할 수 있었다. 즉, '깊이'가 매우 중요하다.
  • VGGNet은 최대 19 Layer로 구성되어 있다.

🎯 Summary

AlexNet을 재밌게 읽었던지라 읽기 전부터 VGGNet에 대해 흥미로웠지만, 막상 읽어보니 너무 어려웠다. 3번째 Classification Framework의 Testing에서 이해하기 어려웠고 계속 정독해봤지만 온전히 내꺼로 만들지 못해서 아쉬웠다. 의문점은 '왜 Single Scale과 Multi Scale로 나눠서 평가를 했을까'이다.

VGGNet을 한마디로 표현하면 '깊이가 깊어진 모형'이라고 말할 수 있다. 그리고 핵심은 Convolutional Layer에서 사용된 3 x 3 Filter이었다. 이는 작은 사이즈의 필터를 적용함으로써 파라미터수를 줄이고, 비선형성을 증가함으로써 모델의 깊이를 깊게 만들어 모델의 성능을 높일 수 있었다. Dropout이외에도 overfitting을 방지하기 위한 새로운 방법을 알 수 있었다. 이외에도 AlexNet,VGGNet,GooLeNet의 Data Augmentation을 비교함으로써 어떻게 오버피팅을 막을 수 있었는지 배울 수 있어서 너무 좋았다. 또한, 1x1 convolution의 필요성과 가중치 초기화, FCN, 비선형성의 증가가 좋은 이유 등 다양한 개념들을 알 수 있었던 시간이었다.

그리고 특정 대회에서 성능 1위를 한 모델이라고 할 지라도 아키텍처의 무게가 무겁고 구현이 어렵다면 별로 사용하지 않는 다는 것을 알게 됐다. 항상 성능에 초점보다는 어떤 방법을 통해 모델을 구현하고, 어떻게 하면 오버피팅을 효과적으로 억제하는 등 효율적인 방법을 생각해봐야겠다.


📚 References


profile
데이터사이언티스트가 되기 위해 [a-zA-Z]까지 정리하는 거나입니다 😊

0개의 댓글