기존의 CNN 모델들과는 다른, 새로운 scaling 방법을 제안하는 이 모델은 모든 차원의 depth, width, resolution의 scale을 통일시켜요.
기존의 MobileNets과 ResNet의 방법에서 착안된 EfficientNet은 ImageNet에서 정확도 84.3%로 가장 높다고 합니다.
일반적으로 모델의 성능을 높이기 사용하는 scaling up을 방법은 세 가지가 있어요.
Network의 Depth를 깊게 하는 방법이 첫번째 방법인데요, ResNet의 발전 동향을 보면 ResNet-18부터 ResNet-200은 이 Depth를 깊게하면서 성능을 올린 케이스랍니다. 그리고 Channel의 Width를 크게 하는 방법과 아주 보편적이지는 않지만 Image Resolution(해상도)를 높이는 방법도 있어요.
하지만 이러한 작업들은 왜 성능을 높이는 지는 아직 잘 모르는 상태라고 해요.
해당 방법이 성능을 높이는 데에는 효과가 있다는 것을 ResNet과 MobileNet을 통해 알아보았으니 이 논문에서는 Scaling up하는 과정 중 성능을 높이는 중요한 방법이 무엇인지 연구를 합니다.
단순히 높인다고 성능이 좋은 건 아니기에, optimal한 지점을 찾으려면 상당한 노력이 필요해서 이 부분을 좀 더 효율적으로 찾는 거에 중점을 둔 거라고 생각해요.
해당 그림은 앞서 말한 세가지 방법을 그림으로 표현한 것입니다.
이 논문에서 말하는 EfficientNet-B7은 GPipe에 비해 높은 정확도를 보이지만 Parameter수는 1/8정도로 적고 inference 실행 시간도 6배나 따르다고 해요.
inference : 학습을 통해 만들어진 모델을 새로운 입력 데이터에 적용하여 결과를 내놓는 단계
ConvNet Accuracy :
최근에 나온 GPipe같은 경우 84.3%의 정확도를 보이지만 557M개의 Parameter를 사용하여 모델 자체가 굉장히 무거워요.
계속해서 성능이 좋아질 수록 모델의 크기가 커지고 있는데, 이미 하드웨어의 기술력은 한계에 다다랐다고 해요..!
그렇기 떄문에 여기서 성능을 더 높이기 위해서는 efficiency를 고려를 할 수 밖에 없는 상황인 것이죠.
ConvNet Efficiency :
깊은 CNN 신경망은 대부분이 overparameterization 되어있어요.
이걸 효율적으로 해결하는 방안이 보통 두 가지가 있는데요
하지만 위와 같은 방법은 큰 모델에 적용시키는 부분이 아직 명확하지 않아서 써먹기가 힘들어요. 논문은 이 부분을 연구하는 내용입니다.
Model Scaling :
width와 depth의 scaling에 대해 앞서 말한 내용을 다시 말하고 있어요.
input image의 크기가 클수록 FLOPS 연산량이 많아져서 효율적으로 scaling을 한다고 말이죠.
3.1 Problem Formulation
기본적인 CNN을 식으로 표현하면 위와 같아요.
여기서 i는 하나의 stage를 뜻하는데 아래의 ResNet구조에서 channel의 크기가 같은 부분을 한 stage라고 해요.
하나의 stage에 5개의 Layer가 있으니 구조는 이해가실거라 생각합니다.
보통 F의 구조를 바꾸면서 optimal한 CNN을 디자인하려하지만 이 논문에서는 scale에 집중하기 위해 F를 고정시켜 버립니다.
은 depth, width, resolution의 Scaling 계수이고, 는 pretrained된 parameter에요.
는 layer의 개수와 연관이 있으니 에 곱해주고,
은 이미지의 크기와 연관이 있으니 에 곱해주고,
는 channel과 연관이 있으니 에 곱해줘서 Scaling 작업을 해준다는 걸 수식으로 표현한 거랍니다.
이 작업들의 목표가 Efficiency니깐 목표로 하는 memory와 FLOPS는 기존보다 작아야겠죠?
3.2 Compound Scaling
다른 Scaling demension들은 서로 독립적이지 않은 것을 관찰할 수 있어요.
Input image가 크다면? -> Receptive Field가 커버하는 부분이 적어져서 Depth를 늘린다 + Fine-grained_세밀한 패턴을 보기 위해 Width를 늘린다.
이러한 이유로 우리는 각 Scaling 값들의 balance를 맞출 필요가 있어요.
Observation2
In order to pursue better accuracy and efficiency, it is critical to balance all dimensions of network width, depth, and resolution during ConvNet scaling.
각 연산량은 위와 같이 비례해요.
α β γ는 각각 optimal parameter를 찾는 방법인 Grid Search를 통해 구한 값이고,
φ는 사용자의 resource에 따라 임의로 설정하는 값이에요.
보면 depth는 크기가 커질수록 연산량이 1:1로 비례하는데 나머지 두 개는 제곱비례를 하는 것을 확인할 수가 있어요.
우선 Depth는 늘리는 만큼 연산이 증가하니 1:1 비율이 맞고,
resolution은 2배로 키운다면 가로, 세로가 다 늘어나므로 제곱 비례하는 것은 자명하죠?
width는 아래 그림을 보면 쉽게 이해가 갈 거라 생각합니다.
해당 모델은 MNasNet과 유사한 구조를 가지는데 MNasNet의 구조는 아래와 같아요.
그리고 EfficientNet의 Baseline 구조는 아래와 같아요.
여기서 MBConv1, MBConv6의 구조는 아래와 같아요. MobileNetV2에서 사용하는 inverted bottleneck MBConv에서 가져온 내용이라고 해요.
다음으로 해당 Baseline부터 보면 두 가지 step을 통해 Scale을 높이는 방법을 소개해요.
5.1 Scaling Up MobileNet and ResNets
여기까지 소개한 내용들이 기존 모델에 적용되었을 때 얼마나 효과가 있는지 알아보기 위해 MobileNet과 ResNet에 적용시켜 볼까요?
하나의 scale을 올렸을 때보다 compound 방식이 물론 연산량은 좀 많아졌지만 정확도를 확실히 더 높일 수 있다는 것을 확인할 수 있어요.
아래 표는 다른 Network와 비교를 한 표입니다.
5.2 ImageNet Results for EfficientNet
Settings :
위의 그래프에서 볼 수 있듯이 하나의 scale만 조정하는 것보다 compound scaling 방식의 정확도가 훨씬 좋은 것을 볼 수 있어요.
왜 성능이 더 좋은 건지 CAM(Class Activation Map)과 표를 통해 확인할 수 있어요.
Width, Depth, Resolution를 scale하는 방법에 대해 얘기를 하며 효율적으로 성능을 올릴 수 있는 EfficientNet에 소개하는 논문이었습니다.