Image processing/논문 Review

[2018] Bag of Tricks for Image Classification with Convolutional Neural Networks(Part 1)

유니디니 2020. 8. 16. 17:40
728x90
반응형

Written by Tong He, Zhi Zhang, Hang Zhang, Zhongyue Zhang Junyuan Xie, Mu Li

[Abstract]

최근 image classification 분야에서는 Data augmentations and optimization methods와 같은 학습 성능 개선 방안들이 발전하고 있다. 본 논문에서는 성능을 개선시키는 다양한 기법들에 대한 시험을 수행하였고, 최종 모델 정확도에 미치는 영향을 경험적으로 평가하였다. 이러한 개선사항들을 통해 ImageNet에서 ResNet-50의 Top-1 검증 정확도를 75.3%에서 79.29%로 높였다. 또한 Image Segmentation 정확도가 향상되면, 객체 탐지 및 Semantic segmentation과 같은 다른 응용분야에서 Transfer learning performance이 향상된다는 것을 보여줄 것으로 기대된다.

 

[Introduction]

 

2012년 AlexNet이후로 VGG, ResNet, DenseNet등 여러 네트워크들이 모델 정확도를 높이면서 개발되어 오고 있다. 그러나, 정확도를 높이는 방법으로는 모델의 구조 뿐만 아니라 손실함수, 데이터 전처리, 최적화 방법등 여러가지 방법들이 존재한다. 이러한 방법들은 상대적으로 덜 관심을 받아왔으며, 본논문에서는 모델 성능을 개선시킬 수 있는 "tricks"들에 대해 다루고자 한다. 

 

몇몇 tricks은 결합되어 모델의 정확도를 높여왔음을 보여준다. Table 1은 ImageNet에서 Resnet-50을 기준으로 서로 비교하였고, top-1 Validation accuracy가 75.3%에서 79.29%로 향상되었음을 보여주고 있다. 이 방법은 SE-ResNeXt-50 보다 향상된 성능을 보였으며 실험을 통해 Inception V3, MobileNet과 Place365데이터 셋 등에서도 일반적으로 적용됨을 확인하였다. 

 

[Efficient Training]

 

Large-batch training

 

Mini-batch SGD는 여러 샘플을 미니 배치로 그룹화 하여 병렬 처리 속도를 높이고, Communication Costs를 줄인다. 그러나, 큰 배치를 사용하면 학습 진행속도(Training Progress)가 느려질 수 있다. 이러한 문제는 Convex problem이라고 불리며, 같은 에폭을 기준으로 배치 크기를 증가시켜면 더 작은 배치 크기로 학습된 모델에 비해 검증 정확도가 저하된 모델이 된다. [https://arxiv.org/pdf/1711.00489.pdf]

 

다수의 연구에서 이러한 문제를 해결하기 위해 heuristics한 방법을 다루고 있으며, 배치크기를 증가시키는데 도움이 되는 4가지 방법을 살펴보고자 한다.

 

- Linear scaling learning rate : mini-batch SGD에서 Gradient descending는 각 배치에서 데이터가 무작위로 선택되며, 배치 크기를 늘리면 확률적 기울기의 기대치는 변경되지 않지만 분산이 줄어들게 된다. 즉, 배치크기가 증가하면 gradient 노이즈가 줄어들기 때문에 gradient 방향의 반대 방향으로 더 큰 진전을 이루기 위해 학습률을 높일 수 있습니다. He et al은 배치 크기 256의 초기 학습률로 0.1을 선택하고, 더 큰 배치 크기 b로 변경하면 초기 학습률을 0.1*b/256으로 늘립니다.

 

- Learning rate warmup : 학습을 시작할 때, 모든 매개변수는 무작위 값이므로 최종 파라미터 값과 큰 차이가 있다. 너무 큰 학습률을 사용하면 수치가 불안정해질수 있기때문에, 처음에 작은 학습률을 사용한 다음 학습이 안정기에 들어서면 초기 학습률로 다시 전환한다. 워밍업을 위해, 처음 m개의 배치를 사용하고 초기 학습률이 n, 배치 i에서 i*n/m으로 설정된다.

 

- Zero : Resnet 네트워크는 다수의 residual block으로 구성되어 있으며, 각 block은 convolutional layer들로 이루어져 있다. 입력 x가 주어지면 block(x)가 블록의 마지막 계층에 대한 출력이라고 가정하면 x+block(x)를 출력한다. r*x+b로 정의될수 있으며, r과 b는 학습할 수 있는 변수이다. zero 방법은 잔여 블록의 끝에 있는 모든 BN 레이어에 대해 r=0으로 초기화한다. 따라서 모든 잔여 블록은 입력값만 반환하게 되고, layer의 수가 적고 초기 단계에서 학습하기 쉬운 네트워크를 모방한다.

 

- No bias decay : Learning decay는 종종 가중치와 편향을 포함하여 학습 가능한 모든 매개변수에 적용된다. 그러나 과적합을 피하기 위해 가중치에만 정규화를 진행하는 것이 좋다. BN레이어의 biases와 r및 b를 포함한 다른 매개변수는 정규화 되지 않은 상태로 유지하게 된다. LARS는 계층 별 적응형 학습률을 제공하며 매우 큰 배치크기에서 효과적이라고 보고 되어있습니다.[https://openreview.net/forum?id=rJ4uaX2aW]

 

[Model Tweaks]

이러한 조정은 계산 복잡도에 크게 영향을 주지 않지만, 모델 정확도에 무시할 수 없는 영향을 미칠수 있다.

 

[ResNet Tweaks]

ResNet을 기준으로 실험하였으며, 새로운 tweak ResNet-D를 후에 소개하고자 한다. 

 

ResNet-B : Resnet의 Downsampling block을 변화시켰다. 그림 1의 path A의 경우, stride가 2인 커널 크기 1x1을 사용하기 때문에 입력 특징 맵의 4분의 3을 무시하게 된다. 그러나, Resnet-B는 다음과 같이 path A에서 처음 두 컨볼루션의 stride 크기를 변환하였다. 따라서, 어떤 정보도 무시되지 않으며 두번째 컨볼루션의 커널 크기는 3x3이므로 path A의 출력 모양은 변경되지 않았다.

 

ResNet-C : Inception과 같은 형태를 띄고있으며, SENet, PSPNet, DeepLabV3 그리고 ShuffleNetV2에서 유사하게 구현되어있다. 7x7 컨볼루션은 3x3 컨볼루션에 비해 연산량이 5.4배 이상 더 들기 때문에 그림 2의b에서 처럼 input stem에서 3x3 컨볼루션으로 대체하였다. 

 

ResNet-D : Resnet-B에서 착안하여 다운 샘플링 블록의 path B에 있는 1x1 컨볼루션도 입력 특성 맵의 3/4을 무시한다는 점에 유의하고, 정보가 무시되지 않도록 수정하려 한다. 경험상, stride가 1로 변경된 컨볼루션 전에 스트라이드가 2인 2x2 average pooling을 추가하면 실제로 잘 작동하며 계산비용에 크게 영향을 주지 않는다.(그림 2의 c)

 

[Experiment]

 

실험 결과는 다음과 같으며, 기존 ResNet에 비해 Resnet-D는 정확도가 1%정도 향상하였고, 학습 속도가 3%정도 늦는 것을 발견하였다. 

 

Resnet-B는 Downsampling block을 향상시켰고, 기존 방법에 비해 대략 0.5% 향상하였다.

Resnet-C는 Resnet-B에서 7x7 컨볼루션을 3x3으로 변화하였고, 0.2% 향상하였다.

Resnet-D는 Downsampling block의 Stride를 변화시켜 0.3%를 향상시켰다.

반응형