MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications論文閱讀筆記

論文地址:MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications

MobileNet是爲移動和嵌入式設備提出的輕量級網絡模型。論文驗證了模型在其他領域(對象檢測,人臉識別,大規模地理定位等)使用的有效性。本文爲閱讀學習MobileNet論文時的要點記錄。

深度可分離卷積(Depthwise separable convolution)

在這裏插入圖片描述

標準卷積

圖(a)是標準卷積。輸入特徵圖尺寸爲DF×DF×MD_F\times D_F \times M,卷積核尺寸爲Dk×Dk×MD_k\times D_k\times M,輸出特徵圖尺寸爲DG×DG×ND_G\times D_G\times N,可計算出標準卷積的參數量爲Dk×Dk×M×ND_k\times D_k\times M\times N

深度卷積(depthwise convolution)

圖(b)代表深度卷積。輸入特徵圖尺寸爲DF×DF×MD_F\times D_F \times M,卷積核尺寸爲Dk×Dk×1D_k\times D_k\times 1,輸出特徵圖尺寸爲DG×DG×MD_G\times D_G\times M,即深度卷積調整了feature map的大小,沒有改變通道數。實際上相當於分組卷積。深度卷積的參數量爲Dk×Dk×1×MD_k\times D_k\times 1\times M

逐點卷積(pointwise convolution)

圖©代表逐點卷積,是一個1×11\times 1的卷積。輸入特徵圖是(b)圖中的操作輸出的特徵圖,尺寸爲DG×DG×MD_G\times D_G\times M,卷積核尺寸爲1×1×M1\times 1\times M,輸出特徵圖尺寸爲DG×DG×ND_G\times D_G\times N。逐點卷積的參數量爲1×1×M×N1\times 1\times M\times N

深度可分離卷積

深度可分離卷積將標準卷積分解成深度卷積(depthwise convolution)逐點卷積(pointwise convolution)。那麼深度可分離卷積操作的參數量爲深度卷積與逐點卷積的參數量之和:Dk×Dk×M+M×ND_k\times D_k\times M+ M\times N。所以深度可分離卷積參數量是標準卷積的Dk×Dk×M+M×NDk×Dk×M×N=1N+1DK2\frac{D_k\times D_k\times M+ M\times N}{D_k\times D_k\times M\times N}=\frac{1}{N}+\frac{1}{D_K^2}。因此相比於標準卷積,深度可分離卷積可大幅度降低參數量和計算量。

網絡結構與訓練

MobileNet的模型結構如下:
在這裏插入圖片描述
在這裏插入圖片描述
如上圖所示,由於深度可分離卷積將原本的一個標準卷積層替換爲一個深度卷積層和一個逐點卷積層,相當於一個卷積層變成了兩個卷積層,那麼對應的BN和ReLU也需要在每一個卷積層各進行一次。

深度學習中的卷積通常是用通用矩陣乘(GEMM)來實現的。需要先通過im2col對其在內存中重排序,才能使用GEMM。im2col可以將feature map和卷積核展成列(行)向量,以方便後續的矩陣乘法計算。

我們把一個卷積覈對應的值展開,到底應該展開爲行還是列呢?卷積核的滑動先行後列還是相反?區別在哪?
這其實主要取決於我們使用的框架訪存的方式。計算機一次性讀取相近的內存是最快的,尤其是當需要把數據送到GPU去計算的時候,這樣可以節省訪存的時間,以達到加速的目的。不同框架的訪存機制不一樣,所以會有行列相反這樣的區別。在caffe框架下,im2col是將一個小窗的值展開爲一行,而在matlab中則展開爲列。所以說,行列的問題沒有本質區別,目的都是爲了在計算時讀取連續的內存。
這也解釋了我們爲什麼要通過這個變化來優化卷積。如果按照數學上的步驟做卷積讀取內存是不連續的,這樣就會增加時間成本。同時我們注意到做卷積對應元素相乘再相加的做法跟向量內積很相似,所以通過im2col將矩陣卷積轉化爲矩陣乘法來實現。
————————————————
原文鏈接:im2col的原理和實現

1×11\times 1卷積則不需要在內存中進行重新排序,可以直接使用GEMM進行實現,降低延遲。GEMM是最優化的數值線性代數算法之一。而如下圖所示,MobileNet的絕大部分計算量和參數量都源自1×11\times 1卷積,其餘的參數也幾乎都在FC層,因此MobileNet的參數量和計算量相比使用標準卷積的網絡將大幅降低。

由於MobileNet的網絡規模較小,不容易產生過擬合的問題,因此在訓練網絡時無需作過多的正則化和數據增廣(特別是深度卷積層,參數量已經很少了,不需要進行權重衰減)。

減小模型、提高效率的兩個超參數

Width Multiplier:使模型變瘦

引入width multiplier參數α\alpha,使模型變瘦(thinner),從而降低計算量。α\alpha是一個將輸入和輸出feature map的通道數進行收縮的乘數,輸入通道MM變爲αM\alpha M,輸出通道NN變爲αN\alpha N。深度可分離卷積引入α\alpha後的計算成本爲:DK×DK×αM×DF×DF+αM×αN×DF×DFD_K \times D_K \times αM\times D_F \times D_F +αM \times αN \times D_F\times D_F

其中,$ α ∈ (0, 1] $ ,通常設置爲1,0.75,0.5 或0.25。引入α\alpha後,深度可分離卷積的參數量大致收縮爲之前的α2\alpha^2倍。

width multiplier也可以用於其他的網絡模型,但是引入width multiplier之後,網絡需要從頭開始訓練。引入α\alpha後,深度可分離卷積的參數量大致收縮爲之前的α2\alpha^2倍。

Resolution Multiplier: 使輸入分辨率變小

通過設置輸入的分辨率來隱式設置Resolution Multiplier參數ρ\rho。深度可分離卷積同時引入α\alphaρ\rho後的計算成本爲:$D_K \times D_K \times αM \times \rho D_F\times \rho D_F+αM \times αN\times \rho D_F\times\rho D_F $。

其中ρ01]ρ∈(0,1]通常是隱式設置的,因此網絡的輸入分辨率爲224、192、160或128。

引入ρ\rho後,深度可分離卷積的計算量縮減爲之前的ρ2\rho^2倍。

要點總結

  1. 深度可分離卷積
  2. 兩個超參數

參考

理解分組卷積和深度可分離卷積如何降低參數量

im2col的原理和實現

im2col方法實現卷積算法

輕量級網絡–MobileNet論文解讀

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