논문 리뷰

[Paper] MobileNetV2: Inverted Residuals and Linear Bottlenecks

망나 2019. 8. 8. 10:44

Paper Link : https://arxiv.org/abs/1801.04381

 

MobileNetV2: Inverted Residuals and Linear Bottlenecks

In this paper we describe a new mobile architecture, MobileNetV2, that improves the state of the art performance of mobile models on multiple tasks and benchmarks as well as across a spectrum of different model sizes. We also describe efficient ways of app

arxiv.org

 

구글에서 발표한 모바일 디바이스에 특화된 네트워크인 MobileNet V2 입니다. 최근 on device에 관심이 생겨서 모바일용 모델에 대한 프로젝트를 해볼 생각으로 논문을 읽고 정리하게 되었습니다.

 

Overview

대부분의 state of the art 네트워크들은 높은 계산 비용과 메모리 자원을 요구하도록 설계되어 있습니다. 따라서 한정된 자원을 가진 모바일 환경에서는 이러한 기존의 네트워크들을 그대로 사용하기 어렵게 때문에 본 논문에서는 모바일이라는 제한된 조건안에서도 좋은 성능을 보일 수 있는 네트워크 구조를 소개하고 있습니다.

논문에서 말하는 main contribution은 novel layer module: the inverted residual with linear bottleneck로써 다음 단락에서 더 자세히 살펴보도록 하겠습니다. 공식 구현 코드는 TensorFlow-Slim model library에서 사용이 가능합니다.

 

 

Depthwise Separable Convolutions

 

 

Depthwise Separable Convolution이란 기존의 Convolution을 두 개의 layer 1) depthwise Convolution와 2) pointwise convolution으로 나누어 연산을 하는 구조입니다. 위 그림에서도 유추 할 수 있듯이 각 layer는 다음과 같이 동작합니다.

 

  1. Depthwise Convolution: width * height * depth(1)의 kernel을 이용해서 입력 이미지의 각 Channel별로 Convolution을 실시하게 됩니다.
  2. Pointwise Convolution: width(1) * height(1) * depth의 kernel을 이용해서 Convolution을 실시합니다. (기존의 1x1 conv와 동일)

이렇게하면서 얻어지는 이점은 계산량이 대폭 줄어들게 된다는 것 입니다.

기존의 convolution의 계산량은 \(h_{i} \cdot w_{i} \cdot d_{i} \cdot d_{j} \cdot k \cdot k\) 이지만 Depthwise separable convolution의 경우 계산량은 \(h_{i} \cdot w_{i} \cdot d_{i}(k^{2} + d_{j})\) 가 되어 약 \(k^{2}\) (정확히는 \(k^{2}d_{j}/(k^{2}+d_{j})\))만큼의 계산량을 줄일 수 있게 됩니다. MobilieNetV2의 경우 \(k = 3\) (3 x 3 depthwise separable convolutions)을 사용해서 8~9배 빠른 속도를 보여준다고 합니다.

 

 

Linear Bottlenecks

ReLU 함수를 사용할 때, 비선형에 의한 정보 손실 (0 이하의 값을 가진 경우 모두 0으로 맵핑하는 것)로 인해서 입력된 데이터의 정보를 모두 activation space에 담지 못하는 경우가 발생합니다. 

 

low-dimensional manifolds를 higher-dimensional spaces에 임베딩한 예

위 그림에서 보면 저차원의 manifold를 15, 30차원의 고차원 공간에 맵핑했을 때 보다 2, 3차원의 공간에 맵핑할 경우 더 많은 정보 손실이 발생한 것을 확인 할 수 있습니다. 따라서 차원수가 충분히 큰 공간에서 ReLU 함수를 사용하게 되면 그만큼 정보 손실율이 낮아진다는 것을 의미합니다. 

 

따라서 논문에서 제안하는 모델 구조에서는 데이터 손실을 최소화하기 위해서 저차원의 데이터를 expansion 층을 통해 확장시키고 depthwise convolution 연산을 거쳐서 마지막에 projection 층을 통해 많은 데이터를 보존할 수 있도록 설계되어 있습니다.

출처: http://machinethink.net/blog/mobilenet-v2/

각 layer는 batch normalization과 activation function으로 ReLU6를 포함합니다. 하지만 projection layer의 출력에는 activation function을 적용하지 않습니다. projection layer에서는 low-dimensional 데이터를 출력하기 때문에 여기에 non-linearity를 사용하게 되면 데이터의 유용한 정보들이 손실된다는 것이 저자의 주장입니다.

 

 

Inverted residuals

MobileNet V2의 building block은 residual connection을 활용합니다. 이는 ResNet과 동일하게 gradient를 더 잘 전달하기 위한 형태입니다. 

 

residual block(기존 ResNet)과 inverted residual(MobileNet V2)의 차이점

 

 

 

Model Architecture

모델의 기본 building block은 bottleneck depth-separable convolution with residuals 입니다.

 

Bottleneck residual block, with stride \(s\) and expansion factor \(t\)

 

MobileNetV2

 

참조

http://openresearch.ai/t/mobilenets-efficient-convolutional-neural-networks-for-mobile-vision-applications/20

https://n1094.tistory.com/29

https://ai.googleblog.com/2018/04/mobilenetv2-next-generation-of-on.html

http://machinethink.net/blog/mobilenet-v2/