自動網絡搜索(NAS)在語義分割上的應用(一)

摘要 本文簡單介紹了NAS的發展示況和在語義分割中的應用,而且詳細解讀了兩篇流行的work:DARTS和Auto-DeepLab。

自動網絡搜索

多數神經網絡結構都是基於一些成熟的backbone,如ResNet, MobileNet,稍做改進構建而成來完成不一樣任務。正因如此,深度神經網絡總被詬病爲black-box,由於hyparameter是基於實驗求得而並不是經過嚴謹的數學推導。因此,不少DNN研究人員將大量時間花在修改模型和實驗「調參」上面,而忽略novelty自己。許多教授戲稱這種現象爲「graduate student descent」。node

近兩年,學術界興起了「自動網絡搜索」取代人工設計網絡結構。2016年,Google Brain公開了他們的研究成果NASNet【1】,這是第一個用自動網絡搜索Neural Architecture Seach (NAS)完成的神經網絡,爲深度學習打開了新局面。NASNet是由一系列operation(如depth separable conv, max pooling等)疊加而成。至於怎樣選擇operation,做者用強化學習(RL)的方法,用一個controller網絡隨機組合operations生成模塊,經過評估選擇最優模塊組成網絡結構。Google提供的雲上服務Cloud AutoML正是基於NAS方法,根據用戶上傳的數據自動搜索神經網絡再將結果輸出。迄今爲止,國內外不少工業界和學術界的AI Lab都有NAS相關工做:Google Brain提出了NasNet, MNasNet和Nas-FPN,Google提出MobileNetv3,Auto-DeepLab和Dense Prediction Cell(DPC);MIT Han Song團隊提出ProxylessNet;Facebook提出FbNet;Baidu提出SETN;騰訊提出FPNAS;小米提出FairNAS;京東AI提出CAS;華爲諾亞有提出P-DARTS等。經過各大實驗室對NAS的研究成果,彷佛能夠看出自動網絡搜索將會成爲趨勢。git

接下來咱們簡單介紹一下NAS的流程,詳細內容可參考【2】。NAS的架構主要包含三部分:搜索空間Search Space,搜索策略Search Strategy和評估機制Performance Estimation(以下圖)。github

  • 首先搜索空間會定義一些模塊(cell),operations(例如dilated conv 3x3),和宏觀網絡結構。cell是由若干個operation組合而成。一般來講,NAS會自動搜索出一些能夠重複的cell,將cell按照設定的宏觀網絡結構堆疊起來造成network。Zoph et al.提出了兩種cell,normal cell和reduction cell【3】。Reduction cell有改變spatial resolution的功能。這兩種cell在現有的算法中最爲常見。此外還有來自CAS網絡【4】的multi-scale cell,做用和ASPP相似可用做decoder。至於對宏觀網絡結構的設定,早期的工做會採用chained-structured,或者帶分支結構multi-branch例如ResNet和DenseNet帶有skip和shortcut。
  • 搜索策略在NAS中相當重要,由於它決定了下一步要選擇哪個cell或者operation組成網絡結構。搜索的目的就是讓現有的網絡結構在unseen data上獲得最好的效果。如前文提到,第一篇工做NASNet中用到了強化學習做爲搜索策略。雖然實驗結果尚可,但強化學習耗時過長而且須要大量GPU資源。NASNet就是用幾百個GPU搜索了幾天才完成,這對於資源少的研究人員來講不可能完成。繼NASNet以後早期的工做可能是基於RL完成搜索。隨着其餘方法的研究,如random search, Bayesian optimization, Gradient-based, evolution algorithms,搜索時間在降低而且GPU使用量也在減小,使得NAS得以普及。感謝https://github.com/D-X-Y/Awesome-NAS 提供了搜索策略的調研。
  • 因爲一個神經網絡一般有幾十甚至上百層,結構也很複雜,一個及時並有效的反饋對於減小搜索時間頗有幫助。最簡單的方法是把訓練數據分紅兩部分,train data用來訓練網絡結構,validation data用來評估當前搜索到的網絡結構。通常來講,一個好的評估機制要兼具速度和準確度,舉個例子,train data少則網絡結構訓練不到位,train data多則搜索時間過長。來自Freiburg大學的Elsken團隊發表了關於NAS的調研,裏面對於評估方法講的很詳細,請挪步【2】。

自動網絡搜索在語義分割上的應用

相比於目標檢測,語義分割能夠更好的解析圖像,由於圖像上的每個pixel都會被分類。因此語義分割能夠完成目標檢測沒法完成的任務,如自動駕駛的全景分割,醫療圖像診斷,衛星圖分割,背景摳圖和AR換裝等。過去的五年繼FCN以後,不少神經網絡在公開數據集上都有不錯的成績。隨着AI產品落地,對神經網絡性能的要求更爲嚴格:在保證accuracy的前提下,在有限制的硬件資源運行而且提高inference速度。這爲設計神經網絡增長了很大難度。因此NAS是一個很好的選擇,它能夠避免經過大量調參實驗來決定最優網絡結構。在語義分割以前,NAS在圖像分類和目標檢測上均有成功的應用。咱們總結了近兩年比較流行的NAS在語義分割上的工做。多數的語義分割的網絡都是encoder-decoder結構,在這裏咱們對比了實際搜索的部分,搜索性能耗時和方法。因爲每個work都在不一樣實驗環境下進行,因此實驗結果沒有直接進行對比。算法

(1)第一篇將NAS應用於語義分割的工做來自Google DeepLab團隊,做者是Liang-Chieh Chen等一衆大佬。DeepLabv3+的準確度已經達到必定高度,繼而DeepLab團隊將研究方向轉移到了NAS上面。基於和DeepLab一樣的encoder-decoder結構, 在【5】工做中,做者將encoder結構固定,試圖搜索出一個更小的 ASPP,用到的搜索策略是random search。在Cityscapes達到82.7% mIoU,在PASCAL VOC 12上達到87.9%,結果尚可但搜索時間過慢,用370個GPU搜索一週才獲得網絡,這也限制了該方法的普及。segmentfault

(2)一樣來自DeepLab團隊,Auto-DeepLab【6】相比以前的工做在搜索效率上有顯著的提高。這都歸功於它gradient-based的搜索策略DARTS【9】。與上一篇相反,Auto-DeepLab的目標是搜索encoder,而decoder則採用ASPP。從實驗結果來看,Auto-DeepLab的準確度和DeepLabv3+相差很少,可是FLOPs和參數數量倒是DeepLabv3+的一半。後文咱們會具體介紹DARTS和Auto-DeepLab。網絡

(3)Customizable Architecture Search (CAS)【4】是來自京東AI Lab的工做。在搜索空間定義了三種cell,分別是normal cell,reduction cell和新提出的multi-scale cell。其中multi-scale cell是ASPP 的功能相似,因此CAS的搜索區間是針對所有網絡。在搜索策略上依然採用DARTS。值得一提的是,在搜索網絡的時候,CAS不只考慮accuracy,還考慮了每一個模塊的GPU time,CPU time,FLOPs和參數數量。這些屬性對於實時任務相當重要。因此CAS在Cityscapes上的準確度是72.3%,雖然沒有很高,可是在TitanXP GPU的速度fps達到108。架構

(4)來自Adeleide大學的Vladimir Nekrasov團隊在light weight模型上面作了大量工做,而最近也將研究重心轉到了NAS上面。在【7】中,做者採用RL的搜索策略搜索decoder。衆所周知RL很是耗時,因此做者採用知識蒸餾策略和Polyak Averaging方法結合提高搜索速度,而這正是本文的major contribution。併發

(5)最後一篇來自商湯發佈在Artix的文章,採用圖神經網絡GCN做爲搜索策略,試圖尋找cell之間最優的鏈接方式【8】。和CAS相似,在本文中每一個模塊的性能如latency也在搜索評估時考慮進去。在Cityscape上GAS達到73.3%mIoU,在TitanXP GPU的速度是102fps。less

簡單總結一下上述工做,咱們能夠發現NAS在語義分割上的應用還算成功,而且不少團隊已經在NAS上進行研究探索。尤爲在DARTS相似的高效搜索策略提出後,我的研究者和小團隊也能夠構建本身的NAS網絡,而不受制於GPU資源。dom

DARTS: Differentiable Architecture Search

一般來講搜索空間是一個離散的空間,在DARTS中【9】,做者將搜索空間定義成一個連續空間,這樣一來搜索到的每個cell都是可導的,能夠用stochastic gradient descent來優化。因此DARTS相比RL並不須要大量GPU資源和搜索時間。在實驗中,DARTS成功用在了CNN模型的圖像分類和RNN模型的language modelling任務上。感恩做者提供了源代碼 https://github.com/quark0/darts ,它能夠爲咱們搭建本身NAS模型提供很好的基礎。

正如前文中提到,多數的NAS網絡會搜索不一樣類型的可重複的cell,而後將cell鏈接起來構成神經網絡。這個cell一般用directed acyclic graph(DAG)表示。一個DAG cell包含N個有順序的node,每個node能夠當作在它前面全部node的結合(就像feature map同樣是一個latent representation)。從node i 到node j的鏈接是某一種operation記做o(i,j). 每個cell都有兩個input node和一個output node。下圖中是一個DARTS展現的reduction cell。咱們能夠看到cell k 有兩個input nodes 分別是c_{k-1}和c_{k-2} (來自cell k-1和cell k-2的output node),cell k包含了4個immediate nodes和一個output node c_{k} 。o(i,j)是邊緣上的max_pool_3x3,max_pool等。理論上從一個node到相鄰的node能夠有不少種operation,因此搜索最優網絡結構也能夠當作是選擇每個邊上最佳的operation。

DARTS將每對node之間的每個operation都賦予一個weight,最優解能夠用softmax求得,也就是說有最大probability的path表明最優operation,這也是DARTS的核心部分。DARTS在搜索空間中定義了兩種cell,reduction cell和normal cell。宏觀網絡結構是固定的,做者採用了簡單的chained-structured,將reduction cell放在了網絡結構的1/3和2/3處。因此說在搜索的過程當中,cell內部不斷更新而宏觀結構沒有變化。咱們定義operation的參數爲W,將cell中operation的weight記爲Alpha。根據論文和source code,咱們總結了DARTS的搜索流程以下圖。

網絡搜索的第一步是對模型結構,optimizer,loss進行初始化。文中定義了幾種operation,代碼中的定義在operation.OPS, 兩種cell在代碼中的定義是genotypes.PROMITIVES. 參數Alpha在代碼中定義爲arch_parameters()={alphas.normal, alphas.reduce}. 在搜索過程當中,train data被分紅兩部分,train patch用來訓練網絡參數W而validation patch用來評估搜索到的網絡結構。在代碼中,搜索過程的核心部分在architect.step()。網絡搜索的目標函數就是讓validation在現有網絡的loss最小,文章中公式(3)給出了objective:

爲了減小搜索時間,每一輪只用一個training patch去更新參數W計算train loss。在計算Alpha的時候涉及到二階求導,稍微複雜一點,可是論文和代碼都給了詳細解釋,這裏不贅述,代碼中architect._hession_vector_product是求二階導的實現。在更新W和Alpha以後,最優operation經過softmax來計算。文中保留了top-k probability的operation。W和Alpha不斷計算更新直到搜索過程結束。

文中進行了大量實驗,咱們這裏只介紹一下在CIFAR-10數據上面進行的圖像分類任務。做者將DARTS與傳統人工設計的網絡DenseNet,和幾個其餘常見的NAS網絡進行對比,如AmoeNet和ENet都是常被說起的。DARTS在準確度上優於其餘全部算法,而且在搜索速度上明顯比RL快不少。因爲結構簡單效果好,並且不須要大量GPU和搜索時間,DARTS已經被大量引用。

Auto-DeepLab: Hierarchical Neural Architecture Search for Semantic Image Segmentation

基於DARTS的結構,Google DeepLab團隊提出了Auto-DeepLab並發表在2019年CVPR上。在tensorflow deeplab官網上公佈了nas backbone而且給出了能夠訓練的模型結構,可是搜索過程並無公開。因而咱們訓練了給出的nas網絡結構,在沒有任何pre-training的狀況下與deeplab v3+進行對比。代碼參考 https://github.com/tensorflow/models/tree/master/research/deeplab

在DARTS中,宏觀網絡結構是提早定義的,而在Auto-DeepLab中宏觀網絡結構也是搜索的一部分。繼承自DeepLab v3+的encoder-decoder結構,Auto-DeepLab的目的是搜索Encoder代替現有的xception65,MobileNet等backbone,decoder採用ASPP。在搜索空間中定義了reduction cell,normal cell和一些operation。Reduction cell用來改變spatial resolution,使其變大兩倍,或不變,或變小兩倍。爲了保證feature map的精度,Auto-DeepLab規定最多downsampling 32倍 (s=32)。下圖定義了宏觀網絡結構(左)和cell內部的結構(右)。

Auto-DeepLab定義了12個cell,而上圖(左)中前面兩個白色的node是固定的兩層爲了縮小spatial resolution。如圖左灰色箭頭所示,正式搜索以後,每個cell的位置都有多種cell類型能夠選擇:能夠來自於當前cell相同的spatial resolution的cell,也能夠是比當前cell的spatial resolution大一倍或小一倍的cell。做者將這些空間路徑(灰色箭頭表示的路徑)也賦予一個weight,記做Beta。如圖右,每個cell的輸出都是由相鄰spatial resolution的cell結合而成,而Beta的值能夠理解成不一樣路徑的probability。爲了更直觀,咱們把圖右的三個cell分別用藍色,黃色和綠色標註,對應圖左的三個cell。與DARTS相似,咱們將operation的parameters記做W,將cell內部operation的權重記做Alpha。因此搜索最優網絡結構,即迭代計算並更新W,Alpha和Beta。文中給出每個cell的實際輸出爲:

從上面公式能夠看出,W和{Alpha,Beta}要分別計算和更新。全部的weight都是非負數。Alpha的計算方式依然是ArgMax,而計算Beta用了經典的貪心算法Viterbi算法。下圖給出的宏觀網絡結構是基於Cityscapes搜索到的結果,對應代碼中的backbone是[0,0,0,1,2,1,2,2,3,3,2,1], 數字表明downsample倍數。在模型中,每個cell中的node由兩個路徑組成,如圖右。

文中用了三組開源數據PASCAL VOC 12, Cityscapes和ADE20k作了對比實驗。具體實驗參數設置和對比算法在論文中有詳細說明,這裏只對比和Deeplab v3+。Cityscapes訓練數據尺寸是[769x769],而PASCAL VOC 12和ADE20k訓練數據尺寸是[513x513]。通常來講,Auto-DeepLab和DeepLabv3+準確度相差無幾,可是速度上要快2.33倍,而且Auto-DeepLab能夠從零開始訓練。

除了文中給出的實驗結果之外,咱們在PASCAL VOC 12數據上從零開始訓練了Auto-DeepLab,用代碼中給出的模型結構,而且與DeepLabv3+(xception65)進行結果對比。可是並非全部結果都能復現,分析緣由大概是這樣:首先,上文中給出的模型結構是用Cityscapes數據集搜索獲得,也許在PASCAL VOC 12上並非最優解;其次沒有用ImageNet作pre-training,訓練環境也不一樣。咱們在下面表格中對比了FLOPs, 參數數量, 在K80 GPU上面的fps和mIoU。

下圖中直觀對比了ground truth(第二列),deeplabv3+(第三列)和Auto-DeepLab-S(第四列)的分割結果。與上面的mIoU一致,DeepLabv3+的分割結果要比Auto-DeepLab更精準一些,尤爲是在邊緣。對於簡單的圖像案例,二者分割結果相差無幾,可是在較難的狀況下,Auto-DeepLab會有很大偏差(在第三個案例中,Auto-DeepLab將女孩識別成狗)。

總結

本文簡單介紹了NAS的發展示況和在語義分割中的應用,而且詳細解讀了兩篇流行的work:DARTS和Auto-DeepLab。從總體實驗結果來看,還不能看出NAS的方法比傳統的模型有壓倒性優點,尤爲在準確度上。可是NAS給深度學習注入了新鮮的血液,爲研究者提供了一種新的思路,而且還有很大的提高空間和待開發領域。也許人工設計網絡結構將會被自動網絡搜索取代。

翻譯或有偏差,請參考原文https://medium.com/@majingting2014/neural-architecture-search-on-semantic-segmentation-1801ee48d6c4

對這塊比較關注的同窗能夠移步繼續閱讀《自動網絡搜索(NAS)在語義分割上的應用(二)》

References

[1] Zoph, Barret, and Quoc V. Le. "Neural architecture search with reinforcement learning." The International Conference on Learning Representations (ICLR) (2017)

[2] Elsken, Thomas, Jan Hendrik Metzen, and Frank Hutter. "Neural Architecture Search: A Survey." Journal of Machine Learning Research 20.55 (2019): 1-21.

[3] Zoph, Barret, et al. "Learning transferable architectures for scalable image recognition." Proceedings of the IEEE conference on computer vision and pattern recognition (CVPR). 2018.

[4] Zhang, Yiheng, et al. "Customizable Architecture Search for Semantic Segmentation." Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (CVPR). 2019.

[5] Chen, Liang-Chieh, et al. "Searching for efficient multi-scale architectures for dense image prediction." Advances in Neural Information Processing Systems (NIPS). 2018.

[6] Liu, Chenxi, et al. "Auto-deeplab: Hierarchical neural architecture search for semantic image segmentation." Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (CVPR). 2019.

[7] Nekrasov, Vladimir, et al. "Fast neural architecture search of compact semantic segmentation models via auxiliary cells." Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (CVPR). 2019.

[8] Lin, Peiwen, et al. "Graph-guided Architecture Search for Real-time Semantic Segmentation." arXiv preprint arXiv:1909.06793 (2019).

[9] Liu, Hanxiao, Karen Simonyan, and Yiming Yang. "Darts: Differentiable architecture search." The International Conference on Learning Representations (ICLR) (2019).

點擊關注,第一時間瞭解華爲雲新鮮技術~

相關文章
相關標籤/搜索