HANA : Have A Nice AI

모두를 위한, 하나를 위한 AI

딥러닝을 위한/SOTA(State-of-the-Art)

[논문요약] 효율적인 Architecture - EfficientNet(2019)

KM-Hana 2021. 4. 14. 19:12

*크롬으로 보시는 걸 추천드립니다*

 

kmhana.tistory.com/25

 

[논문요약] Classification 학습방법 - Bag of Tricks(2018)

*크롬으로 보시는 걸 추천드립니다* 이미지 Classification의 성능을 최대한도로 높이기 위한 방법을 제시하는 논문 : Bag of Tricks for Image Classification with CNN [arxiv.org/pdf/1812.01187.pdf] 을 소개..

kmhana.tistory.com

Classification 학습방법 - Bag of Tricks에 이어서, 효율적인 CNN Architecture를 다루고자 합니다.

 

arxiv.org/pdf/1905.11946.pdf

종합 : ⭐⭐⭐

1. 논문 중요도 : 5점

2. 실용성 : 5점

설명 : 아름다운 논문 중 하나. 실용적인 모델을 중요시하는 사람으로서, 이 논문이 딥러닝에 기여하는 점이 크다.

   - 실용성 갑 중의 갑

   - 적은 Parameter 대비 압도적인 성능!

   - 모델의 성능 = resolution x depth x width → 세 구성요소의 최적의 비율을 찾음

   - 꼭 읽어야 될 논문 중 하나!

 

( * 개인적인 의견이며, 제 리뷰를 보시는 분들에 도움드리기 위한 참고 정도로 봐주세요)

 


 

ResNet이나 Inception 계열이 주류(Main Stream)가 된 이후,

데이터와 Parameter를 때려 넣은 모델이 ImageNet 리더보드를 장악하고 있을 때쯤!

2019년 EfficientNet이 등장했습니다.

 

   1. 적은 파라미터로 효율적인 성능을 내려던 Inception의 초기 이념과

   2. 쉬운 Architecture 구성으로 높은 성능을 내고자 했던 ResNet의 초기 이념의

   3. 결합(?)이라고 보고 있습니다.

 

게다가, NasNet처럼 Neural Architecture Search - AutoML를 사용하여, 기본 Architecture의 골격을 만들었습니다.

종합 선물 세트 같은 EfficientNet은 여러 가지 의미에서

2019년도의 Image 분야에서의 가장 중요한 논문 중 하나입니다.

 

당시, 압도적인 성능은 매우 놀라웠습니다.(이게 진짜 가능한가? 라는 의문이 들 정도)

 

실용적인 AI모델 개발을 꿈꾸는 저에게, EfficientNet 리뷰는 당연하다고 할 수 있습니다


Introduction

효율적이며, 확장 가능하면, 높은 성능의 CNN 모델 

   1. 네트워크의 Depth, Width, Resolution 간의 조율(Balance)을 통해, 효과적이면서 좋은 성능을 얻음

      → 네트워크의 Depth, Width, Resolution로 구성된 복합 계수 제안

          "Uniformly scales all dimensions of depth/width/resolution"

 

   2. ResNet과 MobileNet에도 적용 가능함!

      → EfficietNet의 아이디어는 확장 가능성이 높음

 

   3. Transfer Learning에서도 더 작은 Paramter로 SOTA 달성

      → EfficietNet 논문 이후, Detection 분야에서는 EfficientDet이라는 좋은 논문이 나왔습니다

Scaling Up CNN

  ○ 기존의 성능 향상 방안 : 대표적인 방안은 모델의 크기를 키우는 것

     - 하지만, "어떻게 모델의 크기를 키울 것인가?"에 대한 연구는 부족

     - 기본적인 Scale up 방안 :

         1. Depth : Layer의 수

         2. Width: Filter의 수

         3. Image Size : Resolution

     - 수동으로 Scale을 조절하여, 차선(Sub-optimal)의 정확도와 효율성을 얻음

 

  ○ Motivation : "모델 Scale up의 원리는 무엇일까?"에 대한 궁금증을 풀기 위한 연구 진행

     - Depth, Width 및 Resolution 간의 균형(Balance)이 중요

     - 단순한 비율(고정된 계수)을 통해 적합한 균형을 얻을 수 있음

        * 가정 : Computational Resolution이 \( 2^{N} \)만큼 증가할 경우, 적정 Scaling Up 비율

        *  Depth, Width, Image Size를 각각 \( \alpha^{N}, \beta^{N}, \gamma^{N} \) 만큼 증가시킴

        *  \( \alpha, \beta, \gamma \)는 사전에 정해진 각각의 고정 계수

 

  ○ Scaling Up 효과에 대한 직관적인 관점 

     - 해상도가 커지면, Receptive Field를 키우기 위해서, 더 많은 Layer가 필요

     - 해상도가 커지면, 더 세밀한 패턴을 캡처(Capture) 하기 위해서, Channel을 키워야 함

 

  ○ 논문의 의의 

     - 과거, Width와 Depth 간의 연관성에 대한 연구는 있지만, 

     - 3개의 차원에 대한 관령성을 정량화한 첫 번째 시도

 

     - ResNet 및 MobileNet에서도 Compound Scaling Up 개념이 잘 작동하지만,

     - Model Scaling의 효율성은, 어떤 Architecture를 사용하느냐에 영향을 받음

     1. 저자는 Neural Architeture Search(NasNet)를 사용하여, New Baseline Network를 개발

     2. 개발된 New Baseline Network를 바탕으로 Scaling Up 하면서, Family Network를 만듦

 

Related Work

  ○ CNN Accuracy 

     - Parameter가 커지면서, 더 높은 정확도를 얻고 있음

       * GoogleNet(6.8 M/ 74.8 %) → SENet(145 M/ 82.7 %) → GPipe(557M / 84.3 %)

       * Parameter가 커짐에 따라서, 특수한 병렬 처리(Different Accelerator)가 필요

     - 자원의 한계 상황에 도달했기 때문에, 더 나은 효율적은 모델이 필요

 

  ○ CNN Efficiency

     - CNN은 종종 Over-Parameterized 됨

     - 모델 사이즈를 줄이거나 Neural Architecture Search를 사용

        * Hand-Craft 모델보다 종종 더 효율적이며, Fine-Tuning 불필요

        * 작은 모델에는 NasNet 방법이 적합할 수 있으나, 큰 모델에 적용할 수 있을지는 불분명(Unclear)

     - Super Large CNN에서도 높은 효율성을 얻을 수 있도록, Model Scaling 관점에서 연구 진행

 

  ○ Model Scaling 

     - Depth(=Layers), Width(=Channels), Resolution(=Image Size)

     - Image Size의 증가는 더 높은 FLOPs가 증가됨

     - Depth와 Width는 CNN의 표현력과 관련된 중요한 역할을 하지만,

       어떻게 효율적으로 Scaling 할 수 있을지 밝혀지지 않음

    ▶ 3개의 Scale 요소에 대하여, 체계적(Systematically)이며 경험적(Empirically)으로 실험 진행함

Compound Model Scaling

     -  Scaling을 공식화(Formulation)하여 문제를 해결하고자 함

 

  ○ Problem Formulation

$$ \mathcal{N} = \bigodot_{i=1...s}\mathcal{F}^{L_{i}}_{i}\left ( X_{\left \langle H_{i},W_{i}, C_{i} \right \rangle} \right ) $$

     - \( \mathcal{N} \) : CNN 모델

     - \( F_{i} \) : Height, Width, Channel로 구성된 Layer (Operator)

     - \( L_{i} \) : Stage \( i \) 에서의 반복 수(Repeated Times in stage \( i \)  )

 

  ○ Compound Model Scaling의 문제 정의

    ※ 일반적인 CNN Architecture에서는 최고의 Layer \( F_{i} \) 를 찾지만,

       EfficientNet에서는 \( F_{i} \)를 고정하고 나머지를 조절함

     - 좀 더 단순한 모델 디자인을 위해서, 비율을 균일하게 조정하는 방식을 제안함

 

     - 주어진 Recource 제약 내에서, 최대 성능을 얻는 최적화 문제

     - 주어진 모델의 메모리와 FLOPs 제약 내에서 최대의 정확도(Accuracy)를 가지는 모델을 찾고자 함

     - Hat 표기의 의미 : 사전 정의(Pre-defined)된 Parameter

     - Model의 Operator를 정한 후에는, width(w), depth(d) 및 resolution(r)의 Scaling 계수를 최적화시킴

 

  ○ Scaling Dimensions :

     - 각 Dimension(w, d, r)은 서로에게 영향을 주며, 서로 다른 리소스 제약 내에서 영향을 받음

     - 각 Dimension(w, d, r)은 커질수록 정확도가 향상되지만, 성능 향상 폭은 점차 감소되거나 심지어 낮아질 수도 있음

 

     - Width 

        * 특징 : 1. 작은 모델의 사이즈를 키울 때 많이 사용됨

                   2. 세밀(Fine-Grained)한 Feature를 Capture 하기 위해 많이 사용됨

        * 단점 : 1. Shallow 모델( = Layer가 낮은)에서, 상위 레벨의 복합적인 Feature를 파악하기 어려움

                  2. Width가 넓어짐에 따라 빠르게 포화(Saturate)됨

 

     - Depth

        * 장점 : 1. Capture Richer and more Complex Feature

        * 단점 : 1. Skip-Connection이나 Batch Norm으로 완화하고 있지만, Vanishing Gradient로 학습하기 어려움

                  2. 특정 층 이상으로 쌓이면, 성능이 저하됨

 

     - Resolution

        * 장점 : 1. 세밀(Fine-Grained)한 Feature를 Capture 하기 위해 많이 사용됨

                   2. Detection처럼 복잡한 Task에서 더 높은 Resolution을 사용

                   3. Resolution의 증가는 정확도에 영향을 줌

        * 단점 : 1.  Resolution의 증가할수록, 성능 증가폭은 감소됨

                       ( r = 1.0 - 224x224 /   r = 2.5 - 560x560)

              

  ○ Compound Scaling의 필요성 :

 

     - 실험적으로, 더 넓은 Resolution은 더 큰 Receptive Field가 필요하다 (= Layer 증가 필요)

        ∵ Resolution이 커지면, 유사한 픽셀의 영역이 증가하므로

 

     - 더 넓은 Resolution을 더 잘 사용하기 위해서는 Fine-Grain Pattern을 캡처가 필요(= Channel 증가 필요)

        ∵ Fine-Grain Pattern과 Channel의 크기(width)는 연관

 

     - 단일 차원의 Scaling이 아닌, 복합적인 차원의 균형 및 조정이 필요하다는 직관을 얻음

 

  ○ Compound Scaling의 구성 :

     - \( \phi  \) : 자원이 추가될 경우에, Model Scaling을 비례해서 증가시킬 계수(User-Specified Coef)

     -dimension과 FLOPs의 관계 : \( d \propto FLOPs, w \propto FLOPs^{2}, r \propto FLOPs^{2} \)

     - 총 FLOPs : \( \left ( \alpha \cdot \beta^{2} \cdot \gamma^{2}  \right )^{\phi } \) 와 비례

     - FLOPs를 \( \phi  \)에 따라서, 2배씩 증가하도록 설정하기 위해, \( \left ( \alpha \cdot \beta^{2} \cdot \gamma^{2}  \right ) = 2\) 로 제한 

 

EfficientNet Architecture

     - 이번 Section에서는 위에서 정의한 Problem을 어떻게 해결했는지 설명합니다.

 

     - 위에 문제 정의에서, \( F_{i} \)는 고정되어야 하며, Baseline Network가 매우 중요

     - 저자는 "Multi-Object Neural Architecture Search"를 통해, New Mobile-size Baseline(= EfficietNet-B0) 제안

 

  ○ Multi-Object Neural Architecture Search :

     - Accuracy와 FLOPs, 둘 다를 최적화

$$ ACC(m) \times [FLOPs(m)/T]^{w} $$

     - \( m \) : Model   /  \( T \) : 목표 FLOPs

     - \( w = -0.07 \) : Accuracy와 FLOPs 간의 Trade-off를 조절하는 Hyper-Parameter

     - MNasNet보다 좀 더 큰 FLOPs(400 M)를 타겟으로 하여, EfficietNet-B0 모델이 약간 더 큼

     ※ MNasNet[논문]에서 사용한 방법과 유사한데, 차이가 있다면,

        MNasNet에서는 "Accuracy"와 "핸드폰과의 Latency"가 타겟 Object이다.

 

     - 기본 Block 구조 : MBConv + Squeeze-and-Excitation optimization

     - EfficientNet-B0의 성능도 매우 뛰어난데,

       "Neural Architecture Search"를 통해 모델을 구성했다는 것에 많은 생각할 꺼리를 준다.

 

   ※ MBConv 란?

더보기

   ※ MBConv 란?

     - MBConv은 Narrow → Wide Narrow 순이다.

  ○ EfficientNet에서의 Compound Scaling Method 적용(2단계) :

 

     - Step 1 : \( \phi = 1 \)로 고정했을 때, 자원(Resource)이 두 배로 증가된 경우를 가정함

        * \( \alpha , \beta , \gamma  \)값을 Small Grid Search를 통해 찾음

        * 제약조건 : \( \alpha \cdot \beta^{2} \cdot  \gamma^{2} \approx 2  \)

        * Small Grid Search결과 : \( \alpha = 1.2, \;\; \beta = 1.1 ,\;\; \gamma = 1.15  \)

 

     - Step 2 : \( \alpha , \beta , \gamma  \)을 고정한 상태에서, \( \phi  \)가 증가함에 따라서,

                  Depth(\( 1.2^{\phi}  \)), Width(\( 1.1^{\phi}  \)), Resolution(\( 1.15^{\phi}  \)) 을 증가시킴

 

     ※ 증가되는 \( \phi  \)마다 최적의 \( \alpha , \beta , \gamma  \)을 찾을 수도 있지만, 

        모델이 커질수록 검색(Search) 비용이 매우 비싸짐

 

 

  ○ EfficientNet 세부 학습 설정 :

     - Optimizer : RMSProp(decay 0.9, Momentum 0.9) 

     - BatchNorm : momentum 0.99

     - Weight Decay : 1e-5

     - Learning Rate Schedule : 0.256으로 시작해서, 2.4 Epoch마다 0.97씩 감쇠(Decay)

     - Drop-out Rate : EfficientNet B0 → EfficientNet B7로 증가할 때, 선형적으로 0.2 → 0.5로 증가

     - Training set에서 Mini-Validation set을 나누어서 Early Stopping 진행

        ▶ CheckPoint 모델로 실제 Validation set으로 정확도 재평가

 

     - Activation Function : SiLU(Swish-1)

더보기
※ SiLU란

 

     - Stochastic Depth 사용 (Huang et al., 2016) : Survival Prob. = 0.8

더보기

Stochastic Depth 란?

  - Stochastic Depth 목적 : 짧은 Network로 학습하고, 추론에서는 깊은 Network를 사용하고 싶다

 

  - 학습과정에서 깊이가 단축됩니다(마치 Drop-out처럼)

  - 각 Layer의 하위그룹(Subset)이 무작위로 제외되고, Skip-Connection을 통해 Loss가 우회됨

  - 추론 시에는, 전체 Network를 사용

 

 

     - AutoAugment 사용 (Cubuk et al., 2019) - 다룰 기회가 있으면 한번 다뤄보고 싶은 논문입니다

 

실험 결과

  ○ EfficientNet vs 다른 Architecture :

     - 유사 Parameter 모델들과 비교해서 매우 높은 성능

 

  ○ 추론 속도 비교 :

     - EfficientNet이 추론 속도와 정확도 모두 매우 우수함

 

Transfer Learning 성능:

     - ImageNet으로 학습 후, Transfer 진행

     - 8개 데이터 셋 중, 5개에서 1등

 

  ○ Scaling Up 확장 가능성:

     - MobileNet과 ResNet에서도 Compound Scaling이 중요함

 

     - 정성적 및 정량적 평가 모두에서도, 단일 Dimension을 키우는 것보다 함께 증가시키는 것이 중요

     - 복합적으로 모델을 키우는 것이 성능과 표현력이 우수

 


마치며  

      - EfficientNet은 Scaling Up과 Dimension관점에서 많은 Insight를 준 논문이다.

      - 뿐만 아니라, Neural Architecture Search - AutoML의 무서움을 보여주었다

      - Stochastic Depth, AutoAugmentation 등 여러 기법을 사용했다는 점도 배울 것이 많았다

      - 모델 개발자 입장에서, Neural Architecture Search

        효율적인 모델 성능 고도화 방안에 대해서 많은 시사점이 있다.