MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications
MobileNetV1(2017):https://arxiv.org/abs/1704.04861?context=cs
MobileNetV2: Inverted Residuals and Linear Bottlenecks
MobileNetV2(2018):https://arxiv.org/abs/1801.04381
Searching for MobileNetV3
MobileNetV3(2019):https://arxiv.org/abs/1905.02244?context=cs
這是一種爲移動設備設計的通用計算機視覺神經網絡,實現分類/目標檢測/語義分割多目標任務。
小型化方面常用的手段有:
(1)卷積核分解,使用1×N和N×1的卷積核代替N×N的卷積核。
(2)使用bottleneck結構,以SqueezeNet爲代表。
(3)以低精度浮點數保存,例如Deep Compression。
(4)冗餘卷積核剪枝及哈弗曼編碼。
MobileNet 深入的研究了depthwise separable convolutions使用方法後設計出MobileNet,depthwiseseparable convolutions的本質是冗餘信息更少的稀疏化表達。在此基礎上給出了高效模型設計的兩個選擇:寬度因子(width multiplier)和分辨率因子(resolutionmultiplier);通過權衡大小、延遲時間以及精度,來構建規模更小、速度更快的MobileNet。Google團隊也通過了多樣性的實驗證明了MobileNet作爲高效基礎網絡的有效性。
深度可分離卷積(Depthwise Separable Convolution,DSC),DSC包含兩部分:depthwise convolution(DWC)+ pointwise convolution(PWC)。DWC對輸入的通道進行濾波,其不增加通道的數量,PWC用於將PWC不同的通道進行連接,其可以增加通道的數量。通過這種分解的方式,可以明顯的減少計算量。
一、MobileNetV1
1.1 四個問題
1 要解決什麼問題?
在現實場景下,諸如移動設備、嵌入式設備、自動駕駛等等,計算能力會受到限制,所以目標就是構建一個小且快速(small and low latency)的模型。
2 用了什麼辦法解決?
1)提出了MobileNet架構,使用深度可分離卷積(depthwise separable convolutions)替代傳統卷積。
2)在MobileNet網絡中還引入了兩個收縮超參數(shrinking hyperparameters):寬度乘子(width multiplier)和分辨率乘子(resolution multiplier)。
3 效果如何?
在一系列視覺任務如ImageNet分類、細粒度分類、目標檢測等等上,顯著降低模型大小的同時也取得了不錯的效果。
4 還存在什麼問題?(參考自知乎)
1)MobileNet v1的結構過於簡單,是類似於VGG的直筒結構,導致這個網絡的性價比其實不高。如果引入後續的一系列ResNet、DenseNet等結構(複用圖像特徵,添加shortcuts)可以大幅提升網絡的性能。
2)Depthwise Convolution存在潛在問題,訓練後部分kernel的權值爲0。
1.2 網絡結構
Depthwise Separable Convolution實質上是將標準卷積分成了兩步:depthwise卷積和pointwise卷積,其輸入與輸出都是相同的。
1):depthwise卷積:對每個輸入通道單獨使用一個卷積核處理。(圖b)
2):pointwise卷積:1×1卷積,用於將depthwise卷積的輸出組合起來。(圖c)
上圖中,左爲標準,右圖爲深度可分離卷積。
MobileNet的大多數計算量(約95%)和參數(約75%)都在1×1卷積中,剩餘的大多數參數(約24%)都在全連接層中。
由於模型較小,可以減少正則化手段和數據增強,因爲小模型相對不容易過擬合。
1.3 控制MobileNet模型大小的兩個超參數
Width Multiplier: Thinner Models
用 α 表示,該參數用於控制特徵圖的維數,即通道數。(文中引入了α作爲寬度縮放因子,其作用是在整體上對網絡的每一層維度(特徵數量)進行瘦身。α影響模型的參數數量及前向計算時的乘加次數。)
Resolution Multiplier: Reduced Representation
用 ρ 表示,該參數用於控制特徵圖的寬/高,即分辨率。(該因子即爲ρ,用於降低輸入圖像的分辨率(如將224224降低到192192,160160,128128)。)
二、MobileNetV2
V2 主要引入了兩個改動:Linear Bottleneck和 Inverted Residual Blocks。
2.1 Inverted Residual Blocks
MobileNetV2 結構基於 inverted residual。其本質是一個殘差網絡設計,傳統 Residual block 是 block 的兩端 channel 通道數多,中間少,而本文設計的 inverted residual 是 block 的兩端 channel 通道數少,block 內 channel 多,類似於沙漏和梭子形態的區別。另外保留 Depthwise Separable Convolutions。
2.2 Linear Bottlenecks
感興趣區域在 ReLU 之後保持非零,近似認爲是線性變換。
ReLU 能夠保持輸入信息的完整性,但僅限於輸入特徵位於輸入空間的低維子空間中。
對於低緯度空間處理,論文中把 ReLU 近似爲線性轉換。
2.3對比
2.3.1 對比 MobileNet V1 與 V2 的微結構
相同點
都採用 Depth-wise (DW) 卷積搭配 Point-wise (PW) 卷積的方式來提特徵。這兩個操作合起來也被稱爲 Depth-wise Separable Convolution,之前在 Xception 中被廣泛使用。這麼做的好處是理論上可以成倍的減少卷積層的時間複雜度和空間複雜度。
不同點:Linear Bottleneck
V2 在 DW 卷積之前新加了一個 PW 卷積。這麼做的原因,是因爲 DW 卷積由於本身的計算特性決定它自己沒有改變通道數的能力,上一層給它多少通道,它就只能輸出多少通道。所以如果上一層給的通道數本身很少的話,DW 也只能很委屈的在低維空間提特徵,因此效果不夠好。現在 V2 爲了改善這個問題,給每個 DW 之前都配備了一個 PW,專門用來升維,定義升維繫數 t = 6,這樣不管輸入通道數是多是少,經過第一個 PW 升維之後,DW 都是在相對的更高維 進行着辛勤工作的。
V2 去掉了第二個 PW 的激活函數。論文作者稱其爲 Linear Bottleneck。這麼做的原因,是因爲作者認爲激活函數在高維空間能夠有效的增加非線性,而在低維空間時則會破壞特徵,不如線性的效果好。由於第二個 PW 的主要功能就是降維,因此按照上面的理論,降維之後就不宜再使用 ReLU6 了。
2.3.2 對比 ResNet 與 MobileNet V2 的微結構
相同點
MobileNet V2 借鑑 ResNet,都採用了 1 x1 > 3 x 3 > 1 x1 的模式。
MobileNet V2 借鑑 ResNet,同樣使用 Shortcut 將輸出與輸入相加(未在上式畫出)
不同點:Inverted Residual Block
ResNet 使用 標準卷積 提特徵,MobileNet 始終使用 DW卷積 提特徵。
ResNet 先降維 (0.25倍)、卷積、再升維,而 MobileNet V2 則是 先升維 (6倍)、卷積、再降維。直觀的形象上來看,ResNet 的微結構是沙漏形,而 MobileNet V2 則是紡錘形,剛好相反。因此論文作者將 MobileNet V2 的結構稱爲 Inverted Residual Block。這麼做也是因爲使用DW卷積而作的適配,希望特徵提取能夠在高維進行。
可以看到 MobileNetV2 和 ResNet 基本結構很相似。不過 ResNet 是先降維(0.25 倍)、提特徵、再升維。而 MobileNetV2 則是先升維(6 倍)、提特徵、再降維。
2.4 總結
MobileNetV2最難理解的其實是 Linear Bottlenecks,論文中用很多公式表達這個思想,但是實現上非常簡單,就是在 MobileNetV2 微結構中第二個 PW 後無 ReLU6。對於低維空間而言,進行線性映射會保存特徵,而非線性映射會破壞特徵。
三、MobileNetV3
3.1 高效的網絡構建模塊
MobileNetV3 是神經架構搜索得到的模型,其內部使用的模塊繼承自:
- MobileNetV1 模型引入的深度可分離卷積(depthwise separable convolutions);
- MobileNetV2 模型引入的具有線性瓶頸的倒殘差結構(the inverted residual with linear bottleneck);
- MnasNet 模型引入的基於squeeze and excitation結構的輕量級注意力模型。
這些被證明行之有效的用於移動端網絡設計的模塊是搭建MobileNetV3的積木。
3.2 互補搜索
在網絡結構搜索中,作者結合兩種技術:資源受限的NAS(platform-aware NAS)與NetAdapt,前者用於在計算和參數量受限的前提下搜索網絡的各個模塊,所以稱之爲模塊級的搜索(Block-wise Search) ,後者用於對各個模塊確定之後網絡層的微調。
這兩項技術分別來自論文:
M. Tan, B. Chen, R. Pang, V. Vasudevan, and Q. V. Le. Mnasnet: Platform-aware neural architecture search for mobile. CoRR, abs/1807.11626, 2018.
T. Yang, A. G. Howard, B. Chen, X. Zhang, A. Go, M. Sandler, V. Sze, and H. Adam. Netadapt: Platform-aware neural network adaptation for mobile applications. In ECCV, 2018
前者相當於整體結構搜索,後者相當於局部搜索,兩者互爲補充。
3.3 網絡改進
作者們發現MobileNetV2 網絡端部最後階段的計算量很大,重新設計了這一部分,如下圖:
這樣做並不會造成精度損失。
另外,作者發現一種新出的激活函數swish x 能有效改進網絡精度:
但就是計算量太大了。
於是作者對這個函數進行了數值近似:
事實證明,這個近似很有效:
從圖形上看出,這兩個函數的確很接近。
3.4 MobileNetV3 網絡結構!
使用上述搜索機制和網絡改進,最終谷歌得到的模型是這樣(分別是MobileNetV3-Large和MobileNetV3-Small):
圖見原文。
內部各個模塊的類型和參數均已列出。
谷歌沒有公佈用了多少時間搜索訓練。
目前谷歌還沒有公佈MobileNetV3的預訓練模型,不過讀者可以按照上述結構構建網絡在ImageNet上訓練得到權重。
四、總結(神經架構搜索火了)
MobileNetV3-Large在ImageNet分類上的準確度與MobileNetV2相比提高了3.2%,同時延遲降低了15%。
MobileNetV3-large 用於目標檢測,在COCO數據集上檢測精度與MobileNetV2大致相同,但速度提高了25%。
在Cityscapes語義分割任務中,新設計的模型MobileNetV3-Large LR-ASPP 與 MobileNetV2 R-ASPP分割精度近似,但快30%。