티스토리 뷰
EfficientNet : Rethinking Model Scaling for Convolutional Neural Networks 논문 리뷰
hanyangrobot 2021. 4. 18. 16:34작성자 : 한양대학원 융합로봇시스템학과 유승환 석사과정 (CAI LAB)
오늘은 PMLR(Proceedings of Machine Learning Research) 학회의 2019년에 나온 딥러닝 논문인 EfficientNet에 대해 리뷰해보겠습니다~!
- EfficientNet 깃헙 코드 (Pytorch) : github.com/lukemelas/EfficientNet-PyTorch
- EfficientNet V2가 나왔습니다!! V2도 기회가 되면 리뷰 글을 올려보도록 할게요~!
- EfficientNet V2 원문 : arxiv.org/pdf/2104.00298.pdf
- EfficientNet V2 리뷰 글 : deep-learning-study.tistory.com/567
0. ABSTRACT
<CNN에서 정확도를 높이기 위해 사용한 기존 방법 : Fixed Resource Buget>
- CNN의 정확도를 높이기 위해 모델 크기를 키웠고, 대표적으로 아래 3가지 방법이 있음
- (1) Depth : 모델 layer 수를 늘림
- (2) Width : filter (혹은 channel 수) 수를 늘림
- (3) Resolution : input image의 해상도(크기)를 높임
- 기존의 방법은 위 세가지 중 한가지 방법만을 선택해서, 정확도를 높여왔음
- 예를 들어 Depth를 선택했다면 하드웨어 리소스가 버틸 때 까지 layer 수를 계속 늘림
<본 연구에서 CNN의 정확도를 높이기 위해 사용한 방법 : compound coefficient & EfficientNet>
- 본문에서는 depth, width 그리고 resolution의 balancing이 더 나은 성능으로 이끌 수 있음을 보여줌
- compound coefficient 파라미터를 통해 depth/width/resolution을 scaling함
- EfficientNet : NAS(Neural Architecture Search)를 통해 설계한 새로운 baseline network
- EfficientNet은 기존의 CNN보다 더 정확하고 효율적(=파라미터 수가 적음)임
<EfficientNet의 성능 비교 표 (Model Size VS ImageNet Top-1 Accuarcy>
- x 축 : 파라미터 수 (= 모델 사이즈), y 축 : 정확도 (On ImageNet)
- EfficientNet-B7은 ImageNet 데이터에서 가장 성능이 좋은 정확도 84.3%을 달성하며, 기존의 CNN 보다 파라미터 수가 훨씬 적음
- 그 외의 데이터셋(CIFAR-100 등)에서도 state-of-the-art 정확도를 달성함
1. Introduction
<CNN에서 정확도를 높이기 위해 사용한 기존 방법들>
- 기존에는 Depth, Width, Resolution 중 하나를 선택하여, 그 값을 높이는 쪽으로 모델의 정확도를 향상시킴
- 그러나 기존 Scaling 방법에는 가이드라인이 없으며, 어떤 종류를 얼만큼 높여야 성능이 향상된다는 객관적인 지표가 없음
- (1) Depth -> ResNet (He et al., 2016) : ResNet-18(layer) 부터 ResNet-200까지 layer 수를 증가시키면서 정확도 향상
- * ResNet이란? ropiens.tistory.com/32?category=896592
- (2) Width -> Wide Residual Network (Zagoruyko & Komodakis, 2016) : ResNet의 conv filter 수 증가
- * WRN 이란? deep-learning-study.tistory.com/519
- (3) Image Resolution -> GPipe (Huang et al., 2018) : baseline model을 4배만큼 키움으로써 정확도를 향상 시킴
- * GPipe란? www.facebook.com/groups/TensorFlowKR/permalink/1149555418718848/
<본 연구에서 CNN의 정확도를 높이기 위해 사용한 방법 1 : Compund Scaling Method>
- 본 연구에서는 'Process of Scaling Up CNN'에 대해 다시 생각해봄
- 본 연구의 핵심 질문 : "CNN의 더 높은 정확도와 효율성을 달성할 수 있는 Scaling 방법의 원칙이 있을까?"
- 본 연구의 결과는 네트워크의 width/depth/resolution의 balance를 맞추는 것이 중요하다는 것을 보여줌
- 이 balance는 width/depth/resolution을 각각 일정한 비율로 증가하기만 하면 됨
- 본문에서는 실험 결과를 바탕으로, 간단하고 효율적인 compound scaling method를 제안함
- 기존 연구는 이러한 요인(width/depth/resolution)을 임의의 값으로 증가시켰지만, 본 연구에서는 고정된 스케일링 계수 세트를 사용하여 각 요인을 균등하게 스케일링함
- 예를 들어 컴퓨팅 리소스를 2^N배 만큼 더 사용하고 싶으면, 다음과 같이 파라미터들을 N승으로 증가시킴
- depth by $\alpha ^{N}$, width by $\beta ^{N}$ 그리고 image size by $\gamma ^{N}$
- 이때, $\alpha$, $\beta$ 그리고 $\gamma$는 constant coefficients이며, original small model에서 grid search를 통해 결정됨
<본 연구에서 CNN의 정확도를 높이기 위해 사용한 방법 2 : New Baseline - EfficientNet>
- 우리는 실험 결과를 통해 기존의 MobileNets과 ResNet에 우리의 scaling method가 잘 작동된다는 것을 볼 수 있음
- model scaling의 효과는 baseline network(ex : MobileNets, ResNet)에 크게 의존함
- 본 연구에서는 NAS(Neural Architecture Search)를 통해 새로운 baseline을 개발했으며, 이를 EfficientNet이라고 부름
- * NAS란? : www.secmem.org/blog/2019/07/19/Network-Architecture-Search/
- 2. Background는 3.2.절 내용과 중복이 되므로 생략하겠습니다.
3. Compound Model Scaling
3.1. Problem Formulation
<Conv Layer의 수식적 표현>
- i번째 Conv Layer는 다음과 같이 표기 가능 : $Y_{i}=F_{i}\left(X_{i} \right)$
- $F_{i}$ : layer operator (layer 연산 그 자체를 의미)
- $X_{i}, Y_{i}$ : input, output (tensor, shape : (Height, Width, Channel))
- * batch dimension은 생략
- CNN은 위와 같은 Conv Layer가 여러 개 쌓인 형태이므로, 다음과 같이 표기 가능
- ${F_{i}}^{L_{i}}$ : layer $F_{i}$가 stage $i$ 에서 $L_{i}$ 만큼 반복됨
- $H, W, C$ : layer $i$의 input tensor $X$의 형태 (Height, Width, Channel)
- Conv Layer를 거치면 spatial dimension(Height, Width)은 작아지고, channel dimension은 증가함
- 예시로, 위 그림에서 input shape(H : 224, W : 224, C : 3)이면, output shape은 (7, 7, 512)가 됨
<CNN 아키텍쳐 수정 방법>
- 일반적으로 CNN 아키텍쳐 디자인은 가장 성능이 좋은 layer architecture $F_{i}$를 찾는 것에 중점을 둠
- 그러나 Model Scaling은 layer architecture $F_{i}$의 변경 없이, network length($L_{i}$), network width($C_{i}$), 그리고/혹은 resolution($H_{i}, W_{i}$)만을 확장함
- $F_{i}$를 고정하면, Model Scaling은 아키텍쳐 설계 문제를 단순화할 수 있음
- 그러나 각 layer에서 각각 다른 $L_{i}, C_{i}, H_{i}, W_{i}$를 찾아야 하는, 넓은 design space로 남겨져 있음
- Design Space를 더 줄이기 위해, 본 연구에서는 모든 layer의 배율을 일정한 비율로 균일하게 조정하도록 제한함
- 본 연구의 목표는 resource가 제한된 환경(=GPU 성능)에서 model 정확도를 최대화하도록 하는 것이고, 최적화 문제는 수식화할 수 있음 (본문에서는 이를 problem 2로 표기)
- 즉 정확도는 최대한 높이면서, 연산량은 최대한 줄이는 것.
- $w, d, r$ : network width, depth, resolution을 scaling하기 위한 계수 (coefficients)
- $F_{i}, L_{i}, H_{i}, W_{i}, C_{i}$ : baseline network에서 미리 정의한 파라미터들
3.2. Scaling Dimensions
<최적화 문제의 어려움>
- 위 최적화 문제(problme 2)의 주요 어려움 : $d, w, r$의 최적 값은 서로 의존하며, 서로 다른 리소스 제약 조건 하에서 값이 변화함
- 예를 들어, GPU 성능이 좋으면 $d, w, r$은 매우 커도 되지만, 반대로 GPU 성능이 좋지 않으면 $d, w, r$의 값은 작아져야 함
- 이러한 어려움으로 인해 기존 방법은 $d, w, r$ 중 하나로 CNN을 확장함
<기존 방법 1 : Depth (d) 늘리기 (=layer 수 증가)>
- Intuition : Deep한 CNN은 더 좋은 Feature map을 생성할 수 있음 -> 새로운 데이터에 대해 일반화 성능이 좋음
- 그러나 network가 깊어질수록, 기울기 소멸 문제 (Vanishing Gradient Problem) 때문에 학습이 어려움
- * 기울기 소멸 문제란? : muzukphysics.tistory.com/193
- 이 문제를 해결하기 위해 skip connections과 batch normalization을 적용한 ResNet이 등장
- 그러나 여전히 기울기 소멸 문제가 존재하여, ResNet-101(layer)와 ResNet-1000은 정확도가 비슷함
- 아래의 그림은 Baseline Model에서 w, r은 고정하고 d만을 증가했을 때의 성능 비교 표
- 네트워크가 깊어지면 성능이 증가하다가, d=6.0부터 성능 향상 폭이 없는 것을 볼 수 있음
<기존 방법 2 : Width (w) 늘리기 (=channel 수 증가)>
- Intuition : Wider Network는 세밀한 Feature를 잡을 수 있는 특징이 있으며, deep한 network에 비해 학습이 쉬움
- 그러나 Wider하지만 깊이가 얕은 network는 higher level Features(더 좋은 Feature map)을 얻는 것이 어려움
- 아래 그림은 d, r은 고정하고 w만을 증가했을 때의 성능 비교 표.
- w를 증가 했을 때는 d보다 성능 향상 폭이 꾸준히 있지만, 이 역시도 w=3.8부터 성능 향상 폭이 작아짐
<기존 방법 3 : Resolution (r) 늘리기 (데이터(이미지) 해상도 증가)>
- Intuition : 입력 이미지의 해상도(=height*Width)가 높을 수록, CNN은 이미지 속의 patterns을 더 잘 포착할 수 있음
- 초기의 CNN은 입력 이미지의 해상도가 224*224였지만, 현재는 600*600 해상도에서도 학습이 가능하며, 그 결과 역시 정확도가 높음
- 아래 그림은 w, d를 고정하고 r만 증가했을 때의 성능 비교 표.
- r이 증가할 수록 성능이 향상되는 것을 볼 수 있음
<Observation 1>
- network의 width, depth 혹은 resolution의 차원을 scaling up하는 것은 정확도 향상에 도움이 되지만, 모델이 커질수록(=bigger FLOPS) 성능 향상 폭이 작아짐
3.3. Compound Scaling
<모든 차원(w, d, r)을 scaling 해야 하는 이유>
- 위 실험 결과를 통해, different scaling dimensions은 독립적이지 않다는 것을 관찰할 수 있음
- 직관적으로 고해상도 이미지를 입력으로 받는 경우, 더 큰 receptive fields(feature map에서 하나의 픽셀?을 의미하는 듯)는 큰 이미지에서 더 많은 픽셀을 포함하는 유사한 feature를 추출할 수 있도록, 네트워크 depth를 더 늘려야 함
- 또한 고해상도 이미지에서 더 많은 픽셀의 패턴을 캡쳐할 수 있도록 네트워크의 width도 늘려야 함
- 이러한 직관들은 기존의 단일 차원 스케일링(w, d, r 중 하나만 스케일링)보다는 모든 차원(w, d, r 모두)에 다른 값을 스케일링 함으로써 균형을 맞출 필요가 있음을 시사함
- 위를 검증하기 위해, 우리는 아래 그림과 같이 서로 다른 depths, resolutions에서 scaling한 결과를 비교함
- 첫번째 Baseline network(파란색, d=1.0, r=1.0)는 18개의 conv layer와 224*224 해상도를 지님
- 마지막 Baseline(빨간색, d=2.0, r=1.3)은 36개의 conv layer와 299*299 해상도를 지님
- 네트워크가 깊어지고, 고해상도가 될수록 정확도가 향상됨
- tmi : d를 고정하고 w,r을 동시에 증가시킨 것과 r을 고정시키고 w,d를 동시에 증가시킨 정확도 비교 표도 있으면 좋았을텐데...ㅋㅋ
<Observation 2>
- 더 나은 정확성 및 효율성을 위해 CNN의 depth, width 및 resolution의 모든 차원의 균형을 맞추는 것이 중요함
<Compound Scaling Method>
- 본문에서는 새로운 compound scaling method를 제안함
- compound coefficient $\phi$를 사용함으로써 network의 w, d, r을 아래의 수식과 같이 scaling함
- 이때 $\alpha$, $\beta$, $\gamma$는 small grid search(NAS의 개념인듯)에 의해 결정되는 상수(고정된 값)임
- compound coefficient $\phi$는 사용자의 리소스(GPU 성능)에 따라 사용자가 조절할 수 있음
- depth를 2배하는 것은 FLOPS가 2배로 증가하지만, width와 resolution을 2배 증가하면 4배로 증가하기 때문에, total FLOPS st을$α · β^{2} · γ^{2} ≈ 2$로 설정함
- 위와 같은 total FLOPS 설정 덕분에, 어떠한 $\phi$ 값을 설정해도, total FLOPS는 $2^{\phi}$ 만큼 증가함
4. EfficientNet Architecture
<Baseline Network의 중요성>
- Model Scaling은 layer Operators $F_{i}$가 고정되어 있기 때문에, 좋은 baseline network를 가지는 것은 매우 중요함
- 우리의 scaling method(Compound Scaling Method)를 기존의 CNN에서도 평가할거지만, 효과를 좀 더 극명하게 드러내기 위해 새로운 mobile-size baseline를 설계했고, 이를 EfficientNet이라고 부름
- EfficientNet은 NAS에서 정확도 및 FLOPS를 모두 챙길 수 있도록 최적화 했으며, 그 결과 가장 base한 네트워크를 EfficientNet-B0라고 명명하고, 그 구조는 아래와 같음
- * MBconv란? : Mobile Inverted Bottleneck
- ResNet에서 사용되는 Bottleneck는 channel 수를 마지막에서 4배 증가시키는데, Inverted Bottleneck은 중간에서 channel 수를 늘리고, 마지막에서 감소시키는 구조
- 실질적인 Feature Map 추출은 3*3 kernel size를 지니는 conv layer에서 진행되기 때문에, 이렇게 3*3 conv에서는 채널 수를 늘리고, 1*1 conv에서는 줄이는 아이디어는 논리적이라고 생각합니당
- 첫번째 layer : Expansion Layer // 1*1 conv filter를 이용하여 expand_ratio를 바탕으로 out channels를 늘리는 역할
- * 위 구조에서 MBConv'n' 에서 n이 expand_ratio 값
- 두번째 layer : 3*3 Depthwise Conv Layer // 3*3 conv filter를 이용하여 depthwise conv 연산 진행
- 세번째 layer : 1*1 projection layer // 1*1 conv filter를 이용하여 원하는 out channels로 수정하는 역할
- * detphwise, projection conv란? : hichoe95.tistory.com/48
- EfficientNet-B0로 부터 시작해서, 우리의 scaling method는 아래의 두 단계로 구성됨
- 위 내용 요약 : 먼저 compound coefficient $\phi$를 1로 고정해서 최적의 $\alpha, \beta, \gamma$를 구한 다음, 이 값들을 고정하여 서로 다른 $\phi$로 scaling 함으로써, EfficientNet B1에서 B7까지 만듦 (이에 대한 성능은 5절에서 비교)
- 각 모델의 scaling parameter은 아래와 같음 (출처 : 위 깃헙 코드)
- EfficientNet B0~B3 까지의 feature map size(resolution), channels 그리고 layer 수의 변화
5. Experiments
<EfficientNet Performance Results on ImageNet VS previous CNN architecture>
- 파라미터 수(FLOPs 크기) 별로 모델들을 정렬함
- EfficientNet-B7은 기존의 state-of-the-art인 GPipe와 동일한 성능인데, 파라미터 수가 8.4배 가량 적은 것을 볼 수 있음
5.1. Scaling Up MobileNets and ResNets
- MobileNets과 ResNets에 compound scale을 적용한 결과, 기존의 FLOPS과 유사하면서 정확도가 소폭 증가한 것을 볼 수 있음 -> Baseline Networks의 중요성이 여기서 한번 더 재조명 됨
5.2. ImageNet Results for EfficientNet
- 위에서 봤던 ImageNet에 대한 모델 별 정확도 비교 그래프.
- EfficientNet은 정확도와 연산량을 모두 잡음으로써, 효율적인 network이라는 것을 강조함
5.3. Transfer Learning Results for EfficientNet
- 전이 학습 : ImageNet과 같은 대량의 데이터에서 pre-train을 하고, 새로운 데이터(CIFAR10, Birdsnap 등등)에서 fine-tuning하는 학습 방법
- 전이 학습의 결과도 EfficientNet의 성능이 우위에 있음
6. Discussion
<Contribution of Compound Scaling Method from the EfficientNet Architecture>
- 이 결과 역시, 본문에서 제시한 compound scaling을 적용한 것이 성능이 제일 좋음
- CAM : 이미지 내에서 어떤 부분이 활성화되는지를 볼 수 있음 (빨간색 : 해당 class가 강하게 반응, 파란색 : 해당 class가 약하게 반응)
- CAM 결과 역시 compound scaling을 적용한 것이 더 효과가 좋음을 볼 수 있음
- (마카롱 CAM 이미지에서 4개의 마카롱이 활성화 된 것을 볼 수 있고, 미로 CAM 이미지에서 미로 부분이 활성화 된 것을 볼 수 있음)
7. Conclusion
- 기존의 CNN scaling 방법은 depth, width, resolution 중 하나 혹은 2개만을 고려했지만, 이는 정확도와 효율성을 모두 챙기지 못함 (ex : 네트워크 깊이가 깊어질수록 성능 향상 폭이 감소)
- 이러한 이슈를 해결하기 위해, 본 연구에서는 효과적인 scaling 방법인 compound scaling을 제안함
- compound scaling을 MobileNet, ResNet 그리고 새로 개발한 EfficientNet에 적용함으로써, state-of-the-art 정확도를 달성하면서도 파라미터 수와 FLOPs가 더 작아짐 (ImageNet, 전이학습 모두)
- 즉 compound scaling을 통해 network를 보다 효율적으로 scaling 할 수 있게 됨
'sinanju06 > 딥러닝 논문 리뷰' 카테고리의 다른 글
강화학습 논문 정리 4편 : PER 논문 리뷰 (Prioritized Experience Replay) (0) | 2021.07.28 |
---|---|
강화학습 논문 정리 3편 : DDQN 논문 리뷰 (Deep Reinforcement Learning with Double Q-learning) (4) | 2021.06.20 |
강화학습 논문 정리 2편 : DDPG 논문 리뷰 (Deep Deterministic Policy Gradient) (9) | 2021.03.16 |
ADAM : A METHOD FOR STOCHASTIC OPTIMIZATION 리뷰 (5) | 2021.02.21 |
Focal Loss for Dense Object Detection 리뷰 (4) | 2021.02.05 |