MobileNet_v1

一.概述

深度學習能夠很好解決部分計算機視覺相關的問題,但是其需要依靠強大的計算能力作爲支撐。深度學習在能耗有限,計算資源有限和存儲空間有限的移動端部署困難重重。
在不改變網絡結構的前提下,網絡稀疏化,量化是加速和壓縮深度神經網絡模型的重要手段。以AlexNet爲例,網絡的權重有233M的參數,在ILSVRC-2012上精度top1=62.5% top5=83%,而ResNet-1845M的參數,在同樣的數據集上精度top1=69%, top5=89%(非官方)。一方面說明模型參數又很大的冗餘,有很多參數都可以稀疏化爲0,而且AlexNet要比ResNet更容易稀疏化,這也是很多稀疏化方面的論文都先拿舊的AlexNet開刀而不是新的ResNet的原因,更加令人驚訝的是,即使是具有更優結構的ResNet,在卷積層稀疏度達到70%左右時,仍能夠保持原有精度,可見參數冗餘程度之大;另一方面,縱向看兩個網絡,更優結構的網絡能夠具有更優的表達能力,即便是參數規模減少了很多,仍能夠有很大的精度提升。鑑於此,像Google這種擅長造輪子的公司,肯定對此有更深的理解,提出更加高效的MobileNets,也就理所應當了。

MobileNets是爲移動和嵌入式設備提出的高效模型。MobileNets基於流線型架構(streamlined),使用深度可分離卷積(depthwise separable convolutions,即Xception變體結構)來構建輕量級深度神經網絡。

論文介紹了兩個簡單的全局超參數,可有效的在延遲和準確率之間做折中。這些超參數允許我們依據約束條件選擇合適大小的模型。論文測試在多個參數量下做了廣泛的實驗,並在ImageNet分類任務上與其他先進模型做了對比,顯示了強大的性能。論文驗證了模型在其他領域(對象檢測,人臉識別,大規模地理定位等)使用的有效性。

二.深度可分離卷積

MobileNet模型的核心就是將原本標準的卷積操作因式分解成一個depthwise convolution和一個1*1的卷積(文中叫pointwise convolution)操作。簡單講就是將原來一個卷積層分成兩個卷積層,其中前面一個卷積層的每個filter都只跟input的每個channel進行卷積,然後後面一個卷積層則負責combining,即將上一層卷積的結果進行合併。
如下圖:M表示輸入特徵的通道數,N表示輸出特徵的通道數(也是本層的卷積核個數)。因此如果假設卷積核大小是DK*DK*M*N,輸出是DF*DF*N,那麼標準卷積的計算量是DK*DK*M*N*DF*DF。這個式子可以這麼理解,先去掉M*N,那麼就變成一個二維卷積核去卷積一個二維輸入feature map;那麼如果輸出feature map的尺寸是DF*DF,由於輸出feature map的每個點都是由卷積操作生成的,而每卷積一次就會有DK*DK個計算量,因此一個二維卷積核去卷積一個二維輸入feature map就有DF*DF*DK*DK個計算量;如果有M個輸入feature map和N個卷積核,那麼就會有DF*DF*DK*DK*M*N計算量。

                                            

本文的算法是用上圖中的(b)+(c)代替(a),接下來詳細講解下什麼怎麼卷積的。依然假設有N個卷積核,每個卷積核維度是DK*DK*M,輸入feature map的通道數是M,輸出feature map爲DF*DF*N。那麼(b)表示用M個維度爲DK*DK*1的卷積核去卷積對應輸入的M個feature map,然後得到M個結果,而且這M個結果相互之間不累加(傳統的卷積是用N個卷積核卷積輸入的所有(也就是M個)feature map,然後累加這M個結果,最終得到N個累加後的結果),注意這裏是用M個卷積核而不是N個卷積核,所以(b)中沒有N,只有M。因此計算量是DF*DF*DK*DK*M。(b)生成的結果應該是DF*DF*M,圖中的(b)表示的是卷積核的維度。

(c)表示用N個維度爲1*1*M的卷積核卷積(b)的結果,即輸入是DF*DF*M,最終得到DF*DF*N的feature map。這個就可以當做是普通的一個卷積過程了,所以計算量是DF*DF*1*1*M*N(聯繫下前面講的標準卷積是DF*DF*DK*DK*M*N,就可以看出這個(c)其實就是卷積核爲1*1的標準卷積)。

所以最重要的來了,採用這種算法的計算量變成了DF*DF*DK*DK*M+DF*DF*M*N。具體和原來相比減少了多少計算量?可以看下面這個式子:

                                                              \begin{aligned} & \frac{D_{K} \cdot D_{K} \cdot M \cdot D_{F} \cdot D_{F}+M \cdot N \cdot D_{F} \cdot D_{F}}{D_{K} \cdot D_{K} \cdot M \cdot N \cdot D_{F} \cdot D_{F}} \\=& \frac{1}{N}+\frac{1}{D_{K}^{2}} \end{aligned}

也就是說如果卷積核大小爲3*3,那麼差不多卷積操作的時間能降到原來的1/9左右! 

總結:

輸入featuremap的尺寸=DF*DF*M

標準卷積:

卷積核:DK*DK*M*N

計算公式:

                                                                        G_{k, l, n}=\sum_{i, j, m} K_{i, j, m, n} \cdot F_{k+i-1, l+j-1, m}

計算量=DK*DK*M*N*DF*DF

 

將標準卷積DK*DK*M*N轉化爲深度卷積和逐點卷積:

  • 深度卷積負責濾波作用,尺寸爲DK*DK*1*M,如圖b所示,輸出的特徵爲DG*DG*M
  • 逐點卷積負責轉換通道,尺寸爲1*1*M*N,如圖c所示,輸出的特徵爲DG*DG*N

 

深度卷積(depthwise convolution):

卷積核:DK*DK*1*M,其中m_{th}個卷積核用於F中第m_{th}個通道上,產生\hat{G}上第m_{th}個通道的輸出

計算公式:

                                                                              \hat{G}_{k, l, n}=\sum_{i, j} \hat{K}_{i, j, m} \cdot F_{k+i-1, l+j-1, m}

 計算量=DK*DK*M*DF*DF

 

逐點卷積(pointwise convolution)

卷積核:1*1*M*N

計算量=DF*DF*M*N

 

計算量對比:

                                              \frac{D_{K} \cdot D_{K} \cdot M \cdot D_{F} \cdot D_{F}+M \cdot N \cdot D_{F} \cdot D_{F}}{D_{K} \cdot D_{K} \cdot M \cdot N \cdot D_{F} \cdot D_{F}}=\frac{1}{N}+\frac{1}{D_{K}^{2}}

MobileNets使用了大量的3 × 3的卷積核,極大地減少了計算量(1/8到1/9之間),同時準確率下降的很少,相比其他的方法確有優勢。

三.模型結構

Fig3表達的標準卷積(左邊)和因式分解後的卷積(右邊)的差別。注意到卷積操作後都會跟一個Batchnorm和ReLU操作。

                                               

注意:如果是需要下采樣,則在第一個深度卷積上取步長爲2.

MobileNet的具體結構如下(dw表示深度分離卷積):

                                          

MobileNets總共28層(1 + 2 × 13 + 1 = 28)。

除了最後的FC層沒有非線性激活函數,其他層都有BN和ReLU非線性函數.

我們的模型幾乎將所有的密集運算放到1×1卷積上,這可以使用general matrix multiply (GEMM) functions優化。在MobileNet中有95%的時間花費在1×1卷積上,這部分也佔了75%的參數:                  

                                             

剩餘的其他參數幾乎都在FC層上了。

在TensorFlow中使用RMSprop對MobileNet做訓練,使用類似InceptionV3 的異步梯度下降。與訓練大型模型不同的是,我們較少使用正則和數據增強技術,因爲小模型不易陷入過擬合;沒有使用side heads or label smoothing,我們發現在深度卷積核上放入很少的L2正則或不設置權重衰減的很重要,因爲這部分參數很少。

四.超參數

前面說的MobileNet的基準模型,但是有時候你需要更小的模型,那麼就要對MobileNet瘦身了。這裏引入了兩個超參數:width multiplier(寬度乘數)和resolution multiplier(分辨率乘數),這兩個超參數可以控制模型的大小。

1.Width Multiplier: Thinner Models

我們引入的第一個控制模型大小的超參數是:寬度因子α\alphaα(Width multiplier ),用於控制輸入和輸出的通道數,即輸入通道從M變爲αM,輸出通道從N變爲αN。

深度卷積和逐點卷積的計算量:
                                                        D_{K} \cdot D_{K} \cdot \alpha M \cdot D_{F} \cdot D_{F}+\alpha M \cdot \alpha N \cdot D_{F} \cdot D_{F}

 可設置\alpha \in (0,1],通常取其爲1,0.75,0.5和0.25。

計算量減少了:

                                                \frac{D_{K} \cdot D_{K} \cdot \alpha M \cdot D_{F} \cdot D_{F}+\alpha M \cdot \alpha N \cdot D_{F} \cdot D_{F}}{D_{K} \cdot D_{K} \cdot M \cdot N \cdot D_{F} \cdot D_{F}}=\frac{\alpha}{N}+\frac{\alpha^{2}}{D_{K}^{2}}

寬度因子將計算量和參數降低了約\alpha^2倍,可很方便的控制模型大小.

2.resolution multiplier(分辨率乘數)

我們引入的第二個控制模型大小的超參數是:分辨率因子ρ(resolution multiplier ).用於控制輸入和內部層表示。即用分辨率因子控制輸入的分辨率,所謂分辨率即是featuremap的大小。

深度卷積和逐點卷積的計算量:
                                                     D_{K} \cdot D_{K} \cdot \alpha M \cdot \rho D_{F} \cdot \rho D_{F}+\alpha M \cdot \alpha N \cdot \rho D_{F} \cdot \rho D_{F}

可設置ρ∈(0,1],通常設置輸入分辨率爲224,192,160和128。

計算量減少了:
                                            \frac{D_{K} \cdot D_{K} \cdot \alpha M \cdot \rho D_{F} \cdot \rho D_{F}+\alpha M \cdot \alpha N \cdot \rho D_{F} \cdot \rho D_{F}}{D_{K} \cdot D_{K} \cdot M \cdot N \cdot D_{F} \cdot D_{F}}=\frac{\alpha \rho}{N}+\frac{a^{2} \rho^{2}}{D_{K}^{2}}

分辨率因子將計算量和參數降低了約\rho ^2倍,可很方便的控制模型大小.

下面的示例展現了寬度因子和分辨率因子對模型的影響:   

                                                     

第一行是使用標準卷積的參數量和Mult-Adds;第二行將標準卷積改爲深度分離卷積,參數量降低到約爲原本的1/10,Mult-Adds降低約爲原本的1/9。使用α和ρ參數可以再將參數降低一半,Mult-Adds再成倍下降。

五.實驗結果

實驗部分主要研究以下部分: 深度卷積的影響;寬度因子的影響;兩個超參數的權衡;與其他模型對比。

Model Choices

使用深度分類卷積的MobileNet與使用標準卷積的MobileNet之間對比:

                                         

在精度上損失了1%,但是的計算量和參數量上降低了一個數量級。 

爲了進一步縮小模型,可將MobileNet中的5層14×14×512的深度可分離卷積去除。

實驗結果對比:       

                                         

可以看到在類似的參數量和計算量下,精度衰減了3%。(中間的深度卷積用於過濾作用,參數量少,冗餘度相比於大量的逐點卷積應該是少很多的~)

Model Shrinking Hyperparameters

單參數驗證

表6顯示寬度因子對模型參數量、計算量精度的影響,表7顯示分辨率因子對模型參數量、計算量精度的影響:

                                      

                                        

 使用過程要權衡參數對模型性能和大小的影響。

交叉驗證計算量對精度影響

圖4顯示了16個交叉的模型在ImageNet上的表現,寬度因子取值爲α∈{1,0.75,0.5,0.25},分辨率取值爲{224,192,160,128}。

                                          

當模型越來越小時,精度可近似看成對數跳躍形式的。

交叉驗證參數量對精度影響

圖5顯示了16個交叉的模型在ImageNet上的表現,寬度因子取值爲α∈{1,0.75,0.5,0.25},分辨率取值爲{224,192,160,128}。

                                            

 

與其他先進模型相比

表8將完整的MobileNet與原始的GoogleNet和VGG16對比,MobileNet與VGG16有相似的精度,參數量和計算量減少了2個數量級。

                                                 

表9是MobileNet的寬度因子α=0.5和分辨率設置爲160×160的縮小模型與其他模型對比結果,相比於老大哥AlexNet在計算量和參數量上都降低一個數量級,對比同爲小型網絡的Squeezenet,計算量少了2個數量級,在參數量類似的情況下,精度高了3%。

六.結論

論文提出了一種基於深度可分離卷積的新模型MobileNet,同時提出了兩個超參數用於快速調節模型適配到特定環境。實驗部分將MobileNet與許多先進模型做對比,展現出MobileNet的在尺寸、計算量、速度上的優越性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章