Full paper name : MobileNets : Efficient Convolutional Neural Networks for Mobile Vision Applications
Abstract : 모바일, embedded vision 앱에서 사용되는 것을 목적으로 모델을 제시하였다. Depth-wise separable convolutions 라는 구조에 기반하며 2개의 단순한 hyper-parameter를 가진다.
여기서 depth-wise convolution은 feature map 뭉치를 채널별로 따로따로 나눠서 각각을 feature kernel에 통과시킨다는 것을 의미한다.
지금까지의 합성곱을 사용하는 CV model들은 크기가 너무 크고 가성비가 좋지 않다. 컴퓨팅 파워가 좋은 데스크탑에서만큼은 문제가 없지만, 모바일기기나 embedded와 같은 컴퓨팅 파워가 그렇게 높지 않는 장치에서는 문제가 생긴다.
이러한 문제점을 해결하고자 본 논문에서는 모델의 크기와 성능(low latency)을 적절히 선택할 수 있도록 2개의 하이퍼파라미터를 갖는 효율적인 모델을 제시한다.
MobileNet은 기본적으로 작은 모델이나, latency(효율)를 최적화하는데에 focusing 되어있음을 강조한다.
그리고 위에서 언급했듯이 depth-wise separable convolution은 사용하였다.
2. MobileNet Architecture
2.1 Depth-wise Separable convolution ★
기존의 Conv 연산 같은 경우 입력값(3채널)과 필터(3채널)을 곱할 경우 하나의 feature map 즉, Output Channel이 나오게 된다. 그런데 만약 필터의 개수가 2개라면 Output Channel이 2개로 나오게 된다.
이때의 연산량은 D_k * D_k * M * N * D_f * D_f 이다.
필터의 크기 D_k
채널 수 : M
필터 개수 : N
Input Image 크기 : D_f
이렇게 많은 연산량을 줄이고자 Depth wise Separable Convolution을 제안한 것이다.
이는 아래의 그림과 같이 기존의 Convolution을 Depth-wise Conv, Point-wise Conv 형태로 쪼갠 형태이다.
Depth-wise Conv의 역할은 각 입력 채널당 1개의 filter 적용하도록 한다.
Point-wise Conv의 역할은 Depth-wise Conv의 결과를 합치지기 위해 1 * 1 conv를 사용하도록 한다.
(기존의 Conv는 두개가 합쳐져있음)
아무튼, 이 두개의 layer로 나눠서 filtering을 하기 위한 separate layer, combining을 하기 위한 separate layer로 구성된다.
2.2 Depth-wise Convolution
Depth-wise 말그대로 깊이에 초점을 맞추었다. 결과적으로는 Dimension Reduction은 발생하지 않게 된다.
의미는 채널마다 따로 학습시켜서 Output Channel의 크기를 1 * 1로 만들고 채널의 개수를 유지시키는 것이다.
이때의 연산량은 D_k * D_k * M * D_f * D_f이다.
2.3 Point-wise Convolution
Point-wise는 차원축소를 위해 많이 사용되는 것으로 Input의 Channel이 3개였다면 Output의 Channel을 1개로 줄여주는 역할을 하게 된다.
이 Point-wise Convolution은 1 * 1 Convolution filter를 사용한다. 그러면, Input에 대한 Spatial feature는 유지시킨채 Channel 개수만 줄일 수 있게 된다. 채널의 수를 줄이는 것만으로도 연산량을 크게 줄일 수 있다는 장점을 지닌다.
이때의 연산량은 M * N * D_f * D_f이다.
1 * 1 Convolution filter를 사용하였기 때문에 필터의 크기 D_k는 1이므로 곱해지지 않는다(정확히는 곱해지지만 1을 곱하기 때문에 의미가 없음)
이 두가지를 합친 모습은 위의 그림과 같다.
기존의 Convolution layer의 역할을 똑같이 수행하지만, 연산량을 크게 줄임으로써 의미가 있다.
당장은 덧셈이 어떻게해서 연산량을 크게 줄여줄 수 있을지 감이 안오지만 이를
Depthwise Separable Convolution / Standard Convolution 으로 취해 보면 한눈에 장점을 확인할 수 있다.
위와 같은 분수꼴이 연산의 비율이다. N은 필터의 개수이고 D_k는 필터의 크기이다.
N같은 경우 보통 64로 둘 수도 있고, 128로 둘 수 있기때문에 매우 작으므로 무시하고, D_k에 초점을 맞춰서 보게된다면 MobileNet에서는 필터의 크기를 3 * 3으로 두게되므로 연산은 8~9배 가량이 줄어들게 된다.
2.4 Width Multiplier : Thinner Models
모바일 기기에 적용시키기 위해 MobileNet은 연산량을 크게 줄이는 작업을 하였다. 하지만, 이보다 더 작고 빠르게 만들어야할 경우가 생기기도 한다. 그래서 본 논문에서는 Width Multiplier와 Resolution Multiplier 2가지의 하이퍼파라미터를 제안한다.
먼저, Width Multiplier는 각 layer마다 얼마나 얇게 만들건지를 결정하게 할 수 있다. alpha(Width hyper-parameter)를 0.5로 둔다면 입력과 출력의 채널 수를 64개에서 32개로 줄어든다. 다만 정확도, 효율성, 크기 면에서 alpha에 따라 차이가 발생할 것이다.
2.5 Resolution Multiplier : Reduced Representation
resolution multiplier는 해상도에 관한 hyper-parameter이다. 입력하고자 하는 이미지와 각 레이어의 내부 feature map과 같은 표현을 rho(Resolution hyper-parameter)만큼 곱해서 해상도를 축소시킨다.
ex) 해상도 224 * 224를 rho = 0.571 을 곱해 해상도를 128 * 128로 축소시킴.
해상도를 줄임으로써 연산량은 rho ^ 2 만큼 줄어들게 된다.
3.1 Network Architecture
모델 구조는 오른쪽 그림과 같다. 왼쪽은 기존의 Convolutional layer를 의미한다.
처음 3 * 3 Depthwise Conv를 통해 RGB 3개 채널을 통과시켜 차원을 유지시킨채 Output Channel의 크기를 줄이는 작업을 한다. 이후 Batch Normalization -> ReLU를 거친 뒤, 1 * 1 Conv 즉, Pointwise Conv 연산을 통해 차원을 축소시키는 작업을 한다. 마지막으로 Batcn Normalization -> ReLU를 다시 거치게 된다.
왼쪽과 같은 역할을 하지만 더욱 연산량을 줄일 수 있다는 것을 위쪽의 수식을 통해 증명하였다.
전체적인 모델 구조는 다음과 같다.
4.1 Experiments
결과적으로는 모델의 성능은 엄청나게 파라미터가 많았던 VGG보다는 다소 낮았으나 높은 성능을 보여줌을 알 수 있었다. 더불어, GoogleNet, VGG16과 비교하였을 때, 파라미터 개수가 n배수만큼 차이가 남을 알 수 있었다.
성능의 감소는 적게하면서 연산량은 대폭 감소 시킬 수 있었던 MobileNet은 Depth-wise Seperable Convolution의 핵심으로 고안된 모델이였다. 그리고 BottleNeck 구조와 유사함을 알 수 있었다. BottleNeck 구조와 유사하나 하나의 Conv layer 연산에 대해서 2가지의 Conv 연산을 하였다는 점에서 차이점이 있었다.
'논문 리뷰' 카테고리의 다른 글
Distilling Knowledge via Knowledge Review 논문 리뷰 (2) | 2024.02.29 |
---|---|
Decoupled Knowledge Distillation 논문 리뷰 (0) | 2024.02.23 |
GCN paper review (0) | 2023.06.02 |
GCN paper review 전 공부 - semi-supervised learning (0) | 2023.05.30 |
Squeeze-and-Excitation Networks(SENet) review (0) | 2023.02.04 |