본문으로 바로가기
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

 

 

 

EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks

Mingxing Tan, Quoc V. Le

arXiv:1905.11946 

 

 

요즘 엄청 핫하게 쓰이고 있는 EfficientNet에 대한 논문이다. 

EfficientNet은 크기에 따라 b0, b1 ... , b7 까지 있다.

간단하게 요약하자면 width, depth, image resolution 3가지를 하나의 계수로 scale 하여

네트워크의 정확도와 효율성을 높였다... 라고 적혀있다.

 


 

 

 

accuracy를 향상시키기 위해서 대부분 depth, width, image resolution 이라는

3개의 dimension을 scale하는데 본인들은 여기서 fixed scaling coefficients를 이용하여

유니폼하게 조정하겠다고 한다.

 

 


 

 

 

기존의 네트워크들은 대부분 여러개의 스테이지로 나눠지고

각 스테이지 안에서도 동일한 layer들이 여러개 존재하는 형태이다. 

따라서 이러한 네트워크를 위와 같은 식으로 정의를 내렸다.

 

 


 

기존 방식에서 depth만 늘려보았다.

depth를 키울수록 성능은 점점 좋아지다가 어느정도가 지나서 네트워크가 너무 deep해지자 성능향상이 감소했다.

 

 


 

 

Width도 마찬가지다. 커질수록 점점 성능이 좋아지는가 싶더니 어느순간 정확도가 빠르게 saturate되는 문제가 있었다.

 

 

 


 

 

별 다를 거 없이,  resolution에 대해서도 동일한 모습을 보였다.

 

그래서 그들은 이를 통해 정리를 했다.

 

observation 1. 네트워크의 width, depth, resolution 중 어느 차원을 scale up 시켜도 성능은 향상된다. 그러나 어느정도 너무 큰 모델에 있어서는 그 성능 향상이 감소한다. 

 

 

 


 

이번에는 d와 r을 고정해놓고 width를 늘리는 것은 이전의 실험과 비슷하나 

이 때 d와 r값을 각각 다르게 해놓고 실험을 했다.

 

이 때, d=1.0, r=1.0일 때보다 d=2.0, r=1.3일 때 같은 FLOPS cost 하에서 더 좋은 성능을 내는 것을 확인할 수 있었다.

 

 


 

 

이와 같은 결과를 보고 두번째 관찰 결과를 내놓는다.

 

observation 2. 성능과 효율성을 높이기 위해서 ConvNet scaling을 진행할 때,

width, depth, resolution의 모든 차원의 밸런스를 맞추는게 중요하다. 

 

사실 이전까지도 임의로 이 세가지의 밸런스를 맞추는 논문이 존재하기는 했으나

이는 수동으로 해야하는 지루한 tuning이었다.

 

이를 대신하여 저자들은  compound coefficient를 사용하는 compound scaling method를 제시한다.

 

 


 

위 피피티 화면을 읽어보면 대충 알파, 베타, 감마에 따라서 FLOPS가 어느정도로 증가하는지를 식으로 표현해놓은것을 알 수 있다.

 

 


 

 

 

이 때 baseline network인 F는 고정시키므로 baseline network 의 성능이 중요한 포인트다.

이를 위해 그들은 moblie-size baseline인 EfficientNet을 AutoML을 통해 제작하게 된다.

 

이 때 사용한 AutoML 방식은 multi-objective neural architecture search를 사용했고 accuracy와 FLOPS 모두를 optimize하는 네트워크를 찾도록 했다.

 

 


 

 

EfficientNet의 baseline인 b0는 위와 같은 구조를 하고 있다.

 

 


 

 

또한 어떤 방법으로 constant를 찾게 됐는지도 말해주고 있다.

 

여기서 알파, 베타, 감마는 파이를 1로 고정시켜놓고 small grid search를 통해 찾았고

이 찾은 알파, 베타, 감마를 사용하여 파이 값을 바꾸며 b0~b7까지 찾았다고 한다.

 

 


 

자신들의 compound scaling method 가 성능향상에 아주 좋다는 것을 보여주기 위해서 이미 존재하는 네트워크인 MoblieNets 과 ResNet에 적용하여 실험을 했다.

 

이 때 결과는 compound scale을 한 네트워크의 성능이 향상됐음을 볼 수 있다.

 

 


 

 

본인들이 만든 EfficientNet은 현재 최고의 기록을 가지고 있던 GPipe의 성능보다 좋았으며

parameter 수는 8.4배나 적었다. 

 

 


 

또한 B3의 경우 ResNeXt-101보다 parameter 수가 적음에도

비슷한,오히려 조금 더 나은 성능을 보였고 FLOPS에서도 큰 차이를 보였다. 

 

 


 

 

transfer learning에서도 뛰어난 성능을 보였다고 한다.

 

 

 


 

 

마지막으로 그들의 compound scaling이 어떤 효과를 내는지

시각적으로 보여주기 위해서 class activation map 도 나타냈다.

 

아래 사진을 통해서 compound scaling을 한 모델이 훨씬 더 관련있는 object에 집중하고 있는 것을 볼 수 있다.