前言:本文將介紹如何基於ProxylessNAS搜索semantic segmentation模型,最終搜索獲得的模型結構可在CPU上達到36 fps的測試結果,展現自動網絡搜索(NAS)在語義分割上的應用。html
隨着自動網絡搜索(Neural Architecture Search)技術的問世,深度學習已慢慢發展到自動化設計網絡結構以及超參數配置的階段。尤爲在AI落地的背景下,許多模型須要部署在移動端設備。依據不一樣設備(GPU, CPU,芯片等),不一樣的模型需求(latency, 模型大小,FLOPs),使用NAS自動搜索最佳網絡結構將會是一個頗有潛力的方向。上一篇介紹了NAS的基本框架和入門必讀DARTS [1],以及在semantic segmentation領域的應用。 距離如今纔不過幾個月,NAS論文數量明顯增加:在理論研究方面,search strategy,evaluation performance的方法看似趨於穩定,不得不提到最近FAIR團隊的RegNet [2]探討了搜索空間的設計,經過大量實驗把常見的設計模型的理論一一驗證,咱們能夠根據它的結論縮小搜索空間從而提升搜索效率;在應用方面以仍是object detection爲主,也有segmentation, reID, GAN等領域。算法
NAS算是一項新技術,可是語義分割semantic segmentation倒是老生常談。自FCN的問世起,SegNet, UNet這種簡單粗暴的encoder-decoder結構在多種圖像上都能達到能夠接受的結果,deeplab系列以後更是在開源數據集達到巔峯。從學術角度看semantic segmentation彷佛已達到瓶頸,因而researcher們紛紛轉向小樣本,semi-supervised,domain adaption, cloud point等方向另闢蹊徑。可是semantic segmentation落地卻很是困難。在實際落地場景中,使用常見的backbone (resnet或yolo系列) 就可以完成各類object detection任務,可是在segmentation上效果卻很差:segmentfault
Semantic segmentation落地必需要平衡模型的準確度和速度,而設計這樣的網絡結構又十分困難。嘗試了BiSeNet [3],ShuffleNetv2 [4],MobileNetv3 [5]等一系列小模型,可是準確度和速度都沒達到要求。正所謂萬丈高樓平地起,成功只能靠本身,最終仍是要寄但願於NAS自動搜索出知足條件的模型。上篇介紹的NAS用在語義分割還在探索階段,在GPU上運行而且嘗試減少FLOPs或Params。可是FLOPs或者參數量與模型推理速度並非正相關,只減小參數量不能知足實時推理的要求。後來的FasterSeg [6]看似速度驚人,其實也用了TensorRT來加速。本文將嘗試在CPU上完成實時的人形分割的任務,選擇ProxylessNAS做爲baseline來搜索模型結構。實驗結果證實了ProxylessNAS [7]仍是經得起考驗的,業界良心。網絡
選擇ProxylessNAS [7]的緣由不只僅是它出自名門,代碼開源,在Cifar10和ImageNet數據集的準確度能從一衆NAS模型中脫穎而出, 並且它也是比較早的考慮到了模型性能的work(如速度,模型大小,參數量)。 除此以外,與DARTS [1]系列搜索的DAG cell不一樣,ProxylessNAS [7]的主幹網絡採用簡單的鏈狀結構。這種鏈狀結構(chained-structure)比DAG cell有明顯的速度優點,由於它的算子之間的鏈接方式比較簡單。app
1.1 Super-net setting框架
咱們仍是用NAS的基本框架來解析ProxylessNAS [7]。less
Figure 1: NAS frameworkdom
1.2 Super-net trainingide
Super-net的參數包含兩部分:operation自己的參數和每一個operation的權重(在Figure2中記爲{alpha,beta,sigma … })。將訓練數據分紅兩部分,一部分用來訓練super-net裏面operations的weight,另外一部分用來更新ops的權重。性能
Figure 2 illustrates the architecture of the super-net: the chained-structure searchable backbone (left) and each layer of the searchable backbone (right).
Figure 2所表達的ProxylessNAS的流程,其實就是一邊訓練operation參數,一邊更新operation的權重alpha,最後用Softmax選擇每一層中擁有最大probability的operation便可。讀過paper以後確實發現有許多值得借鑑之處,可是一樣也有一些疑問 (c.f. Table 1)。
Table 1 discusses the advantages and remaining issues of ProxylessNAS
儘管對ProxylessNAS還有不少沒有解決的問題,奈何單卡搜索訓練省時省力瑕不掩瑜。藉助Intel的openvino推理框架,本文嘗試用ProxylessNAS搜索可運行在CPU(x86)上的real-time semantic segmentation模型作人形分割,下面會詳細介紹對算法的改進和實驗結果。
2.1 Super-net setting
Figure 3 illustrates the macro-architecture of our super-net (top) and the searchable backbone (bottom)
2.2 Improvement from ProxylessNAS
2.3 Experiments
Experiment setting:
https://software.intel.com/content/www/us/en/develop/tools/openvino-toolkit.html
Experimental results:
在同一網絡結構下,咱們用MobileNetv3 [5]做爲backbone進行對比,對比結果見Table 2。
Table 2 illustrates the experimental results
從實驗數據來看,MobileNetv3 [5]的參數量和FLOPs都比咱們搜索出來的小一倍,可是在K80上的推理速度很相近,準確度mIoU差異較大。若是綜合考量準確度和速度的話,咱們用ProxylessNAS [7]搜索出來的backbone要明顯優於MobileNetv3 [5]的backbone。 Figure 4的實驗結果能夠看出當feature複雜一些的時候,MobileNetv3 [5]的結果要差不少
Figure 4 compares the segmentation results of our searched network and MobileNetv3
將模型轉化成openvino可支持模式部署在CPU (Intel Core i7-8700)上,運行速度在27ms每幀左右(FPS=36),結果如Figure 5。
Figure 5 shows the segmentation results in real application scenario
是時候展現一下搜索出來的backbone了,長這樣~ (c.f. Figure 6)
Figure 6 illustrates the searched backbone structure
經過實驗咱們看到ProxylessNAS搜索策略能夠從classification遷移到segmentation,在速度相仿的狀況下,搜索出來的網絡要比本來MobileNetv3 [5]準確度提升不少。可是隻限於當前的場景,不能說人工設計出來的模型就很差或必定會被取代(雖然MobileNetv3也是NAS搜出來的)。在特定場景和有特定需求的時候,用NAS設計網絡結構確實比人工設計加上大量調參實驗要更高效,在AI落地方面更有發展前景。本文只是初探ProxylessNAS,後續還會有如下幾個方面的探索。
下一篇我會介紹一下關於背景摳圖的實戰經驗,敬請期待。
Figure 7 shows the demo of background matting
References
[1] Liu, Hanxiao, Karen Simonyan, and Yiming Yang. "Darts: Differentiable architecture search." ICLR (2019).
[2] Radosavovic, Ilija, et al. "Designing Network Design Spaces." arXiv preprint arXiv:2003.13678 (2020).
[3] Yu, Changqian, et al. "Bisenet: Bilateral segmentation network for real-time semantic segmentation." Proceedings of the European conference on computer vision (ECCV). 2018.
[4] Zhang, Xiangyu, et al. "Shufflenet: An extremely efficient convolutional neural network for mobile devices." Proceedings of the IEEE conference on computer vision and pattern recognition (CVPR). 2018.
[5] Howard, Andrew, et al. "Searching for mobilenetv3." Proceedings of the IEEE International Conference on Computer Vision (ICCV). 2019.
[6] Chen, Wuyang, et al. "FasterSeg: Searching for Faster Real-time Semantic Segmentation." ICLR (2020).
[7] Cai, Han, Ligeng Zhu, and Song Han. "Proxylessnas: Direct neural architecture search on target task and hardware." ICLR (2019).
[8] Sandler, Mark, et al. "Mobilenetv2: Inverted residuals and linear bottlenecks." Proceedings of the IEEE conference on computer vision and pattern recognition (CVPR). 2018.
[9] Chen, Liang-Chieh, et al. "Encoder-decoder with atrous separable convolution for semantic image segmentation." Proceedings of the European conference on computer vision (ECCV). 2018.