天天看點

論文筆記:MobileNet v2MobileNet v2

原論文:MobileNetV2: Inverted Residuals and Linear Bottlenecks

MobileNet v2

1、四個問題

  1. 要解決什麼問題?
    • 與MobileNet v1所要解決的問題一樣,為嵌入式裝置或算力有限的場景下設計一個有效的模型。
  2. 用了什麼方法解決?
    • 一方面,沿用了再MobileNet v1中采用的depthwise separable convolution。
    • 另一方面,新提出了inverted residual結構和linear bottleneck結構來改進模型。
  3. 效果如何?
    • 作者在論文中給出了一系列任務下的實驗結果:ImageNet圖像分類、目标檢測、語義分割等,MobileNet v2均取得了比MobileNet v1更好的效果。
    • 就目标檢測來說,由MobileNet v2擴充建構的網絡,其性能相比于其他架構如:Faster-RCNN、RFCN等還是遜色不少,但是考慮到模型的實時性和計算量,MobileNet v2在各項任務的表現相比于同一量級的模型是state-of-the-art的。
  4. 還存在什麼問題?
    • 社群對其的評價普遍都挺高,但也有一些人說自己複現(基于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後再還原回原來的次元。
    • 示意圖如下,可以看出映射的次元越高,還原的效果越好,保留的原始資訊越多。
論文筆記:MobileNet v2MobileNet v2
  • 一句話概括:Linear Bottlenecks就是,去掉ReLU,減小對特征的破壞,盡可能保留輸入的資訊。
  • Linear Bottlenecks後面會與Inverted residuals組合起來使用。

2.3、Inverted residuals

  • 網絡結構基本單元的演變,如下圖所示:
    1. a就是普通的 3 × 3 3 \times 3 3×3卷積。
    2. b是Depthwise Separable Convolution操作,此前用于MobileNet v1.
    3. c由b擴充而來,在b後面加了linear bottleneck(虛線框),bottleneck層沒有加ReLU。
    4. d與c很像,在堆疊網絡時兩者是等價的。
論文筆記:MobileNet v2MobileNet v2
  • 普通的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)。
論文筆記:MobileNet v2MobileNet v2

2.4、模型結構

  • Bottleneck residual block的結構(也就是inverted residual block),其為MobileNet v2的基本組成子產品。
論文筆記:MobileNet v2MobileNet v2
  • MobileNet v2的總體結構:
論文筆記:MobileNet v2MobileNet v2
  • 幾種網絡的基本子產品之間的對比:
論文筆記:MobileNet v2MobileNet v2

2.5、其他

論文筆記:MobileNet v2MobileNet v2
  • 圖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效果更好。

繼續閱讀