(MobilenetV2) Inverted Residuals and Linear Bottlenecks: Mobile Networks for Classification, Detection and Segmentation

google
imagenet
compression
sparse-convolution
convolutional
singleshot-detector
detection

#1

#googleMobilnet 리뷰 이라는 모델의 후속 논문입니다. MobileNet 에서는 Depthwise Separable Conv 를 이용해서 일반적인 Conv 대비 8~9배의 속도 향상을 이끌어 냈는데, 이번에는 조금 더 향상된 내용입니다.

Components

크게 Depthwise Separable Convolution과 Linear Bottleneck을 이용해서 만들어진 네트워크입니다.

Depthwise Separable Convolutions

일반적인 Convolution 대비 다른 점은 채널 별로 Convolution을 하고, 이를 1x1 convolution으로 채널 간 연산을 하는 것입니다. 즉 전체에 대한 Convolution이 일반적인 연산이라면 이를 채널별 Convolution + 1x1 채널 간 Convolution 으로 Factorization 한 것으로 볼 수 있습니다. 자세한 설명은 Mobilnet 리뷰 에 있습니다.

Linear Bottlenecks

imagehttp://openresearch.ai/uploads/default/original/1X/dff50ea03e857b49dfbc5932f2dad1e3c8f00b0e.png

Bottleneck Architecture 라고하면 일반적으로 Residual Network, Resnet 리뷰 에서 소개된 것처럼 1x1 Conv를 이용해 Channel Reduction을 하는 등의 방식을 이야기 합니다.

논문에서는 이 방식을 사용하기에 앞서 몇 가지 해석을 소개합니다. 결론적으로 Appendix에 소개된 내용은 Input Manifold가 Activation Space보다 작은 dimension의 subspace로 엠베딩이 가능하면, Non-linear Activation에 의한 변환이 정보를 잃지 않으면서 표현력이 좋은 함수처럼 작동한다는 점입니다.

이러한 사실로부터, linear bottleneck을 삽입해서 input manifold가 subspace로 표현되도록 도와주겠다는 설명을 이어갑니다.

Block

결과적으로 위와 같은 형태의 Layer Block을 제안하는데, 논문의 제목에서 Inverted Residual 이라고 부르는 부분은 기존의 Bottleneck Architecture가 채널 수를 줄이는 방식이었다면, 이 논문에서는 오히려 채널을 늘리는 형태이며, 실제 실험적으로도 더 나았다고 합니다.

그리고 이렇게 input/output의 사이즈가 작기 때문에 memory efficient 하다고 볼 수 있겠죠.

Network Architecture

19개 레이어로 되어 있는데, 각 building block은 (n이라는 파라미터가 의미하듯이), 1번 이상 동일구조의 반복으로 되어 있습니다.

기타 학습에 대한 자세한 설명 등은 논문을 참조하는 게 좋을 것 같습니다.

Experiments & Performance

이미지넷에 대한 테스트 입니다. 네모로 이루어진 것들이 MobilenetV2 의 변종들입니다. frontier를 형성하고 있습니다.

모바일넷, 셔플넷 대비 경쟁력 있는 성능에 빠른 속도를 보여줍니다. 주목할 점은 shufflenet 도 스펙으로는 나쁘지 않은데, 실제로 구현 상의 효율 문제가 있다는 점이며, 그 이유로 이 논문에서는 속도 측정이 되지 않았습니다.

COCO 데이터 셋에 대한 Object Detection 결과입니다. 역시 빠르고, 정확합니다. VOC로는 테스트 하지 않은 것이 아쉽습니다.

SSDLite라고 불리우는 모델을 제안하는데, Mobilenet 기반의 Feature Extraction Layer 위에 SDD와 유사한 Prediction Layer를 얹는데, 이때 Depthwise Separable Convolution을 사용합니다.

Semantic Segmentation 역시도 경쟁력있는 성능을 보여주면서 매우 효율적인 연산 양이 필요합니다.

Conclusions

Inverted Residual + Separable Convolution으로 효과적인 Block을 제안하였습니다. 아마도, 이 논문에서 뉴럴넷의 효과적인 표현 방식에 대해 설명하려 노력했는데, 이런 연구가 이어지면서 더 구체적이고 명확한 설명과 함께 더 나은 아키텍쳐가 소개되지 않을까하는 생각을 합니다.


'Network Compression' Outline
NCCL을 이용한 Efficient한 Tensorflow MultiGPU Training 코드 작성하기
Pelee: A Real-Time Object Detection System on Mobile Devices