논문 Review

Bag of Tricks for Image Classification with Convolutional Neural Networks

SooHyun2i 2020. 10. 2. 16:53

이번에 읽고 정리할 논문은 2019 년 CVPR에 공개된 논문인 Bag of Tricks for Image Classification with Convolutional Neural Networks 이다.

 

정확도를 높이는 방법으로 architectural 을 바꾸지 않고 training을 빠르게 하고 accuracy를 높이는 방법을 제시한다.


1. Introduction

 

2012년 AlexNet이 소개된 이유로 deep convolutional neural network는 image classification에서 지배적인 접근법이 되었다. VGG, NiN, Inception, ResNet, DenseNet, NASNet 등 다양하고 새로운 architecture model 들이 나왔다. 

 

하지만 이러한 발전은 단순히 model architecture에서만 온게 아니다.

 

Training procedure refinements, changes in loss functions, data preprocessing, optimization methods 등 다양한 개선 방법을 사용했다. 

 

학습에 관여하는 여러가지 요소들이 활발하게 연구가 되 고 있다. 하지만 이러한 것들을 정리하고, 합쳐서 실험한 논문이 많이 없다 보니 사용자는 일일이 관련된 내용의 논문을 찾아보고 바꿔가면서 실험해야 하는 불편함이 있다.

 

이 논문에서는 이러한 꿀팁,기술을 Trics라고 언급한다.

 

모델 정확도는 향상시키면서 계산 복잡성은 거의 변화시키지 않는 refinement를 살펴보자.

 

Bag of Trics 실험 결과

논문의 Introduction에서 소개하는 실험결과이다. 

SENet(Squeeze-Ecitation Network)은 2017년 ILSVRC에서 우승한 모델이다.

 

이러한 Trick을 사용해서 논문에서는 ImageNet top-1 Accuracy가 75.3 에서 79.29으로 4%정도 향상시켰다고 한다.

 

그리고 이러한 것들이 object detection과 semantic segmentation에서도 더 좋은 결과를 보인다고 한다.

 

Section을 6개로 나뉘어 설명한다. 논문에서 말한 모델 구현 및 교육 스크립트는 GluonCV 1에서 공개적으로 제공 된다고 한다.  


2. Training Procedure

 

이 section에서는 알고리즘 1의 기준 구현을 명시한다. 

우리가 흔히 알고 있는 mini-batch stochastic gradient descent 알고리즘을 사용한다. 

 

데이터 전처리 방법은 다음과 같다.

 

  1. Randomly sample an image and decode it into 32-bit floating point raw pixel values in [0, 255].
  2. Randomly crop a rectangular region whose aspect ratio is randomly sampled in [3/4, 4/3] and area randomly sampled in [8%, 100%], then resize the cropped region into a 224-by-224 square image.
  3. Flip horizontally with 0.5 probability.
  4. Scale hue, saturation, and brightness with coefficients uniformly drawn from [0.6, 1.4].
  5. Add PCA noise with a coefficient sampled from a normal distribution N(0, 0.1).
  6. Normalize RGB channels by subtracting 123.68, 116.779, 103.939 and dividing by 58.393, 57.12, 57.375, respectively.

2.1 Baseline Training Procedure

 

Baseline architecture : ResNet-50

Weights initialization : Xavier algorithm

Bias initialization : all zeros

Batch normalization layers : (r,B) = (1,0)

Optimizer : Nesterov Accelerated Gradient (NAG)

Each model trained for 120 epochs, 8 V100 GPUs, batch size of 256

Learning rate : initialized to 0.1, divided by 10 at the 30th, 60th, and 90th epochs

 

2.2 Experiment Results

 

약간 더 좋아지기도 하고 나빠지기도 한다. paper마다 파라미터의 초기 조건이 조금 다르기 때문에 논문에서 통일을 하면 약간의 변경이 있다.


3. Efficient Training

 

최근에 딥러닝 학습에 관여하는 GPU가 굉장히 빠르게 성장을 했다. 그에 따라 더 낮은 numerical precision을 사용하거나 더 큰 batch size를 사용하는게 가능해졋다. 이러한 효율적인 학습 방법들을 적용하여 학습 속도와 정확도 모두 향상시킬 수 있다고 한다.

 

3.1.Large-batch training 

 

batch size가 크면 문제 점이 training 속도가 느려지고 동일한 epoch일때 validation accuracy가 떨어지는 느낌을 받는다. 

3-A Linear scaling learning rate

 

2018년도에 facebook에서 낸 paper 이다. Linear Scaling Rule 이라고 learning rate와 batch size를 비례하게 잡아주는 것이다. batch size가 크면 gradient의 noise를 감소시킨다. 그래서 우리는 learning rate를 gradient direction과 반대되는 방향으로 증가 시킬 수 있다. 

 

3-B Learning rate warmup

 

Learning rate 맨 처음에 적용되는 방식이다. 처음에 모델의 아무런 정보가 없을때 radnom weight로 하는데 너무 큰 learning rate를 사용하면 수치적 불안정성을 초래할 수 있다. 이럴 때 learning rate를 아주 작은 값에서 빠르게 learning rate를 키워주고 뒤에서 천천히 줄여주는 방식이다. 

 

3-C Zero gamma

 

여기서 gamma는 batch norm의 파라미터이다. 일반적으로 감마는 1로, 베타는 0으로 initalization을 하는데 

옆에 그림에 보이는 ResNet 구조와 같이 residual conncection이 존재하는 경우에는 감마를 0으로 초기화 해준다.

 

ResNet은 감마를 0으로 초기화 하면 residual block으로 신호가 흐르지 않아서 대부분의 신호들이 short cut을 타고 간다.  전체 네트워크 구조가 단순한 네트워크 처럼 보이면서 training이 단순하게 된다. 

 

이것이 학습 초기 단계에 안정성을 높여준다고 한다. 

 

3-D No bias decay

 

우리가 overfitting을 막기 위해서 L2 regularization을 사용할때 모든 파라미터에 일반적으로 적용한다.

 

Highly Scalable Deep Learning Training System with Mixed-Precision: Training ImageNet in Four Minutes

arxiv.org/pdf/1807.11205.pdf

 

위 논문에 의하면 오직 weight에만 regularization을 적용하고 biases and γ and β in BN layers에는 적용하지 않는다고 한다. weight에만 decay를 주는 것이 overfitting을 방지하는데 효과적이라고 언급한다. 

 

3.2 Low-precision training

 

최신 하드웨어에서는 lower precision 계산이 지원되면서 속도에서 큰 이득을 얻을 수 있다. 

NVDIA V100은 FP32 에서는 14TFLOPS일 때 FP16에서는 100 TFLOPS가 가능하며 전체적인 학습속도도 FP16에서 약 2~3배 빠르다고 한다. 

 

Mixed Precision Training을 제안하는데 간단히 말하면

Loss 값이 일정한 범위에 있도록 scaling 값을 곱해줬다가 나눠주는 기법이다.

 

3.3 Experimental Results

 

이 5가지를 다 적용했을때 결과이다. 75.87 -> 76.21로 늘어난 것을 확인 할 수 있고 

training 속도는 13.3 min -> 4.4 min 으로 3배정도 줄어들은 부분을 확인 할 수 있다.


4. Model Tweaks 

 

architecture를 바꾸지 않고 conv layer에 stride를 바꾸는 방식처럼 약간의 model tweak으로 효과적인 모델 accuracy 향상하는 방법을 제안한다.

 

기본 Baseline으로 삼은 것은 ResNet-50 모델이다. 

 

 ResNet-B는 Down sampling을 보면 1*1 conv stride=2를 stride 1로 바꿔주고 위에 3*3을 stride 2를 넣어준다.

 

1*1을 stride 2하면 잃어버리는 정보가 있게 된다. 하지만 3*3은 stride 2를 해도 정보를 다 가져갈 수 있으므로 계산량은 조금 증가하겠지만 accuarcy에서 좋은 면을 볼 수 있다. 

 

ResNet-C은 7*7 conv 계산량을 줄이기 위해 3*3을 두번 중첩해주기도 한다.

 

이 논문에서는 RestNet-B를 조금 수정한 RestNet-D를 채택했다. 

 

input, output dim을 맞춰주기 위해 1*1를 넣어줬다. stride를 1로 바꿔주고 AvgPool 2*2 s=2를 넣어주었다. 계산량은 늘어나지만 accuarcy가 의미 있는 향상이 있다고 한다. 

 

Restet-D를 보면 76.21 -> 77.16 으로 1% 향상한 것을 볼 수 있다. 

 


5. Training Refinements

 

이번 섹션에서는 model accuracy를 높이기 위한 4가지 training refinements를 제안한다.

 

5.1 Cosine Learning Rate Decay

 

SGDR : STOCHASTIC GRADIENT DESCENT WITH WARM RESTARTS

arxiv.org/pdf/1608.03983.pdf

 

Learning rate를 decay시키는 방법을 cosine 곡선 처럼 스무스하게 하는 방법을 제안했다. 그리고 이 구조를 반복하는 것을 SGDR paper에서 제안했다. local minimum을 탈출 하려면 learning rate reset하는게 꼭 필요하다고 주장했지만

이 paper를 인용한 다른 논문 대부분은 reset은 아닌 coinse만 적용한다고 한다.

 

앞에 부분은 warm up을 직선형태로 하는 형태이고 뒷 부분은 cosine 형태로 learning rate를 조절한다. 

 

cosine은 -1~1값의 범위를 가지므로 상수를 더해줘서 항상 양수가 되도록 유지해준다.

 

5.2 Label Smoothing

 

inception-v2에서 사용한 label smoothing 방법이다. 

classification 할때 보통 one hot 인코딩을 이용해 0과 1로 출력을 한다.

cross-entropy loss 를 보면 완벽하게 매칭이 되면 -log가 나온다. 즉 값이 ininite해진다.

 

입실론이라는 작은 값을 줘서 overfitting을 방지해준다. 이 방법을 사용해 inception-v2 논문에서는 accuracy를 0.2 %개선했다고 한다. 

 

5.3 Knowledge Distillation

 

Distilling the Knowledge in a Neural Network

arxiv.org/pdf/1503.02531.pdf

 

정확도가 높은 사전 훈련된 모델인 teacher model을 이용하여 student model이 적은 연산을 가지면서 teacher model의 모델 복잡성을 동일하게 유지하면서 정확도를 따라가도록 학습 시키는 것이다. 

 

ex ) teacher model : ResNet-152
      student model : ResNet-50

 

teacher model에 sofrmax 확률값과 student의 softmax 확률이 동일해지도록 하는 loss 값을 추가하고 두 loss 값의 합으로 전체 Loss를 이용한다.

 

5.4 Mix-Up

 

mixup: BEYOND EMPIRICAL RISK MINIMIZATION

arxiv.org/pdf/1710.09412.pdf

 

training 하기 위한 data를 만들때 두가지 다른 이미지의 linear mapping해서 합성한 이미지를 만든다. 이 이미지를 이용해 model을 training한다. 일종의 data augmentation이다. 

 

5.5 Experimental Results

 

위 4가지 방법을 적용하면서 실험한 결과이다. 적게는 0.4 % 만헥는 0.7 %까지 정확도가 향상되는 것을 확인 할 수 있다. 여기서 inception이나 mobile의 경우에는 knowledge distillation이 효과가 적다. ResNet에서는 teacher model과 student model이 같은 계열인 반면 위 두가지는 계열이 다른 모델이라 정보가 전달이 약하기 때문이다.

 


6. Transfer Learning

 

이번 섹션에서는 Classification 모델에서 적용했던 여러 방법들을 주요 computer vision task인 object detection과 semantic segmentation에 적용했을 때 성능을 확인하기 위한 실험을 했다.

Transfer Learning 실험 결과

Object Detection에서는 baseline보다 3% 성능이 좋아진 모습을 볼 수 있다.

Semantic Segmentation의 경우 label smoothing, mixup은 오히려 성능에 부정적인 영향을 미친다. 그 이유는 

Semantic Segmentation은 pixel level로 하는데 앞의 trick들이 label을 스무딩하는 기법이므로 pixel이 블러링 되면서 오히려 성능이 안 좋게 영향을 미친다고 분석을 한다.

 


7. Conclusion

우리는 여태까지 model architectural을 바꾸지 않고 일종의 trick을 이용해서 모델의 성능을 향상시키는 방법들을 알아보았다. CVPR 2019에 발표된 TOP급 논문이며 인용한 논문이 굉장히 많다고 한다. 

Image Classification 이나 Object Detection, Semantic Segmentation 등 image 관련 처리 작업을 할 때 이 논문을 참고하면 좋을 듯 싶다.