티스토리 뷰

목차



    이번에는 MobileNet v1 논문에 대해서 간단하게 리뷰해보려고 한다.

     

    1. Intro

     

     AlexNet 이후로 CV분야는 딥러닝 네트워크를 중심으로해서 많은 발전을 이뤄냈다고 언급한다. Network의 연구는 대부분 더 깊게 쌓고, 복잡하게 구성하여 parameter수를 늘려 performance를 증가시키는 방향으로 진행되고 발전해왔다고 한다. 하지만 그것이 size, speed 관점에서는 더 효율적이라고 말할 수는 없다는 것이 이 논문의 핵심이다. 로보틱스, 자율주행, AI가 탑재된 앱 등 다양한 Recognition Task에서 제한된 플랫폼(하드웨어 성능)에서 빠른 정보전달이 중요하다고 말한다. 

     

     이 논문에서는 작은 parameter를 통한 size와 low latency를 목적으로 두 개의 Hyperparameter 설정과 효율적인 구조를 바탕으로 실제적으로 필요한 요구사항을 만족시킬 수 있는 모델을 소개하겠다고 언급한다. 그 hyperparameter는 Network의 width와 resolution에 해당된다.

     

    2. Architecture

     

    Network 구조를 이해하려면 Depthwise-Separable Convolution을 이해할 필요가 있다.

    Idea는 기존 Convolution 연산에서는 모든 channel을 사용했는데, 과연 전부 필요할까?? 에서 출발하여 parameter수를 줄이기위한 구조를 제안한 것이 Depthwise-Separable Convolution이다. Depthwise와 Separable 2 step으로 연산이 진행되며 이를 이해하는 것은 다음 그림으로 설명이된다.

    a그림이 기존 Convolution 연산이며, b그림은 각 채널마다 하나씩의 kernel을 대응시켜 연산하여 output을 각각 내는 방법이며, pointwise convolution은 1x1 Convolution 연산이다. 그래서 Depthwise 와 Pointwise를 결합한 것이 Depthwise-Separable Convolution이다.

     

    전체 Architecture를 보기 전 MobileNetv1의 목적인 Parameter수를 줄인 것을 실제 계산해보자

     

    먼저 다음과 같이 parameter를 정의하자

    $C_{out}$ 은 output의 채널 수

    $C_{in}$은 input의 채널 수

    $H_{out}$은 output의 Height

    $W_{out}$은 output의 Width

    $K_{w}$은 kernel(filter)의 Width

    $K_{h}$은 kernel(filter)의 Height

     

    기존 Convolution 연산의 Computation은 다음과같다.

    $ C_{out}C_{in}H_{out}W_{out}K_{h}K_{w} $

     

    Depthwise Convolution은 채널별로 각각 filter가 매칭되어 계산되므로

    $ C_{in} K_{w} K_{h} H_{out} W_{out} $ 의 parameter 연산 Cost

     

    Separable Convolution은 1x1 Conv 연산이므로

    $ C_{out} C_{in} H_{out} W_{out} $ 의 parameter 연산 Cost

     

    따라서 Depthwise-Separable Convolution은 

    $ C_{in} K_{w} K_h H_{out} W_{out} + C_{out} C_{in} H_{out} W_{out} $ 의 연산 Cost이다.

    Depthwise 연산 후 결과를 Pointwise(Separable Conv) 연산을 하기에 더해주게된다.

     

    비율을 계산하면

    $ \frac{Cost_{full}}{Cost_{Depth}} = \frac{1}{C_{out}} + \frac{K_h}{K_w} $ 처럼 더 효율적으로 parameter 수가 적음을 확인할 수 있다.

     

    그래서 DepthWise-Sepearable Convolution은 다음과 같은 block으로 구성된다.

     

    $$ 3x3 Depthwise Conv - Batch Norm - ReLU - 1x1 Conv - Batch Norm - ReLU $$

    여기서 $1x1 Conv$가 Pointwise operation 역할을 하게된다.

     

    전체는 다음과 같이 구성된다.

    실제로 ImageNet기준 실험결과 VGGNet/GoogleNet과 비슷하면서도 parameter수는 적다는 것을 확인했다.

    또한 논문에서는 width / resolution을 hyperparameter로 성능 비교를 한 실험결과도 다음과 같다.

    Accuracy와 tradeoff인 width / resolution에 대한 실험결과이며 Task에 맞게 조정하는 것이 필요하다.

     

     

    지금까지 MobileNetv1에 대해서 간단하게 알아보았다. 다음에는 ShuffleNet에대한 논문리뷰와 MobileNet v1 논문 구현에 대해서 작성해보려 한다.

    https://arxiv.org/abs/1704.04861v1