Convolution Neural Networks (CNN) 은 일반적으로 레이어가 많고 (deep), feature map의 수가 많고 (wide), resolution이 커야 더 좋은 성능을 얻을 수 있습니다. 하지만 구현 환경에 따른 resource는 한정되어 있다보니 baseline CNN을 구성한 이후 성능을 높이기 위해 굉장히 heuristic한 scaling을 하여 CNN의 complexity를 높이게 됩니다.
EfficientNet은 CNN의 feature map 개수 (width), 레이어 개수 (deep), resolution 을 일정한 비율로 증가시키는 compound scaling 방법을 제안하였습니다. 이는 기존에 구성한 baseline 모델에 대해 모델의 depth, width, resolution을 각각 $\alpha, \beta, \gamma$의 비율로 균등하게 증가시키는 방법으로 효과적으로 CNN의 complexity를 높일 수 있습니다.
Scaling dimensions
위 그림은 이미 존재하는 모델의 scaling 방법을 보여주고 있습니다. ResNet이 depth scaling을 통해 사이즈를 조절하는 대표적인 모델이며, ShuffleNet이나 MobileNet, WideResNet은 width scaling을 통해 사이즈를 조절합니다. 이러한 기존의 scaling 방법은 일반적으로 width, depth, resolution 차원 중 한 가지만 scaling을 고려하고 3가지 구성 요소를 동시에 모두 고려하지 않습니다. 먼저 다른 차원을 고정하고 하나의 차원만 scaling할 때 성능 향상이 어떻게 이루어지는지 살펴보겠습니다.
Depth scaling
Layer의 수를 늘리는 depth scaling은 모델의 complexity를 늘리는 가장 일반적인 방법입니다. Skip connection, batch normalization 등으로 vanishing gradient 등의 문제를 완화하지만 무조건 깊어질수록 성능이 향상되지는 않습니다. 밑의 그림에서 볼 수 있듯이 depth가 일정 수준을 넘기면 정확도가 더 향상되지는 않습니다.
Width scaling
Feature map (channel) 수를 줄이는 width scaling은 보통 ShuffleNet, MobileNet 등과 같이 작은 크기의 모델에 대해 사용되며 depth를 늘리는 것에 비해 훈련이 쉽고 더욱 자세한 feature를 포착할 수 있습니다. 하지만 이 방법도 마찬가지로 무한히 늘린다고 성능이 좋아지지는 않으며, 밑에 그림에서 볼 수 있듯이 depth보다 더 이른 시점에 성능이 포화됩니다.
Resolution scaling
Resolution scaling은 입력 이미지의 해상도를 높이는 방법으로 고해상도 입력 이미지를 통해 더욱 복잡한 feature를 포착하고자 하는 방법입니다. 밑의 그림을 보면 depth, width 보다는 느리게 성능이 포화되는 것을 확인할 수 있습니다.
특히, depth와 resolution을 각각 고정시키고 width scaling에 따른 성능을 측정한 밑의 그림을 봤을 때, 같은 FLOPS임에도 불구하고 성능 차이가 1.5% 까지 날 수 있는 것을 볼 수 있습니다. 초록색 선과 노란색 선을 비교했을 때, depth scaling에 비해 resolution scaling이 효과가 더 큰 것을 알 수 있으며, 한 차원에 대한 scaling이 아닌 여러 차원을 동시에 scaling하였을 때, 더 좋은 성능을 얻을 수 있는 것을 확인할 수 있습니다.
결론적으로 위 실험들을 통해 다음과 같은 insight를 얻을 수 있습니다.
-
Depth, width, resolution 중 한 차원을 scaling 하면 성능이 좋아지지만 더 커질수록 성능 향상은 포화됩니다.
-
효율적으로 scaling을 하기 위해서는 여러 차원을 균형 있게 늘려야 합니다.
Compound scaling
Compound scaling은 depth, width, resolution을 특정한 비율 $\alpha, \beta, \gamma$ 를 균등하게 증가시키는 방법입니다. Compound coefficient $\phi$ 를 통해 depth는 $\alpha^{\phi}$, width는 $\beta^{\phi}$, resolution은 $\gamma^{\phi}$ 로 증가시킵니다. 이때, $\alpha, \beta, \gamma$는 주어진 메모리와 FLOPS 안의 작은 탐색 공간 안에서 grid search를 통해 얻어집니다.
FLOPS는 일반적으로 depth가 2배면 2배, width/resolution이 2배면 4배가 증가하므로 scaling을 통해 FLOPS가 $\alpha \beta^2 \gamma^2$ 배로 늘어납니다. 또한, $\alpha \beta^2 \gamma^2 \approx 2$로 조절해서 FLOPS가 $2^{\phi}$씩 조절하게 하였습니다.
EfficientNet Architecture
Scaling은 모델의 기본적인 operation을 바꾸는 것은 아니다 보니 기본 baseline 모델을 최대한 잘 구성하는 것이 중요합니다. mNASNet 의 탐색 공간에서 $ACC(m)(\frac{FLOPS(m)}{T})^w$ (T는 target FLOPS) 의 목적함수를 최적화하는 방식으로 기본 모델을 (EfficientNet-B0) 구성하였습니다. EfficientNet-B0은 mNASNet과 같이 inverted bottleneck block으로 다음과 같이 구성되어 있습니다.
EfficientNet-B0로부터 먼저 $\phi=1$을 고정시키고 $\alpha \beta^2 \gamma^2 \approx 2$에 따라 $\alpha=1.2$, $\beta=1.1$, $\gamma=1.15$를 구했으며, 고정한 $\alpha, \beta, \gamma$에 대해 $\phi$를 조절해가며 Efficient-B1부터 EfficientNet-B7을 구성합니다.
Experiment
기존 CNN 모델 및 AutoML로 찾은 모델에 대비한 성능은 위 표와 같습니다. EfficientNet이 기존 모델에 비해 더 적은 파라미터로 더 높은 성능을 보임을 확인할 수 있습니다. 또한 밑의 표처럼 MobileNet과 같은 작은 모델에 대해서도 비슷한 FLOPS에 비해 더 높은 성능을 가짐을 확인할 수 있습니다.
ImageNet Accuracy
위 그림은 모델의 크기에 따른 ImageNet의 정확도를 나타낸 그래프입니다. EfficientNet-B7은 8.4배의 적은 파라미터로 GPipe와 동일한 성능을 내었으며, EfficientNet-B1은 ResNet-152에 비해 7.6배 작으면서도 더 높은 성능을 보인 것을 확인할 수 있습니다. 또한, EfficientNet-B3는 18배의 적은 FLOPS로 ResNeXt-101 에 비해 더 높은 성능을 보였습니다.
또한, Intel Xeon CPU 에 대해 inference time을 측정했을 때, 기존 모델에 비해 약 6배 정도 빨라진 것을 확인할 수 있습니다.
Discussion
먼저 compound scaling이 각 차원의 개별 scaling에 비해 얼마나 좋아지는지 확인한 결과는 밑의 그림과 같습니다. Compound scaling 을 통해 같은 FLOPS에서 2% 가량 더 높은 성능을 얻을 수 있습니다.
마지막으로 compound scaling이 왜 더 잘되는지 정성적으로 알아보기 위해 class activation map (CAM)을 분석합니다. 밑의 그림과 같이 compound scaling 을 통한 모델 scaling이 모델의 feature를 더 구체적으로 잘 잡는 것을 볼 수 있습니다.
참조
'Machine Learning Models > Covolutions' 카테고리의 다른 글
Learning Efficient Convolutional Networks through Network Slimming (0) | 2021.03.13 |
---|---|
Pruning Filters for Efficient Convnets (0) | 2021.03.11 |
DenseNet (0) | 2021.03.03 |
NASNet (0) | 2021.03.02 |
Xception (0) | 2021.02.28 |