# MobileNets 論文閱讀 Paper: https://arxiv.org/pdf/1704.04861.pdf ## Introduction 論文中提出兩點,以打造更輕便、推論速度更快的模型: * 提出一個新的卷積架構-depth-wise separable convolution * 引入兩個超參數-width multiplier, resolution multiplier,以權衡準確率與推論速度 ## MobileNet Architecture ### Depthwise Separable Convolution (DSC) Depthwise separable convolution 是將傳統的卷積層分解為兩個步驟,分別為depthwise convolution與pointwise convolution。 傳統的卷積層的計算方法是利用conv filter執行卷積的同時改變輸出的大小,當filter的kernel大小為$Dk *Dk$,輸入通道數為$M$,輸出通道數為$N$時,傳統的conv filter會如下圖所示,而當輸入影像大小為$Df$時,會需要計算輸入影像與filter的卷積,因此傳統卷積層的總計算量可以表示為以下公式: ![](https://i.imgur.com/qRHqcV1.png) ![](https://i.imgur.com/ImFpEyX.png) 而DSC會將卷積層分為兩個步驟,首先在Depthwise conv中,每個輸入的channel僅會對應一個filter,且此步驟的輸出channel數會與輸入相同,也因此在此步驟中的總計算量不會考慮$M$,其總計算量如下。 ![](https://i.imgur.com/4SCxxjt.png) ![](https://i.imgur.com/C6SBctC.png) 在Pointwise conv中則會使用$1*1$的卷積層並將所有輸入的特徵層結合輸出$N$channel,因此步驟的$Dk=1$,所以此步驟的總計算量為: ![](https://i.imgur.com/zT69FXq.png) ![](https://i.imgur.com/JgJ4Jub.png) 因此總體來說DSC的總計算量為: ![](https://i.imgur.com/5RH7KcE.png) 整體來說DSC的輸入與輸出結構是與傳統卷積層相同,但由$(a) (b) (c)$三張圖就可以知道filter的計算量是少非常多的。 而文中也比較了兩種算法的計算量: ![](https://i.imgur.com/jZfgJHs.png) ### Network Structure and Training 在MobileNet中除了第一層外,其他層的架構都採用DSC,而其架構如下圖,在每個卷積層後都會接上Batch Norm及ReLU,7x7的特徵層之後會使用平均池化層將空間解析度縮減至1,平均池化層後會接上全連接層,最後經過Softmax後輸出,MobileNet的架構可詳見於Table 1。 ![](https://i.imgur.com/YPlpASc.png) ![](https://i.imgur.com/Vl2zfIf.png) MobileNet使用RMSprop訓練,而在MobileNet的訓練中較少使用正則化與資料增益,因為MobileNet本身模型較小不太會有過擬和的情況,另外有一點非常重要,訓練過程中會使用很小或不使用weight decay,因為模型中的參數本來就很少。 ### Width Multiplier: Thinner Models 文中利用Width Multiplier $α$ 來控制模型的寬度,而$α∈(0,1]$,並常為$1, 0.75, 0.5, 0.25$,當$α=1$時,為MobileNet的baseline模型,並可根據以下公式自行調整$α$: ![](https://i.imgur.com/abMB6qZ.png) 其中M為輸入的channel數,N為輸出的channel數,其中以上公式為一層DSC的總計算量。 ### Resolution Multiplier: Reduced Representation 文中利用Resolution multiplier $ρ$ 來控制feature map輸入的大小,其中 $ρ∈(0,1]$,而 $ρ=1$時為baseline,並可以根據以下公式計算DSC的計算量,以調整 $ρ$: ![](https://i.imgur.com/ruh6HaO.png) ## Experiments 文中對於模型選擇及2參數比較了四組不同的方案: 1. 傳統卷積層vs DSC 2. 較淺層MobileNet vs $α=0.75$的MobileNet (較淺vs較瘦) 3. Width Multiplier 4. Resolution Multiplier 在Table 4中可看到傳統卷積層的正確率僅較DSC高出1%左右,然而DSC的計算量卻少非常多;在Table 5中可看到較瘦的模型的正確率較較淺層模型高(shallow為將Tabel 1中5層14x14x512移除);在Tabel 6, 7中可看到當$α$或$ρ$越小時,準確率與計算量都會下降。 文中以MobileNet比較了其他不同的架構: 1. GoogleNet, VGG16 2. Squeezenet, AlexNet ![](https://i.imgur.com/Klzd3nW.png) 可以看到VGG16雖然較MobileNet的準確率高一點,但計算量與模型架構卻比MobileNet大好幾倍,而在Table 9中,MobileNet不但取得最高準確率,其架構與計算量也小於其他模型。 ### Other application 除了分類問題外,MobileNet的backbone也可以被用來做其他的應用,如偵測等等,並且也在其他應用中取得非常好的成果。 ## Conclusion 本文中最重要的就是Depthwise separable convolution的架構,至今在許多輕量化的模型中都常被應用,如EfficientNet中的MBConv即是由此架構變化而來的,因此這個架構應該可以算是輕量化模型的始祖了吧。