오늘은 EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks에 대한 간단한 리뷰이다.
모델의 구조는 고정하고 width, height, channel, depth 등을 변경하여 scaling을 하면 design에 대한 걱정이 사라지지만, 각각의 scale을 어떻게 해야할 지 고민이 생긴다. 따라서 이 논문에서는 모든 레이어를 균일한 상수배로 스케일링하기로 한다.
모델의 width, depth, resolution을 각각 키우면 성능이 증가하긴 하지만, 너무 커진다면 정확도가 많이 증가하지 않는다.
높은 resolution image에는 깊이가 더 깊어야 되고, width가 넓어야 하는 것이 당연하기 때문에, 각각의 scaling을 balance하게 증가시키는 것이 중요하다. 위의 표를 보면, width가 증가할 때 depth와 resolution이 같이 증가한다면 같은 width라도 더 높은 성능을 보여주는 것을 확인할 수 있다.
따라서 위와 같이 scaling constant를 정의하여 실험을 진행하였다.
먼저 굉장히 작은 baseline model은 EfficientNet-B0를 구성하였다. 이 모델에서 시작하여, 위에서 언급한 compound scaling의 성능을 테스트한다. 두 차례로 진행되는데, 먼저 를 1로 고정하고, grid serach를 통해 최적의 , , 를 찾는다. 다음에는 , , 를 고정하고, 를 늘려가며 EfficientNet-B0부터 B7까지 다양한 크기의 모델 성능을 테스트한다.
먼저 MobileNet과 ResNet에 대해서 Compound scaling을 적용했는데, 성능이 증가하는 것을 확인할 수 있다. 즉, 기존의 ConvNet에서도 성능 향상에 의미있는 방법인 것이다.
다음은 EfficientNet에 대한 성능이다. scaling이 많이 될수록 성능 또한 증가하는 모습을 보이고 있다.
주목할 만한 점은 비슷한 성능의 다른 모델에 비해 FLOPS가 현저히 적다는 점이다.
그에 따라 추론 시간도 적어진 것을 확인할 수 있다.
또한 다른 데이터셋에 대해서 transfer learning한 결과도 준수한 성능을 보여주고 있다. 마찬가지로 파라미터 수도 비슷한 성능의 모델보다 굉장히 적다.
Compound Scaling은 단순히 width, depth, resolution 중 하나만 증가시키는 것보다 더 높은 성능 향상을 가지고 온다.
특히 이것이 재밌었는데, compound scaling을 적용한 모델이 좀 더 object에 집중하는 것을 확인할 수 있다.
그래프와 표가 많아서 굉장히 재밌었던 논문이다. compound scaling의 중요성을 잘 알 수 있었고, 특히 activation map의 결과가 흥미로웠다. 모델 이름 그대로 정말 Efficient한 방법론인 것 같다.