論文名稱:《Searching for MobileNetV3》
感謝github上大佬們開源,開源代碼整理如下:
(1)PyTorch實現1:https://github.com/xiaolai-sqlai/mobilenetv3
(2)PyTorch實現2:https://github.com/kuan-wang/pytorch-mobilenet-v3
(3)PyTorch實現3:https://github.com/leaderj1001/MobileNetV3-Pytorch
(4)Caffe實現:https://github.com/jixing0415/caffe-mobilenet-v3
(5)TensorFLow實現:https://github.com/Bisonai/mobilenetv3-tensorflow
簡介
該論文基於神經架構搜索技術提出下一代輕量級網絡結構,M o b i l e N e t V 3 {\rm MobileNetV3}MobileNetV3,實驗結果表明該模型在目標檢測和語義分割任務上均達到了實時性的S O T A {\rm SOTA}SOTA。論文原文
0. Abstract
M o b i l e N e t V 3 {\rm MobileNetV3}MobileNetV3基於神經架構搜索技術得到。論文首先探索了搜索算法與網絡設計如何協同工作,進而根據資源因素設計出兩種M o b i l e N e t V 3 {\rm MobileNetV3}MobileNetV3。最后,在目標檢測和語義分割任務上,M o b i l e N e t V 3 {\rm MobileNetV3}MobileNetV3均達到了實時性的S O T A {\rm SOTA}SOTA。
論文貢獻:(一)基於神經架構搜索技術得到輕量級網絡M o b i l e N e t V 3 {\rm MobileNetV3}MobileNetV3;(二)探討了非線性函數的使用場景;(三)在語義分割任務中提出新的輕量級解碼器;(四)在多項實時性視覺任務上達到S O T A {\rm SOTA}SOTA。
1. Introduction
論文主要介紹了設計M o b i l e N e t V 3 {\rm MobileNetV3}MobileNetV3的過程,包括但不限於高效的搜索技術、非線性變換、網絡設計和解碼器。最后,論文給出詳盡的實驗證明了上述方法的有效性。
2. Related Work
這部分主要介紹前人有關輕量級網絡的工作。
S q u e e z e N e t {\rm SqueezeNet}SqueezeNet大量使用基於1 × 1 1\times11×1卷積的壓縮和擴展模塊,以此來減少參數量;M o b i l e N e t V 1 {\rm MobileNetV1}MobileNetV1基於深度可分離卷積顯著改善了模型;M o b i l e N e t V 2 {\rm MobileNetV2}MobileNetV2引入反向殘差結構在多項實時性視覺任務上達到S O T A {\rm SOTA}SOTA;S h u f f l e N e t {\rm ShuffleNet}ShuffleNet基於分組卷積和通道混洗進一步減少計算量;C o n d e n s e N e t {\rm CondenseNet}CondenseNet在訓練階段學習分組卷積來保持各層之間高效的密集連接以供特征重用;S h i f t N e t {\rm ShiftNet}ShiftNet提出基於移位操作的點卷積來代替空間卷積。
為了自動化地設計模型,基於強化學習來搜索網絡結構得到大家的廣泛關注。通常,一個完備的搜索空間會帶來資源量的指數級增加。因此,早期的架構搜索技術集中在單元結構的搜索上,然后多次復用該單元。近來,M n a s N e t {\rm MnasNet}MnasNet提出基於模塊級的搜索空間來設計不同分辨率的層。為降低搜索的計算成本,當前大多算法使用基於梯度的優化方法。
量化是通過降低計算精度來提高模型性能的另一項重要技術;知識蒸餾提供了另一種設計小型網絡的思路,即在一個大的教師網絡的指導下生成小的精確的學生網絡。
3. Efficient Mobile Building Blocks
M o b i l e N e t V 1 {\rm MobileNetV1}MobileNetV1使用深度可分離卷積代替傳統卷積,其主要分為深度卷積和點卷積兩部分,顯著降低了卷積計算參數。
M o b i l e N e t V 2 {\rm MobileNetV2}MobileNetV2引入帶線性瓶頸塊的反向殘差結構,提出僅在高維空間使用非線性變換以此來減少信息損失。
M n a s N e t {\rm MnasNet}MnasNet基於M o b i l e N e t V 2 {\rm MobileNetV2}MobileNetV2而設計,其提出在瓶頸結構中引入基於壓縮和激勵的輕量級注意力模塊。
而M o b i l e N e t V 3 {\rm MobileNetV3}MobileNetV3使用了上述層的組合,並提出S w i s h {\rm Swish}Swish非線性激活函數。同時,為了得到高效的網絡結構,在壓縮、激勵和S w i s h {\rm Swish}Swish模塊中,均使用H a r d S i g m o i d {\rm Hard\ Sigmoid}Hard Sigmoid激活函數。
4. Network Search
4.1 Platform-Aware NAS for Block-wise Search
M o b i l e N e t V 3 {\rm MobileNetV3}MobileNetV3主要基於資源受限N A S {\rm NAS}NAS(M n a s N e t {\rm MnasNet}MnasNet)和N e t A d a p t {\rm NetAdapt}NetAdapt得到,通過在前者的基礎上加上后者等其它優化方法。
但作者發現,用於搜索大型模型的獎勵機制(基於強化學習的N A S {\rm NAS}NAS中的概念)不適用於小型模型。具體地,基於平衡模型的精度A C C ( m ) ACC(m)ACC(m)、延時L A T ( m ) LAT(m)LAT(m)和目標延時T A R TARTAR,使用多目標獎勵A C C ( m ) × [ L A T ( m ) / T A R ] w ACC(m)\times[LAT(m)/TAR]^wACC(m)×[LAT(m)/TAR]w來得到近似帕累托最優解。而對於小型模型來說,模型精度的變化較大,因此作者提出使用一個權重因子w ww來補償不同延時下的精度變化。基於該優化因子w ww,作者采用隨機搜索的方法得到一個初始模型,然后使用N e t A d a p t {\rm NetAdapt}NetAdapt等優化方法得到一個小型的M o b i l e N e t V 3 {\rm MobileNetV3}MobileNetV3。
4.2 NetAdapt for Layer-wise Search
N e t A d a p t {\rm NetAdapt}NetAdapt是一項與資源受限N A S {\rm NAS}NAS互補的一項技術,它允許微調單個層,其過程如下:
1、基於資源受限N A S {\rm NAS}NAS隨機得到一個初始網絡結構;
2、對於每一步,執行如下操作:
- 生成一組候選結構,且每種結構相比於上一步的結構延遲減少δ \deltaδ
- 對於每個候選結構,使用前一步預訓練模型填充新的候選結構,並截斷和隨機初始化缺失的權重。對每個候選結構微調T TT次,並得到大致的精度
- 根據某准則選出最好的模型
3、不斷重復之前的步驟,直到達到既定目標
選擇最終模型的准則包括最小化精度變化等,論文提出將最小化延時變化與精度變化之比作為最終准則,即最大化Δ A c c ∣ Δ l a t e n c y ∣ \frac{\Delta{\rm Acc}}{|\Delta{\rm latency}|}∣Δlatency∣ΔAcc。
得到最終的模型后,使用M o b i l e N e t V 2 {\rm MobileNetV2}MobileNetV2的方法重新隨機訓練模型,具體的改動為減少擴展層的大小和減少瓶頸模塊,同時保留殘差連接。
在迭代過程中,T = 10000 {\rm T=10000}T=10000,δ = 0.01 ∣ L ∣ \delta=0.01|L|δ=0.01∣L∣。
5. Network Improvements
5.1 Redesigning Expensive Layers
作者發現,基於神經架構搜索得到的模型,一些前面層和最后層的計算代價較高。作者提出針對這些層的改進,在減小計算代價的同時不降低模型的精度。
第一個改動是針對后面幾層,當前,基於M o b i l e N e t V 2 {\rm MobileNetV2}MobileNetV2的模型在最后層使用1 × 1 1\times11×1卷積來增加維度從而使用非線性變換,但升維的操作會引入大量計算量。為了減少延時和保留高維特征,作者提出將該層移動至最后的平均池化層。這時,原來的7 × 7 7\times77×7卷積使用1 × 1 1\times11×1卷積代替,平衡了計算代價和模型精度。
另一個改動是針對前面層,當前移動端模型使用32 3232個3 × 3 3\times33×3的卷積作為初始卷積以提取目標輪廓特征,作者提出減少卷積核的數量,使用不同的非線性變換來減少計算代價。將卷積核數量減少至16 1616,同時保持前者的精度。
5.2 Nonlinearities
S w i s h {\rm Swish}Swish非線性激活函數定義如下:s w i s h x = x ⋅ σ ( x ) (1) {\rm swish}\ x=x\cdot\sigma(x)\tag{1}swish x=x⋅σ(x)(1)
盡管該激活函數提高了模型精度,但使用S i g m o i d {\rm Sigmoid}Sigmoid函數使其計算代價較高。論文提出了兩點解決方法,將S i g m o i d {\rm Sigmoid}Sigmoid函數替換掉:h − s w i s h [ x ] = x R e L U 6 ( x + 3 ) 6 (2) {\rm h-swish}[x]=x\frac{{\rm ReLU}6(x+3)}{6}\tag{2}h−swish[x]=x6ReLU6(x+3)(2)
盡管h a r d {\rm hard}hard-s w i s h {\rm swish}swish無法顯著提高模型精度,但從部署的角度來看它更適合:首先,R e L U 6 {\rm ReLU6}ReLU6的實現對硬件友好;其次,在量化過程中,相比於S i g m o i d {\rm Sigmoid}Sigmoid函數它不會帶來較大精度的損失;最后,R e L U 6 {\rm ReLU6}ReLU6可以通過一個分段函數實現,從而降低內存的訪問次數。
其次,隨着網絡的加深,由於特征圖的尺寸變小,所以非線性實現代價逐漸變小。作者發現,s w i s h {\rm swish}swish函數在網絡的后面部分的效果更好,因此,作者進將其引入模型的后半部分。
5.3 Large squeeze-and-excite
在M o b i l e N e t V 3 {\rm MobileNetV3}MobileNetV3中,作者加壓縮激勵模塊設為擴展層通道數的1 / 4 1/41/4。這樣,既增加了模型精度,也在參數適量增加的前提下沒有明顯提高延時。
5.4 MobileNetV3 Definitions
作者設計了兩個版本的M o b i l e N e t V 3 {\rm MobileNetV3}MobileNetV3,其結構分別如下:
圖中,H S {\rm HS}HS表示h − w i s h {\rm h-wish}h−wish,R E {\rm RE}RE表示R e L U {\rm ReLU}ReLU,N B N {\rm NBN}NBN表示不使用B N {\rm BN}BN。
6. Experiments
7. Conclusions and future work
論文提出基於神經架構搜索的M o b i l e N e t V 3 {\rm MobileNetV3}MobileNetV3,得到兩種不同大小的模型以滿足不同的實時性需求。關於神經架構搜索的內容,可參考此文章。
參考
- Howard A, Sandler M, Chu G, et al. Searching for mobilenetv3[C]//Proceedings of the IEEE International Conference on Computer Vision. 2019: 1314-1324.