[논문 리뷰] EfficientNet

2022.02.27 23:13 10,562 조회

이번에는 EfficientNet(EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks)에 대해 정리해보려고 합니다. 공부하는 학생인 만큼 틀린 점이 있을 수 있으니 있다면 지적이나 피드백 부탁드립니다. 본 포스팅은 데이콘 서포터즈 "데이크루" 1기 활동의 일환입니다.  

 

유명한 네트워크 구조이자 분류문제를 풀 때 베이스로 잡고 푸는 것이 일반적인 EfficientNet입니다. 2019년도 5월에 발표된 논문이지만 여전히 많이 언급되고 있죠. (벌써 3년 다 되가네요....?)

 

Abstract

CNN이 한정된 자원 내에서 발전했는데 사용할 수 있는 범위 안에서 더 높은 정확도를 달성하기 위해 크기를 키워가는 방향으로 발전되어왔습니다. 본 논문에서는 model scaling에 대해 더 분석해 depth, width, resolution 사이의 관계를 파악해 더 높은 성능을 달성하도록 하였습니다. 높은 효율을 보이도록 하는 새로운 scaling 방법인 “compound coefficient”를 제안하고 MobileNet과 ResNet에 적용해 효율성을 살펴보았습니다. 또한, NAS를 사용해 baseline network를 설계하고 이를 scale up해 EfficientNet을 설계했습니다. EfficientNet-B7은 ImageNet Dataset에 대해 top1 acc 84.3%를 달성했습니다.

 

Introduction

본 논문에서는 Network 확장을 어떻게 해야 효율적일지에 대해 연구를 했고 기존 Network보다 파라미터 대비 정확도가 높은 효율적인 Network를 제안합니다. 그림에서 볼 수 있듯 top1 acc은 타 모델 대비 높지만 파라미터 수는 적은 것을 확인할 수 있다. Network의 width, depth, resolution들 사이의 균형을 맞추는 것이 중요하다고 하며, 균형을 맞추는 상수비를 구할 수 있다고 합니다. B0 ~ B7까지 있는데 이는 모델 사이즈를 나타내고 2^n배 큰 모델을 디자인하고 싶다면 depth를 a^n, width를 b^n, resolution을 c^n배 하여 grid search를 통해 a,b,c를 찾는다고 합니다.

Model scaling 방법들이고 오른쪽 e가 논문에서 제안한 compound scaling 방법입니다. 이전까지 있던 scaling 방법을 잘 조합해서 모델을 확장한 것이라고 보면 될 것 같습니다.

 

Compound Model Scaling

Scaling Dimensions

논문의 이전 내용에서 언급된 최적화 문제의 주요 어려움은 d, w, r(depth, width, resolution)의 최적 값이 서로 영향을 받아 서로 다른 리소스 제약 조건 하에서 값이 변화하는 것입니다. 예를 들어 GPU가 좋을 때는 모델의 깊이나, input image size나 이런 것들이 커도 되지만 GPU가 안 좋으면 제약이 생기는 것이죠. 이런 문제점 때문에 기존에 d, w, r중 하나를 골라 CNN을 확장한 것입니다.

 

Depth를 늘리는 방법(layer 늘리기)

다른 논문에서도 많이 언급된 내용이지만 간단히 정리해보면 깊은 구조는 더 좋은 Feature map을 생성할 수 있습니다. 하지만, 깊어질수록 기울기 소실 문제, Vanishing Gradient가 생겨 학습이 어려워집니다. 이를 해결하기 위해 등장한 대표적인 예가 ResNet입니다. skip connection과 batch norm을 적용한 것입니다. 하지만, 상당히 많은 layer를 추가하면 정확도가 비슷해졌습니다. (ResNet101, ResNet 1000)


Width를 늘리는 방법(channel 증가)

Width가 증가하고 Depth가 깊지 않으면 high level feature를 얻는 것이 어려웠다는 문제점이 있습니다.

 

Resolution을 늘리는 방법(이미지 크기? 해상도 증가)

Input image size가 클수록 이미지의 pattern을 잘 얻을 수 있고 이전 입력 이미지는 224*224였다면 논문 기준으로 600*600 크기도 학습이 가능하다고 합니다. 이렇게 크기를 키우면 정확도가 높아진다고 합니다.

위 그림은 앞서 설명한 d, w, r을 증가했을 때의 성능 비교 표입니다. 왼쪽에서부터 Width, Depth, Resolution 순이며 w를 증가시킬 때는 나머지 두 d, r은 고정시켰으며 d를 비교할 때는 w, r를 고정, r을 비교할 때는 d, w를 고정하고 r만 증가시키는 방향으로 진행했습니다. 그 결과 각각을 증가시킬 때 성능이 향상되는 것을 볼 수 있습니다. 하지만, 값이 커질수록 성능 향상 폭은 작아지는 것을 확인할 수 있습니다.


Compound Scaling

같은 FLOPS를 보여줌에도 정확도가 크게 1.5%까지 차이나고 있습니다. 초록과 노란색을 파란색과 비교하면 depth를 키우는 것보다 resolution을 키우는 것이 정확도가 더 좋고 빨간색을 보면 2가지 값 모두 키운 것이 가장 좋아보임을 알 수 있습니다. Input image가 커지면 이에 따라 receptive field도 늘려줘야하고 더 커진 fine grained pattern을 학습하기 위해 더 많은 channel이 필요하다고 합니다. 그래서 제안한 compound scaling이 드디어 나옵니다.

compound coefficient φ(논문 기호를 복사하면 이렇게 나오네요..?)를 사용해 위 수식처럼 scaling합니다. 이 때 알파, 베타, 감마는 small grid search에 의해 결정되는 상수(고정)입니다. Compound coefficient는 사용자의 GPU 성능에 따라 조절할 수 있는 파라미터라고 합니다. Depth를 2배하면 FLOPS가 2배 증가하지만 width나 resolution은 2배 증가하면 4배로 증가해 total FLOPS를 α · β^2 · γ^2 ≈ 2로 설정합니다. 이 덕분에 어떤 compound coefficient를 설정해도 total FLOPS가 2^ φ만큼만 증가한다고 합니다.

 

EfficientNet Architecture

Model Scaling은 layer Operator가 고정되어 있어 Baseline Network가 중요하다고 합니다. 앞서 언급했던 것처럼 기존 CNN에서도 적용해볼 것이지만 효과를 더 극대화하기 위해 새로운 network를 설계했고 이를 EfficientNet이라 칭합니다. NAS로 정확도 및 FLOPS를 모두 챙기도록 최적화했고, 가장 기본이 되는 네트워크를 EfficientNet-B0로 부릅니다. 자세한 구조는 아래와 같습니다.

이후 B0로부터 시작하는데 compound coefficient를 1로 고정해 최적의 알파, 베타, 감마를 구하고 이를 고정해 서로 다른 compound coefficient로 scaling을 진행합니다. 이렇게 B1 ~ B7를 만든다고 합니다.

 


 

Experiment

전체적으로 우수한 성능을 보이며 기존 SOTA와 동일 성능이지만 파라미터가 상당히 감소했음을 확인할 수 있습니다.

MobileNet과 ResNet에 compound scaling을 적용한 것인데 기존보다 조금 상승함을 볼 수 있습니다. 이를 통해 기본으로 잡는 네트워크가 중요함을 알 수 있습니다.


Conclusion

기존 CNN scaling방법이 depth, width, resolution을 모두 고려하지 않았고 이는 정확도나 효율성을 챙기지 못 했습니다. 이 문제를 해결하고자 3가지 모두 효율적으로 고려한 compound scaling을 제안하고 성능비교를 했고 SOTA와 비슷한 성능을 내면서도 파라미터 수와 FLOPS를 감소시켰습니다.

 

참고자료

[1] https://arxiv.org/pdf/1905.11946.pdf

[2] https://hoya012.github.io/blog/EfficientNet-review

[3] https://deep-learning-study.tistory.com/552