본문 바로가기

AI시작

Efficient Net : AutoML 과 모델 Scaling 을 통한 정확도와 효율성 향상

근래에 EfficientNet 에 대해 생각도 고민이 많다.

오 구글이 역시 또... !!! (은근 TPU 자랑질은 덤이더라)

근데 속세의 혐생 개발자가 오토 ML 씩이나 돌려야한다니 너무 사치스러운거 아닌가 자괴감 들고...

하지만 뭐 어쩔꺼나 AI 인생 인퍼 속도랑 성능만 쩔면 그만 아닌가 싶기도 하고 ...

(고민의 물레방아)

-----------------------------------------------------------------------------

 

CNN (Convolutional Neural Network)은 일반적으로 고정 리소스 비용으로 개발 된 후 더 많은 리소스를 사용할 수 있을 때 더 나은 정확도를 달성하기 위해 확장(scaled up) 됩니다. 예를 들어, 레이어 수를 늘려 ResNet을 ResNet-18에서 ResNet-200으로 확장 할 수 있으며, 최근 GPipe는 기준선 CNN을 4 배로 확장하여 84.3 % ImageNet 최상위 1 정확도를 달성했습니다. 모델 스케일링에 대한 일반적인 관행은 CNN 깊이 또는 너비를 임의로 늘리거나 훈련(training) 및 평가(evaluation)에 더 큰 입력 이미지 해상도를 사용하는 것입니다. 이러한 방법은 정확도를 향상 시키지만 일반적으로 지루한 수동 튜닝이 필요하며 여전히 최적의 성능을 발휘하지 않습니다. 대신 더 나은 정확성과 효율성을 얻기 위해 CNN을 확장하는 보다 원칙적인 방법을 찾을 수 있다면 어떨까요?

 

ICML 2019 논문 인 “EfficientNet : Rethinking Model Scaling for Convolutional Neural Networks” 에서는 간단하지만 매우 효과적인 복합 계수를 사용하여 보다 체계적인 방식으로 CNN을 확장하는 새로운 모델 스케일링 방법을 제안합니다. 너비, 깊이 및 해상도와 같은 네트워크 dimensions 을 임의로 스케일링하는 기존의 접근 방식과 달리, 이 방법은 고정 된 스케일링 계수 coefficients 로 each dimension 을 uniformly scales 했습니다. 이 새로운 스케일링 방법과 AutoML의 최근 발전에 힘 입어 EfficientNets라는 모델을 개발했습니다. 이 모델은 최고 10 배 더 높은 효율 (더 작고 빠른)로 최첨단 정확도를 능가합니다.

 

복합 모델 스케일링 : CNN을 확장하는 더 좋은 방법
네트워크 스케일링의 영향을 이해하기 위해 모델의 다른 차원 스케일링의 영향을 체계적으로 연구했습니다. 개별 차원의 크기를 조정하면 모델 성능이 향상되지만 가용 리소스에 대한 네트워크의 모든 차원 (폭, 깊이 및 이미지 해상도)의 균형을 조정하면 전체 성능이 가장 향상 될 수 있습니다.

복합 스케일링 방법의 첫 번째 단계는 그리드 검색을 수행하여 고정 된 리소스 제약 조건 (예 : 2 배 더 많은 FLOPS)에서 기준 네트워크의 다양한 스케일링 dimensions 사이의 관계를 찾는 것입니다. 이는 각 차원에 대한 적절한 스케일링 coefficients 를 결정합니다. 위에 언급했듯이. 그런 다음 이러한 coefficients 를 적용하여 기준 네트워크를 원하는 대상 모델 크기 또는 계산 예산으로 확장합니다.

다른 스케일링 방법의 비교. 네트워크의 단일 차원을 임의의 크기로 조정하는 기존의 스케일링 방법 (b)-(d)와 달리, 복합 스케일링 방법은 원칙적으로 모든 차원을 균일하게 확장합니다.

위의 그림은 이미 존재하는 모델의 size를 키워주는 여러 방법들을 보여주고 있습니다. 대표적으로 filter의 개수를(channel의 개수를) 늘리는 width scaling 와 layer의 개수를 늘리는 depth scaling과 input image의 해상도를 높이는 resolution scaling 이 자주 사용됩니다. ResNet이 depth scaling을 통해 모델의 크기를 조절하는 대표적인 모델이며(ex, ResNet-50, ResNet-101) MobileNet, ShuffleNet 등이 width scaling을 통해 모델의 크기를 조절하는 대표적인 모델입니다. (ex, MobileNet-224 1.0, MobileNet-224 0.5) 하지만 기존 방식들에서는 위의 3가지 scaling을 동시에 고려하는 경우가 거의 없었습니다.

또한 3가지 scaling 기법 중에 어떤 기법을 사용할지에 대해서도 마땅한 가이드라인이 존재하지 않고, 실제로 무작정 키운다고 정확도가 계속 오르는 것도 아니라 일일이 실험을 해봐야하는 어려움도 존재하였습니다. 본 논문에서는 실제로 3가지 scaling 기법에 대해 각 scaling 기법마다 나머지는 고정해두고 1개의 scaling factor만 키워가며 정확도의 변화를 측정하였습니다.

 

Scaling Up a Baseline Model with Different Network Width (w), Depth (d), and Resolution (r) Coefficients. Bigger networks with larger width, depth, or resolution tend to achieve higher accuracy, but the accuracy gain quickly saturate after reaching 80%, demonstrating the limitation of single dimension scaling.

이 Compound Scaling 방법은 기존의 스케일링 방법에 비해 MobileNet (+ 1.4 % 이미지 넷 정확도) 및 ResNet (+ 0.7 %)과 같은 기존 모델을 스케일 업할 때 모델 정확도 및 효율성을 지속적으로 향상시킵니다.

 

위의 실험들을 통해 3가지 scaling factor를 동시에 고려하는 것이 좋다는 것을 간단하게 입증을 하였고, 이번에는 최적의 비율을 찾아서 실제 모델에 적용을 해서 다른 모델들과 성능을 비교하는 과정을 설명 드리겠습니다. 우선 이 논문에서는 모델(F)를 고정하고 depth(d), width(w), resolution(r) 3가지를 조절하는 방법을 제안하고 있는데, 이때 고정하는 모델(F)를 좋은 모델로 선정하는 것이 굉장히 중요합니다. 아무리 scaling factor를 조절해도, 초기 모델 자체의 성능이 낮다면 임계 성능도 낮기 때문입니다. 이 논문에서는 MnasNet과 거의 동일한 search space 하에서 AutoML을 통해 모델을 탐색하였고, 이 과정을 통해 찾은 작은 모델을 EfficientNet-B0 이라 부르고 있습니다.

EfficientNet 아키텍처


모델 스케일링의 효과는 또한 기준선 네트워크에 크게 의존합니다. 따라서 성능을 더욱 향상시키기 위해 AutoML MNAS 프레임 워크를 사용하여 신경 아키텍처 검색을 수행하여 정확도와 효율성 (FLOPS)을 모두 최적화하여 새로운 기준 네트워크를 개발했습니다. 결과 아키텍처는 MobileNetV2 및 MnasNet과 유사한 MBConv (mobile inverted bottleneck convolution)를 사용하지만 FLOP 예산 증가로 인해 약간 더 큽니다. 그런 다음 기본 네트워크를 확장하여 EfficientNets라는 모델 패밀리를 얻습니다.

The architecture for our baseline network EfficientNet-B0 is simple and clean, making it easier to scale and generalize.

 

EfficientNets 성능
EfficientNets와 ImageNet의 다른 기존 CNN을 비교했습니다. 일반적으로 EfficientNet 모델은 기존 CNN보다 정확도와 효율성을 모두 높여서 매개 변수 크기와 FLOPS를 10 배나 줄입니다. 예를 들어, 고 정확도 체제에서 EfficientNet-B7은 ImageNet에서 최첨단 84.4 % 최고 1 / 97.1 % 최고 5 정확도에 도달하는 반면 CPU 추론에서 8.4 배 더 작고 6.1 배 더 빠릅니다. 이전 Gpipe. 널리 사용되는 ResNet-50과 비교하여 EfficientNet-B4는 유사한 FLOPS를 사용하면서 ResNet-50의 76.3 %에서 82.6 % (+ 6.3 %)로 최고의 정확도를 향상시킵니다.

 

모델 크기와 정확도 비교. EfficientNet-B0은 AutoML MNAS에서 개발 한 기본 네트워크이며 Efficient-B1에서 B7은 기본 네트워크를 확장하여 얻습니다. 특히, EfficientNet-B7은 새로운 최고 수준의 84.4 % 최고 1 / 97.1 % 최고 5 정확도를 달성하는 동시에 기존의 최고 CNN보다 8.4 배 더 작습니다.

 

모델 효율성을 대폭 개선함으로써 EfficientNets는 향후 컴퓨터 비전 작업을위한 새로운 토대가 될 수있을 것으로 기대합니다. 따라서 우리는 모든 EfficientNet 모델을 오픈 소스로 제공하여 더 큰 머신 러닝 커뮤니티에 혜택을 줄 수 있기를 바랍니다. 

감사의 말 :
Hongkun Yu, Ruoming Pang, Vijay Vasudevan, Alok Aggarwal, Barret Zoph, Xianzhi Du, Xiaodan Song, Samy Bengio, Jeff Dean 및 Google Brain 팀에게 특별한 감사를드립니다.

 

https://ai.googleblog.com/2019/05/efficientnet-improving-accuracy-and.html

http://proceedings.mlr.press/v97/tan19a/tan19a.pdf

https://hoya012.github.io/blog/EfficientNet-review/

 

'AI시작' 카테고리의 다른 글

Yolo v4 - 왜 어메이징한 네트워크인가  (4) 2020.05.13
Bag of Freebies 가 주목 받는 이유  (1) 2020.05.09
ResNet 소개  (0) 2020.05.08
5-3 GoogLeNet (Inception v1)  (0) 2019.12.10
3-2 CNN 용어들 (Kernel, Stride, Pooling..)  (0) 2019.12.10