深度可分離卷積(Depthwise Seperable Convolution)與Mobilenet

一、標準卷積流程:

一次性完成,輸入爲DF \times DF \times M, 過濾器爲DK \times DK \times M(個數爲N),輸出爲DG \times DG \times N

計算量爲:DK \times DK \times M \times DG \times DG \times N

 

圖1.1 卷積示意
圖1.2 計算量

 


 

 

二、深度可分離卷積(Depthwise Seperable Convolution)流程:

分兩步完成,分別爲Depthwise Conv 和 Pointwise Conv

1. Depthwise Conv:filtering stage

    輸入爲DF \times DF \times M, 過濾器爲DK \times DK \times 1(個數爲M),輸出爲DG \times DG \times M

    計算量爲: DK^{2} \times 1 \times DG^{2} \times M

圖2.1 Depthwise Conv

 

 

2. Pointwise Conv:combination stage

               輸入爲DG \times DG \times M, 過濾器爲1 \times 1\times M(個數爲N),輸出爲DG \times DG \times N

               計算量爲:1\times 1 \times M \times DG \times DG \times N

圖2.2 Pointwise Conv

 

 

總計算量爲:DK^{2} \times DG^{2} \times M + M\times DG^{2}\times N

圖2.3 計算量

 


 

 

三、Depthwise Seperable Conv  和 Std.Conv 對比

1. 計算量對比

\frac{Depthwise Seperable Conv}{Std.Conv} = \frac{DK^{2} \times DG^{2} \times M + M \times DG^{2} \times N}{DK^{2} \times M \times DG^{2} \times N} = \frac{1}{N} + \frac{1}{DK^{2}}

圖3.1 計算量對比

 

 

2. Depthwise Seperable Conv 比Std.Conv 的參數、計算時間少;同時對同一個模型架構,精度略低一點;

3. Depthwise Seperable Conv 分兩步完成卷積: Depthwise Conv 和 Pointwise Conv


 

 

四、兩個參數再次縮小模型

相對於基準模型,mobilenet可以提供兩個參數:width multiplier 和 resolution multiplier。

1. width multiplier(寬度乘子):更薄的模型,按比例減少通道數,即深度,該參數記爲 \alpha ,其取值範圍爲(0,1]。那麼輸入與輸出通道數將變成\alpha M 和\alpha N,計算量變爲:DK^{2} \times DG^{2} \times \alpha M + \alpha M\times DG^{2}\times \alpha N; 結果是參數量減少,計算量也減少。

2. resolution multiplier(分辨率乘子):分辨率更低的模型,按比例降低圖的大小,記爲 \rho;例如輸入特徵圖是224x224,可以減少爲192x192;計算量爲:DK^{2} \times (\rho DG)^{2} \times \alpha M + \alpha M\times (\rho DG)^{2}\times \alpha N;結果是參數量不變,計算量減少。

 

 

五、Mobilenet

採用深度可分離卷積,主要目的是降低模型參數量和計算量。

1. MobilenetV1特點:

    (1)採用深度可分離卷積,並且可調寬度乘子\alpha和分辨率乘子\rho

    (2)採用Batch Normalization

    (3)採用Relu6激活函數

 

2. MobilenetV1的問題:

    (1)沒有利用殘差塊

    (2)Relu6激活函數的存在,導致效果不好

 

 

3. MobilenetV2特點:

   (1)增加Inverted residuals:通常的residuals block是先1*1的Conv layer,減少通道數下來,再3*3 Conv layer,最後經過一個1*1 的Conv layer,將通道數再“擴張”回去。即先“壓縮”,最後“擴張”回去。

           而 inverted residuals就是 先“擴張”,最後“壓縮”,Depth-wise convolution之前多了一個1*1的“擴張”層,目的是爲了提升通道數,獲得更多特徵;

    (2)Linear bottlenecks:爲了避免Relu對特徵的破壞,在residual block的Eltwise sum之前的那個 1*1 Conv 不再採用Relu,而採用Linear,目的是防止Relu破壞特徵。

 

(完)

 

參考:https://www.youtube.com/watch?v=T7o3xvJLuHk&t=639s

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