[논문 리뷰] EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks
Abstract
- CNN은 고정된 비용으로 발전되어왔고 만약 자원이 더욱 있었다면 성능이 더 올랐을 것이다.
- 해당 논문에서는 모델의 크기를 체계적으로 조절하고 신경망의 깊이, 너비, 해상도의 균형을 맞추면 성능을 더욱 높일 수 있을 것이라고 말한다.
- 이러한 관점으로 새로운 크기 조정 방법을 제안한다.
- 복합계수(coefficient)를 사용해 균일하게 깊이, 너비, 해상도의 차원을 조절
- MobileNet과 ResNet을 크기 조정한 방법을 제안
- CNN기반 SOTA 모델보다 8.4배 더 작고 6.1배 더 빠르지만 SOTA인 EfficientNet 제안
Introduction
- Covnet의 크기 증가는 정확도를 더욱 높이기 위해 널리 사용된다.
- ResNet은 layer를 더 많이 가져가면서 크기 증가
- GPipe는 baseline 모델보다 크기를 4배 크게 가져가면서 정확도 상승시켰다.
- Convnet의 크기를 증가시키는 방법은 많다.
- 가장 쉬운 방법은 크기, 너비를 늘리는 것
- 해상도 크기 증가
- 이전까지는 깊이, 너비, 해상도 중 하나만 조정하는 것이 일반적
- 2,3차원을 조정하는 것은 가능하지만 수동적으로 해야하고 정확도, 효율성 둘 다 최적의 값이 아니다.
- 해당 논문에서는 ConvNet의 크기를 증가시키는 과정을 다시 생각해본다.
- 특히 효율성과 정확도 둘 다 가져가면서 크기를 증가시키는 원칙적인 방법을 개발한다.
- 해당 연구에서 너비, 깊이, 해상도의 차원을 균형을 맞추는 것은 매우 중요하다는 것을 발견
- 일정한 비율로 크기를 증가시키는 것이 가장 균형적이다.
- 이것을 기반으로 효율적인 compound scaling 방법을 제안
- 고정된 크기 계수로 너비, 깊이, 해상도를 균형적으로 증가시킴
- 만약 2N배 더욱 계산 자원을 사용하기를 원한다면, 깊이, 너비, 해상도 모두 αN,βN,γN배 증가시킨다. ($\alpha, \beta, \gamma = $계수)
- 복합 크기 조정 방법은 input이 클 수록, 신경망이 더 많은 레이어를 필요로 하고 receptive field를 증가시켜야 하고 더 많은 채널을 확보해야하기 때문에 타당하다.
- 또한 신경망의 너비와 깊이 사이에는 특정 관계가 있다.
- 해당 연구에서 처음으로 밝혀냄
- MobileNet과 ResNet에서 잘 작동함
- 모델의 크기를 증가시키는 것의 효과성은 베이스라인 신경망에 의존한다.
- 새로운 베이스라인 신경망을 발전시키기위해 새로운 신경망 구조를 사용했다.
- 그리고 가족 모델을 얻기위해 크기를 증가시켰다. (EfficientNet)
- 다른 모델 성능 능가, 8.4배 더 적은파라미터, 6.1배 빠른 추론 속도
ConvNet Accuracy
- AlexNet이 2012년 ImageNet에서 우승한 후, ConvNet은 모델이 커지면서 더욱 정확해졌다.
- 2014년 우승한 GoogLeNet은 640만개 파라미터로 1위 달성
- 2017년 우승한 SENet은 1억 4500만개 파라미터로 1위 달성
- GPipe는 최근 5억 5700만개 파라미터로 84.3% 검증 정확도 달성
- 하지만 모델의 크기가 너무 커서 전문화된 파이프라인 구조에서만 학습 가능
- 대부분 ImageNet을 위해 모델링되었지만 전이학습을 통해 다른 데이터셋에서도 좋은 성능 발휘
- 높은 성능은 매우 중요하지만 하드웨어 메모리의 한계에 마주해서 더욱 효율적으로 성능을 향상시키는 것이 중요하다.
ConvNet Efficiency
- 깊은 ConvNet은 종종 파라미터가 매우 많은다.
- 모델 압축은 효율성을 정확도와 거래해 모델의 크기를 줄이는 것이다.
- 핸드폰이 어디에나 있기에 들고다닐 수 있을 만한 효율적인 ConvNet이 흔해졌다. (SqueezeNet, MobileNet, ShuffleNet)
- 최근 신경망 구조를 점점 효율적인 들고다닐만한 크기의 ConvNet으로 고안하는 것이 유행했다.
- 네트워크의 너비, 깊이, kernel type, 크기를 조정함으로써 더욱 효율적으로 만들었다.
- 하지만 더욱 큰 모델에 어떻게 적용할지는 불명확하다.
- 해당 연구에서는 매우 큰 ConvNet의 효율성에 초점을 맞춘다.
Model Scaling
- ConvNet의 크기를 조절하는 여러가지 방법이 있다.
- ResNet은 깊이(레이어)를 통해 크기를 조절했다.
- WideResNet과 MobileNet은 너비(채널)를 통해 크기를 조절했다.
- 커다란 input 이미지 크기가 더 많은 FLOPs를 사용하며 정확도에 도움이 되는 것은 널리 알려져있다.
- 신경망의 깊이, 너비 둘 다 ConvNet의 표현력에 중요하고 어떻게 ConvNet을 효율성과 정확성 모두 챙기면서 효율적으로 크기를 조절할 지는 여전히 열린 문제다.
- 이 연구는 체계적으로 ConvNet의 너비, 깊이, 해상도 삼 차원의 크기를 조절하는 것을 다룬다.
Compound Model Scaling
- 합성곱 레이어 i는 다음과 같이 정의된다.
- Yi=Fi(Xi)
- Fi: operator, Yi: output tensor, Xi: input tensor(Hi,Wi,Ci)
- Hi,Wi: 공간 차원, Ci: 채널 차원
- ConvNet N은 다음과 같이 정의
- N=Fk⊙⋯⊙F2⊙F1(X1)=⊙j=1,…,kFj(X1)
- ConvNet은 종종 여러 개의 stage로 나뉜다.
- 각 stage는 동일한 구조를 보유
- ResNet은 5개의 Stage로 나뉨
- N=⊙i=1,…,nFiLi(X(Hi,Wi,Ci)
- FiLi는 stage i에서 Fi가 Li번 반복
- 일반적인 모델은 최상의 구조를 찾기위해 Fi에 집중한다.
- 하지만 모델의 크기 조정은 구조 변화 없이 길이, 너비(Li,Ci)를 증가시키고 또는 해상도(Hi,Wi)를 조절한다.
- 모델의 공간을 줄이기 위해, 모든 레이어가 균일한 비율로 변화하도록 제한
- 우리의 목적은 고정된 자원으로 최상의 정확도를 내는 것이다.
maxd,w,rAccuracy(N(d,w,r))s.t.N(d,w,r)=⊙i=1,…,sF^id⋅L^i(r⋅H^i,r⋅W^i,r⋅C^i)Memory(N)≤targetmemoryFLOPS(N)≤targetflops
- w,d,r은 신경망의 너비, 깊이 해상도를 크기 조절하기 위한 계수이다.
- F^i,L^i,H^i,W^i,C^i는 사전 정의된 파라미터이다.
Scaling Dimensions
- 최적의 d,w,r는 다른 것에 의존하고 값은 제약사항에 따라 변한다는 어려움 존재
- 그래서 기존 방법은 3개의 차원 중 1개만 크기 조절 했다.
- Depth (d)
- 깊이 조절은 ConvNet에서 사용되는 가장 흔한 방법이다.
- 신경망이 깊을 수록 더 풍부하고 복잡한 feature을 포착하고 새로운 task를 잘 일반화한다.
- 더욱 깊은 신경망은 사라지는 경사 문제로 인해 학습시키기 어렵다.
- skip-connection, batch normalization 같은 방법이 기법 사용
- ResNet-1000과 ResNet-101은 비슷한 정확도를 갖고 있다.
- 계수 d에 따른 base model의 성능을 살펴보니 더 깊은 모델일수록 정확도의 증가량이 감소하였다.
- Width (w)
- 너비 확장은 주로 작은 크기의 모델에서 많이 사용된다.
- 넓은 신경망은 세밀한 feature를 잘 포착하고 학습하기 쉬운 경향이 있다.
- 하지만 매우 넓고 얕은 모델은 고차원의 feature를 찾기는 어렵다.
- w가 커져 모델이 넓어질수록 정확도를 빠르게 포화된다.
- Resolution (r)
- 입력 이미지의 높은 해상도는, ConvNet이 더욱 세밀한 패턴을 포착할 수 있도록 한다.
- 이전에는 224*224를 사용했지만 최근에는 정확도 향상을 위해 299*299, 331*331을 사용한다.
- GPipe는 480*480으로 SOTA를 달성했다.
- 600*600과 같은 더욱 높은 해상도는 객체 탐지와 같은 task에서 많이 사용된다.
- 더욱 높은 해상도일수록 정확도는 증가하지만 증가량은 해상도가 높아질수록 감소한다.
- Observation1
- 신경망의 너비, 깊이, 해상도를 향상시키는 것은 정확도를 향상시키지만, 그 증가량은 모델이 커질수록 감소한다.
Compound Scaling
- 서로 다른 차원의 크기 조절은 서로 독립적이지 않다.
- 더 높은 해상도를 다루기 위해서는 신경망의 깊이가 증가해야한다.
- receptive field가 더 큰 이미지에서 feature을 잘 포착하는 것을 돕기 위해
- 동일하게 더욱 세밀한 패턴 포착을 위해 너비도 증가시켜야 한다.
- 그러므로 서로 다른 차원의 크기를 조절할 때는 균형을 맞춰야한다.
- 실험 결과, base model의 계수를 모두 1로 했을 때는 정확도가 빠르게 포화됐고, 여러 차원을 같이 증가시킬 경우 가장 성능이 높았다.
- 그렇기 때문에 해당 논문에서는 복합적인 크기 조절 방법을 제안한다.
- 복합 계수 ϕ 사용
- d=αϕ,w=βϕ,r=γϕs.t.α⋅β2⋅γ2≈2(α≤1,β≤1,γ≤1)
- α,β,γ는 Grid Search를 통해서 탐색
- 너비, 깊이, 해상도에 자원을 어떻게 할당할 지 결정
- ϕ는 유저가 설정
- FLOPs는 d,w2,r2에 비례하여 증가
- 위 방법에서는 FLOPs가 α,β2,γ2^\phi에 비례하여 증가
- α⋅β2⋅γ2≈2로 제한을 해서 FLOPs는 대략적으로 2ϕ로 증가한다.
EfficientNet Architecture
- 모델의 크기 조정이 F^i를 바꾸지 않기 때문에 baseline network 설정은 중요하다.
- 정확도와 FLOPS 모두 고려하여 다중 목표 신경망 구조 검색을 활용해 baseline 신경망 발전시켰다.
- 검색 공간은 (Tan et al., 2019)와 동일하게 하였고 최적화 목표로 ACC(m)⋅\[FLOPS(m)/T]를 사용
- m: 모델, T: target FLOPS, w: 정확도와 FLOPS 사이 trade-off 관리
- 탐색을 통해 효과적인 신경망 EfficientNet-B0를 발견
- MnasNet과 유사하지만 조금 더 크다.
- 주요 블록은 mobile inverted bottleneck MBConv
- squeeze-and-excitation 최적화 기법 추가
- compound scaling
- 계산 효율성을 위해 우선 작은 모델에서 파라미터 탐색 후 모델 크기 조정
- ϕ=1로 고정하고 자원을 두 배 더 사용할 수 있다고 가정
- α,β,γ를 Grid Search를 통해 탐색
- α=1.2,β=1.1,γ=1.15
- α,γ,β를 고정하고 ϕ를 조정해 모델 크기 조정
- EfficientNet-B1 ~ B7까지 생성
Experiments
Scaling Up MobileNets and ResNets
- compound scaling의 검증을 위해, 널리 사용되는 MobileNets과 ResNet에 적용
- 한 개의 차원만 조절하는 기존 방식보다 compound scaling이 더욱 성능을 증가시킴
ImageNet Results for EfficientNet
- EfficientNet을 ImageNet 데이터로 학습
- RMSProp(감소 0.9, 모멘텀 0.9, 배치 정규화 모멘텀 0.9,가중치 감소 1e-5)
- 초기 학습률은 0.256, 2.4 에폭마다 0.97씩 감소
- 활성화 함수로 SiLU 사용
- AutoAugment, stochastic depth(0.8) 사용
- EfficientNet-B0는 dropout 0.2, B7는 0.5 적용
- 모든 EfficientNet은 비슷한 성능이지만 훨씬 적은 파라미터 보유
- B7은 GPipe보다 8.4배 작은 모델로 정확도 84.3% 달성
- 이는 좋은 구조, 크기 조정, 학습 방법에서 나왔다.
- B3는 ResNeXt-101보다 18배 FLOPS가 작지만 성능은 더 높다.
- B1은 ResNet-152보다 5.7배 빠르고, B7은 GPipe보다 6.1배 빠르다.
Transfer Learning Results for EfficientNet
- ImageNet 데이터로 사전 학습 후 여러 데이터셋으로 fine-tuning해 성능 평가
- 9.6배 적은 파라미터로 8개의 데이터셋중 5개 데이터셋에서 SOTA 달성
Discussion
- 모든 scaling 방법은 정확도와 FLOPS를 모두 증가시킨다.
- 하지만 coumpound scaling은 정확도를 더 많이 증가시킨다.