原論文:MobileNetV2: Inverted Residuals and Linear Bottlenecks
MobileNet v2
1、四個問題
- 要解決什麼問題?
- 與MobileNet v1所要解決的問題一樣,為嵌入式裝置或算力有限的場景下設計一個有效的模型。
- 用了什麼方法解決?
- 一方面,沿用了再MobileNet v1中采用的depthwise separable convolution。
- 另一方面,新提出了inverted residual結構和linear bottleneck結構來改進模型。
- 效果如何?
- 作者在論文中給出了一系列任務下的實驗結果:ImageNet圖像分類、目标檢測、語義分割等,MobileNet v2均取得了比MobileNet v1更好的效果。
- 就目标檢測來說,由MobileNet v2擴充建構的網絡,其性能相比于其他架構如:Faster-RCNN、RFCN等還是遜色不少,但是考慮到模型的實時性和計算量,MobileNet v2在各項任務的表現相比于同一量級的模型是state-of-the-art的。
- 還存在什麼問題?
- 社群對其的評價普遍都挺高,但也有一些人說自己複現(基于TensorFlow的)無法達到論文中的精度。網上也有挺多開源的複現代碼(基于Pytorch),用的時候還是自己複現一下再下定論吧。
2、論文概述
2.1、Depthwise Separable Convolutions
- 基本思想就是:講一個普通的卷積操作拆分成兩個卷積操作。第一層為depthwise卷積,分别對每個輸入通道進行卷積;第二層是pointwise卷積,實質就是 1 × 1 1 \times 1 1×1卷積,主要是用來将前面depthwise輸出的特征組合起來建構新的特征。
2.2、Linear Bottlenecks
- 文中,經過激活層後的張量被稱為manifold of interest(看到網上将其翻譯為興趣流形,總覺得有點不到位,是以後面都直接用英文代替)。
- 在manifold of interest(經過ReLU後的張量)非0的情況下,ReLU隻是一個線性變換。
- ReLU隻有在input manifold處于輸入空間的子空間的情況下,才能保留input manifold的全部資訊。
- 換句話說,隻要使用了ReLU,就不可避免地要損失該通道内的一部分資訊。
- 文中還給了一個示例,将input先映射到高維空間然後接一個ReLU後再還原回原來的次元。
- 示意圖如下,可以看出映射的次元越高,還原的效果越好,保留的原始資訊越多。

- 一句話概括:Linear Bottlenecks就是,去掉ReLU,減小對特征的破壞,盡可能保留輸入的資訊。
- Linear Bottlenecks後面會與Inverted residuals組合起來使用。
2.3、Inverted residuals
- 網絡結構基本單元的演變,如下圖所示:
- a就是普通的 3 × 3 3 \times 3 3×3卷積。
- b是Depthwise Separable Convolution操作,此前用于MobileNet v1.
- c由b擴充而來,在b後面加了linear bottleneck(虛線框),bottleneck層沒有加ReLU。
- d與c很像,在堆疊網絡時兩者是等價的。
- 普通的residual block與inverted residual block之間的對比:
- 每個長方體的厚度象征着通道數。
- a為傳統的residual block。結構為: 1 × 1 1 \times 1 1×1卷積(降維)+ReLU–> 3 × 3 3 \times 3 3×3卷積+ReLU–> 1 × 1 1 \times 1 1×1卷積(升維)+ReLU。
- b為反轉的residual block(inverted residual block)。結構為: 1 × 1 1 \times 1 1×1卷積(升維)+ReLU–> 3 × 3 3 \times 3 3×3depthwise separable卷積+ReLU–> 1 × 1 1 \times 1 1×1卷積(降維)(注意,這裡是不帶ReLU的,即前面提到的linear bottleneck)。
2.4、模型結構
- Bottleneck residual block的結構(也就是inverted residual block),其為MobileNet v2的基本組成子產品。
- MobileNet v2的總體結構:
- 幾種網絡的基本子產品之間的對比:
2.5、其他
- 圖a中可以看出,使用Linear bottleneck(不使用ReLU)比直接給輸出接上ReLU6的效果好。
- 我個人的了解:
- ReLU會使負值置0,是以使用ReLU一定會出現資訊損失。
- 一般情況下,普通卷積後接上ReLU應該是能取得更好地效果的,不然也不會這麼多人這麼用。
- 然而,針對MobileNet這個網絡,由于其使用了大量的Depthwise Separable卷積,在Depthwise卷積之後接上ReLU就更容易損失資訊了,導緻效果反倒下降了。
- 為什麼呢?因為Depthwise卷積是直接針對單通道的,也就是說它的輸出是單通道的,而這種單通道的資訊經過ReLU後更容易損失資訊。前面在讨論Linear Bottleneck時,作者也提到了如果中間層的次元較低,再經過ReLU後(manifold of interest)則很容易損失資訊,除非先升高到一個較高次元再降低回原來的次元,才能保留更多的資訊。而普通卷積則會将各個輸入通道的輸出權重求和,這一點也類似于提升了次元,是以直接接上ReLU并不會損失太多資訊。
- 我個人的了解:
- 圖b中可以看出,在bottleneck處添加shortcut會比在expanded layer處添加shortcut效果更好。