EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks

|

Mingxing Tan, Quoc V. Le
(Submitted on 28 May 2019 (v1), last revised 23 Nov 2019 (this version, v3))
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를 이용하여 유니폼하게 조정하겠다고 한다.


image

기존의 네트워크들은 대부분 여러 개의 스테이지로 나눠지고 각 스테이지 안에서도 동일한 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 하에서 더 좋은 성능을 내는 것을 확인할 수 있었다.


image

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하는 네트워크를 찾도록 했다.


image

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


또한 어떤 방법으로 constant를 찾게 됐는지도 말해주고 있다. 여기서 알파, 베타, 감마는 파이를 1로 고정시켜놓고 small grid search를 통해 찾았고 이때 찾은 알파, 베타, 감마를 사용하여 파이 값을 바꾸며 b0~b7까지 찾았다고 한다.


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


본인들이 만든 EfficientNet은 현재 SOTA이던 GPipe의 성능보다 좋았으며 parameter 수는 8.4배나 적다.


또한 B3의 경우 ResNeXt-101보다 parameter 수가 적음에도 비슷하거나 오히려 조금 더 나은 성능을 보였고 FLOPS에서도 큰 차이를 보였다.


image

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


마지막으로 그들의 compound scaling이 어떤 효과를 내는지 시각적으로 보여주기 위해서 class activation map도 나타냈다. 아래 사진을 통해서 compound scaling을 한 모델이 훨씬 더 관련있는 object 부분에 집중하고 있는 것을 볼 수 있다.

다 읽고..

이번에 처음 캐글 챌린지에 도전을 해봤는데 캐글 discussion에서 상위권 사람들이 EfficientNet을 사용한다는 것을 알게되었다. 메모리도 적게들고 성능도 뛰어난데 안쓸 이유가 없는 것 같다. 다음에 읽을 architecture 관련 논문을 읽을 때에는 역시 캐글에서 추천받은 GhostNet을 읽을까 싶다.

Comments