繼MobileNet_v1和v2提出後,在2019年,MobileNet_v3在衆人的期盼下出來了,MobileNet_v3論文提出了兩個模型,MobileNet_v3-Large和MobileNet_v3-small,其主要區別在於層數不一樣(其他設計都同樣),此外還包括一個用於語義分割的MobileNet_v3-Large LRASPP模型。微信
MobileNet_v3成就網絡
MobileNet_v3-Large在ImageNet分類中實現了比MobileNet_v2低百分之20的時延,同時高了3.2%精度。MobileNet_v3-small比MobileNet_v2在時延接近的狀況下,高了6.6%的精度。架構
MobileNet_v3-Large在COCO數據集檢測上,在比v2快了25%,而精度卻幾乎同樣。函數
MobileNet_v3-Large LRASPP比MobileNet_v2 RASPP在Cityscapes分割數據集上快了34%。應該能夠說是不負衆望了。性能
MobileNet_v3主要內容測試
MobileNet_v3着眼於賦予設備高效地實現高精度、低時延的能力,而不是發送數據到服務器,通過服務器推理後再發送回設備。爲此,論文提出瞭如下內容:優化
1) 補充搜索技術人工智能
2) 適用於移動設備環境的非線性的新有效版本
3) 新的高效網絡設計
4) 新的高效分割解碼器(指的是語義分割)
01 NAS 和NetAdapt
當前,在人工智能界內有一句名言,所謂人工智能,是越人工越智能。現有的一些網絡所具有的高效的性能離不開人對這個網絡模型的精心設計與調參。最近幾年,如何讓計算機根據需求和現有硬件條件自動生成網絡已經進入重要研究方向。
NAS-神經網絡架構搜索。NAS經過設定一個空間,選擇一個搜索策略在這個空間內搜索,採用一個評估策略對搜索效果進行評估,最終選擇評估效果最好的結構。
在早期,NAS主要進行單元級搜索,使用一些預約義的操做集合,(如卷積、池化等)此外還包括,每一層的卷積核的大小,步長大小,卷積核數量等,這些集合構成了搜索空間,使用一個搜索策略來選擇操做集合,在訓練集訓練這些操做集合組成的網絡,並在驗證集上評估當達到某個閾值將會中止。
最近,開始進行Block級的搜索,例如Inception結構,就是一個Block,在搜索空間中使用了不一樣大小,不一樣數量的block。搜索策略直接搜索這些block組成網絡,進行測試。
MobileNet_v3使用了用於block搜索的平臺感知NAS(PlatformAware NAS for Blockwise Search)構成全局網絡結構,使用NetAdapt對網絡結構進行layer-level的finetune。使用的搜索目標是 ACC(m) × [LAT(m) / TAR]^w, 這裏ACC(m)是模型精度,LAT(m)是延時,TAR是目標延時,w是超參數。
之因此不怎麼介紹NAS,是由於NAS須要數以百計甚至上千的GPU來訓練數月,例如 NASnet須要在 800 個 GPU 上訓練 28 天,對於普通人來講實在有些高不可攀,固然最近也出了一些只須要少許GPU就能訓練的算法,但至少如今還沒到那種能知足廣泛需求的時候。若有須要,公衆號中有NAS的一篇較爲全面的綜述,可掃描文末二維碼關注公衆號。
網絡改進
在搜索獲得的網絡的基礎上,提出了一些改進的方案。在網絡的開始和結束部分,從新設計了計算量大的層,此外還提出了一種新的非線性,即h-swish,h-swish是最近swish的改進版本,計算速度更快,也更易於量化。
02 Redesigning Expensive Layers
在MobileNet_v2的Inverted bottleneck結構中使用1x1卷積做爲最後一層,用於擴大到一個更高維的特徵空間,這一層對於提供豐富的特徵用於預測極爲重要,但也增長了延時。
爲了下降延時,並保持高維空間特徵,MobileNet_v3中把這一層移到了平均池化層的後面,在最後的特徵集如今只須要計算1x1的分辨率,而不是原來的7x7。這種設計選擇的結果是,在計算和延遲方面,特性的計算變得幾乎是免費的。
一旦下降了該特性生成層的成本,就再也不須要之前的瓶頸投影層來減小計算量。該觀察容許刪除前一個瓶頸層中的投影和過濾層,從而進一步下降計算複雜度。原始階段和優化後的階段如上圖所示。
另外一個耗時的層是第一層卷積,當前的移動模型傾向於在一個完整的3x3卷積中使用32個濾波器來構建初始濾波器庫進行邊緣檢測。一般這些過濾器是彼此的鏡像。mobileNet_v3對這一層使h-swish非線性激活函數,其好處是使用了h-swish後濾波器的數量能夠減小到16,而同時可以保持與使用ReLU或swish的32個濾波器相同的精度。這節省了額外的3毫秒和1000萬 MAdds。
03 Nonlinearities
在一篇語義分割的論文中提出了使用swish的非線性函數來代替ReLU函數,它能夠顯著提升神經網絡的精度,其定義爲:swish x = x · σ(x),這裏σ(x)是sigmoid函數。然而swish雖然提升了精度,但sigmoid函數計算是極爲昂貴的,在嵌入式移動端不適合它的存在,所以,MobileNet_V3提出了計算更爲簡便的h-swish函數,其定義以下:
以下圖所示,這裏的h是hard的意思,簡單來講就是沒那麼平滑。通過實踐檢驗,sigmoid和swish函數與其hard版本的函數在精度上並無什麼明顯的差別。可是hard版本的計算卻簡便得多。
通常來講,在不一樣的設備上,對於sigmoid函數都是採用近似的方式實現,(例如,在高數中採用劃分矩形求面積來近似實現積分,這裏的近似是使用某些實現方式近似實現sigmoid函數),所以不一樣的實現方式會致使潛在的精度損失。而幾乎全部的軟件和硬件設備均可以直接實現ReLU6,所以這裏的h-swish將不會出現sigmoid的狀況,此外,h-swish能夠經過分段函數實現(這是對h-swish的優化,下圖是與沒有優化的實驗效果對比),這樣會下降內存訪問次數,從而大大下降了等待時間成本。
論文中提到,在較深的層次中使用更能發揮swish的大多數好處,所以在MobileNet_v3結構中 中高層才使用h-swish。此外,h-swish即使使用了這些優化,但仍然引入了一些延遲成本,以下圖所示,使用分段函數做爲h-swish的優化比沒有優化效果明顯要好,節約了6ms(大概百分之10), 而相比於ReLU, 優化後的h-swish僅引入了1ms的成本,但精度更高。
04 Large squeeze-and-excite
先簡要介紹一下這個模塊,論文中並無介紹。
這是一個注意力機制中的一個模塊SE,即插即用,用於現有的一些網絡。其分爲兩個部分,一個是Squeeze部分,經過AdaptiveAvgPool2d將前一層的空間分辨率壓縮爲1x1,第二個部分是Excitation部分,對壓縮後的部分進行線性變化(Linear),再ReLU,再Linear(通道數要與下一層通道數一致),再Sigmoid。將獲得的一個1x1x下一層通道數 的層與原先網絡直接卷積獲得的下一層逐像素相乘,這樣的好處是有些特徵會被突出,有些特徵會被抑制,從而實現模型的自注意力機制。
回到本文,MobileNet_v3中加入了這個模塊,但進行了一些調整。一個是將sigmoid換成了h-swish。第二個是將第二Linear的通道數變爲下一層的1/4。但這樣就沒辦法逐像素相乘了,由於通道數不匹配,而後我去找了MobileNet_v3的代碼,發現它在通道數變爲1/4後又使用expand_as將其擴展成了下一層的通道數。
MobileNet_v3結構:
實驗結論
在本文開頭已經介紹了MobileNet_v3的成就,記住那些便可,這裏只給出圖,就很少介紹了,無非就是不一樣的超參數下其精度和延時有何變化,在某某數據集中與某某模型對比。稍微看看足以
本文來源於微信公衆號「 CV技術指南 」 。如有錯誤或疑問,歡迎在公衆號中留言指出。
歡迎關注公衆號「CV技術指南」,主要進行計算機視覺方向的論文解讀,最新技術跟蹤,以及CV技術的總結。
原創文章第一時間在公衆號中更新,博客只在有空時間才更新少許公衆號文章