[MobileNet 系列] MobileNetV1-為終端而生

1. Introduction

為了使深度學習模型能在終端機器上 real-time 運行,勢必要想辦法減少模型運算量,在此同時又不能讓模型的準確性掉太多,因此 MobileNet 應運而生。近年來各家 AI 晶片層出不窮,多數應用於 real-time 的偵測、識別上,比如說人臉偵測、人臉識別等等,但這些晶片為了達到低功耗 real-time 表現,提供的記憶體往往非常小,以我待過的公司所做出的晶片為例,只有 6MB 容量給訓練好的模型使用,包括模型運算期間製造的暫存變數。在這種限制下,小模型是我們唯一的選擇,而 MobileNet 就是最佳解,該模型達到極度輕量化的同時,亦為我們帶來可以接受的準確度,被我們廣泛運用到各種應用中,包含 detection、recognition、segmentation。這篇文章將會介紹 MobileNet 這篇論文,讓大家理解該架構的特別之處。

2. What is Convolution?

在進入 MobileNet 的重點之前,必須先了解捲積 (convolution) 的基本概念,若非常了解捲積 (以下簡稱 Conv) 的讀者可以跳過這節。Conv 是考慮 local 空間以及 channel 間關係的一個運算,讀者可以透過以下動畫清楚理解 Conv 的運算方式。Conv 運算的參數通常由 $3 \times 3$ (或是 $5 \times 5$) 的 kernel 組成,導致這些 kernel 只能”看到”至多 $3 \times 3$ 的圖片區域 (註1),所以它只考慮到了局部空間的關係。另外,kernel 會對不同 channel 間的特徵加權再總和,因此也會考慮到不同 channel 間的關係。

假設目前輸入圖片有三個 channel,則 Conv 會有對應到個別 channel 的 $N$ 組 kernels,每一組 kernel 會由 3 個 kernels 組成,並對每個圖片的局部空間開始做轉換,三個 kernels 對每個 channel 的 pixel 點乘後再總和,即為 Conv 某個輸出 channel。需要特別注意的是 tensorflow / pytorch 裡面的 Conv 運算能讓使用者挑選是否 padding:”same”、”valid”。其中 “same” 代表有 padding,目的是使輸出和輸入的長寬保持一致,這也是我們時常使用的設定,而 “valid” 則不會 padding,使的輸出的長寬會略小於輸入。

我們可以計算一下 Conv 運算總共需要的乘法數量有多少。假設輸入是一個 $(D_F, D_F , M)$ 的張量 (tensor),我們將輸出的 channel 設為 $N$,並將 kernel 大小設為 $(D_K , D_K , M , N)$,Conv 總共的乘法數將會達到:$D_F \cdot D_F \cdot M \cdot N \cdot D_K \cdot D_K$。縱使 Conv 可以達到很好的準確度,但對於終端裝置來說運算量還是太大了,因此我們接下來將會介紹另一種捲積運算,稱為 Depthwise Seperable Convolution

註1: 能夠”看到”的區域大小稱為 receptive field。

3. Depthwise Separable Convolution

Depthwise Separable Convolution (DSConv) 和 Conv 一樣考慮到到局部空間與 channel 之間的關係,不同之處在於 DSConv 將兩種資訊拆解,使它們獨立運作。我們將在後面看到這種改動會犧牲一些準確度,卻在運算量得到大幅的降低。DSConv 會先對個別 channel 做運算,並不考慮 channel 間的關係,這個運算稱為 depthwise convolution (DConv),可以注意到 DConv 只將局部空間的關係考慮進來,沒有考慮到 channel 之間的融合,所以該運算的總乘法數為:$D_K \cdot D_K \cdot M \cdot D_F \cdot D_F$。

做完 DConv 後,會開始做 pointwise convolution (PConv),該運算只考慮了 channel 之間的關係,不看局部空間,我們可以利用 $1 \times 1$ Conv 達成這樣的效果 (*註2)。因為 kernel size 只有 $(1, 1)$,所以 PConv 的運算的總乘法數為:$M \cdot N \cdot \ D_F \cdot D_F$。

最後我們可以比較 Conv 和 DSConv 運算量的差異:$$
\frac{D_K \cdot D_K \cdot M \cdot D_F \cdot D_F + M \cdot N \cdot \ D_F \cdot D_F}{D_F \cdot D_F \cdot M \cdot N \cdot D_K \cdot D_K} = \frac{1}{N} + \frac{1}{D_K^2}
$$ 或許直接用實際例子計算會比較有感覺,假設我們的輸入圖像大小為 $(256, 256, 3)$,並且將下一層的 channel 設定為 $N = 64$,使用常見的 $3 \times 3$ kernel,DSConv 的運算量只有 Conv 的 $0.12673…$,代表在這種場景設定下,DSConv 只要 Conv 十分之一的運算量就可以達到接近的準確度!

*註2: $1 \times 1$ Conv 代表 kernel size 為 $(1, 1, M, N)$ 的 Conv 運算。

4. MobileNet

實際讓 MobileNet 和一般 CNN 唯一的不同在於,MobileNet 將所有的 Conv 運算,全部換成 DSConv,以兼顧準確度以及速度。MobileNet 的整體架構如下:

若遇到輸出是二維的題目像是 image segmentation,可以將最後的 average pooling 捨棄,改為適合的運算。基本上整個 MobileNet 的模型架構應該是經過作者一定程度的嘗試才定下來的,因此若沒有時間嘗試其他設定的話,按照作者的架構基本上都可以獲得不錯的結果。

另外,論文中作者引入了兩個超參數:$\alpha$、$\rho$,兩者都是用來調整整體模型大小的參數。其中 $\alpha$ 用來調整 channel 的數量,在論文所有的實驗中,$\alpha$ 的選擇為 $(0.25, 0.5, 0.75, 1)$,並將 $\alpha$ 應用至模型所有層之 channel 數量,舉例來說 average pooling 這層的 channel 數量為 1024,根據不同的 $\alpha$,將被調整為:$(256, 512, 768, 1024)$。而參數 $\rho$ 則被用來調整輸入圖片的長、寬大小,論文中依據不同的 $\rho$ 值圖片被 resize 成:$(224^2, 192^2, 160^2, 128^2)$。因為 MobileNet 架構有許多 pooling 的運算,這裡需要注意輸入大小需要設為 32 的倍數。

5. Experiments

5.1. MobilNet

在 MobileNet 的論文裡,作者做了多項實驗,證明當時所有的模型中 MobileNet 兼顧準確度以及速度,達到很好的平衡。首先我們針對 MobileNet 自身的性能進行討論。我們可以從以下實驗看出 MobileNet 在 imagenet 的準確度只比 CNN 稍差,但運算量和模型大小卻有天翻地覆的改變。

作者也做了深度和寬度 (channel 數量) 的比較,我們可以發現在參數量、運算量接近的條件下,我們寧願模型深一點,也不要它 channel 多但過淺,這項結論可以作為我們在調參上重要的參考。

除此之外,作者也提供了 $\alpha$、$\rho$ 這些參數如何影響模型的準確度以及總體運算量、參數量的比較圖,讓使用者可以依據自身的使用場景設定適合的參數。

5.2. Applications

接下來列舉幾個跟我比較有關係的實驗,包括 object detection、face recognition。作者將 MobileNet 套用在 SSD、faster-RCNN 等著名的物件偵測架構上,發現 mobileNet 可以與這些物件偵測架構搭配,取得良好的準確度以及驚人的小運算量。

在人臉辨識的題目上,MobileNet 也可以取得很好的表現,作者利用蒸餾 (distillation) 的方法,將 MobileNet 的輸出擬和至 pretrained FaceNet 的輸出,具體作法猜測應該是餵入同一個人臉,將兩者的輸出差異作為最佳化的目標函數,這個差異可以用 mean square、KL 等方式實作,依具體表現選用適合的目標函數。

6. Summary

MobileNet 提供了一個很好的範例,讓我們探索準確度與速度、學術研究與實務應用之間的平衡點,過往大模型如 resnet、VGG 等僅限於學術研究中,我們無法將這些模型應用在實務上,但自從 MobileNet、EfficientNet 等小模型的興起,讓我們可以持續發展小模型於現實生活的應用。MobileNet 經過量化後可以放入只有 6MB 的晶片當中,運算速度達到 30+ fps,因此成為公司最常使用的模型,搭配各種 augmentaiton、最佳化的特殊手法,可以將模型準確度提高的可以接受的水準。時至今日,雖然 MobileNet 已經發展至第三版,但這篇論文所提供的一些實驗依舊能讓我們借鏡,用於自己的工作中。

7. Reference

MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications

其他相關文章

機器學習系列文章總整理
[MobileNet 系列] MobileNetV2-小改動大進化,終端的唯一選擇
EM Algorithm 詳盡介紹: 利用簡單例子輕鬆讀懂 EM 的原理及概念
Gaussian Mixture Model (GMM) -混合高斯模型的介紹以及完整數學式推導

Show 1 Comment

1 Comment

Comments are closed