티스토리 뷰
목차
이번에는 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
'AI' 카테고리의 다른 글
[논문 구현] MobileNet v1 직접 구현해보기 (0) | 2022.08.24 |
---|---|
[논문 리뷰] ShuffleNet v1에 대해서 간단하게 알아보기 (0) | 2022.08.23 |
[논문 리뷰] EfficientNet 간단하게 리뷰하기! (0) | 2022.08.02 |
[Loss Function] Cross Entropy에 대해 간단하게 알아보자! (0) | 2022.07.31 |
[논문 구현] PyTorch로 DenseNet 간단하게 구현해보기! (0) | 2022.07.31 |