논문 링크: https://arxiv.org/abs/1905.11946
EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks
Convolutional Neural Networks (ConvNets) are commonly developed at a fixed resource budget, and then scaled up for better accuracy if more resources are available. In this paper, we systematically study model scaling and identify that carefully balancing n
arxiv.org
한 줄 정리
- CNN(합성곱 신경망) 모델을 효율적으로 확장(scaling)하는 새로운 방법을 제안한 모델
- 연산량 대비 정확도를 최적화한 가장 효율적인 CNN 모델 중 하나
- 모바일 환경에서도 고성능 딥러닝 모델을 사용할 수 있도록 설계된 대표적인 경량 모델
- 복합 확장 (Compound Scaling)
- Depth, Width, Resolution을 균형 있게 증가시킴
- MobileNetV2에서 제안된 MBConv(모바일 인버티드 병목 블록) 사용 → 연산량 감소
- SE 블록(Squeeze-and-Excitation) 추가 → 중요한 채널 강조
- 적은 연산량(FLOPS)과 파라미터로도 높은 정확도를 달성
- ImageNet 및 전이 학습에서 SOTA(State-of-the-Art) 성능 달성
- ImageNet 및 전이 학습에서 SOTA(State-of-the-Art) 성능 달성
Abstract
ConvNet (Convolutional Neural Network) 은 일반적으로 한정된 자원 내에서 개발되며 더 많은 자원이 사용 가능할 경우 더 나은 정확도를 위해 확장된다.
본 논문에서는 네트워크의 Depth, Width, Resolution (해상도)을 신중하게 균형 맞추면 성능이 향상될 수 있음을 증명한다. 이러한 분석을 통해 Depth, Width, Resolution의 모든 차원을 균일하게 확장하는 단순하지만 매우 효과적인 Compound coefficient를 활용한 새로운 확장 방법을 제안했다. 이 방법의 효과를 증명하기 위해 MobileNets와 ResNet을 확장해 실험을 수행했다.
또한 신경망 아키텍처 검색(neural architecture search)을 사용해 Baseline network를 설계하고 이를 확장해 EfficientNet 이라는 모델을 개발했다. EfficientNet은 기존 ConvNet보다 훨씬 더 높은 정확도와 효율성을 달성한다. 특히 EfficientNet-B7은 ImageNet에서 SOTA 성능인 84.3% top-1 accuracy를 기록함과 동시에 기존 최고의 ConvNet보다 8.4배 더 작고 6.1배 더 빠른 추론 속도를 보였다. 또한 EfficientNet은 전이 학습(transfer learning)에서도 뛰어난 성능을 보이며, CIFAR-100(91.7%), Flowers(98.8%) 등등 3개의 전이 학습 데이터셋에서 최고 수준의 정확도를 달성하면서도 기존 모델보다 매우 적은 수의 파라미터만을 사용한다.
💡 전이 학습(Transfer Learning)
기존에 학습된 모델의 지식을 새로운 Task나 데이터셋에 적용하는 머신러닝 기법이다. 즉, 하나의 데이터셋에서 학습한 모델을 다른 관련된 문제에 재사용하는 것이다.
어떤 모델이 대규모 데이터셋에서 이미 학습되었다면 해당 모델의 기존 학습된 가중치와 피처들을 그대로 가져와서 다른 데이터셋에 적용할 수 있다. 이렇게 하면 새로운 데이터셋에서도 훨씬 적은 데이터와 연산량으로도 좋은 성능을 낼 수 있다.
1. Introduction
ConvNet을 확장(scaling)하는 것은 더 나은 정확도를 달성하기 위해 널리 사용되는 방법이다. 예를 들어 ResNet은 레이어의 수를 증가시켜 ResNet-18에서 ResNet-200으로 확장할 수 있다. 또한 기존 GPipe 모델은 모델의 사이즈를 4배 확장해 ImageNet에서 84.3%의 top-1 accuracy를 달성했다. 하지만 ConvNet을 확장하는 과정은 확실하게 이거다! 저거다! 이렇게 정의되어 있지 않으며 다양한 방식이 존재한다.
가장 일반적인 ConvNet을 확장하는 방법은 네트워크의 Depth (깊이), Width (너비) 를 확장하는 것이다. 또 다소 덜 일반적인 방법이지만 당시 점점 인기를 얻고 있는 다른 방법은 이미지 해상도(image resolution)를 확장하는 것이다. 기존 연구에선 일반적으로 Depth, Width, Resolution 중 하나의 차원만을 확장하는 것이 일반적이었다고 한다. 2개를 동시에 혹은 3개를 동시에 확장할 수도 있지만 이러한 임의적인(arbitrary) 확장은 수작업으로 조정을 많이 해야 하며 최적의 정확도와 효율성을 보장받지 못하는 경우가 많다.
때문에 본 논문에서는 ConvNet을 확장하는 과정을 다시 연구했다. 특히 'ConvNet을 효과적으로 확장해 정확도와 효율성을 동시에 개선할 수 있는 원칙적인 방법이 존재하는가?'와 같은 질문을 중점적으로 탐구했다고 한다.
💡 Depth, Width, Resolution
- Depth 늘리기 = 더 많은 레이어 추가
- Width 늘리기 = 각 레이어의 채널 수 증가
- Resolution 높이기 = 더 큰 이미지를 입력으로 사용
실험적 연구 결과에 따르면 네트워크의 Depth, Width, Resolution의 균형을 맞추는 것이 매우 중요하며 놀랍게도 이를 간단하게 각 차원을 일정한 비율로 확장하는 것만으로도 좋은 성능을 달성할 수 있음을 발견했다. 이러한 관찰을 바탕으로 본 논문에서는 간단하면서도 효과적인 복합 확장(compound scaling) 방법을 제안한다.
기존 방식과 달리 본 논문에서는 Depth, Width, Resolution을 임의로 조정하는 것이 아니라 일정한 계수(scaling coefficients)를 사용해 모든 차원을 균일하게 확장하는 벙법을 제안한다. 예를 들어 만약 연산 자원을 2^N 배 더 사용하고 싶다면, 네트워크의 Depth는 α^N 배, Width는 β^N배, Resolution은 γ^N배 증가시키면 된다. α, β, γ 는 기본 모델에서 소규모 Grid search를 통해 결정되는 상수 계수이다.
왜 복합 확장(compound scaling) 방식이 좋을까? 만약 입력 이미지가 커진다면 네트워크는 더 넓은 수용 영역(receptive field)을 얻기 위해 더 깊은 네트워크가 필요하고 (= 레이어 수 증가 = Depth 늘어남) 더 큰 이미지에서 미세한 패턴을 학습하기 위해 더 많은 채널이 필요하다. (= 채널 수 증가 = Width 늘어남) 실제로 이전의 기존 연구들 중 네트워크의 Depth와 Width 사이 일정한 관계가 있음을 밝힌 선행연구가 존재한다. 하지만 Depth, Width, Resolution라는 세 가지 차원 간의 관계를 실험적으로 정량화한 것은 본 연구가 처음이라고 한다.
본 논문에서 제안한 복합 확장(compound scaling) 방법이 기존 MobileNets과 ResNet에서도 효과적으로 작동한다. 특히 모델 확장의 효과는 기본 네트워크의 품질에 크게 의존하기 때문에 본 논문에서 신경망 아키텍처 검색(neural architecture search, NAS)을 활용해 새로운 기본 네트워크를 개발하고 이를 확장해 EfficientNets라는 모델 계열을 설계했다고 한다.
그림 1은 ImageNet에서의 성능 비교 결과를 요약한 것으로 EfficientNets이 기존 ConvNets보다 훨씬 우수한 성능을 보임을 혹인할 수 있다. 특히 EfficientNet-B7은 GPipe의 최고 성능을 뛰어넘으면서도 파라미터 수는 8.4배 더 적고 추론 속도는 6.1배 더 빠르다. 또한 ResNet-50과 비교했을 때 EfficientNet-B4는 top-1 accuracy를 76.3%에서 83.0%(+6.7%)로 향상시키면서도 비슷한 수준의 FLOPS(Floating Point Operations Per Second)를 유지한다. EfficientNets는 ImageNet뿐만 아니라 다양한 전이 학습 데이터셋에서도 뛰어난 성능을 보였다. EfficientNets은 기존 ConvNets 대비 최대 21배 더 적은 파라미터를 사용하면서도 8개의 대표적인 데이터셋 중 5개에서 최고 정확도를 기록했다.
💡 FLOPS(Floating Point Operations Per Second)
FLOPS(부동소수점 연산 초당 수행 횟수)는 컴퓨터나 딥러닝 모델이 1초 동안 수행할 수 있는 부동소수점 연산(Floating Point Operations)의 개수를 의미한다.
딥러닝 모델이 크면 계산량이 많아지고 연산 속도가 느려질 수 있는데 그렇기 때문에 같은 성능을 유지하면서도 FLOPS를 줄이는 게 중요하다고 한다. FLOPS가 높을 땐 연산량이 많아서 더 많은 계산 자원 (GPU, TPU)이 필요하지만 FLOPS가 낮을 땐 같은 성능을 유지하면서도 연산이 효율적이다.
EfficientNet-B4가 ResNet-50보다 6.7% 더 높은 정확도 (76.3% → 83.0%)를 달성했는데 FLOPS는 비슷한 수준이라고 한 것은 EfficientNet이 같은 계산량으로도 훨씬 뛰어난 성능을 낸다는 의미이고 즉, EfficientNet은 FLOPS 대비 성능이 뛰어난 모델이라는 것을 보여주는 것이다.
2. Related Work
ConvNet Accuracy:
AlexNet이 ImageNet 대회에서 우승한 이후로 ConvNet의 크기를 점점 늘려 높은 정확도를 달성해왔다. 2014년 ImageNet 우승 모델인 GoogleNet은 약 680만 개의 파라미터로 74.8%의 top-1 accuracy를 달성했고 2017년 ImageNet 우승 모델인 SENet은 1억 4500만 개의 파라미터를 사용해 82.7%의 top-1 accuracy를 달성했다. EfficientNet이 나오기 전 GPipe는 top-1 accuracy를 84.3%까지 끌어올렸으며 5억 5700만 개의 파라미터를 사용했다. GPipe는 너무 커서 네트워크를 분학해 각각의 다른 가속기에 분산하는 특수한 병렬 처리 라이브러리를 사용해야만 학습할 수 있었다.
이러한 모델들은 주로 ImageNet 을 위해 설계되었지만 기존의 다른 연구들에 따르면 더 나은 ImageNet 모델이 다양한 전이 학습 데이터셋과 객체 탐지와 같은 다른 Computer Vision task에서도 더 나은 성능을 보였다고 한다. 높은 정확도는 많은 곳에서 필수적이지만 하드웨어 메모리의 한계에 도달한 상태에서 추가적인 정확도 향상을 위해서는 더 높은 효율성이 필요하다.
ConvNet Efficiency:
딥러닝 모델은 과매개화 (overparameterization) 된 경우가 많다. 이를 해결하기 위해 모델 압축(Model Compression) 기법이 사용되며 이는 정확도를 약간 희생하는 대신 모델 크기를 줄이는 방법이다.
💡 Overparameterization
이 부분에서 Overfitting 대신 Overparameterization이라는 단어를 사용한다.
Overparameterization은 과매개화, 과도한 파라미터 수를 의미하는 단어로 모델이 필요 이상으로 많은 파라미터 (모델 크기, 레이어 수, 노드 수 등) 를 가지고 있는 상태이다. 반드시 나쁜 것은 아니라 오히려 딥러닝에서는 큰 모델이 더 강력한 표현력을 가질 수 있다. 하지만 연산량이 증가하고 학습 시간이 길어지며 과적합(Overfitting)으로 이어질 가능성이 커진다.
이 부분에서 Overparameterization을 사용한 이유는 무엇일까? ConvNet이 성능을 위해 지나치게 많은 파라미터를 사용하고 있기 때문이다. 본 논문의 목표는 모델이 성능을 유지하면서도 더 작은 모델 (더 적은 파라미터) 로도 같은 성능을 낼 수 있도록 하는 것이기 때문이다.
또한 모바인 환경에서도 실행할 수 있도록 경량화된 ConvNet도 많이 연구되고 있다. 대표적인 예는 SqueezeNets, MobileNets, ShuffleNets 이 있다.
최근에는 Neural Architecture Search (NAS)가 효율적인 모바일 ConvNet을 설계하는 데 점점 더 많이 사용되고 있으며 네트워크의 Depth, Width, Convolutional Kernel의 유형 및 크기를 광범위하게 조정해 수작업으로 설꼐된 모바일 ConvNet보다 더 높은 효율성을 달성했다. 하지만 이러한 기법을 훨씬 더 큰 모델에 적용하는 것은 여전히 불확실하다. 대형 모델은 설꼐 공간이 훨씬 크고 모델이 최적화하는 데 드는 비용도 매우 많이 때문이다.
💡 Neural Architecture Search (NAS)
Neural Architecture Search (NAS)는 딥러닝 구조를 자동으로 설계하는 기법이다. NAS를 사용하면 기존에는 사람이 직접 모델을 설계하던 것을 AI가 최적의 모델 구조를 찾아낼 수 있게 된다.
NAS의 핵심 개념은 다음과 같다.
가장 먼저 NAS는 다양한 모델 구조를 탐색하는데 어떤 모델을 만들 수 있는지 정해진 범위가 필요하다. 예를 들어 사용할 수 있는 레이어 개수, 각 레이어의 채널 수, Convolutional Kernel의 크기 활성화 함수 종류 등이다. 그 후 탐색 전략을 사용해 수많은 모델 후보들 중 가장 좋은 성능을 낼 수 있는 모델을 찾는다. 무작위로 모델을 생성하ㄷ거나 우수한 모델을 선택해 점점 개선하는 등 여러 가지 탐색 방법을 사용한다. 그 후 성능 평가를 진행해 가장 효율적인 모델을 발견한다.
EfficientNet은 NAS를 활용해서 설계된 모델로 기존에는 사람이 직접 모델을 설계하고 Depth, Width, Resolution를 수작업으로 조정했지만 EfficientNet은 NAS를 사용해서 최적의 기본 모델(B0)을 자동으로 찾고 이를 확장(compound scaling)하는 방식인 것이다. 결과적으로 EfficientNet은더 적은 파라미터와 연산량으로도 기존 모델보다 뛰어난 성능을 보이는 최적의 네트워크 구조를 찾을 수 있었다.
본 논문에서는 최신 모델보다 높은 정확도를 유지하면서도 효율성을 극대화할 수 있는 방법을 연구한다. 이를 위해 본 논문에서는 모델 확장(Model Scaling)에 집중한다.
Model Scaling:
ConvNet을 확장하는 방법은 여러 가지가 있다. 예를 들어 ResNet의 경우 네트워크의 Depth를 조정해 확장을 진행했고, WideResNet은 네트워크의 Width (채널 수) 를 조정해 확장을 진행했다. 또한 입력 이미지의 크기를 증가시키면 더 높은 정확도를 얻을 수 있지만 이는 FLOPS 증가라는 비용이 발생한다.
기존 연구에 따르면 네트워크의 Depth와 Width가 ConvNet의 표현력에 중요한 역할을 한다고 밝혀졌다. 하지만 ConvNet을 확장할 때 어떻게 하면 가장 효과적으로 확장할 수 있는지에 대한 명확한 Principled method (원칙) 가 아직 없었다. 즉, 정확도를 극대화하면서도 효율성을 유지하는 최적의 모델 확장 방법은 여전히 답이 없는 문제인 것이다.
본 논문에서는 네트워크의 Depth, Width, Resolution를 함께 고려한 ConvNet 확장 방법을 체계적(systematic)이고 실험적으로(empirically) 연구한다.
3. Compound Model Scaling
3.1. Problem Formulation
ConvNet은 여러 개의 레이어로 구성되어 있으며 각 레이어는 어떤 입력을 받아서 특정 연산을 수행한 후 새로운 출력을 생성하는 구조란 것은 기본 ConvNet 레이어의 정의이다.
ConvNet의 레이어 i는 다음과 같은 함수로 정의할 수 있다. 여기서 F_i는 연산자(operator) 이며 Y_i는 출력 텐서(output tensor), X_i는 입력 텐서(input tensor)이다.즉, 입력 X_i를 받아서 F_i라는 연산을 수행하고 이 레이어에서 계산되는 결과가 Y_i라는 출력 텐서로 나오는 것이다.
입력 텐서의 형태는 (H_i, W_i, C_i) 로 표현되며 H_i, W_i는 공간적 차원(spatial dimensions),C_i는 채널 차원(channel dimension)이다. 예를 들어 컬러 이미지면 (224, 224, 3) = (224 x 224 픽셀, 3채널), 흑백이미지라면 (128, 128, 1) = (128 x 128 픽셀, 1채널)인 것이다.
ConvNet 은 단순히 하나의 레이어로 이루어져 있지 않다. 때문에 ConvNet N은 여러 개의 레이어를 조합한 리스트로 나타낼 수 있다. 실제로 ConvNet의 레이어는 종종 여러 단계(stages)로 나뉘며 각 단계의 모든 레이어는 동일한 구조를 공유한다. 예를 들어 ResNet은 5개의 단계 (stages)로 구성되며 첫 번째 레이어를 제외한 모든 단계에서 동일한 Conv 레이어 구조를 사용한다. (첫 번째 레이어서만 주로 Downsampling을 수행한다고 한다.)
따라서 ConvNet은 위와 같은 식으로 정의할 수 있다.
- F_i^{L_i}는 i번째 단계에서 동일한 레이어 구조가 L_i번 반복됨을 나타낸다.
- H_{<H_i, W_i, C_i>}는 i번째 레이어의 입력 텐서 형태를 의미한다.
일반적인 ConvNet은 공간적 차원(spatial dimensions = 이미지의 크기)이 점차 줄어들고 채널 차원(channel dimensions = 피처 맵의 개수)은 점점 증가하는 경향이 있다. 예를 들어 초기 입력이 (224,224,3)이라면 최종 출력 크기는 (7,7,512)가 되는 것이다. 대부분의 기존 ConvNet 연구는 각 레이어의 아키텍처 F_i를 최적화하는 데 집중했다.
💡 복습하는 차원에서 왜 채널 수는 증가하고 이미지 크기는 줄어들게끔 할까?
CNN의 역할은 이미지에서 유용한 특징 (피처)을 추출하는 것이다. 합성곱(Convolution)과 풀링(Pooling) 연산을 반복하면서 이미지 크기가 줄어든다. 초기에는 큰 해상도를 사용하지만 네트워크를 지날수록 Downsampling이 진행된다. 또한 처음에는 RGB 3채널이지만 네트워크가 깊어질수록 더 복잡한 특징을 학습하기 위해 채널 수가 증가한다. CNN의 각 레이어에서 점점 더 High-level의 특징을 학습하면서 새로운 채널이 생성되는 것이다.
CNN에서 합성곱 연산을 수행하면 기존 이미지에서 특정 패턴을 감지하는 새로운 피처 맵이 생성된다. 채널 수가 증가하는 이유는 더 복잡한 특징을 학습하기 위해서인 것이다.
- 초기 레이어는 단순한 특징(경계선, 색상 변화 등)을 학습
- 중간 레이어는 패턴(모양, 질감 등)을 학습
- 깊은 레이어는 더 고수준의 특징(객체, 얼굴, 의미적 정보)을 학습
반면 모델 확장(model scaling)은 네트워크의 깊이 L_i, 너비 C_i, 해상도 H_i, W_i를 확장하는 방법을 연구하는 것이다. EfficientNet에서는 네트워크의 전체적인 크기를 조절하는 모델 확장 방법을 연구하는 것이 핵심이다. 기본 네트워크에서 F_i를 고정하면 모델 설계 문제를 단순화할 수 있지만 여전히 L_i, C_i, H_i, W_i를 어떻게 확장할지에 대한 탐색 공간이 크다. 이를 줄이기 위해 모든 레이어가 일정한 비율로 확장되도록 제한한다.
모델의 정확도를 최대화하는 동시에 자원 제한을 고려하는 문제를 다음과 같이 최적화 문제로 공식화할 수 있다.
- d, w, r은 각각 네트워크의 Depth, Width, Resolution을 조정하는 계수
- 는 기본 네트워크 (= 베이스라인 모델)에서 미리 정의된 값
- 메모리 제한: 모델이 사용할 수 있는 메모리 한계 내에서 동작해야 함
- FLOPS 제한: 연산량이 특정 범위를 초과하면 안 됨
즉, EfficientNet의 목표는 주어진 메모리와 연산량 제한 내에서 정확도를 최대화하는 네트워크를 찾는 것이다.
3.2. Scaling Dimension
이 최적화 문제에서 가장 어려운 점은 최적의 d, w, r 값이 서로 의존적이며 자원 제한에 따라 값이 달라진다는 것이다. 때문에 기존 연구들에선 주로 ConvNet의 한 가지 차원만 확장하는 방법을 사용했을까...싶다.
Depth (d):
네트워크의 Depth 를 증가시킨다는 것은 네트워크의 레이어 개수를 늘리는 것을 의미한다. Depth를 증가시키면 더 복잡한 특징을 학습할 수 있다. 왜냐하면 CNN의 초기 레이어에서는 단순한 엣지, 색상 변화와 같은 저수준(low-level) 특징을 학습 하지만 네트워크가 점점 깊어지면 점점 더 복잡한 형태, 물체, 의미적 정보를 학습할 수 있기 때문이다. 그렇게 된다면 추론할 수 있는 개념이 많아져 얕은 네트워크는 '얼굴'을 인식할 수 있지만 깊은 네트워크는 '웃는 얼굴' 과 같은 복합적인 개념을 학습할 수 있다. 하지만 네트워크가 너무 깊어지면 기울기 소실 문제 (vanishing gradient problem)가 발생해 학습이 어려워진다. 예를 들어보자면 ResNet-101과 ResNet-1000의 정확도 차이는 크지 않는데 이를 통해 너무 깊어도 정확도 향상이 크지 않음을 알 수 있다.
Width (w):
네트워크의 Width 를 늘린다는 것은 각 레이어에서 사용하는 채널 수 (= 필터 수) 를 늘리는 것을 의미한다. Width를 늘리면 더 세밀한 특징을 학습할 수 있고 학습이 쉬워진다. 다양한 패턴을 잡아낼 수 있다는 의미이다. 예를 들어 고양이의 다양한 털 패턴이나 세부적인 모양 등을 학습하는 데 유리하고 Width 를 늘리면 모델이 여러 개의 특징을 병렬로 학습할 수 있어서 학습 과정이 더 안정적이 될 수 있다. 하지만 너무 넓은 네트워크는 높은 수준의 특징을 학습하는 데 어려움이 있다. 각 레이어에서 학습하는 특징들이 비슷 비슷해질 가능성이 있다는 것이다. 또한 Width를 늘리면 각 레이어에서 처리해야 하는 데이터 양이 증가하면서 FLOPS가 급격히 증가한다.
Resolution (r):
Resolution을 확장한다는 것은 입력 이미지 크기를 증가시키는 것을 의미한다. 입력 이미지의 크기를 키우면 더 세밀한 패턴을 파악할 수 있다. 작은 이미지에서는 인식하기 어려운 세밀한 특징을 학습할 수 있다. 초기 ConvNet은 224 x 224 이미지를 사용했지만 최신 모델들은 299 x 299, 480 x 480, 심지어 600 x 600 해상도를 사용하기도 한다. 하지만 해상도가 너무 커지면 정확도 향상이 점점 줄어드는 현상(diminishing return)이 발생한다. 일정 수준 이상으로 Resolution 을 증가시키면 정확도 향상이 거의 없거나 미미해진다는 의미이다. 또한 Resolution이 커질수록 네트워크에서 처리해야 하는 데이터 크기가 커지고 연산량과 메모리 사용량이 급격히 증가해 학습 속도가 느려지게 된다.
Observation - 1
위 분석을 통해 네트워크의 Depth, Width, Resolution 중 하나만 확장해도 정확도가 증가함을 알 수 있지만 너무 커질 경우 정확도 증가 효과가 점점 줄어든다는 점을 관찰할 수 있다.
3.3. Compound Scaling
본 논문에서는 서로 다른 확장 차원 Depth, Width, Resolution들이 독립적이지 않음을 실험적으로 발견했다고 한다. 즉, 높은 해상도의 이미지를 사용할수록 네트워크의 깊이와 너비도 함께 증가해야 최적의 성능을 낼 수 있다는 것이다. 직관적으로도 이를 이해할 수 있다.더 높은 해상도의 이미지를 사용하면 더 넓은 수용 영역(receptive field)이 필요하며 더 큰 이미지에서는 더 많은 픽셀을 포함하는 유사한 특징을 포착할 수 있기 때문이다. 이에 따라 해상도가 높을 때는 네트워크의 Width 또한 증가시켜야 하며 더 정밀한 패턴(fine-grained patterns)을 포착할 수 있도록 해준다. 이러한 직관은 기존의 단일 차원 확장 방식이 아닌 여러 확장 차원을 조정하고 균형을 맞춰야 한다는 필요성을 시사한다.
이러한 직관을 검증하기 위해 본 논문에서 다양한 네트워크 Depth와 Resolution에서 Width 확장을 비교한다. (그림 4) 만약 깊이 (d = 1.0)와 해상도 (r = 1.0)를 유지한 채로 너비 (w)만 확장하면 정확도 향상이 빠르게 한계에 도달한다. 반면 더 깊은 네트워크 (d = 2.0) 와 더 높은 해상도 (r = 2.0)를 함께 사용하면 동일한 FLOPS 비용 내에서 너비 확장이 훨씬 더 높은 정확도를 달성할 수 있다.
Observation - 2
이러한 결과를 통해 2번째 관찰을 얻을 수 있다. 더 높은 정확도와 효율성을 추구하려면 ConvNet 확장 시 네트워크의 너비, 깊이, 해상도를 균형 있게 조정하는 것이 중요하다.
본 논문에서는 네트워크의 Depth, Width, Resolution을 일정한 비율로 균형 있게 조정하는 복합 확장(compound scaling) 방법을 제안한다.
α, β, γ 는 작은 Grid search 를 통해 결정될 수 있는 상수 값이다. 직관적으로 ϕ 는 사용자가 설정하는 계수로, 모델 확장을 위해 사용할 수 있는 추가 자원의 양을 제어한다. α, β, γ 는 주어진 추가 자원을 네트워크의 Depth, Width, Resolution에 어떻게 배분할지를 결정한다.
특히 일반적인 합성곱 연산의 FLOPS (연산량) 는 다음과 같이 비례한다.
- 네트워크 Depth (d) 를 2배 증가시키면 FLOPS도 2배 증가
- 네트워크 Width (w) 나 Resolution (r) 를 2배 증가시키면 FLOPS는 4배 증가
대부분의 ConvNet에서는 합성곱 연산이 전체 연산 비용의 대부분을 차지하므로 식 (3) 을 사용해 네트워크를 확장하면 총 FLOPS는 다음과 같이 증가한다.
본 논문에서는 α ⋅ β^2 ⋅ γ^2 ≒ 2 가 되도록 제약을 설정했다. 이를 통해 어떤 ϕ 값이 주어지더라도 전체 FLOPS는 대략 2^ϕ 배 증가하도록 조정할 수 있다.
4. EfficientNet Architecture
모델 확장은 기본 네트워크에서 레이어 연산자 (F_i) 를 변경하지 않으므로 좋은 기본 네트워크(baseline network)를 선택하는 것이 매우 중요하다. 기존 ConvNet을 사용해 확장 방법을 평가함과 동시에 확장 방법의 효과를 보다 명확하게 입증하기 위해 새로운 모바일 크기의 기본 네트워크인 EfficientNet을 개발했다.
EfficientNet-B0: 새로운 기본 네트워크
본 논문에서는 정확도(accuracy)와 FLOPS를 동시에 최적화하는 다중 목표 신경망 아키텍처 검색(multi-objective neural architecture search)을 활용해 기본 네트워크를 개발했다. 최적화 목표는 다음과 같이 정의된다.
- ACC(m): 모델 m의 정확도
- FLOPS(m): 모델 m의 연산량
- T: 목표 FLOPS (target FLOPS)
- w = -0.07: 정확도와 FLOPS 간의 트레이드오프를 조절하는 하이퍼파라미터
EfficientNet-B0는 지연시간(latency)이 아니라 FLOPS를 최적화 목표로 설정되었다. 기본적인 네트워크 구조는 MnasNet과 유사하지만 더 높은 FLOPS 목표(400M FLOPS)를 설정했기 때문에 EfficientNet-B0의 크기가 약간 더 크다.
위 표1을 보면 EfficientNet-B0의 구조가 나와 있다. 모바일 인버티드 병목 블록(MBConv)을 주요 블록으로 사용하며 Squeeze-and-Excitation(SE) 최적화도 적용되었다.
💡 MBConv (Mobile Inverted Bottleneck Convolution)
MBConv 는 MobileNetV2 에서 처음 제안된 구조로 이 블록은 모바일 기기에서도 성능을 유지하면서도 연산량을 줄일 수 있도록 설계된 특별한 합성곱 블록이다.
기존의 병목 구조인 Bottleneck은 채널 수를 줄였다가 다시 늘리는 방식으로 연산량을 줄이는 전략이라고 할 수 있다. 하지만 MobileNetV2에서는 기존 Bottleneck을 뒤집어서 Inverted bottleneck block을 만들었다. 일반적인 병목 구조는 채널을 먼저 줄였다가 늘리지만 MBConv는 반대로 채널을 먼저 확장하고 합성곱을 수행한 후 다시 줄이는 방식이다. 기존의 합성곱은 채널마다 연산을 수행하지만 MBConv는 Depthwise separable convolution을 사용해 연산량을 크게 줄이고 ResNet처럼 잔차 연결 (Skip connection) 을 추가해 깊은 네트워크에서도 학습이 가능하도록 만들었다.
왜 채널을 먼저 늘릴까? 라는 궁금증이 생겨서 찾아봤는데 채널을 먼저 늘려주면 깊은 특징을 잘 학습하면서도 연산량을 줄일 수 있기 때문이라고 한다.
💡 Squeeze-and-Excitation(SE) 최적화
SE 블록은 채널별 중요도를 조정해 성능을 향상시키는 기법이다. 중요한 채널에는 더 큰 가중치를 주고 덜 중요한 채널에는 작은 가중치를 주는 방식으로 어떤 채널이 중요한지 학습해 중요한 특징을 더 강조한다.
EfficientNet에서는 MBConv 블록에 SE 블록을 추가하여 더 나은 특징 학습을 가능하게 했다.
EfficientNet 확장 과정: B1 ~ B7 모델 개발
EfficientNet-B0을 기반으로 위에서 많이 언급한 복합 확장(compound scaling) 방법을 사용하여 더 큰 모델(EfficientNet-B1 ~ B7)을 확장했다.
STEP 1: 기본 확장 계수 (α, β, γ) 찾기
① 먼저 ϕ = 1 로 고정해 두 배 더 많은 자원이 사용 가능하다고 가정한다. ② 위에 식 중 2, 3 번 식을 기반으로 α, β, γ 의 작은 Grid search를 수행한다. ③ EfficientNet-B0에 대해 최적의 값은 다음과 같다. (이러한 값은 제약 조건 α ⋅ β^2 ⋅ γ^2 ≒ 2 를 만족한다.)
- α = 1.2 (Depth 증가 비율)
- β = 1.1 (Width 증가 비율)
- γ = 1.15 (Resolution 증가 비율)
STEP 2: EfficientNet-B1 ~ B7 모델 확장
① STEP 1 에서 찾은 α, β, γ 값을 고정한 후
② ϕ 값을 변화시키며 모델을 확장한다.
③ 이를 통해 EfficientNet-B1 ~ B7을 생성한다. (표 2)
기존에는 큰 모델에서 α, β, γ 를 직접 검색해 최적의 값을 찾는 방법이 있었지만 이러한 방법은 모델 크기가 커질수록 검색 비용(search cost)이 기하급수적으로 증가하기 때문에 한계가 존재했다.
때문에 EfficientNet은 위와 같은 효율적인 방식을 택했다. 작은 기본 네트워크인 EfficientNet-B0에서 단 한 번만 검색을 수행한 후 동일한 확장 계수를 사용해 모든 EfficientNet 모델을 확장하는 방법이다. 이러한 효율적인 과정 덕분에 대형 모델에서도 높은 효율성과 정확도를 유지하면서 연산 비용을 절감할 수 있게 된다.
5. Experiments
5.1. Scaling Up MobileNets and ResNets
본 논문에서 제시한 개념을 증명하고자 기존의 널리 사용되는 MobileNets과 ResNet에 복합 확장(compound scaling) 을 적용해 실험을 진행했다.
표 3에선 이 모델들을 다양한 방식으로 확장한 후 ImageNet에서 평가한 결과를 보여준다. 기존의 단일 차원 확장(single-dimension scaling) 방법과 비교했을 때 복합 확장(compound scaling) 방법이 모든 모델에서 정확도를 향상시킨 것을 볼 수 있다. 이는 제안된 확장 방법이 기존 ConvNet에도 효과적임을 나타낸다.
5.2. ImageNet Results for EfficientNet
다음은 ImageNet에서 EfficientNet 모델을 학습시킨 실험이다.
- RMSProp optimizer (감쇠 0.9, 모멘텀 0.9)
- 배치 정규화(batch norm) 모멘텀: 0.99
- 가중치 감소(weight decay): 1e-5
- 초기 학습률 0.256 (매 2.4 에포크마다 0.97배 감소)
- SiLU(Swish-1) 활성화 함수
- AutoAugment 데이터 증강
- Stochastic Depth(확률적 깊이) 적용, 생존 확률(survival probability) 0.8
일반적으로 모델의 크기가 클수록 더 강한 정규화가 필요하기 때문에 EfficientNet-B0에서는 드롭아웃(dropout) 비율을 0.2로 설정하고 EfficientNet-B7에서는 0.5까지 선형적으로 증가시켰다고 한다.
학습 데이터에서 25,000 개의 이미지를 무작위로 선택해 미니 검증 세트로 사용했으며 이 세트에서 Early stopping을 수행한 후 최종 검증 정확도는 해당 체크 포인트를 기반으로 평가했다.
표 2는 EfficientNet-B0을 확장하여 생성된 모든 EfficientNet 모델의 성능을 보여준다. EfficientNet은 유사한 정확도를 가진 기존 ConvNet보다 훨씬 더 적은 파라미터와 FLOPS를 사용한다. 특히 EfficientNet-B7은 66M 파라미터와 37B FLOPS를 사용해 84.3%의 top-1 accuracy를 달성했으며 이전 최고 모델이었던 GPipe봐 8.4배 더 작은 모델임에도 더 높은 정확도를 기록했다.
이러한 성능 향상을 통해 더 나은 아키텍처 설계와 더 효과적인 확장 방법, EfficientNet에 최적화된 학습 설정이 큰 효과를 가진다는 것을 알 수 있다.
그림 1과 그림 5는 다양한 ConvNet 모델의 파라미터-정확도 및 FLOPS-정확도 관계를 비교한 그래프이다. 이 그림에서도 EfficientNet은 훨씬 더 적은 파라미터와 FLOPS로도 기존 ConvNet 보다 높은 정확도를 달성한다. 예를 들어 EfficientNet-B3는 ResNeXt-101보다 더 높은 정확도를 달성하면서도 18배 적은 FLOPS를 사용한다.
또한 실제 CPU에서 몇 가지 대표적인 ConvNet의 추론 지연 시간(inference latency)을 측정했다. EfficientNet-B1은 널리 사용되는 ResNet-152보다 5.7배 빠르게 실행되었으며 EfficientNet-B7은 GPipe 보다 약 6.1배 빠르게 실행됐다. 이는 Efficientnet이 실제 하드웨어에서도 매우 빠르게 동작함을 입증한다.
5.3. Transfer Learning Results for EfficientNet
본 논문에서는 EfficientNet을 다양한 전이 학습 데이터셋에서 평가했다.
ImageNet에서 사전 학습된 체크포인트를 가져와 새로운 데이터셋에 미세 조정(finetuning)을 수행했다.
공개된 기존 모델(NASNet-A, Inception-v4 등)과 비교했을 때 EfficientNet은 평균적으로 4.7배(최대 21배) 적은 파라미터를 사용하면서도 더 높은 정확도를 달성했다. 또한 당시 최신 최고 성능 모델(DAT, GPipe 등)과 비교했을 때 EfficientNet은 최신 모델들보다 8개 데이터셋 중 5개에서 더 높은 정확도를 기록함과 동시에 9.6배 더 적은 파라미터를 사용했다.
그림 6은 다양한 모델의 정확도와 파라미터 관계를 비교한 그래프이다. 전반적으로, EfficientNet은 기존 모델(ResNet, DenseNet, Inception, NASNet 등)보다 훨씬 적은 파라미터로도 더 높은 정확도를 일관되게 달성했다.
6. Discussion
본 논문에서 제시하는 복합 확장(compound scaling) 방법이 EfficientNet 아키텍처 자체와 어떤 관계를 가지는지를 명확히 하기 위해 그림 8에서 동일한 EfficientNet-B0을 기반으로 다양한 확장 방법을 적용했을 때 ImageNet에서의 성능을 비교했다.
일반적으로 모든 확장 방법은 FLOPS가 증가함에 따라 정확도가 향상되는 모습을 보인다. 하지만 본 논문에서 제시하는 복합 확장(compound scaling) 방법은 단일 차원 확장(single-dimension scaling) 방법보다 최대 2.5% 더 높은 정확도를 달성할 수 있다는 것을 확인할 수 있다. 이는 제안된 복합 확장(compound scaling) 방법이 중요한 역할을 한다는 것을 시사한다.
그렇다면 복합 확장(compound scaling) 방법이 다른 방법보다 더 좋은 이유는 무엇일까?
그림 7에서는 다양한 확장 방법을 적용한 모델들의 클래스 활성화 맵(Class Activation Map)을 비교했다. 이 모델들은 모두 동일한 EfficientNet-B0을 기반으로 확장된 모델들이며 각 모델의 통계 정보는 밑 표 7에 제시되어 있다.
그림 7을 보면 복합 확장(compound scaling) 방법을 적용한 모델은 더욱 관련성이 높은 영역에 집중하며 객체의 세부 정보를 더 많이 포착하는 경향이 있다. 하지만 다른 확장 방법을 적용한 모델들은 객체의 세부 정보를 충분히 포착하지 못하거나 이미지 내 모든 객체를 효과적으로 인식하지 못하는 문제가 발생하는 경향이 있다.
이러한 결과는 복합 확장(compound scaling)이 객체의 중요한 특징을 더 효과적으로 학습할 수 있도록 돕는다는 것을 시사한다.
7. Conclusion
본 논문에서는 ConvNet의 확장(scaling) 에 대해 체계적으로 연구했으며 Depth, Width, Resolution을 균형있게 조정하는 것이 매우 중요하지만 기존 연구에서 간과되었던 요소라는 점을 발견했다. 이 문제를 해결하기 위해 단순하면서도 매우 효과적인 복합 확장(compound scaling) 방법을 제안했다.
이 복합 확장(compound scaling) 방법을 통해 기본 ConvNet을 보다 체계적인 방식으로 목표하는 자원 제약(resource constraints)에 맞춰 확장하면서도 모델의 효율성을 유지할 수 있다.
모바일 크기의 EfficientNet 모델을 매우 효과적으로 확장할 수 있음을 실험적으로 입증하였으며 ImageNet 및 5개의 대표적인 전이 학습(transfer learning) 데이터셋에서 SOTA 성능을 달성했다. 그럼과 동시에 기존 모델보다 파라미터 수와 연산량(FLOPS)을 10배 이상 줄일 수 있음을 확인했다.
참고한 사이트
- https://www.youtube.com/watch?v=uLKqMbOA_vU
- https://velog.io/@jus6886/%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0-EfficientNet-Rethinking-Model-Scaling-for-Convolutional-Neural-Networks
- https://wandukong.tistory.com/20#google_vignette
- https://ffighting.net/deep-learning-paper-review/vision-model/efficientnet/