본문 바로가기

갈아먹는 Image Classification [2] Fixing the train-test resolution discrepancy

들어가며

이번에 살펴볼 논문은 이미지넷 리더보드에서 현재 1위를 기록 중인 FixEfficientNet의 핵심이 되는 FixRes 기법을 소개한 Fixing the train-test resolution discrepancy입니다. 해당 논문은 신경망의 아키텍쳐를 새롭게 제시한 것이 아니라, 신경망을 학습시키는 방법을 제시합니다.

 

저자들이 주목한 것은 학습 시에 신경망이 바라보는 물체의 크기와 테스트 시에 바라보는 물체의 크기가 다르기 때문에 학습 데이터의 분포와 테스트 데이터의 분포 사이에 불일치가 일어난다는 것입니다. 말만 들어도 어렵죠?? ㅎㅎ 사실 NIPS 페이퍼이기도 하고, 내용 자체가 난해해서 저도 완벽하게 이해하지는 못했습니다. 제가 이해한 한도 내에서 리뷰를 진행해보도록 하겠습니다.

FixEfficientNet

FixRes 기법을 살펴보기 이전에 이것이 얼마나 강력한 지를 알아보겠습니다. 아래 도표에서 앞에 Fix라는 접두사가 붙은 신경망 아키텍쳐들은 모두 기존의 아키텍쳐를 유지한 채, FixRes 기법을 적용하여 학습을 시킨 것들입니다.

가장 성능이 높은 모델은 기존 EfficientNet에 FixRes 기법을 적용한 모델입니다. 이 외에도 FixPNASNet, FixResNet-50-sws, FixResNet-50 등 기존 아키텍쳐들에 FixRes 기법을 적용하여 학습시킨 모델들의 성능이 대폭 향상된 것을 볼 수 있습니다. 대체 FixRes 기법이 무엇이길래 이러한 마법같은 효과를 내어줄까요?

Region Selection in Train and Test Time

FixRes 기법의 핵심은 신경망이 Train 기간에 학습하는 물체의 크기와 Test 기간에 바라보는 물체의 크기가 다르다는 것입니다. 흔히 Image Classification을 학습시킬 때 Train 기간에는 이미지에서 랜덤하게 사각형 박스를 선택하고, 이를 crop하여 224x224 크기로 키워준 뒤 학습을 시킵니다. 이는 위 도표에서 input images - train 에서 흰색 말에 작은 박스를 치고 이를 224x224 크기로 키운 것에 잘 표현되어 있습니다.

 

다음으로 test 시점에서는 입력 이미지의 중심점을 기준으로 224x224 크기로 Crop 하여 신경망을 통과시킵니다. 이는 input images - test에 잘표현되어 있습니다. standard pre-processing으로 생성한 224x224 크기의 두 이미지 내의 흰색 말의 크기가 서로 다릅니다. 바로 이러한 현상 때문에 Train 데이터의 분포와 Test 데이터의 분포 사이에 불일치가 발생하게 됩니다. 이것이 논문 제목에 나온 train-test resolution discrepancy에 해당합니다.

 

저자들은 이러한 불일치 현상을 해결하고자 두 가지 방안을 제시합니다. 하나는 Train시에 Crop한 이미지의 해상도를 낮추는 것입니다. 다른 하나는 Test 시에 Crop한 이미지의 해상도를 키우는 것입니다. 이 두 가지 기법들을 다양한 실험들을 통해서 검증하였고, 최종적으로 Train 시에는 475x475, Test 시에는 600x600 크기의 해상도를 학습한 FixEfficientNet 모델이 SOTA를 찍게 됩니다.

Distribution of the areas of the RoCs

RoC란 Region of Classification의 줄임말로 전체 이미지에서 실제 신경망을 통과시키는 영역을 가치킵니다. 위 도표는 Train 시점에는 random crop, Test 시점에는 center crop을 적용했을때 crop된 이미지가 전체 이미지에서 차지하는 비중이 얼마나 되는지를 나타냅니다. 보시면 Train 시점에는 20%대부터 60%대까지 고르게 분포하였으나 Test 시점에는 60%대에 집중적으로 분포하는 것을 확인할 수 있습니다. 이를 통해서 기존의 이미지 전처리 방식에 문제가 있음을 알 수 있습니다.

 

이러한 현상을 극복하기 위해서 저자들은 Train 이미지와 Test 이미지 사이의 해상도를 다르게하는 학습하는 방법을 제안합니다. 하지만 Classification을 수행하기 위해서는 입력 이미지를 컨볼루션 레이어들에 통과시킨 후, average pooling과 Fully Connected Layer를 통과해야합니다. Train과 Test 시에 입력되는 이미지의 해상도가 다르다면 문제가 되겠죠? 

Adaptation via fine-tuning

저자들은 find-tuning을 통해서 이러한 해상도 차이 문제를 해결할 수 있다고 제시합니다. 예를들어 224x224 크기의 이미지로 Train을 120 에포크 진행합니다. 그 다음 average pooling 레이어 뒷 단의 fully connected layer를 Test 시점의 이미지 해상도에 맞게끔 갈아끼운 뒤, 60 에포크 정도 fine-tuning을 진행합니다. 이렇게 학습시킨 모델은 train 시점과 test 시점에 비슷한 크기의 물체를 바라보도록 학습시킬 수 있습니다.

Experiments

놀랍도록 단순한 이 기법의 효과 또한 놀랍습니다. (역시 대단한 발견의 개념은 심플한 것 같습니다.) 

위 도표는 Train 시점의 이미지 해상도와 Test 시점의 이미지 해상도의 변화를 주어가며 ResNet-50 아키텍쳐를 학습시킨 뒤, top1 error를 측정한 것입니다. 실험 결과를 보면 Train 시점의 이미지 해상도보다 Test 시점의 해상도를 살짝 크게 설정한 모델들이 가장 높은 성능을 내는 것을 확인 할 수 있습니다.

현재 State of the Art를 기록한 FixEfficientNet의 실험 결과입니다. 해당 아키텍쳐는 기존에 SOTA 였던 pretrained Noisy Student 모델을 그대로 가져와서 사용합니다. (Noisy Student 모델에 생소하신 분들은 이전 포스팅을 참고해주세요) 여기에 이미지넷 데이터와 pseudo labeled 데이터 셋을 합쳐서 FixRes 기법을 적용하여 학습을 진행하였으며, 그 결과 top1 정확도를 88.5까지 끌어올렸습니다. 이 때 Train 시 이미지 해상도는 475, Test시 이미지 해상도는 600입니다. 

마치며

이상 Image Classification 테스크의 성능을 끌어올린 FixRes 기법을 살펴보았습니다. 딥 러닝을 활용한 Image Classification 분야가 떠오른지 벌써 8년이 다되어가는 것 같은데 이러한 심플한 발견들이 계속 등장하는 것이 놀랍습니다. 그만큼 연구의 세계는 끝이 없나봐요 ㅎㅎ

 

사실 리뷰에 생략된 수학적, 통계적 증명 과정이 상당히 많습니다. 개인적으로도 이해하는데 한계가 있었고, 깊이 있는 리뷰를 작성하지 못해서 아쉬움이 남습니다. 리뷰에 생략되어 있는 과정들이 궁금하신 분들은 원문을 읽어보시길 권합니다.

 

감사합니다.

Reference

[1] H. Touvron et al, Fixing the train-test resolution discrepancy, NIPS, 2019

[2] H. Touvron et al, Fixing the train-test resolution discrepancy: FixEfficientNet, arXiv 2003.08237