MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications

compression
google
sparse-convolution

(Curtis Kim) #1

구글에서 나온 논문입니다. 모바일에서(내지는 cpu에서) realtime으로 network forward가 되는 결과를 보여줍니다.

Key Idea는 Convolution Layer가 무거우니 이를 줄일건데, 일종의 Factorization을 제시합니다.

Depthwise Separable Convolution 인데, 이는 여기에서 처음 제안한 것은 아닙니다. 구글의 Xception 논문 리뷰를 보시면 도움이 됩니다.

기존에는 pre-train된 모델을 줄였고, 주로

  • compression
  • quantization
  • hashing
  • pruning

등을 통해 모델을 줄였는데, 주로 '속도’를 위한 것이라기 보다는 네트워크 '크기’에 초점이 맞추어져 있었는데, 이 논문은 '속도’를 타겟으로 합니다.


Depthwise Separable Convolution

위 그림 a처럼 conv layer를 b+c로 풀어낸 건데요.

  • b : depthwise conv filter
  • c : pointwise conv filter

이걸 b+c = depthwise separable filter 라고 부릅니다.

D_K 를 커널사이즈, D_F 를 입력 채널 사이즈, M 을 인풋채널, N 을 아웃풋 채널이라고 할 때,

기존 conv layer는

D_K \cdot D_K \cdot M \cdot N \cdot D_F \cdot D_F

의 비용이 드는데 반해, depthwise로 factorized된 방법에서는

D_K \cdot D_K \cdot M \cdot D_F \cdot D_F + M \cdot N \cdot D_F \cdot D_F

의 비용이 드는 것으로 계산되어 결국

1/N + 1/d^2_K

의 비율로 계산양이 줄어들고, 이는 대략 8~9배 수준이라고 합니다.

해서 결국 아래와 같이 비교할 수 있습니다.


여기에, 이 논문에서는 네트워크 사이즈를 더 줄이기 위해 2가지 파라미터를 추가했어요.

Width Multiplier와 Resolution Multiplier입니다.

Width Multipler : \alpha 는 결국 네트워크의 width를 결정하는 파라미터로, 각 레이어의 인풋채널과 아웃풋채널 수를 \alpha 비율 만큼 조절합니다.

Resolution Multiplier : \rho 는 이름 그대로, Input Resolution을 결정하는 파라미터로 해당 비율만큼 조정합니다.


논문 내 실험 결과

논문에서는 실험을 다양하게 했는데… 쭉 훑어보면요.

Conv Mobilenet이 일반적인 Conv Layer를 사용한 것이고, Mobilenet은 이 논문에서 설명한 방식을 사용한 것으로, Accuracy가 대략 1% 떨어지고, 계산량을 처음 소개드렸듯 9배 쯤 줄었네요.

여기에 \alpha \rho 의 2가지 파라미터를 이용해 네트워크 자체를 줄이면, 성능과 계산양 사이의 tradeoff가 나오고, 해당 표는 아래와 같습니다.

적절히 Smooth하게 떨어지다가 갑자기 무너지는 경우가 있는데, 그 선에서 잘 결정하면 될 것 같고요.

추가적으로, 몇가지 실험들 Recognition Task, Large Scale Geolocatlization Task, Face Attributes, Object Detection 등에 대해 대표적인 db로 실험해서 mAP 수준이 크게 하락하지 않으면서, 어느정도 속도가 나오는 것을 보여줍니다. Face Embedding 등에서는 성능이 꽤 나오는데, Detection 등에서는… 조금 하락하는 것 같기도 합니다.

일부 Implementation과 성능 체크가 Github Repository로 있는데, 꽤 쓸만한 수준의 성능인듯요.


기타 실험

텐서플로우로 구현해서 테스트해보니 FCN(Fully Convolutional Network)으로 구성된 다른 네트워크의 Convolution을 Mobilenet의 Depthwise Separable Convolution으로 변경만하니, 실제로 8~9배에 해당하는 속도 향상이 있었습니다. 특히 Batch normalization 대신에 Fused Batch Norm.을 사용하는 것이 향상에 도움이 됩니다.


(MobilenetV2) Inverted Residuals and Linear Bottlenecks: Mobile Networks for Classification, Detection and Segmentation
ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices
Pelee: A Real-Time Object Detection System on Mobile Devices
Mobile Video Object Detection with Temporally-Aware Feature Maps