MobileNet系列很重要的輕量級網路家族,出自谷歌,MobileNetV1使用深度可分離卷積來構建輕量級網路,MobileNetV2提出創新的inverted residual with linear bottleneck單元,雖然層數變多了,但是整體網路準確率和速度都有提升,MobileNetV3則結合AutoML技術以及人工微調進行更輕量級的網路構建
來源:曉飛的演算法工程筆記 公眾號
MobileNetV1
論文: MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications
Introduction
MobileNet基於深度可分離卷積構建了非常輕量且延遲小的模型,並且可以通過兩個超引數來進一步控制模型的大小,該模型能夠應用到終端裝置中,具有很重要的實踐意義。
Depthwise Separable Convolution
假設標準卷積的輸入和輸出分別為$D_F\times D_F \times M$的特徵圖$\mathbb{F}$和$D_F \times D_F\times N$的特徵圖$\mathbb{G}$(假設特徵圖大小不變),卷積核大小為$D_K\times D_K\times M\times N$,則輸出特徵圖的計算為:
計算量為:
計算量與輸入維度$M$、輸出維度$N$、卷積核大小$D_K$以及特徵圖大小$D_F$相關。
MobileNet通過深度可分離卷積優進行計算量優化,將標準卷積轉化為深度卷積和$1\times 1$pointwise卷積,每層後面都會接BN和ReLU。 深度卷積的每個輸入維度對應一個卷積核,對於相同的輸入,深度卷積的輸出特徵圖計算為:
$\hat{\mathbb{K}}$是大小為$D_K\times D_K\times M$的深度卷積核,$\hat{\mathbb{K}}$的$m_{th}$卷積核對應輸入$\mathbb{F}$的$m_{th}$特徵圖和輸出$\hat{\mathbb{G}}$的$m_{th}$特徵圖,深度卷積的計算量為:
儘管深度卷積更高效,但沒有很好地融合多個輸入維度,所以需要額外層來對其輸出進行線性組合,這裡使用$1\times 1$pointwise卷積來生成新特徵圖,即深度可分離卷積,計算量為:
深度可分離卷積和標準卷積的計算量縮放比為:
MobileNet使用$3\times 3$的深度可分離卷積,所以大概會有8-9倍的計算量減少,準確率僅會有些許降低。
Network Structure and Training
MobileNet的結構如表1所示,除第一層外其它均是深度可分離卷積,除了最後一層全連線層外每層都接BN和ReLU,總共28層。
論文提到不能直接通過計算量來代表網路的高效性,還需要看操作的具體實現方法。如表2所示,MobileNet的大部分計算量和引數都在pointwise卷積上,不管在CPU裝置還是GPU裝置,都已經有很高效的實現方法。至於訓練的設定,論文也有較詳細的提及,有興趣的可以去看看原文。
Width Multiplier: Thinner Models
儘管MobileNet已經很輕量了,但還可以使用寬度縮放因子$\alpha$來進一步輕量化,將每層的輸入輸出維度變為$\alpha M$和$\alpha N$,縮放後的計算量變為:
$\alpha \in (0,1]$,寬度縮放因子的計算量縮放比大約為$\alpha^2$,能夠讓使用者根據任務對準確率和速度進行trade off。
Resolution Multiplier: Reduced Representation
MobileNet還可以通過解析度縮放因子$\rho$來縮放模型的大小,結合寬度縮放因子$\alpha$,縮放後的計算量為:
$\rho \in (0, 1]$,解析度縮放因子的計算量縮放比大約為$\rho^2$。
論文也對深度可分離卷積、寬度縮放因子以及深度縮放因子的效果進行了對比。
Experiments
MobileNet的實驗做得挺詳細的,在多種任務上進行效能對比,這裡只列舉了部分結果,具體的可以看原文,但比較遺憾的是沒有貼推理耗時的對比結果。
對比MobileNet的全卷積版本和深度可分離卷積版本。
對比寬度縮放和直接去除最後5層$14\times 14\times 512$深度分離卷積的效果。
對比不同寬度縮放因子的效果。
對比不同解析度縮放的效果。
CONCLUSION
MobileNet運用深度可分離卷積進行輕量級網路的構建,在準確率沒有大幅下降的情況下,能把引數量和計算量降低大約8倍,具有很重要的實踐意義。
MobileNetV2
論文: MobileNetV2: Inverted Residuals and Linear Bottlenecks
Introduction
MobileNetV2提出新的層單元inverted residual with linear bottleneck,該結構類似與殘差網路單元,都包含shorcut,區別在於該結構是輸入輸出維度少,中間通過線性卷積先擴充套件升維,然後通過深度卷積進行特徵提取,最後再對映降維,可以很好地保持網路效能且網路更加輕量。
Linear Bottlenecks
神經網路的高維特徵中的關鍵資訊(manifold of interest)是分散分佈的,實際可以用緊湊的低維特徵進行表示,因此理論上可以通過降低層輸出的維度來降低操作空間的維度。而論文認為,當層中存在非線性啟用時,則可能會打破上面的理論,於是去除了低維特徵的非線性操作,基於下面兩點發現:
- 根據ReLU的屬性,若輸出為非零,則相當於對該輸入進行了線性變化,可認為部分輸入空間進行了線性變化,而網路僅對這些非零輸出進行後續處理。由於特徵的關鍵資訊一般經過ReLU後輸出全是非0,因此可以認為ReLU對關鍵資訊(低維特徵)都進行了線性操作。
- 論文將2維輸入通過矩陣$T$線性升維至$d$,再通過ReLU進行非線性啟用,最後使用矩陣$T^{-1}$恢復至2維。從視覺化結果來看,維度越低,ReLU對輸入的資訊丟失越多。這表明,假設非線性操作的輸入特徵能夠壓縮成較低維特徵時,需要輸入特徵有足夠大的複雜度,非線性操作才能保留較完整的資訊。
假設層輸出的關鍵資訊可以通過低維特徵進行表示,則可以使用線性bootleneck進行提取,結構如圖2c所示,在深度卷積後接pointwise卷積進行降維,但在降維後不再使用非線性啟用,僅對高維特徵進行非線性啟用。而圖2d是結構c的前一部分,兩者合起來構成一個完整的MobileNetV2 bottleneck,先通過pointwise卷積升維,然後深度卷積提取特徵,最後再使用pointwise卷積進行降維,其中升維的比例稱為expansion ratio。
Inverted residuals
MobileNetV2的residual block與Resnet的residual block類似,重點是為了更好地回傳梯度以及特徵重用,區別在於MobileNetV2連線的是bottleneck特徵,即維度較小的特徵。如前面描述的,論文認為較低維的特徵包含了所有的必須資訊,而expansion layer僅是為了實現非線性變化的一個手段。
residual block的操作以及輸入輸出如表1所示,儘管相對於MobileNetV1多了一個pointwise卷積,但這樣的結構允許更少的輸入輸出維度。從表3的對比可以看出,MobileNetV2的記憶體使用更少。而expansion ratio的設定可以允許結構有很多種變化,設為0時就是identity mapping,設為大於1則是Resnet的residual block。
Model Architecture
MobileNetV2 unit包含stride=1和stride=2兩種。
MobileNetV2的整體結構如表2所示,通過堆疊圖4d的結構進行構建,首層使用普通的卷積層,另外也可以通過寬度縮放因子和解析度縮放因子來進行準確率和時延之間的trade off。
Experiments
論文對比MobileNetV2與其它網路在影像分類上的效能。
論文對比MobileNetV2與其它網路在目標檢測上的效能。
論文對比MobileNetV2與其它網路在語義分割上的效能。
另外論文對inverted residual with linear bottleneck的改進進行驗證。
Conclusions
MobileNetV2基於inverted residual with linear bottleneck進行輕量級網路構建,整體的結構都挺創新的,包括Inverted residuals以及expansion layer,linear Bottlenecks的分析也很有啟發意義,到現在很多終端演算法仍是以MobileNetV2作為主幹網路。
MobileNetV3
論文: Searching for MobileNetV3
Introduction
MobileNetV3基於AutoML構建,再人工微調對搜尋結果進行優化,搜尋方法使用了platform-aware NAS以及NetAdapt,分別用於全域性搜尋以及區域性搜尋,而人工微調則調整了網路前後幾層的結構、bottleneck加入SE模組以及提出計算高效的h-swish非線性啟用。
Network Search
MobileNetV3首先使用MnasNet的platform-aware NAS進行每個block的層結構搜尋,再將搜尋結果按照預設的網路結構搭建起來,有興趣的可以去看看公眾號的講解。platform-aware NAS主要是以準確率和實際時延的加權$ACC(m)\times [LAT(m)/TAR]^w$作為優化指標,逼近帕累托最優(準確率和時延分別不能再同時增加)。論文在實踐時發現,對於小模型而言,時延的增加會導致精度急劇增大,因此需要增大$w=-0.07$為$w=-0.15$,加大對時延增加的懲罰。
在完成初步的網路搜尋後,論文使用NetAdapt進行逐層地調整 ,作為對MnasNet的搜尋方法的補充,NetAdapt的具體步驟如下:
- 基於MnasNet搜房方法得到的種子網路作為開始。
- 生成新proposal集,每個proposal代表對種子網路的一種修改,必須能帶來$\delta=0.01$倍的時延下降。
- 對於每個proposal,使用上一step的訓練模型進行引數初始化,缺失的引數隨機初始化,然後finetune $T=10000$輪得到大致的準確率。
- 根據指標選擇最好的proposal。
- 迭代步驟234直到滿足目標時延。
原始的NetAdapt使用時延作為步驟4的指標,論文修改為準確率和時延的比值$\frac{\Delta Acc}{\mid \Delta latency \mid}$,這樣能夠達到很好的trade-off,$\Delta latency$依然需要滿足步驟2,步驟2的proposal除了原來NetAdapt的修改卷積核操作外,還包含以下兩種:
- 減小任意expansion layer的大小
- 減小所有相同大小的bottleneck的大小
Redesigning Expensive Layers
在得到搜尋結果後,論文發現通常網路的前後幾層開銷都相對較多,因此針對這幾層進行了特定的修改。
對最後幾層的改造如圖5,前置了avg pool,使得後續升至高維的操作能在$1\times 1$特徵圖上進行,而不是在$7\times 7$特徵圖上進行,節省了大量的時間。而由於avg pool前置這個操作已經節省了大量的計算量,也就不需要前一個bottleneck的DConv+pointwise conv操作(該操作為了從160維生成320維特徵,避免直接從160維到1280維)來減輕計算量了,直接去除,進一步節省計算量,這樣的改進大概能帶來7毫秒(11%)的速度提升。
對於前幾層,一般的網路都使用32維$3\times 3$的卷積,論文認為這些卷積裡面存在冗餘,通過實驗,將維度降維16維不影響準確率,帶來2毫秒的速度提升,非線性啟用使用了論文提出的hwish非線性啟用,效果與其它函式差別不大。
Nonlinearities
swish作為ReLU的替代品,能帶來顯著的準確率提升,swish的定義如下:
由於swish包含了sigmoid函式,在移動裝置上計算沒有很好地優化。因此,論文將sigmoid替換成分段線性模擬$\frac{ReLU6(x+3)}{6}$,提出了改進版hwish:
從圖6的視覺化結果來看,swish和h-swish的曲線十分接近。非線性操作在網路越深處的耗時會低(特徵圖大小減小一半),因此,僅在網路的後半段使用h-swish。
Large squeeze-and-excite
MobileNetV3的bottleneck在V2的基礎上加了SE模組,其中SE ratio固定為0.25。論文提到這裡的實現與MansNet不太一樣,固定為expansion layer的1/4,但我看來好像沒什麼區別,知道的朋友麻煩告知一下。
MobileNetV3 Definitions
MobileNetV3分為MobileNetV3-Large和MobileNetV3-Small兩個版本。
Experiments
論文的實驗很充分,這裡只貼了部分任務的主要實驗結果,其它可以檢視原文。
論文對比MobileNetV3與其它網路在影像分類上的效能。
論文對比MobileNetV3與其它網路在目標檢測上的效能。
Conclusion
MobileNetV3首先使用AutoML方法獲取到最優的網路結構,再通過人工的部分修改來達到最終的精度,雖然網路不是直接通過搜尋得來的,但是實驗的效果還是有的,裡面的improvement也值得參考和借鑑。
Conclusion
MobileNet系列是很重要的輕量級網路家族,MobileNetV1使用深度可分離卷積來構建輕量級網路,MobileNetV2提出創新的inverted residual with linear bottleneck單元,雖然層數變多了,但是整體網路準確率和速度都有提升,MobileNetV3則結合AutoML技術以及人工微調進行更輕量級的網路構建
如果本文對你有幫助,麻煩點個贊或在看唄~
更多內容請關注 微信公眾號【曉飛的演算法工程筆記】