MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications
一、簡介
《MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications》這篇論文提出了一個用於移動端設備高效的深度網絡MobileNet。MobileNet是改變了傳統的神經網絡的卷積層,用深度可分離卷積對傳統的卷積層進行分解,實現了在網絡性能不下降的前提下大幅減少了網絡的參數量,加快訓練和運行速度。不僅如此,論文中還提供了通過超參數調整神經網絡結構的辦法,並對其進行實驗分析得到了MobileNet族(MobileNets),可以通過在性能和速度兩方面進行權衡得到符合自己的網絡。
二、深度可分離卷積
1、深度可分離卷積
傳統的卷積過程如下圖所示,先通過卷積核在每個通道上進行一次卷積,在將不同通道得到的值相加得到一個值,然後該卷積核在輸入上進行滑窗計算得到輸出的一個通道上的feature map,其他卷積和進行同樣的操作便可得到多個通道的輸出。
而深度可分離卷積(depthwise separable convolution)將整個卷積過程拆分爲兩步,第一步先進行逐層卷積,也就是說在每個卷積核在對應的輸入通道上進行卷積產生對應的單層feature map,之後再通過1*1卷積核進行逐點卷積將不同通道的feature融合到一起,最後形成具體的feature map。具體過程如下圖:
如下兩張圖分別爲傳統卷積和深層可分離卷積的過程舉例。可以明顯的看到深度可分離卷積並不是卷積的數學上的代替,僅僅是結構上的代替;如果將深層可分離卷積中的逐點卷積卷積核的權重全部改爲1,那麼深層可分離卷積在某種意義上和傳統卷積是完全相同的,因爲傳統卷積做完滑窗之後是將數值相加得到最終的結果,等同於經過權值爲1的1*1卷積核的處理。
2、深度可分離卷積參數量
深層可分離卷積是將卷積的部分乘法操作分解成了加法來減少網絡的參數量。論文中給定的參數兩的計算是進行了估算,下面我先貼出論文中給出的計算量計算,然後再寫我自己進行計算的過程。
前提:
- 卷積網絡的輸入:,爲輸入通道;
- 卷積網絡的輸出:,爲輸出通道;
- 卷積核大小:;
- padding=1,stride=1
那麼單層的卷積網絡的參數量可以通過計算,那麼單層卷積層的計算量爲。
而對於深層可分離卷積便可以使用公式計算計算量,第一部分即逐層卷積的計算量爲,第二部分逐點卷積的計算量爲,所以總的計算量爲。
而深層可分離卷積和傳統卷積網絡的參數兩之比爲:
明顯的可以看到N一般都是遠大於1的,多爲1,3等奇數,也就是說單層的計算量只有噹噹前層爲1*1卷積時二者相同,否則傳統卷積計算量至少是深層可分離卷積的9倍或更多。
3、推導計算量
條件:
- 輸入,爲輸入通道;
- 卷積核:;
- padding=0,stride=1
上面採用padding=0和stride=1是爲了方便,我們的目的是估算計算量無需過於精確(這裏只計算乘法的計算量,相比於加法乘法更耗時,因此以乘法爲準,最後計算出的結果可以理解爲進行了多少乘法)。
從上面的參數可以計算出網絡的輸出爲,一個卷積核的計算量爲,那麼一個卷積核在一個輸入通道上的計算量是,故單層的卷機網絡的計算量爲,在卷積網絡中輸入單通道分辨率的基本是大於輸出的故有:
同理,在深層可分離卷積中,
- 第一步逐層卷積中,單個卷積核進行一次卷積的計算量是(注:這裏的是逐層卷積的卷積核,因爲逐點卷積的卷積核一定是1*1),那麼一個卷積核在一個輸入通道上的計算量是,第一步逐層卷積的計算量爲
- 第二步逐點卷積只是對通道的融合,一個1*1卷積核的計算量爲,那麼一個卷積覈對所有通道的數據進行融合後的計算量爲,個卷積核的計算量是$(D_F-D_K+1)^2×M×N\ge D_F×D_F×M×N $
- 總參數量爲$ D_K×D_K×D_F×D_F×M+D_F×D_F×M×N$
三、網絡結構
下圖爲MobileNet網絡結構中的結構和傳統的卷機網絡的區別,和預想不一樣的是MobileNet在逐層卷積和1*1卷積核之後都添加了BN層和RELU激活層。
下圖爲MobileNet的整體結構,如果把其中的3*3和1*1網絡結構堪稱傳統的卷機網絡可以發現,這是一個和VGG非常相似的沒有多餘的結構的網絡,但是比VGG要深,這裏有28層。
下表爲mobilenet中的計算量的分佈,可以明顯的看到網絡的計算量大部分集中於1*1卷積核中,作者認爲對於矩陣運算,稀疏矩陣運算速度比一定比稠密矩陣運算快,除非能夠找到對於稀疏矩陣好的壓縮辦法,而MobileNet的網絡計算量主要集中與1*1網絡,這一特點正式網絡所體現的高效性來源之一。另外傳統的卷積矩陣計算是通過通過高度優化的通用矩陣乘法(GEMM)函數來實現,但是操作時需要在內存中進行初始重新排序,稱爲im2col,以便將其映射到GEMM。而MobileNet的1×1卷積不需要在存儲器中重新排序,並且可以直接用GEMM實現,這也大大加快了計算速度。
四、網絡改進
MobileNet論文中還提到了通過超參數和對網絡進行修改來挑選更好的網絡,該技巧在最新的EffiecientNet中同樣使用了,並且增加了深度這一維度。
在這裏用來控制網絡的寬度,即通道數,用來控制網絡輸入的分辨率,這兩個參數的修改都是基於上面提到的MobileNet基礎網絡進行修改的,和取值一般爲(0,1]。採用這兩個參數後網絡的輸入輸出通道由變成了和,那麼網絡的計算量變成$ D_K×D_K×D_F×D_F×\alpha M+D_F×D_F×\alpha M×\alpha N\alpha ^ 2\rho$,網絡的計算量變爲 ,計算量大概改變了總的計算量變爲。
作者改變不同的參數值進行實驗得到了下面兩張表,第一張是改變,第二張是改變的效果。
作者還分別選擇了分別進行自由組合成16個網絡分別進行了性能對比,如下圖分別爲在ImageNet上操作數和準確度的關係和參數量和準確度的關係,基本符合參數量越多,操作越多準確率越高的趨勢:
五、效果
下表爲可分離卷積和傳統的卷積網絡的對比:
下面幾張圖分別爲MobileNet和流行的網絡的性能和參數量對比,很明顯MobileNet基本上能夠做到參數量大幅減少的情況下準確度並不會減少多少。
作者還對比了其他目標識別,人臉識別等領域的效果。