MobileNet(v1、v2)網絡詳解與模型的搭建

首先給出三個鏈接:
1. MobileNet(v1,v2)網絡詳解視頻
2. 使用pytorch搭建mobilenet v2並基於遷移學習訓練視頻
3. 使用tensorlow2搭建mobilenet v2並基於遷移學習訓練視頻

在之前的文章中講的AlexNet、VGG、GoogLeNet以及ResNet網絡,它們都是傳統卷積神經網絡(都是使用的傳統卷積層),缺點在於內存需求大、運算量大導致無法在移動設備以及嵌入式設備上運行。而本文要講的MobileNet網絡就是專門爲移動端,嵌入式端而設計。

MobileNet v1

MobileNet網絡是由google團隊在2017年提出的,專注於移動端或者嵌入式設備中的輕量級CNN網絡。相比傳統卷積神經網絡,在準確率小幅降低的前提下大大減少模型參數與運算量。(相比VGG16準確率減少了0.9%,但模型參數只有VGG的1/32)。
要說MobileNet網絡的優點,無疑是其中的Depthwise Convolution結構(大大減少運算量和參數數量)。下圖展示了傳統卷積與DW卷積的差異,在傳統卷積中,每個卷積核的channel與輸入特徵矩陣的channel相等(每個卷積核都會與輸入特徵矩陣的每一個維度進行卷積運算)。而在DW卷積中,每個卷積核的channel都是等於1的(每個卷積核只負責輸入特徵矩陣的一個channel,故卷積核的個數必須等於輸入特徵矩陣的channel數,從而使得輸出特徵矩陣的channel數也等於輸入特徵矩陣的channel數)
dw卷積與普通卷積
剛剛說了使用DW卷積後輸出特徵矩陣的channel是與輸入特徵矩陣的channel相等的,如果想改變/自定義輸出特徵矩陣的channel,那只需要在DW卷積後接上一個PW卷積即可,如下圖所示,其實PW卷積就是普通的卷積而已(只不過卷積核大小爲1)。通常DW卷積和PW卷積是放在一起使用的,一起叫做Depthwise Separable Convolution(深度可分卷積)。
DW卷積和PW卷積
那Depthwise Separable Convolution(深度可分卷積)與傳統的卷積相比有到底能節省多少計算量呢,下圖對比了這兩個卷積方式的計算量,其中Df是輸入特徵矩陣的寬高(這裏假設寬和高相等),Dk是卷積核的大小,M是輸入特徵矩陣的channel,N是輸出特徵矩陣的channel,卷積計算量近似等於卷積核的高 x 卷積核的寬 x 卷積核的channel x 輸入特徵矩陣的高 x 輸入特徵矩陣的寬(這裏假設stride等於1),在我們mobilenet網絡中DW卷積都是是使用3x3大小的卷積核。所以理論上普通卷積計算量是DW+PW卷積的8到9倍(公式來源於原論文):
計算量對比
在瞭解完Depthwise Separable Convolution(深度可分卷積)後在看下mobilenet v1的網絡結構,左側的表格是mobileNetv1的網絡結構,表中標Conv的表示普通卷積,Conv dw代表剛剛說的DW卷積,s表示步距,根據表格信息就能很容易的搭建出mobileNet v1網絡。在mobilenetv1原論文中,還提出了兩個超參數,一個是α一個是β。α參數是一個倍率因子,用來調整卷積核的個數,β是控制輸入網絡的圖像尺寸參數,下圖右側給出了使用不同α和β網絡的分類準確率,計算量以及模型參數:
mobilenet v1

MobileNet v2

在MobileNet v1的網絡結構表中能夠發現,網絡的結構就像VGG一樣是個直筒型的,不像ResNet網絡有shorcut之類的連接方式。而且有人反映說MobileNet v1網絡中的DW卷積很容易訓練廢掉,效果並沒有那麼理想。所以我們接着看下MobileNet v2網絡。
MobileNet v2網絡是由google團隊在2018年提出的,相比MobileNet V1網絡,準確率更高,模型更小。剛剛說了MobileNet v1網絡中的亮點是DW卷積,那麼在MobileNet v2中的亮點就是Inverted residual block(倒殘差結構),如下下圖所示,左側是ResNet網絡中的殘差結構,右側就是MobileNet v2中的到殘差結構。在殘差結構中是1x1卷積降維->3x3卷積->1x1卷積升維,在倒殘差結構中正好相反,是1x1卷積升維->3x3DW卷積->1x1卷積降維。爲什麼要這樣做,原文的解釋是高維信息通過ReLU激活函數後丟失的信息更少(注意倒殘差結構中基本使用的都是ReLU6激活函數,但是最後一個1x1的卷積層使用的是線性激活函數)。

倒殘差結構
在使用倒殘差結構時需要注意下,並不是所有的倒殘差結構都有shortcut連接,只有當stride=1且輸入特徵矩陣與輸出特徵矩陣shape相同時纔有shortcut連接(只有當shape相同時,兩個矩陣才能做加法運算,當stride=1時並不能保證輸入特徵矩陣的channel與輸出特徵矩陣的channel相同)。

倒殘差shortcut
下圖是MobileNet v2網絡的結構表,其中t代表的是擴展因子(倒殘差結構中第一個1x1卷積的擴展因子),c代表輸出特徵矩陣的channel,n代表倒殘差結構重複的次數,s代表步距(注意:這裏的步距只是針對重複n次的第一層倒殘差結構,後面的都默認爲1)。

MobileNet v2結構
關於MobileNet V2模型的搭建與訓練代碼放在我的github中,大家可自行下載使用:

https://github.com/WZMIAOMIAO/deep-learning-for-image-processing

pytorch版本在pytorch_learning文件夾中,tensorflow版本在tensorflow_learning文件夾中.

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