안녕하세요. 지난 포스팅의 [IC2D] Big Transfer (BiT): General Visual Representation Learning (ECCV2020)에서는 구글의 미친듯한 실험력을 보여준 BiT에 대해서 소개해드렸습니다. 해당 논문을 통해 전이 학습 시 큰 데이터셋으로 대규모 모델을 사전학습하게 되면 더 높은 성능을 얻을 수 있다는 점과 이 과정에서 Group Normalization과 Weight Standardization이 큰 역할을 한다는 점을 알게 되었습니다. 오늘도 구글에서 나온 유명한 논문 중 하나인 EfficientNetV2에 대해서 소개시켜드리도록 하겠습니다.
Background
기본적으로 오늘 소개할 EfficientNetV2는 2019년에 승인된 EfficientNet에 기반을 두고 있습니다. EfficientNet에 대한 자세한 설명은 이전 포스팅을 참고해주시길 바랍니다. 따라서 본 논문의 목적은 기존의 EfficientNet의 계산량이 어디서 심해지는 지 분석하고 이를 해결할 수 있는 모델을 제안하는 것입니다.
본 논문의 핵심 기여는 다음과 같이 정리할 수 있습니다.
- Training-aware NAS와 Model Scaling 기법을 결합하여 훈련 속도와 파라미터 효율성을 모두 잡은 EfficientNetV2를 제안
- EfficientNet의 보다 깊은 분석을 통해 새로운 효율적인 모델의 방향성을 제시
- 훈련 속도를 향상시키기 위해 학습 진행 정도 (epoch)와 입력 영상의 해상도에 따른 적응적인 정규화 적용 (Progressive Learning)
- ImageNet, CIFAR10, CIFAR100, Cars, Flowers 데이터셋에서 약 10배 빠르고 7배 파라미터가 적은 모델을 이용해 state-of-the-art 성능 달성
EfficientNetV2 Architecture Design
1). Review of EfficientNet
기본적으로 EfficientNet은 FLOPs과 파라미터 개수의 감소를 동시에 가져왔던 2019년 당시 혁신적인 모델 중 하나였습니다. 현재도 개인 프로젝트에서 일차적으로 사용하는 모델이 EfficientNet이 많습니다. 해당 모델을 설계하는 과정은 다음과 같습니다.
STEP1. MNAS를 통해 FLOPs과 파라미터 개수를 최적화할 수 있는 baseline 모델 (EfficientNet-B0) 검색
STEP2. Compount Scaling을 통해 baseline 모델로부터 깊이 (depth), 너비 (width), 입력 영상의 해상도 (resolution)을 증가시키며 EfficientNet-B1 ~ B7까지 얻기
위 과정을 통해 총 8개의 모델 (B0 ~ B7)을 얻을 수 있으며 사용자는 본인이 설계해야하는 환경에 따라 모델 규모를 선택하여 사용할 수 있습니다.
표 1은 EfficientNet-B6와 유사한 성능 (84.6%)을 가진 ResNet-RS-420 (84.4%) 과 NFNet-F1 (84.7%)의 파라미터 개수와 FLOPs를 비교했을 때 훨씬 작은 것을 볼 수 있습니다. 표 1에서 비교한 두 모델 (ResNet-RS-420, NFNet-F1)들은 향후 블로그 포스팅으로 소개시켜드리겠습니다.
2). Understanding Training Efficiency
본 논문에서는 EfficientNet에서 사용한 3가지 핵심 모듈에 대해 학습 속도를 향상시킬 수 있는 방식에 대해 분석합니다.
Training with very large image size is slow
첫번째로는 영상의 크기가 크면 당연하게도 연산량이 많아지기 때문에 실질적인 학습 시간이 증가할 수 밖에 없습니다. 이러한 문제를 해결하기 위해서 FixRes에서는 학습 시에 작은 영상의 해상도를 사용하고 평가 시에 영상의 해상도를 키우는 방식으로 약 2배 이상의 빠른 학습 속도를 얻었습니다.
표 2에서는 EfficientNet에 서로 다른 영상 크기 (512 & 380) 그리고 배치 크기 (TPU V3: 32 & 128 | V100: 12 & 24)로 했을 때 throughput을 보여주고 있습니다. 영상 크기를 512로 늘리고 배치 크기를 128과 24로 하게 되면 두 GPU에서 연산이 불가능한 것을 볼 수 있습니다. 또한, 배치 크기를 키우면 그만큼 빠르게 학습할 수 있기 때문에 학습 시간도 아주 많이 감소하게 됩니다.
본 논문에서는 이러한 관찰을 통해 학습 시 고정된 해상도가 아닌 학습 진행 상황에 따라 점차적으로 해상도와 정규화를 늘리는 progressive learning 방식을 제안하는 동기를 부여합니다.
Depthwise convolutions are slow in early layers but effiective in later stages
그림 2의 왼쪽 그림은 EfficientNet에서 사용한 MBConv의 블록 다이어그램을 보여주고 있습니다. 핵심은 depthwise convolution을 통해 합성곱 연산의 FLOPs을 채널 개수에 독립적으로 만들어줌으로써 FLOPs를 크게 향상시키는 것에 있었습니다. 또한, 파라미터의 개수 역시 감소하게 되죠. 하지만, 최근 다양한 논문들에서 이와 같은 depthwise convolution은 현대 GPU 가속기에는 효율적으로 동작하지 않기 때문에 실질적인 학습 속도는 크게 향상되지 않으며 오히려 늘어날 수도 있다는 점을 지적하였습니다.
이러한 문제점을 언급하며 본 논문에서는 그림 2의 오른쪽 그림인 Fused-MBConv도 함께 도입합니다. 가장 큰 차이는 기존의 MBConv에서 depthwise convolution과 $1 \times 1$ 합성곱 연산을 하나의 $3 \times 3$ 합성곱 연산으로 대치하였다는 점 입니다.
표 3은 실제로 EfficientNet에 Fused-MBConv를 초기 계층부터 마지막 계층까지 도입했을 때 파라미터 및 FLOPs 증가량, 성능을 제시하고 있습니다. 결론적으로 초기 계층에서는 Fused-MBConv를 사용하고 깊은 계층에서는 MBConv를 사용하는 것이 성능과 효율성 측면에서 모두 우수하다는 것을 확인하였습니다.
Equally scaling up every stage is sub-optimal
마지막으로 EfficientNet에서는 3개의 핵심 성분인 깊이 (depth), 너비 (width), 입력 영상의 해상도 (resolution)를 동일한 가중치로 두고 Compound Scaling을 진행합니다. 하지만, 각각의 성분은 실제로 모델에 가하는 복잡도에 대한 기여도는 다릅니다. 따라서, 각 성분에 서로 다른 가중치를 부여하여 scaling을 할 것을 제안하죠. 또한, 해상도가 큰 영향을 끼친다는 것을 확인하고 scaling을 통해서 늘어날 수 있는 최대 해상도를 결정하여 더욱 효율적인 모델을 만들 수 있도록 유도하였습니다 (EfficientNet에서는 제한 X).
3). Training-Aware NAS and Scaling
이제 NAS를 통해 baseline 모델을 찾아야합니다. 본 논문에서는 정확도 (accuracy), 파라미터 효율성 (parameter efficiency), 그리고 훈련 효율성 (Training efficiency)를 함께 최적화하였습니다. 이때, 검색 공간 (Searching Space)는 다음과 같습니다.
- 합성곱 연산 종류: $\{ \text{MBConv}, \text{Fused-MBConv} \}$
- 계층의 개수 (Number of layers)
- 커널 크기: $\{ 3 \times 3, 5 \times 5 \}$
- 확장 비율: $\{ 1, 4, 6 \}$
이때, 검색 공간을 더욱 줄이기 위해 1). EfficientNet-B0를 찾을 때 사용되지 않은 연산 종류 (Pooling, Skip Connection)은 사용하지 않고 2). 이전 backbone 모델로부터 동일한 크기의 채널 크기를 재사용하였습니다. 이를 통해, 더욱 작은 검색 공간을 얻었기 때문에 EfficientNet-B4에서 MNAS의 강화학습을 적용하여 더 큰 모델을 찾을 수 있도록 하겠습니다. 이 과정에서 1,000개의 모델의 샘플링하고 작은 해상도로 10 epoch으로 학습시킨 뒤 평가하여 검색을 수행합니다. 이때, 강화학습 보상 (reward)로는 $A \cdot S^{w} \cdot P^{v}$로 부여합니다. 이때, $A$는 정확도, $S$는 학습 시간, $P$는 파라미터 개수를 의미하고 $w = -0.07$ 그리고 $v = -0.05$로 정했다고 합니다. 이는 MNAS의 세팅과 동일하다고 하네요. MNAS 역시 향후에 블로그에서 소개시켜드리도록 하겠습니다.
표 4는 이 과정을 통해 얻은 EfficientNetV2의 baseline 모델인 EfficientNetV2-S의 구조를 보여주고 있습니다. EfficientNet과 다르게 초기에 MBConv가 아닌 Fused-MBConv가 사용된 것을 볼 수 있습니다. 이를 통해, 초기 baseline 모델부터 빠른 학습이 가능한 모델을 만들 수 있는 것이죠.
다음으로 해야하는 것은 Model Scaling을 통해 EfficientNetV2-S로부터 EfficientNetV2-M과 EfficientNetV2-L을 찾는 것 입니다. 이때, 평가 시 사용하는 최대 영상 크기는 480으로 제한하고 휴리스틱하게 표 4의 Stage 5와 Stage 6에 모델의 복잡도를 부여하였습니다.
그림 3은 이렇게 찾은 EfficientNetV2-S/-M/-L과 기존의 다른 모델들의 훈련 속도 vs 정확도에 대한 그래프를 보여주고 있습니다. 결과적으로 EfficientNetV2는 기존 EfficientNet보다 엄청난 성능 향상을 보여주고 있습니다.
Progressive Learning
1). Motivation
방금도 설명드렸다싶이 입력 영상의 해상도는 모델 학습 시간에 엄청난 영향을 끼치는 요소입니다. 그렇다고 해서 해상도를 줄여서 학습하게 되면 모델의 성능이 떨어지는 문제점이 존재하죠. 본 논문에서는 이러한 문제에 대한 원인부터 분석하게 됩니다.
기본적으로 작은 해상도를 가지는 영상을 이용해서 학습하게 되면 모델의 capacity는 떨어지게 됩니다. 왜냐하면 전체적으로 얻을 수 있는 정보량이 감소하게 때문이죠. 그런데 이 과정에서 강한 정규화 기법을 적용하게 되면 어떻게 될까요? 학습 자체가 제대로 되지 않을 가능성이 있습니다. 반대로 높은 해상도를 가지는 영상을 이용해서 학습하여 모델의 capacity는 증가합니다. 하지만, 약한 정규화 기법을 적용하게 되면 overfitting과 같은 현상을 발생할 수도 있겠네요.
표 5는 방금 언급한 내용에 대한 요약을 해주고 있습니다. 실제로 작은 영상 크기로 학습할 때는 약한 정규화를 적용해야 성능이 향상되고 큰 영상 크기로 학습할 때는 강한 정규화를 적용해야 성능이 향상되죠. 따라서, 본 논문에서는 초기 영상 크기와 타겟 영상 크기를 정하고 점진적으로 영상 크기를 늘려가면서 정규화 강도도 함께 점진적으로 늘리는 Progressive Learning을 할 것을 제안합니다.
2). Progressive Learning with Adaptive Regularization
그림 4는 Progressive Learning의 전체적인 컨셉을 보여주고 있습니다. 굉장히 명확하죠. 이를 좀 더 자세히 풀어써보도록 하겠습니다. 일단, 전체 학습 에폭이 $N$ 그리고 초기 영상 크기와 타겟 영상 크기를 각각 $S_{0}$와 $S_{e}$라고 가정하겠습니다. 그리고 $\Phi_{e} = \{ \phi_{e}^{k} \}$를 정규화를 적용할 강도 (magnitude)의 리스트라고 하겠습니다. 여기서 $k$는 적용하는 정규화의 종류로 DropOut, RandAugment, MixUp으로 구성됩니다. 먼저 전체 학습 횟수인 $N$을 $M$개의 학습 stage로 나누어줍니다. 그러면 각각의 stage $1 \le i \le M$에서는 $S_{i}$의 크기를 가지는 영상 크기와 $\Phi_{i} = \{ \phi_{i}^{k} \}$의 정규화 강도로 학습이 진행되죠. 하지만 $M$번째 stage에서는 타겟 영상 크기인 $S_{e}$와 정규화 강도인 $\Phi_{e}$로 학습됩니다.
그렇다면 임의의 $i$번째 stage의 영상 크기 $S_{i}$와 정규화 강도 $\Phi_{i}$는 어떻게 결정될까요? 바로 선형 보간 (linear interpolation)을 이용해줍니다. 자세한 알고리즘은 아래 표을 참고해주세요.
Experiment Results
1). ImageNet Classification
- Dataset
- ImageNet-1K: 1.28 million training images & 50K validation images with 1,000 classes
- MNAS 및 Hyperparameter tuning 시 25,000장 (2%)를 훈련 데이터로 사용하고 minival 데이터셋을 이용하여 평가
- ImageNet-21K: 14.2 million training images with 21K classes
- ImageNet-1K: 1.28 million training images & 50K validation images with 1,000 classes
- Data Augmentation :
- Optimization: RMSProp
- momentum: 0.9
- batch norm momentum: 0.99
- weight decay: $1 \times 10^{-5}$
- learing rate: warmed up from 0 to 0.256 and then decayed by 0.97 every 2.4 epochs
- batch size: 4096
- epochs: 350
- GPU 언급 X
- Progressive Training Setting
2). Transferability of EfficientNetV2
3). Progressive Learning for Different Networks
4). Ablation Study