谷歌論文題目:
MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications
其他參考:
Tensorflow實現參考:
前言:
目前,CNN以及其他神經網絡正在飛速發展與應用,為了追求高准確率,網絡模型的深度和復雜度越來越大。然而在某些真實的應用場景如移動或者嵌入式設備上,如此大而復雜的模型難以應用。
首先,模型過於龐大,面臨着內存不足的問題;
其次,一些場景要求低延遲或者說響應速度要快(自動駕駛中的行人檢測)。
因此,研究小而高效的CNN模型至關重要。
目前針對此類問題的研究,主要集中在兩個方面:
1、對訓練好的模型進行壓縮得到小的模型。
2、直接設計小的模型。
總的來說,都是在保持模型的性能的前提下,降低模型大小,提升模型速度。
而谷歌提出的MobileNet就是一種直接設計的小模型,它是在accuracy(准確率)和latency(延遲)中折中的一種方法。

圖1.MobileNet模型可以高效的應用到智能設備的識別任務中去
Depthwise Separable Convolution(深度級可分離卷積,DSC):
MobileNet與CNN的不同在於它的基本單元是DSC,即深度級可分離卷積。
深度級可分離卷積是一種可分解卷積操作,它可分解為兩個更小的操作:depthwise Convolution和pointwise Convolution。
對於標准卷積,其卷積核是用在所有的輸入通道上,而depthwise Convolution針對每個輸入通道采用不同的卷積核,就是說一個卷積核對應一個輸入通道,所以說depthwise Convolution是depth級別的操作。而pointwise Convolution其實就是普通的卷積,只不過采用的是1*1的卷積核。

圖2.標准卷積濾波器被深度級卷積和1*1卷積替代用來構建深度級可分離卷積
對於DSC,其首先采用depthwise Conv對不同輸入通道分別進行卷積,然后采用pointwise Conv將上面的輸出再進行結合,其效果與一個標准卷積差不多,但是會大大減少計算量和模型參數量。
采用depthwise Conv會有一個問題,就是會導致信息流通不暢,即輸出的feature Map僅包含輸入的feature Map的一部分,在這里,MobileNet采用了pointwise Conv解決這個問題。后來的ShuffleNet采用同樣的思想對網絡進行改進,只不過將pointwise Conv換成了channel Shuffle。
下面,對DSC在計算量上與標准卷積的區別進行說明:
假設輸入特征圖:Df*Df*M;輸出特征圖:Df*Df*N,M、N是通道數(channel或者depth),這里假定了輸入和輸出特征圖的大小(width and height)是一致的。采用的卷積核:Dk*Dk。
對於標准的卷積,其計算量為:Dk*Dk*M*N*Df*Df
對於depthwise Conv:Dk*Dk*M*Df*Df
對於pointwise Conv:M*N*Df*Df
從而總的DSC的計算量為:Dk*Dk*M*Df*Df+M*N*Df*Df
進而得到depthwise Conv/CNN = (Dk*Dk*M*Df*Df+M*N*Df*Df)/(Dk*Dk*M*N*Df*Df) = 1/N + 1/Dk^2
從上面可以看出,如果采用3*3的卷積核,DSC可將原來的計算量將至1/9。
MobileNet 的一般結構:
MobileNet的基本結構和網絡結構可以從下面的圖表中進行了解,網絡結構是針對谷歌論文中的識別任務構建的,可以對其進行修改。

圖3.帶有BN和ReLU的標准卷積層與DSC
表1.MobileNet的網絡結構

表2.MobileNet網絡的計算與參數分布

從上面可以看出MobileNet的計算主要集中在1*1的卷積中,約占95%,擁有着75%的參數。另一個主要的參數分布在全連接層。卷積一般通過一種im2col的方式實現,其需要內存重組,但當卷積核為1*1時,其實就不需要這種操作了,底層就可以有更快的實現。
MobileNet瘦身:
之前提到的是MobileNet的基准模型,有時候需要對MobileNet瘦身,這個時候就需要引入兩個超參數:width multiplier(寬度乘數)和 resolution multiplier(分辨率乘數)。
對於寬度乘數a:
1、其是按比例減少通道數。
2、取值范圍(0,1]。
3、引入寬度乘數后,計算量變成:Dk*Dk*a*M*Df*Df+a*M*a*N*Df*Df。
4、由於主要計算量在后一項,所以width multiplier可以按照a^2的比例降低計算量,其參數量也會下降。
對於分辨率乘數p:
1、按比例降低特征圖的大小。
2、在引入寬度乘數和分辨率乘數之后,計算量變成:Dk*Dk*a*M*p*Df*p*Df+a*M*a*N*p*Df*p*Df。
3、分辨率乘數僅影響計算量,不改變參數量。
論文中對引入兩個超參數之后的效果進行了比較,具體如下:
表3.使用超參數之后的性能對比

表4.MobileNet的寬度乘數對網絡的影響

表5.MobielNet的分辨率乘數對網絡的影響

總的來說,引入的兩個參數會降低MobileNet網絡的性能,具體實驗分析可以查閱論文。其是在accuracy 和 computation,以及accuracy 和 model Size 之間做了這種。論文的最后還使用該網絡進行了COCO data等數據集的驗證,具體請下載論文閱讀。
