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

2{icon} {views}

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

自動網絡搜索

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

近兩年,學術界興起了“自動網絡搜索”取代人工設計網絡結構。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的研究成果,似乎可以看出自動網絡搜索將會成為趨勢。

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

  • 首先搜索空間會定義一些模塊(cell),operations(例如dilated conv 3×3),和宏觀網絡結構。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搜索一周才得到網絡,這也限制了該方法的普及。

(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。

簡單總結一下上述工作,我們可以發現NAS在語義分割上的應用還算成功,並且很多團隊已經在NAS上進行研究探索。尤其在DARTS類似的高效搜索策略提出后,個人研究者和小團隊也可以構建自己的NAS網絡,而不受制於GPU資源。

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訓練數據尺寸是[769×769],而PASCAL VOC 12和ADE20k訓練數據尺寸是[513×513]。一般來說,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).

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

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※為什麼 USB CONNECTOR 是電子產業重要的元件?

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※台北網頁設計公司全省服務真心推薦

※想知道最厲害的網頁設計公司"嚨底家"!

※推薦評價好的iphone維修中心