簡介
MobileNet v2 相對於MobileNet v1而言沒有新的計算單元的改變,有的只是結構的微調。
和MobileNet V1相比,MobileNet V2主要的改進有兩點:
-
Linear Bottlenecks
也就是去掉了小維度輸出層后面的非線性激活層,目的是為了保證模型的表達能力。 -
Inverted Residual block
該結構和傳統residual block中維度先縮減再擴增正好相反,因此shotcut也就變成了連接的是維度縮減后的feature map。
MobileNet v2的基礎元素
Linear Bottlenecks
ReLU會對channel數較低的張量造成較大的信息損耗。
mobileNetV2使用了線性瓶頸層。原因是,當使用ReLU等激活函數時,會導致信息丟失。如下圖所示,低維(2維)的信息嵌入到n維的空間中,並通過隨機矩陣T對特征進行變換,之后再加上ReLU激活函數,之后在通過 \(T^{-1}\) 進行反變換。當n=2,3時,會導致比較嚴重的信息丟失,部分特征重疊到一起了;當n=15到30時,信息丟失程度降低,但是變換矩陣已經是高度非凸的了。

由於非線性層會毀掉一部分信息,因而非常有必要使用線性瓶頸層。且線性瓶頸層包含所有的必要信息,擴張層則是供非線性層豐富信息使用。

- (a)所示,輸入和輸出維度不一樣,且卷積核直接對輸入的紅色立方體進行濾波。
- (b)為可分離卷積,左側3x3卷積的每個卷積核只對輸入的對應層進行濾波,此時特征維度不變;右邊的1x1的卷積對特征進行升維或者降維(圖中為升維)。
- (c)中為帶線性瓶頸層的可分離卷積,輸入通過3x3 depthwise卷積+ReLU6,得到中間相同維度的特征。之后在通過1x1conv+ReLU6,得到降維后的特征(帶斜線立方體)。之后在通過1x1卷積(無ReLU)進行升維。
- (d)中則是維度比較低的特征,先通過1x1conv(無ReLU)升維,而后通過3x3 depthwise卷積+ReLU6保持特征數量不變,再通過1x1conv+ReLU6得到降維后的下一層特征(下一層特征在升維時,無ReLU,因而圖中最右邊立方體帶斜線)。
Inverted residuals
傳統的殘差塊如(a),將高維特征先使用1x1conv降維,然后在使用3x3conv進行濾波,並使用1x1conv進行升維(這些卷積中均包含ReLU),得到輸出特征(下一層的輸入),並進行element wise的相加。
反轉殘差塊如(b),是將低維特征使用1x1conv升維(不含ReLU),而后使用3x3conv+ReLU對特征進行濾波,並使用1x1conv+ReLU對特征再降維,得到本層特征的輸出(即下一層特征的輸入,由於下一層的輸入在使用1x1conv升維時,無ReLU,因而最右邊的立方體帶斜線),並進行element wise的相加。

瓶頸層的具體結構如下表所示。輸入通過1x1的conv+ReLU層將維度從 \(k\) 維增加到 \(tk\) 維,之后通過3x3conv+ReLU可分離卷積對圖像進行降采樣(stride>1時),此時特征維度已經為 \(tk\) 維度,最后通過1x1conv(無ReLU)進行降維,維度從 \(tk\) 降低到 \(k’\) 維。

需要注意的是,除了整個模型中的第一個瓶頸層的 \(t=1\) 之外,其他瓶頸層 \(t=6\),即第一個瓶頸層內部並不對特征進行升維。
網絡模型
MobileNet V2的基本結構

當stride=1時,才會使用elementwise 的sum將輸入和輸出特征連接;
stride=2時,無short cut連接輸入和輸出特征。
MobileNetV2的模型如下圖所示,其中t為瓶頸層內部升維的倍數,c為特征的維數,n為該瓶頸層重復的次數,s為瓶頸層第一個conv的步幅。

- \(t\) 是輸入通道的倍增系數(即中間部分的通道數是輸入通道數的多少倍)
- \(n\) 是該模塊重復次數
- \(c\) 是輸出通道數
- \(s\) 是該模塊第一次重復時的 stride(后面重復都是 stride 1)
例如,對於該圖中 \(56^{2} * 24\) 的那層:
- 共有3個該瓶頸層,只在第一個瓶頸層使用
stride=2``,后兩個瓶頸層stride=1; - 第一個瓶頸層由於輸入和輸出尺寸不一致,因而無short cut連接,后兩個由於stride=1,輸入輸出特征尺寸一致,會使用short cut將輸入和輸出特征進行elementwise的sum;
- 只在第一個瓶頸層最后的1x1conv對特征進行升維,后兩個瓶頸層輸出維度不變(不要和瓶頸層內部的升維弄混了)。
- 該層輸入特征為56x56x24,第一個瓶頸層輸出為28x28x32(特征尺寸降低,特征維度增加,無short cut),第二個、第三個瓶頸層輸入和輸出均為28x28x32(此時c=32,s=1,有short cut)。
實驗
通過 Inverted residual block這個新的結構,可以用較少的運算量得到較高的精度,適用於移動端的需求,在 ImageNet 上的准確率如下所示:

可以說是又小又快又好。另外,應用在目標檢測任務上,也能得到很好的效果。
應用在目標檢測任務上,基於 MobileNet V2的SSDLite 在 COCO 數據集上超過了 YOLO v2。

