새소식

반응형
Vision AI/Paper review

[논문 읽기] Bag of Tricks for Image Classification with Convolutional Neural Networks

  • -
반응형

https://arxiv.org/abs/1812.01187

 

Bag of Tricks for Image Classification with Convolutional Neural Networks

Much of the recent progress made in image classification research can be credited to training procedure refinements, such as changes in data augmentations and optimization methods. In the literature, however, most refinements are either briefly mentioned a

arxiv.org

 

 

요약

  • 최근에 image classification에서 만들어진 많은 data augmentation, optimization 같은 절차들은 학습 성능 개선에 기여할 수 있다. 하지만 간략하게 언급되거나 소스코드만 볼 수 있는 경우가 대부분이다.
  • 성능을 높이기 위한 경험적인 테크닉들을 ablation study를 통해 검증해 볼 것이다.
    • ablation study : 제안한 요소가 모델에 어떠한 영향을 미치는지 확인하고 싶을 때, 이 요소를 포함한 모델과 포함하지 않은 모델을 비교하는 것을 말한다. 이는 딥러닝 연구에서 매우 중요한 의미를 지니는데, 시스템의 인과관계(causality)를 간단히 알아볼 수 있기 때문이다.

  • 우리의 실험에서 몇몇 트릭들은 유의미한 정확도 향상이 있고 트릭들을 결합하면 더 좋은 성능을 낼 수 있음을 보여준다.

 

Baseline 실험 절차

1. 이미지를 무작위로 샘플링하고, [0, 255]의 32비트 부동소수점 raw pixel 값으로 디코딩한다.

2. 종횡비를 3/4, 4/3으로 랜덤 샘플링하고 area를 8%, 100%로 랜덤샘플링한 rancom crop 직사각형 이미지를 224x224 사각형 이미지로 resize한다.

3. horizontal flip를 0.5 확률로

4. hue, saturation, brightness를 0.6, 1.4 계수로 균일하게 준다.

5. 정규분포에서 샘플링된 계수를 사용하여 PCA noise를 추가한다.

 

 

Baseline 실험 결과

레퍼런스를 재현한 베이스라인 실험결과

 

효과적인 학습을 위한 여러가지 트릭

  1. Large-batch training
    미니배치 SGD는 좋은 방법이지만 배치사이즈를 늘리면 학습이 느려지고 수렴하지 못하게 된다. 이 이슈를 풀기위한 휴리스틱한 방법들을 확인해본다. 이 방법들을 모두 적용하여 0.5% 정확도가 향상되었다.
    1. Linear scaling
      learning rate batch size가 클수록 노이즈가 줄고 학습률을 증가시켜 더 빠르게 학습이 되도록 할 수 있다. 그래서 (learning rate = 0.1 x batch size/256) 으로 학습률을 증가시켜주었다.
    2. Learning rate warmup
      학습을 시작할 때 랜덤하게 weight를 초기화 한다. 너무 큰 lr을 사용하면 수치가 불안정해줄 수 있다. 초기 lr로 학습하기 전에 학습프로세스를 안정시키는 역할을 한다. warmup 방법은 0에 가까운 작은 학습률부터 초기 학습률까지 선형적으로 증가하는 방법이다.
    3. Zero gamma Resnet은 많은 residual block으로 구성되어 있고 block의 마지막레이어는 batch norm이다. 이 레이어의 gamma 값을 0으로 정하면 residual block은 input 값을 output으로 그대로 내게 된다. 이렇게 되면 초기에 망이 짧아져 학습이 빨라지는 현상이 생긴다.
    4. No bias decay weighted decay 는 L2 norm과 같은 역할이며, overfitting을 방지하기 위해 사용한다. convolution, FC layer의 weight만 적용해주는 것이 좋다. 왜?
  2. Low-precision training mixed-precision 기법을 사용해 학습속도를 2-3배 향상시켰다. 그 결과 1epoch당 학습속도가 13.3분에서 4.4분으로 학습시간이 줄었다.

 

Model Tweaks (모델 조정)

Resnet-B, C를 소개하고 Resnet-B에서 영감을 받은 D를 제안한다.

  • B는 파란색 블록의 stride를 2에서 1로 바꿔 feature map의 손실이 없도록 하였다.
  • C는 Inception-V2에서의 방법을 차용했다. resnet의 문제는 커널의 폭이나 높이에 대해 연산량이 quadratic하게 증가하는 것이다. 7x7 conv를 3x3 conv로 변경하고, 첫 번째와 두 번째 conv의 stride를 2, 채널은 32로, 마지막 conv 채널 사이즈는 64로 설정하였다.
  • D는 오른쪽 pathdptjeh 1x1 conv로 인해 feature map의 3/4가 손실된다. 이를 최소화 하기 위해 avg pool 2x2를 추가하고, conv의 stride를 1로 변경했다.

B만 적용 시 0.5%, B, C 적용 시 0.2%, B, C, D 적용 시 오른쪽 path에서 더 많은 정보를 보존해 0.3% 개선하였다.

결과적으로 1% 정확도를 향상시켰다.

 

Training Refinements (학습 방법 개선)

1. Cosine Learning Rate Decay

  • lr의 초기값을 0으로 두고 cosine 함수를 적용하여 그 다음 배치의 lr을 구하는 방법
  • step decay가 10배 줄었을 때 쯤에 cosine decay는 여전이 lr이 높고, 잠재적으로 학습 과정을 개선시킨 다는 점이 다르다; 잠재적으로 학습 과정을 개선시킨다는게 무슨말이지

2. Label Smoothing

  • one-hot encoding에서 0, 1 처럼 hard label을 사용하는 것이 아니라 0.25, 0.75 처럼 soft label을 쓴다.
  • cross entropy에서 loss 계산 시, hard label을 사용하면 오버피팅을 발생시킬 수 있다.
  • label smoothing을 사용하면 일반화에 더 유리하다.
  • ϵ=0.1 로 설정하였다.

3. Knowledge Distillation

  • Resnet152를 teacher model로 사용하여 Resnet50을 학습시켰다.
  • T = 20으로 설정하였으며, Teacher model로는 label smoothing이 적용된 ResNet-152-D 모델을 사용하였다.
  • cosine decay 기법을 Teacher model에 적용하였다.

Mixup Training

  • 두 이미지를 겹쳐 새로운 이미지를 만들어 같이 학습하는 방법
  •  Beta 분포 중 α=0.2로 두었고, epoch 수를 120에서 200으로 늘렸다. (mixup 된 이미지는 더 긴 학습시간이 필요하기 때문)
  • Resnet152를 teacher model로 사용하였을 때 resnet50에서는 잘되었지만 Inception-V3나 Mobilenet에서는 좋은 결과를 얻을 수 없었다. 예측 분포가 서로 다르기 때문에 악영향을 끼친 것으로 보인다.

 

이 논문에서는 다양한 꿀팁을 사용하여 조금씩 정확도를 개선시켰고, 함께 사용했을 때 더 좋은 성능을 얻을 수 있었다.

 

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감과 광고 클릭 부탁드립니다~