機器學習|輕量級卷積神經網絡——MobileNet


谷歌論文題目:

MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications

其他參考:

CNN模型之MobileNet

Mobilenet網絡的理解

輕量化網絡:MobileNet-V2

Tensorflow實現參考:

https://github.com/Zehaos/MobileNet

前言:

  目前,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等數據集的驗證,具體請下載論文閱讀。

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM