티스토리 뷰

728x90

논문 제목 : Bag of Tricks for Image Classification with Convolutional Neural Networks

 

오늘은 Bag of Tricks for Image Classification with Convolutional Neural Networks에 대해 리뷰를 해볼까 한다.

이 논문은 세간에 떠도는 CNN 학습 기법들을 실험하여 그 결과를 정리하였다. 즉, 그전까지는 엔지니어가 일일이 여러 기법들을 따로 적용해가며 실험을 해왔는데, 이 논문에서는 이를 대신하여 모델 구조를 변경하지 않고도 정확도를 개선할 수 있는, 이른바 CNN 학습 꿀팁들에 대해 정보를 제공하고 있다. 캐글 등 대회 준비를 하는 분들에게 가이드라인으로서 많은 도움이 되지 않을까 싶다!

 

1. Abstract

 

초록에서는 전체 논문에 대해 요약하고 있다.

이미지 분류 연구는 data 확장이나 최적화 방법의 변화 등 학습 방법을 개선하는 것으로도 좋은 성능을 얻을 수 있다.

하지만, 대부분의 이러한 개선점들은 구현부에 간략하게 언급되거나, 소스코드에서만 확인 가능한 경우가 있는데, 이 논문에서는 앞서 말한 이러한 개선점들에 대해 조사하고, ablation study (절제술 - 의학계에서는 절제술로 불리며, 딥러닝에서는 모델의 building blocks를 제거했을 때 전체 성능에 미치는 효과를 알기 위한 과학적 실험을 의미한다)를 통해 이들이 모델의 정확도에 미치는 영향을 경험적으로 평가할 것이다.

 

그리고 실제로 이러한 개선점들을 결합했을 때 다양한 CNN 모델에서 성능이 개선되는 것을 확인할 수 있었다고 한다. 또한, 이미지 분류에서의 정확도 개선은 다른 도메인인 Object detection과 Semantic segmentation에서도 좋은 결과로 이어졌다고 한다.

 

2. Introduction

 

소개에서는 어떤 개선점에 대해 초점을 맞추었는지 설명하고 있다.

지금까지 AlexNet을 시작으로 다양한 CNN 모델이 등장하며, 이미지 분류 도메인에서 모델의 성능은 모델의 구조를 변경해오며 꾸준히 성장해왔다. 이때, 단순히 모델 구조의 개선뿐만 아니라, loss 함수, 데이터 전처리, 최적화 방법 등 학습 방법의 개선 또한 성능 향상에 있어 큰 역할을 하였지만, 학습 방법의 개선은 구현부에서만 잠깐 소개되거나, 소스코드에서만 확인할 수 있는 등 상대적으로 적은 관심을 받았다.

 

 

이 논문에서는 연산의 복잡성은 거의 그대로 둔 채, 모델 구조 및 훈련 방법의 변경이 모델의 정확도에 미치는 영향에 대해 조사할 것이다. 이러한 개선점들의 대부분은 소위 꿀팁이라 불리는데, 여기에는 stride 사이즈를 변경하거나 learning rate schedule을 조정하는 것들이 포함된다.

 

표 1. 각 모델간 (꿀팁 적용 x, 꿀팁 적용 o) 의 연산량과 validation 정확도

 

특히 이 꿀팁들을 모아서 사용할 경우, ResNet-50에서는 성능이 약 4%나 올랐으며, 이는 SE-ResNeXt-50과 같은 새로운 모델 구조의 성능을 능가하는 수치이다.

추가로, 이 개선점은 ResNet과 ImageNet 뿐만 아니라, 다른 모델 및 데이터셋에서도 좋은 효과를 보였다고 한다.

 

 

Paper Outline

 

Paper Outline에서는 각 섹션에 대해서 설명하고 있다.

 

섹션 2에서는 평가를 시작하기에 앞서 baseline training procedure에 대해 구성한다.

섹션 3에서는 Efficient training을 위한 여러 기법 (trick) 들을 모델에 적용한다.

섹션 4에서는 ResNet의 구조에 변형을 준 3가지 모델에 대해 알아볼 것이다.

섹션 5에서는 4개의 추가적인 학습 과정 변형에 대해 토의해볼 것이다.

섹션 6에서는 이러한 더욱 정확한 모델들이 transfer learning에서도 좋은 효과를 가지고 오는지 알아본다.

 

2. Training Procedures

 

학습 절차는 SGD (Stochastic Gradient Descent)가 적용된 일반적인 CNN 모델의 학습 기법과 똑같다.

먼저, 각 iteration마다 b 이미지를 랜덤 하게 샘플링한다. 이후 gradient를 계산한 다음, 네트워크 파라미터를 업데이트한다. 이 학습 알고리즘은 K번이 지난 다음 종료되며, 모든 함수 및 하이퍼 파라미터는 조정할 수 있다.

 

이 논문에서 사용한 강하 알고리즘

 

2.1 Baseline Training Procedure

 

Baseline으로 ResNet을 사용하는데, 이때 training 및 validation 단계에서 서로 다른 파이프라인을 가진다. 먼저, training 단계에서는 다음과 같은 파이프라인을 가진다.

 

Training 단계 Pipeline

1. 랜덤 샘플링을 통해 [0, 255] 사이의 이미지를 추출하고 이를 32bit floating point로 변환한다.

2. 영역은 [8%, 100%], 비율은 [3/4, 4/3]로 aspect ratio를 유지하는 사각형 영역을 랜덤하게 crop 한다. 이후, crop한 이미지를 다시 224 x 224 정사각형으로 사이즈를 재조정한다.

3. 50% 확률로 이미지를 수평으로 뒤집는다.

4. [0.6, 1.4] 사이에서 Scale hue, saturation, brightness 값을 뽑는다.

5. N(0, 0.1) 분포에서 값을 하나 샘플링하여 PCA noise를 추가한다.

6. RGB 채널에 대해 123.68, 116.799, 103.939를 빼준 다음, 이를 각각 58.393, 57.12, 57.375로 나누어 정규화 작업을 진행해준다.

 

 

Validation 단계 Pipeline

1. aspect ratio를 유지하며, 짧은 축이 256이 되게끔 사이즈를 조절하고, 224 x 224 정사각형 사이즈로 center crop을 수행한다.

2. RGB 채널에 대해 정규화 작업을 진행해준다.

3. Validation 단계에서는 그 어떤 random 확장도 수행하지 않는다.

 

 

추가로, 모든 Conv layer 및 FC layer는 Xavier 초기화를 수행해주고, 특히 파라미터들을 [-a, +a] 사이의 균일하게 분포된 random 값으로 설정하는데 이때 a = $ \sqrt{6/(d_{in} + d_{out})} $ 이다. 여기서 $ d_{in} $ 은 input 채널 크기이고, $ d_{out} $ 은 output 채널 크기이다.

모든 bias는 0으로 초기화되었고, Batch normalization layer에서 $ \gamma $ 는 1로, $ \beta $ 는 0으로 설정한다.

 

Optimizer로는 NAG (Nesterov Accelerated Gradient)를 사용하였고, 각 모델은 8개의 V100 GPU, 256 size의 batchsize 환경에서 120 epochs만큼 학습시켰다. 이때 learning rate는 0.1로 초기화해주었고, 30, 60, 90번째 epoch마다 10씩 나누어주었다.

 

2.2 Experiment Results

 

ResNet-50, Inception-V3, MobileNet 이렇게 3가지 CNN에 대하여 평가를 수행하였다. 이때 데이터셋은 ISLVRC2012 (ImageNet)을 사용하였는데, ResNet-50의 성능이 약간 더 좋았다.

 

표 2. baseline에 대한 각 모델의 정확도

 

3. Efficient Training

 

최근 몇 년간, 하드웨어 중에서도 특히 GPU가 엄청난 속도로 발전해왔기에 더 낮은 numerical precision 및 large batch size를 training 단계에서 사용하더라도 trade-off 문제는 많이 줄게 되었다.

이 섹션에서는 low precision 및 large batch training을 사용하고도 모델 정확도를 유지하는 다양한 방법에 대해 알아볼 것이다. 이때 심지어 몇몇 방법은 정확도와 훈련 속도 모두를 개선할 수도 있다.

 

3.1 Large-batch training

 

우선 Mini-batch SGD는 여러 개의 Sample을 미니 배치로 묶어 병렬화를 증가시키고, 연산 비용을 감소시킨다. 이때, large batch size는 훈련 속도를 늦추는데, convex 문제에서는 배치 크기가 커질수록 수렴 속도가 감소한다. 이와 비슷한 결과가 신경망에서도 나타나는데 이는 즉, 동일한 epoch 하에서 더 큰 배치를 사용하는 경우가 더 작은 배치를 사용할 때보다 validation 정확도가 떨어진다는 것이다.

이제 이러한 문제를 해결하는 기법에 대해 알아본다.

 

Linear scaling learning rate

 

mini-batch SGD에서 각 배치마다 예제가 random 하게 선택되므로 기울기 강하 또한 random하게 수행된다. 이때, 배치 사이즈를 키우는 것은 기댓값에 별 영향을 못 끼치지만, 분산을 줄여주는데 이는 즉, large batch size는 기울기의 노이즈를 줄여주므로 더 높은 learning rate를 사용할 수 있음을 의미한다. batch size를 키우면서 learning rate를 키우는 것이 좋은데, 만약 batch size가 256이라면 learning rate를 0.1로 설정해준다. 더 큰 배치 사이즈를 사용하고 이것을 b라고 한다면, learning rate는 0.1 X b / 256으로 맞춰주어야 한다.

 

Learning rate warmup

 

학습 초반에는 모든 파라미터가 랜덤 값으로 초기화되기에 최종 값과는 그 거리가 멀다. 이때, 너무 큰 learning rate를 사용하면 수치적으로 불안정한 상태를 야기하기에 warm up 기법을 사용해야 한다. warm up 기법은 시작 시에는 매우 작은 learning rate를 사용하고, 훈련 과정이 안정화되었을 때 learning rate 초기값을 사용하는 방법이다. 만약 m 배치 동안 warm up을 수행하고, 초기 learning rate를 $ \eta $ 라고 한다면, i 배치에서의 learning rate는 $ i\eta /m $ 이 된다.

 

Zero $ \gamma $

 

ResNet은 여러 개의 residual block으로 구성되는데, 이때 마지막에는 BN (Batch-Normalization) layer를 사용한다. BN 레이어는 x를 정규화하여 $ \hat{x} $ 로 만들고, 여기에 Scale transformation을 적용하여 $ \gamma \hat{x} + \beta $ 로 변환하는데, 여기서 $ \gamma $ 와 \beta는 학습되는 파라미터로 보통 1과 0으로 초기값을 설정해준다.

이때, Zero $ \gamma $ 기법은 모든 BN layer에 대해 $ \gamma $ 를 0으로 설정하여 residual block들이 x영역의 값 없이 skip connection 결과만 흘려보내게끔 한다. 따라서 초기에 망이 짧아져 학습이 빨라지는 현상이 생긴다.

 

No bias decay

 

weight decay는 L2 regularization과 같은데, 이는 보통 weigh과 bias를 포함한 학습 가능한 모든 파라미터에 적용한다. 이는 보통 오버 피팅을 피하기 위해 regularization을 수행하려고 적용하는데, 오직 convolution 및 FC layer의 weight에만 적용해주는 것이 좋다. bias, $ \gamma $, $ \beta $를 포함한 다른 파라미터에는 적용하지 않는 것을 추천한다.

 

3.2 Low-precision training

 

신경망은 보통 FP32를 이용해 학습한다. 이는 모든 수가 FP32 형태로 저장된다는 것인데, Nvidia의 V100과 같이 최신 하드웨어는 작은 크기의 데이터 타입에서 더 빠른 연산을 지원한다. V100의 경우 FP32에서는 14 TELOPS인 반면, FP16에서는 100 TELOPS이며, 전체 훈련 속도는 2~3배나 증가한다.

 

FP16 과 FP32

 

이러한 장점에도 불구하고, FP16은 표현 범위가 작아져 기울기 강하에서 문제가 생기는 등 훈련 과정을 방해한다. 따라서 모든 파라미터 및 activation을 FP16으로 구현하고, 파라미터 업데이트 시 이를 FP32로 복사한 뒤 loss를 계산하는 mixed precision training 기법이 있다.

 

3.3 Experiment Results

 

결과적으로, ResNet-50에 1024 배치 사이즈 및 FP16을 이용하는 것은 1 epoch 당 13.3 min에서 4.4 min으로 학습 시간을 대폭 줄여주었다.

 

표 3. Efficient Training과 Baseline Training 비교

 

또한, large-batch training을 위한 모든 기법을 적용하고, 1024 배치 사이즈 및 FP16을 이용해 모델을 학습시키고 baseline 모델과 비교하였을 때 0.5% 정도 정확도가 오르는 것을 확인할 수 있었다고 한다.

 

 

표 4. ResNet-50에 Efficient Training을 묶어 사용한 결과

 

4. Model Tweaks

 

Model Tweak은 특정 conv layer의 stride를 바꾸는 등 다소 작은 개선점을 의미한다. 이는 연산의 복잡성에는 조금만 영향을 미치지만 모델의 정확도 개선에는 큰 효과를 불러일으킨다. model tweak의 효과를 조사하기 위해 ResNet을 이용할 것이다.

 

 

그림 1. ResNet-50 구조

 

ResNet은 input stem, 4개의 하위 stage, final output layer로 구성된다. 이때 input stem은 64 channel을 출력하는 7 x 7 Conv layer (stride = 2)를 사용하며, 그 뒤에 3 x 3 max pooling layer (stride = 2)가 온다. 이때 input stem은 input 폭과 높이를 4배만큼 줄이고, 채널 사이즈를 64로 늘린다.

 

 

Stage 2를 시작으로 각 stage는 downsampling block과 residual block들로 구성되며, 여기서 downsampling block 내부에는 Path A와 Path B가 있다. Path A와 Path B는 다음과 같이 구성된다.

 

Path A

ResNet-50의 Path A

 

1. 3개의 covolution layer가 있으며, 각각 1 x 1, 3 x 3, 1 x 1 사이즈이다.

2. 첫 번째 convolution layer의 stride 사이즈는 2로 입력값의 폭과 높이를 반씩 줄인다.

3. 마지막 convolution layer의 output channel은 이전의 두 convolution layer의 4배인데, 이를 bottleneck 구조라고 부른다.

 

Path B

ResNet-50의 Path B

1. 1 x 1 convolution layer가 있으며, stride 사이즈는 2로 input의 모양을 Path A의 output 모양과 같도록 맞춰준다.

2. 따라서 두 Path 간의 output을 합칠 수 있다.

 

residual block은 strdie 사이즈가 1인 convolution layer를 사용한다는 점만 제외하면 downsampling block과 거의 유사하다.

이때, 각 단계마다 residual block의 수를 다르게 하여 ResNet-50, ResNet-152 등 여러 ResNet 모델을 생성할 수 있다. 여기서 뒤에 붙는 수는 네트워크에서 사용하는 convolution layer의 수이다.

 

4.2 ResNet Tweaks

 

다음으로, ResNet의 두 가지 유명한 변형 모델에 대해 알아볼 것인데, 이들을 ResNet-B, ResNet-C라고 부른다. 여기서 새로운 변형 모델인 ResNet-D를 제안한다.

 

그림2. ResNet-50의 3가지 변형 모델

 

ResNet-B

 

ResNet-B는 ResNet의 downsampling block을 변경한 것으로, Torch 버전으로 구현되었는데 이후 다양한 곳에서도 채택되어 구현되었다. 기본 구조인 ResNet은 처음에 stride가 2인 1 x 1 conv layer를 사용해서 feature map의 3/4이 날아간다. 하지만 ResNet-B는 Path A의 처음 두 conv의 stride size를 바꾸어 사라지는 정보가 없도록 하였다.

 

ResNet-B

 

ResNet-C

 

ResNet-C는 본래 Inception-V2에서 제안된 방법을 적용하였으며, 이 방법은 많은 모델에서 활용 중이다. ResNet의 또 다른 문제점은 커널의 폭 또는 높이에 대해 convolution 연산량이 quadratic 하게 증가하는 것인데, 이때 7 x 7 conv는 3 x 3 conv 보다 연산량이 5.4배나 증가하였다. 따라서 input stem의 7 x 7 conv를 3개의 3 x 3 conv로 바꾸었는데 첫 번째와 두 번째 conv는 stride를 2로, 채널 사이즈는 32로 설정하였으며, 마지막 conv의 채널 사이즈는 64로 설정하였다.

 

ResNet-C

 

ResNet-D

 

ResNet-D는 ResNet-B에서 영감을 얻었다. Path A와 마찬가지로 Path B에서도 1 x 1 conv로 인해 정보의 3/4이 손실되는데, 이를 최소화하기 위해 stride가 2인 2 x 2 avergae pooling layer를 추가하였고, 원래 conv의 stride는 1로 변경하였다.

 

ResNet-D

4.3 Experiment Results

 

앞서 ResNet의 3가지 변형체에 대해 알아봤는데, 이번 섹션에서는 1024 배치 사이즈와 FP16 정확도를 가진 상태에서 3가지 변형을 적용하여 ResNet-50과 비교해보았다.

ResNet-B는 ResNet-50과 비교하였을 때 downsampling blocks의 Path A에서 더 많은 정보를 얻었으며 validation 정확도를 약 0.5%가량 개선하였다.

ResNet-C는 7 x 7 conv를 3개의 3 x 3 conv로 바꾸어 이전보다 0.2%가량 상승하였다.

ResNet-D의 경우, downsampling block의 Path B에서 더 많은 정보를 얻어 validation 정확도를 약 0.3%가량 추가로 개선하였다.

결과적으로, ResNet-D는 ResNet-50과 비교하였을 때 약 1% 가량 정확도가 상승하였다.

 

이때 ResNet-D의 연산량이 가장 많았지만, 이는 ResNet-50 보다 단지 15% 정도만 높았으며, 실제로 ResNet-50-D는 ResNet-50과 비교하였을때 3% 정도만 느렸다.

 

5. Training Refinements

5.1 Cosine Learning Rate Decay

 

learning rate 조정은 학습에 있어 중요한 요소이다. learning rate decay 기법 중 널리 쓰이는 방법으로 exponentially decaying이 있는데, 이는 30 epochs마다 0.1씩 감소시키는 것이다.

또한 Step decay라는 것도 있으며 이는 2 epochs마다 0.94씩 감소시킨다.

 

그림 3. warm-up이 적용된 learning rate schedule (cosine dcay, step decay)

 

추가로, Cosine annealing이라는 기법이 있다. 이는 learning rate의 초기값을 0으로 두고 여기에 cos 함수를 적용하여 그다음 배치의 learning rate를 구하는 방법인데 이를 Cosine decay라고 부른다. 전체 배치 수를 T라 할 때, t batch에서 learning rate $ \eta_t $ 는 위 식을 이용해 구할 수 있다. 여기서 $ \eta $ 는 learning rate 초기값이다.

 

 

Cosine decay는 처음에는 천천히 감소하고, 중간에는 거의 선형적으로 감소하는데 마지막에는 다시 천천히 감소하는 특징을 가지고 있다. 이를 Step decay와 비교했을 때 Cosine decay는 처음부터 learning rate를 감소시킨다는 점과 이후에 Step decay에서는 learning rate가 10배나 줄었을 때쯤 Cosine decay는 learning rate의 값이 상당히 크기에 잠재적으로 학습 과정을 개선한다는 점에서 다르다.

 

5.2 Label Smoothing

 

label smoothing은 출력이 정확하게 0과 1로 나뉘는 One-Hot Encoding에서 0.25, 0.75처럼 좀 더 완화된 값을 가지도록 출력 label의 값을 바꾸는 것이다. 그럼 어떻게 이를 구현할 수 있을까?

이미지 분류 모델의 마지막 layer는 FC layer인데 이 값을 이미지의 label 개수인 K와 동일하게 설정한다. 그리고 class i에 대한 예측 Score인 $ z_i $ 를 사용하여 예측 확률을 구하기 위해 여기에 softmax 연산을 적용하여 정규화할 수 있다. 이때 softmax가 적용된 결과를 $ q $ 라 하며, class i에 대한 확률을 $ q_i $ 라 지칭한다. 여기서 $ q_i > 0 $ 이고 $ \Sigma_{i=1}^{K} q_i = 1 $ 을 만족한다.

 

Hard label 과 label smoothing을 거친 Soft label

 

한편, negative cross entropy를 loss 함수로 사용하고, 예측 분포와 정답 분포를 비슷하게 하기 위해 모델의 파라미터를 업데이트한다. 따라서 $ l(p,q) = -logp_y = -z_y + log(\Sigma_{i=1}^K exp(z_i)) $ 가 되는데, 이때 최적의 해는 $ z_y^* $ 가 무한대이고, 나머지 값을 작게 유지하는 것이다. 하지만 이 경우 출력 값들이 매우 distintive 해야 하는 것을 의미하고, 이는 오버 피팅을 야기할 수 있다.

 

 

이러한 격차를 줄이기 위해 Inception-V2에서는 label smoothing을 제안하였다. 이는 정답 확률을 다음과 같이 재정의하여 다소 부드러운 값으로 완화시켜주는 것 (작은 값은 크게, 큰 값은 작게)인데 여기서 $ \epsilon $ 은 작은 상수이다. 그럼 최적의 해가 위 식과 같이 바뀌게 되고, 여기서 $ \alpha $ 는 임의의 실수이다. 이는 FC layer로부터 유한하고 Smooth 한 출력 값을 출력하게 하고, 일반화 효과를 가져온다.

 

그림 4. label smoothing에 따른 Gap과 Density 분포

 

위 그래프 상에서는 $ \epsilon $이 0일 때 gap은 무한대가 되고, $ \epsilon $ 이 증가함에 따라 gap이 감소한다. 또한 K가 1,000이고 $ \epsilon $이 0.1일 때 gap은 9.1에 수렴한다.

 

5.3 Knowledge Distillation

 

Knowledge Distillation은 Student model이라 불리는 현재 모델이 학습하는 것을 돕기 위해 Teacher model을 이용하는 방법이다.

Teacher model은 높은 정확도로 pre-trained 된 모델로서 이를 복제함으로써 Student model이 상대적으로 적은 파라미터를 가지고 있더라도 더 높은 정확도를 가질 수 있게 한다. ResNet-152를 Teacher model로 사용하여 ResNet-50을 학습시키는 것을 예로 들 수 있다.

 

 

학습 시, Teacher model과 Student model 간의 softmax output 차이를 줄이기 위해 distillation loss를 더해준다. p가 정답일 확률의 분포이고, z와 r이 각각 Student model과 Teacher model의 FC layer라 할 때, distillation loss는 위 식과 같이 표현할 수 있다. 여기서 좌항은 Student model의 loss이고, 우항은 Teacher model과 Student model 간 분류 결과 차이를 의미한다. 또한, T는 temperature 하이퍼 파라미터로 softmax output을 부드럽게 완화시켜주는데 (작은 것은 크게, 큰 것은 작게) 이는 soft label의 사용 이점을 최대화한다.

 

Distillation loss 계산 과정

 

5.4 Mixup Training

 

mixup 기법은 두 이미지 $ (x_i, y_i) $ 와 $ (x_j, y_j) $ 를 랜덤 하게 샘플링하여 이 두 이미지에 weighted linear interpolation을 적용해 새로운 이미지를 만드는 것 (쉽게 말해 두 이미지를 겹치는 것)이다. 여기서 $ \lambda $ 는 $ \lambda \in [0, 1] $ 이고 $ Beta(\alpha, \alpha) $ 분포로부터 랜덤 하게 추출된 상수이다. 또한 mixup training에서는 새로운 예제인 $ (\hat{x}, \hat{y}) $ 만을 사용한다.

 

개와 고양이 이미지의 Mixup

 

5.5 Experiment Results

 

 

총 4가지의 기법에 대하여 실험을 수행하였다.

 

1. label smoothing 기법에서 $ \epsilon = 0.1 $ 로 설정하였다.

2. model distillation 기법에서 T = 20으로 설정하였으며, Teacher model로는 label smoothing이 적용된 ResNet-152-D 모델을 사용하였다.

3. cosine decay 기법을 Teacher model에 적용하였다.

4. mixup training 기법에서는 $ Beta $ 분포 중 $ \alpha = 0.2 $로 두었고, epoch 수를 120에서 200으로 늘렸다. (mixup 된 이미지는 더 긴 학습시간이 필요하기 때문)

 

 

 

ResNet 모델 및 ImageNet 데이터셋뿐만 아니라 다른 모델과 데이터셋에 대해서도 실험을 진행하였는데, 결과적으로 Distillation 작업은 ResNet에서는 잘 수행되었지만, Inception-V3와 MobileNet에서는 그다지 좋은 결과를 얻지 못하였다. 이는 Teacher model이 Student model의 가족이 아니기 때문인 것으로 생각된다. 즉, 예측 결과에 있어 서로 다른 분포를 가지고 있어서 모델에 부정적인 영향을 가져온 것으로 보인다.

 

6. Transfer Learning

 

Transfer learning은 훈련된 이미지 분류 모델 기법의 주요한 down-streaming 사용 사례 중 하나이다. 앞서 살펴본 내용들이 Transfer learning에도 적용 가능한지 알아볼 것인데, 특히 Object Detection과 Semantic Segmentation에 대하여 알아볼 것이다.

 

6.1 Object Detection

 

Object Detection의 목표는 이미지의 객체에 boundig box를 위치시키는 것이다. 여기서 데이터 셋으로 PASCAL VOC를 사용하였으며, Faster-RCNN의 base model인 VGG-19를 앞서 살펴본 다양한 pretained model로 바꾸어 실험을 하였는데, 높은 validation 정확도를 가지는 base model이 더 높은 mAP가 나오게끔 하는 것을 확인할 수 있었다.

 

6.2 Semantic Segmentation

 

Semantic Segmentation은 input image의 모든 픽셀에 대해 category를 예측한다. 여기서는 FCN (Fully Convolutional Network)과 ADE20K 데이터 셋을 가지고 실험하였다. 그 결과 Object Detection과는 대조적으로, Cosine learning rate schedule은 정확도 향상에 큰 영향을 끼쳤지만, 다른 개선점들은 좋지 못한 성능을 보였다.

이는 Semantic Segmentation이 pixel 단위로 예측하기 때문인 것으로 보인다. label smoothing, distillation, mixup이 적용된 모델은 label을 부드럽게 완화시키고 pixel 단위의 정보를 흐리게 (blur) 만들어 전반적인 픽셀 단위의 정확도를 감소시킨 것으로 보인다.

 

7. Conclusion

 

이 논문에서는 다양한 꿀팁들을 실험하여 그 결과를 정리하였는데, 각각의 꿀팁들을 적용하였을 때 정확도가 개선되는 것을 확인할 수 있었으며 무엇보다도 이들을 묶어 사용하였을 때 더 높은 성능을 얻을 수 있었다. 추가로, 이러한 개선된 모델들은 transfer learning에 사용되어 Object Detection과 Semantic Segmentation에서도 좋은 성능을 얻을 수 있다는 점에서 의미가 있다고 주장한다.

 

참고 문헌

1. arxiv.org/abs/1812.01187

2. hoya012.github.io/blog/Bag-of-Tricks-for-Image-Classification-with-Convolutional-Neural-Networks-Review/

3. norman3.github.io/papers/docs/bag_of_tricks_for_image_classification.html

4. blog.si-analytics.ai/21

5. wideops.com/bfloat16-the-secret-to-high-performance-on-cloud-tpus/

6. intellabs.github.io/distiller/knowledge_distillation.html

728x90