<

EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks

  주소 : https://arxiv.org/abs/1905.11946

2019년 발표 논문이라 이미 유명한 논문이고, 많은 한글 리뷰가 존재하지만, 원래 하려던 Revisiting ResNets 논문을 리뷰 하기 위해서 먼저 리뷰한다.


Abstract

기존 Convolution Neural Networks에서 정확도를 높일 때, 우선 아키텍쳐를 만들고 Convolution의 채널이나, 깊이, 이미지의 해상도를 높이는 방식으로 계산량을 늘려서 정확도를 올리는 방식을 사용한다. 그런데 이런 채널 수 (width) / 깊이(depth) / 이미지 크기(resolution)를 어떻게 늘리는게 좋은지에 대한 연구가 없어서 효율적으로 scaling을 하는 방법을 소개한다.

더 나아가, Neural Architecture Search를 사용해 baseline 네트워크를 만들고, scaling을 수행해서 기존 ConvNet보다 높은 정확도와 효율성을 달성하는 EfficientNets라는 모델 제품군을 제안한다. EfficientNet-B7은 ImageNet top-1 accuracy 84.3%를 달성하면서 기존 ConvNet보다 8.4배 작고 6.1배 빠르다

주요 내용

ㆍ네트워크 성능

Fig.1. 왼쪽: Parameter - Accuracy, 오른쪽: FLOPS - Accuracy

Fig. 1의 왼쪽 그래프는 네트워크의 파라미터 수 대비 성능(정확도)를 나타내고 오른쪽 그림은 네트워크 수행시간 대비 성능(정확도)를 나타낸다. 빨간선이 논문에서 제안하는 EfficientNet들이다. 사이즈가 가장 작은 B0부터 Scaling 기법을 적용해 사이즈를 키워나간 B1~B7이 기존 네트워크들 보다 더 가볍거나 빠르고 성능이 좋게 나오는 걸 보여준다.

ㆍCompund scaling

Fig. 2. 다양한 Scaling 기법들이다. (e) compund scaling은 width / depth / ressolution을 적절한 비율로 모두 늘리는 것이다.

Fig.2는 다양한 scaling 방법을 보여준다. 위에서도 설명했지만 네트워크의 채널/깊이/이미지 사이즈를 늘려가는 것을 각각 width / depth / resolution scaling이라고 한다. 왜 compund scaling 인가? 아래 Fig. 3을 생각해보자

Fig. 3 빨간색 박스는 Receptive Field, 이미지 해상도가 높아져도 Receptive Field는 커지지 않는다.(논문 미포함 이미지)

직관적으로, 이미지의 해상도가 증가할 때, Receptive Field가 증가하지 않으면 결국 더 작은 영역을 보고 판단해야 하므로 정확도가 떨어질 수 있다. Receptive Field를 키우기 위해서는 네트워크 깊이를 증가시켜야 하고, 해상도가 커진만큼 더 세밀한 패턴들을 판별하기 위해서 채널수가 증가되어야한다.

여기 까지가 주요 내용이다. Motivation은 맞는 말이지만 EfficientNet에서는이 width / depth / resolution을 어떤 조합으로 scaling 할지에 대한 고민은 좀 부족해 보인다. 이 부분은 Revisiting ResNets에서 조금 더 보충 된다.

상세 내용

ㆍCompund Model Scaling

저자가 정의한 문제는 Accuracy (정확도)를 최대로 높이면서 Memory와 FLOPS (계산량)은 어떤 목표보다 작게 하는 것이다. 즉 효율적인 네트워크는 정확도는 높고 계산량은 적은 네트워크 일텐데, 이 논문에서는 작은 네트워크 (EfficientNet-B0)에서 이 아키텍쳐를 찾고, Scaling을 통해 계산량을 늘려간다.

\[\begin{array}{*{20}{rl}} {{\rm{depth:}}}&{d = {\alpha ^\phi }}\\ {{\rm{width:}}}&{w = {\beta ^\phi }}\\ {{\rm{resolution:}}}&{r = {\gamma ^\phi }}\\ {{\rm{s}}{\rm{.t}}{\rm{.}}}&{\alpha \cdot {\beta ^2} \cdot {\gamma ^2} \approx 2}\\ {}&{\alpha \ge 1,\beta \ge 1,\gamma \ge 1} \end{array}\]

\(\alpha\), \(\beta\), \(\gamma\)는 상수이고 small gride search를 통해 찾는다. - 즉 초기 (가장 작은) 네트워크에서 실험적으로 찾는다.

\(\alpha \cdot {\beta ^2} \cdot {\gamma ^2} \approx 2\)를 설정한 이유는 FLOPS가 대략 \(2^\phi\)배로 증가하기 위해서이다. - 그렇다고 \(\phi\)가 1,2,3...이렇게 자연수로 증가하는 것은 아니고 큰 의미는 없는 것 같다.

ㆍEfficientNet Architecture

EfficientNet은 MnasNet과 같은 search space를 사용했으며, 최적화 목표를 \(ACC(m) \times {\left[ {FLOPS(m)/T} \right]^w}\)로 설정했다. 여기서 \(T\)는 목표로 하는 FLOPS이고, \(w=-0.07\)은 Accuracy와 FLOPS의 trade-off를 나타내는 하이퍼 파라미터이다. MnasNet은 Accuracy-Latency를 최적화 했는데, 본 논문에서는 Accuracy-FLOPS를 최적화 한다. (Target hardware device를 정하지 않아서)

이렇게 찾은 네트워크를 EfficientNet-B0라고 하고 구조는 MnasNet과 비슷한데, FLOPS target을 400M으로 해서 사이즈가 약간 더 크다. 이렇게 찾은 구조는 아래 표와 같다.

이 네트워크의 Main building block은 MobilNetV2, MnasNet에서 사용된 mobile inverted bottleneck MBConv 이다

EfficientNet-B0가 baseline 네트워크 이고, 이 네트워크를 Scaling 하는 방법은 아래와 같다.

  • STEP1. \(\phi\)를 1로 고정시키고, \(\alpha\), \(\beta\), \(\gamma\)를 찾는다.실험 적으로 찾은 값은 EffientNet-B0에서의 값은 \(\alpha=1.2\), \(\beta=1.1\), \(\gamma=1.15\) 이다.
  • STEP2. \(\alpha\), \(\beta\), \(\gamma\)를 고정시키고, \(\phi\)를 변화시키면서 EfficientNetB1~B7을 찾는다.

Revisiting ResNets에서 Claim하는 부분이 이 부분인데, 작은 네트워크에서의 \(\alpha\), \(\beta\), \(\gamma\)가 큰 네트워크에서도 동일하지 않다는 걸 보여줌 (이런 선형 관계도 아님)

Experimentals

ㆍScaling Up MobileNets and ResNets

Compound scaling 방식이 좋다는 것을 증명하기 위해서 MobileNet과 ResNet에 실험을 했다.

위 테이블을 보면 MobileNetV1과 MobileNetV2, ResNet-50에 대해 각각 depth / width / resolution / compound scaling을 적용했다. 표에서 보여주는 것 처럼 FLOPS를 유사하게 맞췄을때, Compound scaling 방법이 높은 성능을 보여주고 있다.

ㆍImageNet Results for EfficientNet

위 테이블은 EfficientNet의 성능을 보여준다. 일반적으로 EfficientNet이 다른 ConvNet보다 적은 파라미터를 가지고 FLOPS가 낮다. 특히 EfficienNet-B7은 84.3% 정확도를 달성하면서 Gpipe대비 8.4배 작다.

지연시간(latency)를 확인하기 위해서 CPU에서 실행을 했고, 위 표에서 결과를 보여주듯이 EfficientNet이 빠르다.

ㆍEfficientNet에서 scaling 비교

Fig. 3. Scaling Up EfficientNet-B0 with Different Methods

위 그림은 EfficientNet-B0에서 single-scaling과 compound scaling기법을 비교한 실험이다. width / depth / resolution을 단독으로 scaling 하는 것 보다 compound 방식으로 scaling하는 것이 성능이 더 좋다는 것을 보여준다.

Fig. 7. Class Activation Map for Models with different scaling methods

위 그림은 왜 compound 방법이 다른 방법에 비해서 성능이 좋은지 분석 하기 위해 class activation map을 뽑아 본 것이다. 다른 맵들에 비해 중요한 영역을 잘 찾는 것을 볼 수 있다.

결론 및 느낀점

이 논문의 중요 내용은 EfficientNet 이라는 아키텍쳐 보다는 Scaling 방법에서 width / depth / resolution을 각각 사용하기 보다는 함께 사용하는 것이 좋다는 것을 증명한 것이고, 이러한 scaling에 대한 연구는 사실 시간이 매우 오래 걸리고 실험을 많이 해야 할 수 있을 것같다.
Compound 방식을 이용해 scaling해야 한다는데는 동의하지만, 논문에서 제안한대로 \(\alpha\), \(\beta\), \(\gamma\)의 관계를 설정해서 scaling하는 방식 자체는 너무 직관적이고, 실험을 많이 해봐야 하는 부분이다. 이런 부분들은 연구해서 개선할 여지가 많이 남아 있는 것 같다.

posted by DP_Story