https://github.com/yhy258/pytorch_EfficientNet
Abstract
지금까지의 CNN의 개선을 살펴보면 "scale up"이라는 행위와 굉장히 연관이 깊습니다. 이제 CNN을 사용하는데, 제한된 자원이 있고 이 제한된 자원에 맞춰서 될 수 있는 한 개선을 시켜왔습니다.
위에서 말한 "scale-up"은 모델에서 크게 depth,width,resolution 이렇게 세 방면에 적용 할 수 있습니다. 지금까지의 여러 방법들은 이 셋 중 하나씩만 scale up 시켰는데, 이 논문에서는 세 요소의 균형을 이뤄 일률적으로 scale up 시키는 방법을 소개합니다.
Introduction
ConvNet에서 "scaling up"은 널리 사용하는 accuracy 개선법 입니다.
이에 대해서 이전의 경우에서는 width, depth, resolution 중 하나만 건드렸었습니다.
논문에서는 "더 나은 accuracy와 efficiency를 얻을 수 있는 ConvNets에 scale up하는 방법이 있을까?" 라는 질문에서 시작합니다.
Empirical(경험적인) study에서 각 scaling dimension (depth, width, resolution) 간의 balance가 중요함을 밝혔습니다.
이 Observation에 입각해서 특정 ratio 상수를 통해 간단한 scaling 을 진행합니다.(일률적인)
이렇게 network의 width, depth, resolution을 fixed scaling coefficient를 통해 일괄적으로 scale하는 것을 Compound scaling method라 합니다.
물론 여기에는 based architecture가 있고 구조 자체는 변화시키지 않습니다.
이러한 방법으로 위의 Fig 1.과 같은 성능을 이뤘습니다.
예를 들어서 기존 모델의 \(2^N\) 배의 자원을 사용한다고 했을 때, depth는 \(\alpha^N\), width는 \(\beta^N\), resolution은 \(\gamma^N\)로 network를 증가시킬 수 있습니다. 여기에서 \(\alpha, \beta, \gamma\)는 small grid search를 통해 찾을 수 있습니다.
Fig 2.를 보시면 다른 model들과 efficientnet의 차이점을 볼 수 있습니다.
일단 핵심은 직관적으로 세 요소 다 늘리며 된다는 것이고, 이에 대해서 세 관계의 경험적인 수량화를 합니다.
그리고 사용되는 baseline network는 NAS(Neural Architecture Search)를 사용합니다.
Compound Model Scaling
계속 언급되는 내용이지만 이 논문에서의 요지는 pre-defined model에 대해 변경 없이 resolution, depth, width를 어떻게 바꿀건지 입니다.
ConvNet Layer \(i\)에 대해서 식으로 적으면 \(Y_i=F_i(X_i)\) 이런식으로 표현 할 수 있습니다. Resnet과 같이 복잡한 모델에서는 한 스테이지를 의미합니다.
여러 layers로 이루어진 CNN의 경우에는
이런 식으로 나타낼 수 있습니다.
Compound Scaling에 대해서 위의 H, W, C scale을 각각 따로 design 한다면 경우의 수가 너무 많습니다. 그래서 일괄적으로 처리하기로 합니다.
이에 대한 optimization problem을 세우면 다음과 같습니다.
Compound Scaling
higher resolution에 대해서 larger receptive fields를 통해 similar features를 capture하는 것을 돕기 위해 더 깊고 넓은 model이 필요함을 경험적으로 관측했습니다.
위의 Fig 3.을 보면 각 단일 scaling dimension에 대해 scale을 시행하면, 얼마 가지 않아 saturate 함을 알 수 있습니다.
Fig 4.에서는 각 요소에 대해 scaling을 같이 시행 했을 때 성능이 더 올라가는 것을 볼 수 있습니다.
이런 Observation을 기반으로 각 scaling dimensions 사이의 균형이 중요함을 알 수 있습니다.
그래서 이 논문에선 새로운 compound scaling method를 제시합니다.
이는 width, depth, resolution을 아래와 같은 조건으로 일괄적으로 scale하는 것을 의미합니다.
\(\phi\)는 user specified variable이고 앞에서 언급했듯이 \(\alpha, \beta, \gamma\)는 small grid search를 통해 정의됩니다.
위 식의 아래 condition에서의 \(\alpha \cdot \beta^2 \cdot \gamma^2 \approx 2\)는 FLOPS를 \(2^\phi\)에 근사하게 하기 위함입니다.
EfficientNet Architecture
우선 EfficientNet B1 ~ 모두는 EfficientNet-B0을 baseline network로 사용합니다.
EfficientNet B0의 baseline network는 위의 table 1과 같습니다.
각 MBConv1에는 Squeeze-andexcitation optimization을 적용했습니다.
각 efficientnet의 scaling coef는 위와 같습니다.
model에서 activation function은 SiLU(Swish-1)을 사용했으며, stochastic depth와 AutoAugment를 사용했다고 합니다.