논문 리뷰/경량화 논문 스터디

[논문 리뷰]EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks

공부중인학생 2021. 8. 17. 01:12

이번 경량화 스터디를 준비하면서 첫 번째로 발표하게 된 논문입니다.

논문의 부제로는 "Rethinking Model Scaling for Convolutional Neural Networks" 간단하게 말하면 "CNN 모델 확장에 대해 다시 생각해보자" 입니다.

 

 

제가 생각하기에는 이 논문을 간단히 요약해보자면 다음과 같습니다.

  • CNN의 성능을 높이기 위해 모델 크기를 증가시켰지만(정확도만 고려해서), 이 방법은 하드웨어적 한계가 존재한다.
  • 우리는 효율성과 정확도 둘 다 고려할 수 있는 방법을 구상했고, 그 방법은 depth, width, image resolution을 전부 사용하여 모델을 키우는 방식이다.

 

 

이전까지 방식에서는 depth, width, image resolution 중에서 하나만을 사용하였지만 이 논문에서는 3가지 모두를 사용하는 compound scaling을 사용합니다.

 

 

EifficientNet의 성능을 보여주는 그래프

파란색 그래프은 최근에 좋은 성능을 보여준 모델들로 Accuracy에 초점을 맞춘 모델들이고 빨간색 그래프는 Acurracy와 Efficient를 동시에 잡은 모델로 이전 모델들과 비교해봤을 때 굉장히 적은 수의 파라미터로 비슷한 정확도를 보여주는 것을 알 수 있습니다. 어떻게 효율적으로 성능을 올릴 수 있었는지 알아봅시다.

 

 

Model Scaling

Model Scaling 시각화 자료

성능을 올리는 방법은 여러가지가 있는데 scaling은 모델을 확장시켜 성능을 올리는 방식입니다. 베이스 라인이 (a) 그림과 같을 때 각 scaling에 대해 알아봅시다.

 

  1. Width Scaling
    • 그림 (b)와 같은 방법으로 Convolution 필터 개수, 채널 수를 늘려주는 것입니다.
  2. Depth Scaling
    • 그림 (c)와 같은 방법으로 레이어를 깊게 쌓는 방식으로 진행됩니다.
  3. Resolution Scaling
    • 그림 (d)와 같은 방법으로 이미지의 해상도를 조절하는 방식입니다.
    • 저는 이 방법이 좀 신기했는데 그 이유가 여기서는 이미지의 해상도도 하이퍼 파라미터와 같은 개념으로 생각하기 때문입니다.
  4. Compound Scaling
    • 이 논문에서 제안한 방법으로 3가지 scaling들을 적절히 섞어 최적의 솔루션을 찾는 방법입니다.여기서는 최적의 솔루션을 찾기 위해서 scaling 중에서 다음과 같이 한 가지 scaling을 선택하고 나머지는 고정했습니다. 그리고 선택한 scaling factor만을 키워주는 방식으로 연산량과 정확도를 측정하며 진행했습니다.

 

  • 연산량과 정확도 측정

논문에서 나온 scaling factor 변화에 따른 연산량과 정확도의 변화

width scaling 방식은 초반에는 정확도가 잘 증가하다가 3.8부터는 연산량에 비해서 정확도 증가량이 낮아지는 것을 볼 수 있습니다. 비슷하게 depth scaling 방식도 6.0까지는 연산량 대비 많은 정확도 증가를 보여줬지만 그 이후부터는 거의 진전을 볼 수 없었습니다. resolution scaling의 경우에는 2.5 정도만 증가시켜도 다른 scaling 방식에 비해서 굉장히 좋은 성능을 보이는 것을 알 수 있습니다. 하지만 어떤 방식을 써도 어느 정도 증가하고 나면 정확도 증가가 적어지는 것을 알 수 있습니다. 다음은 이 3가지를 전부 사용하는 compound scaling입니다.

 

이 그래프를 보시면 resolution을 증가시키고 depth를 같이 증가시킬 경우 더 좋은 성능이 나온다는 것을 알 수 있습니다. 직관적으로 생각해본다면 resolution이 커졌으니 여기서 나오는 특징들을 더 잘 뽑아내기 위해서 채널 수와 레이어를 더 늘려야 한다로 볼 수 있습니다.

 

  • depth, width가 빨리 saturation이 오는 이유는 정보량에 한계가 있기 때문에 w = 3.8, 이나 d = 6.0 에서 입력 데이터의 정보를 어느정도 다 뽑아냈기 때문에 크기를 확장해도 효율이 오지 않는 것이다, 3가지를 전부 확장시키면 정보량도 확장이 같이 되므로 훨씬 좋은 성능을 낼 수 있다. 라고 이해를 했습니다. 저는 saturation = 한계라고 생각하면서 읽었습니다.

 

Compound Scaling

3개의 scaling을 동시에 사용하면 좋은 성능이 나온다는 것을 알 수 있었습니다. 이번에는 최적의 비율을 찾아서 실제 모델에 적용하는 방식으로 다른 모델과 성능을 비교하는 과정입니다. 이때 모델은 고정하고 depth, width, resolution 3가지를 조절하는 방법으로 진행되는데, 최적의 비율을 찾는다고 하더라도 모델 자체의 성능이 낮을 경우 좋은 결과를 보여줄 수 때문에 초기 모델 선택이 매우 중요합니다. 이 논문에서는 MnasNet과 유사한 형태의 모델을 AutoML을 통해서 만들었습니다. 이렇게 만들어진 베이스 라인 모델은 EfficientNet-B0 라고 부릅니다.

 

Mobilenet v2에서 사용하는 기본 모듈을 사용함!

 

  • Scaling factor 설정 방법

여기서 Φ는 사용하는 컴퓨터 자원에 알맞게 조정하면되고, depth, width, resolution은 알파, 베타, 감마로 표현되며 이때 다음 조건을 만족시켜야 합니다.

 

 

만족시켜야 하는 조건!

 

depth에 경우 2배 키워주면 연산량도 2배 증가하지만 width와 resolution은 연산량이 제곱배로 늘어납니다. 한 레이어의 출력으로 나갈때 채널이 2배가 되고 다음 레이어의 입력으로 들어갈 때 2배가 되니 총 4배가 됩니다. resolution의 경우에는 가로 세로가 2배씩 늘어나면 4배가 되기 때문입니다.

 

위에 조건을 만족시켰기 때문에 알파, 베타, 감마에 파이만큼 제곱을 하게되면 2의 파이 제곱만큼의 연산량이 증가하게됩니다. 논문에서는 EfficientNet의 알파, 베타, 감마 값을 간단한 grid search를 통해서 구하는 방식을 제안하고 있고, 실제로는 알파 값은 1.2, 베타값은 1.1, 감마 값은 1.15를 사용하고 있습니다. 이 3개의 값은 고정한 상태로 파이를 키워주며 모델의 사이즈를 키워주는 방식으로 진행이 됩니다. (이 값들은 파이를 1로 고정해두고 찾은 값들입니다.)

 

  • 이미지넷 결과
    기존 ConvNet과 결과 비교
    • 기존 모델들과 비교했을 때 파라미터 수와 연산량이 굉장히 절약한 상태!
    • ImageNet 데이터셋에서 가장 높은 정확도를 달성했던 GPipe 보다 더 높은 정확도를 달성!
    • 파이를 증가시켜 B0~B7까지의 모델을 얻음!

 

Class Activation Maps

Class Activaion Map 실험 결과

Class Activation Map(CAM)을 보면 물체의 어느 부분을 관측해서 찾는지 알 수 있습니다. 1번째 이미지는 마카롱 4개의 사진인데 compound scaling을 사용했을 때 마카롱의 개수, 위치가 다른 방법과 비교했을 때 더 정확하고, 아래 원과 같은 형태의 물체를 관측할 때도 마찬가지로 5가지 방법 중에서 가장 원의 특징을 나타내는 부분을 관측한다는 것을 알 수 있습니다.

 

  • 나머지 방법들도 그렇게 나쁜 방법이 아닌데 왜 저렇게 크게 차이가 생기는지 알아봐야겠습니다.

 

References