本文的主要貢獻點是一個構造了一個結構,稱為the inverted residual with linear bottleneck。該結構與傳統的residual block中維度先縮減后擴增相反,而是先將輸入的低維feature map擴增到高維,然后用depthwise convolution方式做卷積運算,然后再使用一個線性的卷積將其映射到低維空間中。
Inverted residual block簡單介紹
如上圖,左邊(a)圖的傳統的residual block,先用1x1卷積將輸入的feature map的維度降低,然后進行3x3的卷積操作,最后再用1x1的卷積將維度變大。右邊(b)圖即為本文提出的結構,先用1x1卷積將輸入的feature map維度變大,然后用3x3 depthwise convolution方式做卷積運算,最后使用1x1的卷積運算將其維度縮小。注意,此時的1x1卷積運算后,不再使用ReLU激活函數,而是使用線性激活函數,以保留更多特征信息,保證模型的表達能力。
該block具體結構如下:
當stride=1時,block內會有short cut;而當stride=2時,block沒有short cut。
下圖是MobileNetV2與MobileNetV1的區別(原圖鏈接):
主要區別有兩點:
(1)Depth-wise convolution之前多了一個1*1的“擴張”層,目的是為了提升通道數,獲得更多特征;
(2)最后不采用Relu,而是Linear,目的是防止Relu破壞特征。