티스토리 뷰

작성자 : 한양대학원 융합로봇시스템학과 유승환 석사과정 (CAI LAB)

 

  오늘은 PMLR(Proceedings of Machine Learning Research) 학회의 2019에 나온 딥러닝 논문인 EfficientNet에 대해 리뷰해보겠습니다~!


 

EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks 리뷰

ICML 2019에 제출된 “EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks” 논문에 대한 리뷰를 수행하였습니다.

hoya012.github.io

 

lukemelas/EfficientNet-PyTorch

A PyTorch implementation of EfficientNet and EfficientNetV2 (coming soon!) - lukemelas/EfficientNet-PyTorch

github.com


  • EfficientNet V2가 나왔습니다!! V2도 기회가 되면 리뷰 글을 올려보도록 할게요~!
  • EfficientNet V2 원문 : arxiv.org/pdf/2104.00298.pdf
 

[논문 읽기] EfficientNetV2(2021) 리뷰, Smaller Models and Faster Training

 안녕하세요! 이번에 읽어볼 논문은 2019년에 등장한 EfficientNetV1의 후속작 EfficientNetV2, Smaller Models and Faster Training 입니다.  EfficientNetV2는 빠른 학습에 집중한 모델입니다. 데이터셋의 크..

deep-learning-study.tistory.com


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>

EfficientNet과 타 모델의 성능 비교 표. EfficientNet의 정확도 및 파라미터 수 등, 성능이 훨씬 좋은 것을 볼 수 있음

  • x 축 : 파라미터 수 (= 모델 사이즈), y 축 : 정확도 (On ImageNet)
  • EfficientNet-B7은 ImageNet 데이터에서 가장 성능이 좋은 정확도 84.3%을 달성하며, 기존의 CNN 보다 파라미터 수가 훨씬 적음
  • 그 외의 데이터셋(CIFAR-100 등)에서도 state-of-the-art 정확도를 달성함

1. Introduction 

<CNN에서 정확도를 높이기 위해 사용한 기존 방법들>

  • 기존에는 Depth, Width, Resolution하나를 선택하여, 그 값을 높이는 쪽으로 모델의 정확도를 향상시킴
  • 그러나 기존 Scaling 방법에는 가이드라인이 없으며, 어떤 종류를 얼만큼 높여야 성능이 향상된다는 객관적인 지표가 없음

Baseline Network 예시 (아래와 비교하면서 보세요!!)

 

ResNet : Deep Residual Learning for Image Recognition

작성자 : 한양대학원 융합로봇시스템학과 석사과정 유승환 2016년도에 나온 CNN 아키텍쳐인 ResNet에 대해 리뷰하겠다. AlexNet, VGG, GoogLeNet, ResNet은 과거에 유명했던 CNN 아키텍쳐이고, 지금도 백본으

ropiens.tistory.com

baseline에서 layer 수를 2배씩 늘린 모습

 

[논문 읽기] WRN(2016) 리뷰, Wide Residual Networks

 이번에 읽어볼 논문은 WRN, Wide Residual Networks 입니다.  WRN은 residual netowrk의 넓이를 증가시키고 깊이를 감소시킨 모델입니다. 16 layer로 이루어진 WRN은 1000-layer ResNet 같은 깊은 신경망을 제..

deep-learning-study.tistory.com

Baseline에서 width(channel 수)를 2배씩 늘린 모습

 

TensorFlow KR : [GPipe: Efficient Training of Giant Neural Networks using Pipeline Parallelism]

[GPipe: Efficient Training of Giant Neural Networks using Pipeline Parallelism] 최근 업로드한 D-sne에 이어 GPipe 논문 리뷰 영상 공유 드립니다! 딥뉴럴 네트워크에서 모델의 scaling up 하는 것은 딥러닝 모델 테스크

www.facebook.com

 

Baseline에서 resolution을 2배씩 늘린 모습 (=input image의 크기가 2배 커짐)


<본 연구에서 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/
 

Network Architecture Search

Intro 기존에는 효율적인 딥러닝 모델을 찾기 위해 수많은 실험을 반복하고 경험적으로 최적의 파라미터를 찾아야 했습니다. 최근에는 이러한 과정을 딥러닝으로 해결하려는 연구가 이루어지고

www.secmem.org


  • 2. Background는 3.2.절 내용과 중복이 되므로 생략하겠습니다.

3. Compound Model Scaling

3.1. Problem Formulation 

<Conv Layer의 수식적 표현>

아래의 수식들을 그림으로 표현 // 출처 : 원문 p.3

  • 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가 여러 개 쌓인 형태이므로, 다음과 같이 표기 가능

CNN의 수식적 표현 // 출처 : 원문 p.3

  • ${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 Scalinglayer 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로 표기)

Problem 2 : 최적화 문제의 수식화

  • 정확도는 최대한 높이면서, 연산량은 최대한 줄이는 것.
  • $w, d, r$ : network width, depth, resolutionscaling하기 위한 계수 (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
 

DL #7 : 딥러닝 기울기소실 문제 해결 방법 (Vanishing Gradient)

Vanishing Gradient Problem 깊고 넓은 딥러닝 모델을 학습시키기는 과정에서 출력값과 멀어질수록 학습이 되지 않는 현상을 기울기소실이라고 합니다. 이러한 심층신경망에서 가중치를 Back Propagation으

muzukphysics.tistory.com

  • 이 문제를 해결하기 위해 skip connections batch normalization을 적용ResNet이 등장
  • 그러나 여전히 기울기 소멸 문제가 존재하여, ResNet-101(layer)와 ResNet-1000은 정확도가 비슷
  • 아래의 그림은 Baseline Model에서 w, r은 고정하고 d만을 증가했을 때의 성능 비교 표
  • 네트워크가 깊어지면 성능이 증가하다가, d=6.0부터 성능 향상 폭이 없는 것을 볼 수 있음

Scaling Up a Baseline Model with Different Network Depth


<기존 방법 2 : Width (w) 늘리기 (=channel 수 증가)>

  • Intuition : Wider Network는 세밀한 Feature를 잡을 수 있는 특징이 있으며, deep한 network에 비해 학습이 쉬움
  • 그러나 Wider하지만 깊이가 얕은 networkhigher level Features(더 좋은 Feature map)을 얻는 것이 어려움
  • 아래 그림은 d, r은 고정하고 w만을 증가했을 때의 성능 비교 표.
  • w를 증가 했을 때는 d보다 성능 향상 폭이 꾸준히 있지만, 이 역시도 w=3.8부터 성능 향상 폭이 작아짐

Scaling Up a Baseline Model with Different Network Width


<기존 방법 3 : Resolution (r) 늘리기 (데이터(이미지) 해상도 증가)>

  • Intuition : 입력 이미지의 해상도(=height*Width)가 높을 수록, CNN은 이미지 속의 patterns을 더 잘 포착할 수 있음
  • 초기의 CNN은 입력 이미지의 해상도가 224*224였지만, 현재는 600*600 해상도에서도 학습이 가능하며, 그 결과 역시 정확도가 높음
  • 아래 그림은 w, d를 고정하고 r만 증가했을 때의 성능 비교 표.
  • r이 증가할 수록 성능이 향상되는 것을 볼 수 있음

Scaling Up a Baseline Model with Different Network Resolution.


<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한 결과를 비교함

Scaling Network With Different Depth, Resolutions (w는 고정)

  • 첫번째 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

compound scaling method

  • 이때 $\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라고 명명하고, 그 구조는 아래와 같음

EfficientNet-B0의 구조. 18개의 conv layer를 지님

  • * 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에서는 줄이는 아이디어는 논리적이라고 생각합니당

MBconv 설명 // 출처 : https://seongkyun.github.io/papers/2019/01/09/mobilenetv2/
MBConv 구조 // 출처 : https://gaussian37.github.io/dl-concept-mobilenet_v2/

  • 첫번째 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
 

Different types of Convolutions (Grouped convolution, depthwise convolution, pointwise convolution, depthwise separable convolut

오늘 정리해 볼 것들은 앞으로 정리할 논문들을 위해 미리 알아두면 좋은 convolution입니다. 각 convolution들에 대한 간단한 특징과 param수, 연산량 등에대해서 알아봅시다 ㅎㅎ 들어가기에 앞서 몇

hichoe95.tistory.com


  • 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의 성능이 우위에 있음

Transfer Learning 결과 (모델 별 정확도 비교)

 

Transfer Learning에 사용한 데이터셋 개요


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 할 수 있게 됨

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31