Efficient net 은 2019 CVPR에 발표된 MnasNet: Platform-Aware Neural Architecture Search for Mobile
의 저자인 Mingxing Tan*과 *Quoc V. Le 가 쓴 논문이며 Image Classification 타겟의 굉장히 성능이 좋은 Model인 EfficientNet을 제안하였습니다.
Intorduction
ConvNet의 성능을 올리기 위해 scaling up
을 시도하는 것은 일반적은 일 입니다.
잘 알려진 ResNet은 ResNet-18 부터 ResNet-200 까지 망의 깊이(depth)를 늘려 성능 향상을 이루어 냈습니다.scaling up
하는 방식은 크게 3가지가 있습니다.
- 신경망의 depth(깊이)를 늘리는 것
- channel 의 width(넓이)를 늘리는 것
- 입력 이미지의 resolution(해상도)을 올리는 것
Efficient Net은 이 세가지 방식의 최적의 조합을 찾아 성능 향상을 이뤄 냈습니다.
아래 그림을 살펴보면, 매우 적은 Parameter 수로 엄청난 성능을 낼 수 있음을 알 수 있습니다.
Model Scaling
위의 사진은 이전에 언급했던 scalig up
의 예시를 보여주고 있습니다.
맨 왼쪽 부터 channel의 개수를(filter의 개수를) 늘리는 width scaling와 layer의 개수를 늘리는 depth scaling과 input image의 해상도를 높이는 resolution scaling입니다.
ResNet이 depth scaling을 통해 모델의 크기를 조절하는 대표적인 모델이며 MoblieNet, ShuffleNet등이 width scaling을 통해 모델의 크기를 조절하는 대표적인 모델입니다.
하지만 기존 방식들에서는 위의 3가지 scaling을 동시에 고려하는 경우가 거의 없었습니다.
또한 3가지 scaling 기법 중 어떤 기법을 사용할지에 대해 마땅한 가이드라인이 존재하지 않고, 무작정 3가지 scaling을 키운다고해서 정확도가 계속 오르지 않기 때문 실험을 해야하는 어려움이 존재하였습니다.
EfficientNet에서는 실제로 3가지 scaling 기법에 대해 각 scaling 의 factor를 키워가며 정확도의 변화를 측정하였습니다.
위의 그림을 보시면 width scaling
, depth scaling
은 비교적 이른 시점에서 정확도가 상승하지 않으며, 그나마 resolution scaling
이 키우면 키울수록 정확도가 잘 오르는 것을 확인할 수 있습니다.
이번에는 비슷한 방식으로 depth(1.0,2.0)와 resolution(1.0,1.3)을 고정해두고 width만 조절하며 정확도의 변화를 측정하였습니다.
같은 *FLOPS 임에도 불구하고 크게는 1.5%까지 정확도가 차이나는 것을 알 수 있습니다.
초록색 선과 노란색 선을 비교하면 depth를 키우는 것 보다는 resolution을 키우는 것이 정확도가 좋음을 알 수 있고, 빨간색 선을 보면 1가지, 혹은 2가지 scaling factor만 키워주는 것 보다 3가지 scaling factor를 동시에 키워 주는 것이 가장 성능이 좋음을 실험적으로 보여주고 있습니다.
직관적으로 생각해보면 input image가 커지면(해상도가 높아지면), 이미지를 처리하는 신경망의 깊이는 깊어져야하고, 더 많은 chaanel이 필요하다고 생각됩니다. 즉 모델의 크기를 키워줄 때 위의 3가지 요소들을 동시에 고려하는 것이 옳다고 이해할 수 있습니다. 이제 어떻게 3 가지 요소들을 고렿라 것인지에 대해 알아 보겠습니다.
*FLOPS : 컴퓨터의 성능을 수치로 나타낼 때 주로 사용되는 단위
Compoung Scaling
3가지 scaling factor의 최적의 비율을 찾아서 실제 모델에 적용 후 다른 모델들과 성능일 비교하는 과정을 알아 보겠습니다. 우선 EfficientNet 논문 에서는 모델(F)를 고정하고 depth(d), width(w), resolution(r) 3가지를 조절하는 방법을 제안하고 있는데, 이때 고정하는 모델(F)를 좋은 모델로 선정하는 것이 굉장히 중요합니다. 그 이유는 아무리 scaling factor를 조절해도, 모델 자체의 성능이 낮다면 좋은 결과를 기대하기 힘들기 때문입니다. EfficientNet 논문에서는 MnasNet과 거의 동일한 search space하에서 AutoML을 통해 모델을 탐색하였고, 이 과정을 통해 찾은 작은 모델을 EfficientNet-B0
라고 부릅니다.
모델 구조는 MnasNet과 거의 유사하면 위의 표와 같은 구조로 구성이 되어 있습니다. 이제 이 모델을 통해 3가지 scaling factor를 동시에 고려하는 Compound Scaling
을 적용하여 실험을 수행합니다.
ϕ는 사용자가 제어할 수 있는 factor 로 가용한 resource 에 따라 적당한 값을 취해주고, 식에서 제곱 식이 들어가 있는 이유는 FLOPS의 배수 문제 때문입니다. depth는 2배가 되면 2배의 FLOPS가 되지만, width, resolution 은 2배가 되면 4배의 FLOPS가 되기 때문입니다.
α,β,γ 는 상수이고grid search
를 이용하여 찾습니다.
처음 단계에서는 파이를 1로 고정한 뒤, 타겟 데이터셋에서 좋은 성능을 보이는 알파, 베타, 감마 값을 찾아냅니다. 논문에서는 알파 값은 1.2, 베타 값은 1.1, 감마 값은 1.15를 사용하였으며, 방금 구한 3개의 scaling factor는 고정한 뒤 파이를 키워주며 모델의 사이즈를 키워주고 있습니다.
기존 사람이 디자인 한 ConvNet, AutoML을 통해 찾은 ConvNet들과 비교 한 결과는 다음 표에 나와 있습니다
결과를 보시면 아시겠지만 기존 ConvNet들에 비해 비슷한 정확도를 보이면서 parameter수와 FLOPS 수를 굉장히 많이 절약할 수 있는 것을 알 수 있고, 또한 기존에 ImageNet 데이터셋에서 가장 높은 정확도를 달성했던 GPipe 보다 더 높은 정확도를 달성하는 것을 확인할 수 있습니다. 동시에 parameter 수와 FLOPS수도 굉장히 많이 절약할 수 있습니다. 실험결과가 굉장히 좋은 것을 바로 알 수 있습니다. 이 외에도 다양한 실험 결과들은 논문에서 추가로 확인하실 수 있습니다.
ImageNet 결과
EfficientNet 의 파라미터는 다음과 같이 설정 하고, ImageNet 기반으로 학습하여 성능을 살펴보겠습니다.
- RMSProp optimizer (decay: 0.9, momentum: 0.9)
- batch-norm momenterm: 0.99
- weight decay: 1e-5
- init lr: 0.256 (decay: 0.97, every 2.4 epochs)
- swish activation function 사용
- stochastic depth with drop ratio:0.3
- Drop out
- EfficientNet-B0 : 0.2
- EfficientNet-B7 : 0.5
CAM
마지막으로 모델이 이미지를 분류할 때 이미지의 어느 영역에 집중했는지 확인할 수 있는 Class Activation Map(CAM)을 뽑아보았는데, 3개의 scaling factor를 각각 고려할 때 보다 동시에 고려하였을 때 더 정교한 CAM을 얻을 수 있다는 것을 확인 할 수 있습니다.
결론
Image Classification 분야에서 굉장히 다양한 논문들이 있었지만, 단순하면서도 직관적인 방법을 이용하여 엄청난 성능을 낸다는 것이 흥미로웠다.
Reference
- EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks
- EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks 리뷰
- EfficientNet: Rethinking Model Scaling for CNN.
- [논문리뷰] (EfficientNet) EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks / ICML 2019
- Efficient net 사용하기
'딥러닝 > Vision' 카테고리의 다른 글
Mask R-CNN (0) | 2022.03.30 |
---|---|
Object Detection (0) | 2022.03.30 |
CNN with pytorch (0) | 2022.02.12 |
Mobile Net (0) | 2021.03.24 |
CNN (0) | 2021.03.10 |