天天看點

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

前言:

本文将介紹如何基于ProxylessNAS搜尋semantic segmentation模型,最終搜尋得到的模型結構可在CPU上達到36 fps的測試結果,展示自動網絡搜尋(NAS)在語義分割上的應用。

随着自動網絡搜尋(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上效果卻不好:

  1. 由于光線等原因,實際場景圖像的intensity分布更複雜,而segmentation需要細分邊界, 對像素值的判定尤為重要。然而,相比detection來說segmentation的資料标記成本高導緻訓練資料較少,隻依靠data augmentation等手段提升有限。
  2. Segmentation是pixelwise的任務,因為它要處理到每一個pixel,是以模型一般都會比object detection的模型大許多(你看這個模型它又長又寬)。如果你的模型被要求real-time推理(>16 fps),那麼準确度和速度必然會成為沖突,Double kill!
  3. 當語義分割用在了視訊流,對準确度的要求會更高。即使每兩幀隻相差幾個pixel,即使在mIoU的數值上相差無幾,但是人眼看上去不夠穩定,會有“抖動”的邊界, Triple kill!
  4. 當語義分割模型走下雲端,部署在算力有限的移動端,底層晶片可能對很多操作不支援,使得在原本在可以在GPU上開心玩耍的模型到了CPU上便一朝打回解放前, Quadra kill!

Semantic segmentation落地必須要平衡模型的準确度和速度,而設計這樣的網絡結構又十分困難。嘗試了BiSeNet [3],ShuffleNetv2 [4],MobileNetv3 [5]等一系列小模型,但是準确度和速度都沒達到要求。正所謂萬丈高樓平地起,成功隻能靠自己,最終還是要寄希望于NAS自動搜尋出滿足條件的模型。上篇介紹的NAS用在語義分割還在探索階段,在GPU上運作并且嘗試減小FLOPs或Params。但是FLOPs或者參數量與模型推理速度并不是正相關,隻減少參數量不能滿足實時推理的要求。後來的FasterSeg [6]看似速度驚人,其實也用了TensorRT來加速。本文将嘗試在CPU上完成實時的人形分割的任務,選擇ProxylessNAS作為baseline來搜尋模型結構。實驗結果證明了ProxylessNAS [7]還是經得起考驗的,業界良心。

1.Overview of ProxylessNAS

選擇ProxylessNAS [7]的原因不僅僅是它出自名門,代碼開源,在Cifar10和ImageNet資料集的準确度能從一衆NAS模型中脫穎而出, 而且它也是比較早的考慮到了模型性能的work(如速度,模型大小,參數量)。 除此之外,與DARTS [1]系列搜尋的DAG cell不同,ProxylessNAS [7]的主幹網絡采用簡單的鍊狀結構。這種鍊狀結構(chained-structure)比DAG cell有明顯的速度優勢,因為它的算子之間的連接配接方式比較簡單。

1.1 Super-net setting

我們還是用NAS的基本架構來解析ProxylessNAS [7]。

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

Figure 1: NAS framework

  • Search Space: 在搜尋空間中定義的operation candidate的是來自MobileNetv2 [8]的block,分别取不同的kernel size(3, 5, 7)和不同的expansion rate(3,6),再加上identity和zero操作一共8種ops(c.f. Figure 1)。 網絡的宏觀結構是一個常見的鍊狀結構來完成classification, 每一層都有8個ops candidate(c.f. Figure 2)。正如前面提到的,算子之間太複雜的連接配接方式會讓速度變慢,常見的小模型結構都是這種鍊狀結構。
  • Search Strategy: 搜尋政策采用可微分的方法,這種搜尋政策近兩年很常見。雖然不及RL和EA穩定,但是可以大幅度提高搜尋速度。
  • Evaluation Performance: One-shot 權值共享, 也是現有最常見的super-net的形式。對于計算資源匮乏的團隊和個人來說,這種方式能夠提高搜尋效率減少記憶體占用。

1.2 Super-net training

Super-net的參數包含兩部分:operation本身的參數和每個operation的權重(在Figure2中記為{alpha,beta,sigma … })。将訓練資料分成兩部分,一部分用來訓練super-net裡面operations的weight,另一部分用來更新ops的權重。

  • Training: 每個iteration開始的時候,在每一層都随機激活一個operation(c.f. the binary gate in Figure 2),将所有激活的operation連接配接起來組成一條子網絡記為subnet,通過back propagation來更新這條subnet的weight。沒有激活的ops不放入記憶體,也就是說訓練的時候隻有一條subnet在記憶體中,這也使得整個搜尋過程可以在單卡上完成。
  • Searching:每個operation的權重alpha代表它的重要程度,也就是最終被選擇的機率,probability = Softmax(alphas)。換言之,搜尋的過程,就是不斷更新權重alpha的過程。和training一樣,每個iteration都要随機激活一條subnet,但是這次要讓operation的weight固定,通過back propagation計算這條subnet上的alpha。Paper裡面Eq (4)給出了計算方式,由于binary gate和probability成正比,公式裡面将loss對probability的求導轉化成對binary gate的求導,而loss對binary gate的導數在back propagation的時候有計算過并且儲存了下來(這部分paper沒有細說可參考源代碼)。
自動網絡搜尋(NAS)在語義分割上的應用(二)

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

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

2.Real-time Semantic Segmentation using ProxylessNAS on CPU

盡管對ProxylessNAS還有很多沒有解決的問題,奈何單卡搜尋訓練省時省力瑕不掩瑜。借助Intel的openvino推理架構,本文嘗試用ProxylessNAS搜尋可運作在CPU(x86)上的real-time semantic segmentation模型做人形分割,下面會詳細介紹對算法的改進和實驗結果。

2.1 Super-net setting

  • Search space: 在設定搜尋空間的時候,秉着大力出奇迹的心态我把常用的operation都塞了進來,分别是MBv3 (3x3), MBv3 (5x5), DilConv (3x3), DilConv (5x5), SepConv (3x3), SepConv (5x5), ShuffleBlock一共7種ops。其中MBv3是來自MobileNetv3 [5]的基本子產品,DilConv和SepConv是來自DARTS [1]的dilated sepatable convolutions和separable convolutions,ShuffleBlock是來自ShuffleNetv2 [4]的基本子產品,前面三種operation都設定了兩種kernel size可以選擇。在定義宏觀網絡結構的時候,采用deeplabv3+ [9]的結構 (c.f. Figure 3): head + searchable backbone + ASPP + decoder。與UNet類似,将encoder的feature map直接”add”到decoder,這裡沒有用”concatenation”是為了避免模型過“寬”使速度變慢。其中s2, s4, s8, s16, s32分别指feature map的resolution下降2,4,8,16,32倍。與ProxylessNAS類似,supernet的參數包含兩部分,一部分是operation本身的weight,另一部分是operation的權重alpha。
  • Searching Strategy: 延續ProxylessNAS的可微分求導方式
  • Evaluation Performance: One-shot權重共享
自動網絡搜尋(NAS)在語義分割上的應用(二)

Figure 3 illustrates the macro-architecture of our super-net (top) and the searchable backbone (bottom)

2.2 Improvement from ProxylessNAS

  • Decoupling the training and searching process: 在ProxylessNAS中“training”和“searching”是同時輪流完成的,也就是一邊訓練一邊搜尋。我在實驗的時候把“training”和“searching”徹底分開,先用50個epochs隻更新super-net裡面operation的參數,在訓練之後,再更新operation的權重alphas。這麼做的原因是避免在operation參數不穩定的時候,某些alpha過大影響後面的決策。
  • Consider the latency as a hard constraint: 因為模型推理速度比較重要,而且不能用簡單的疊加方式計算,是以每次随機激活subnet的時候都要算一下這條subnet的推理速度,如果不符合要求(如latency > 30ms)則重新搜尋一條subnet,這樣一定程度上避免很多推理速度過慢的operation被選擇和學習。

2.3 Experiments

Experiment setting:

  • Task: 基于CPU(x86)的實時人像分割
  • DL platform: Intel openvinohttps://software.intel.com/content/www/us/en/develop/tools/openvino-toolkit.html
  • Dataset : >20k張圖像,一部分來自 coco/pascal資料集中帶有”person”類别的,另一部分是私有資料
  • Data augmentation: random crop, cutout, random brightness/contrast adjust, random Gaussian blur/sharpen
  • Searching time: 單卡2 GPU days (K80) 包括training和searching

Experimental results:

在同一網絡結構下,我們用MobileNetv3 [5]作為backbone進行對比,對比結果見Table 2。

Table 2 illustrates the experimental results

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

從實驗資料來看,MobileNetv3 [5]的參數量和FLOPs都比我們搜尋出來的小一倍,但是在K80上的推理速度很相近,準确度mIoU差别較大。如果綜合考量準确度和速度的話,我們用ProxylessNAS [7]搜尋出來的backbone要明顯優于MobileNetv3 [5]的backbone。 Figure 4的實驗結果可以看出當feature複雜一些的時候,MobileNetv3 [5]的結果要差很多

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

Figure 4 compares the segmentation results of our searched network and MobileNetv3

将模型轉化成openvino可支援模式部署在CPU (Intel Core i7-8700)上,運作速度在27ms每幀左右(FPS=36),結果如Figure 5。

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

Figure 5 shows the segmentation results in real application scenario

是時候展示一下搜尋出來的backbone了,長這樣~ (c.f. Figure 6)

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

Figure 6 illustrates the searched backbone structure

3.Future work

通過實驗我們看到ProxylessNAS搜尋政策可以從classification遷移到segmentation,在速度相仿的情況下,搜尋出來的網絡要比原本MobileNetv3 [5]準确度提高很多。但是隻限于目前的場景,不能說人工設計出來的模型就不好或一定會被取代(雖然MobileNetv3也是NAS搜出來的)。在特定場景和有特定需求的時候,用NAS設計網絡結構确實比人工設計加上大量調參實驗要更高效,在AI落地方面更有發展前景。本文隻是初探ProxylessNAS,後續還會有以下幾個方面的探索。

  • 實驗結果表明super-net權值共享的形式有一定合理性。但是在結構搜尋的時候,将每層probability最大的operation組成subnet作為輸出結果還是有不合理之處。因為subnet在搜尋和訓練的時候具有一定的耦合性,每層的operation一榮俱榮一損俱損。最終将每層最佳的operation選出來,組合在一起的時候未必能符合預先設定的hard constraint,這裡還是有需要改進的地方,比如可以計算相鄰兩層operation的sub-path的權重代替每層operation的權重。
  • ProxylessNAS是MIT Hansong團隊早期的work,現在已有後續OFA問世(也是跪着讀完的)。在OFA中作者徹底将training和searching分開,結合了knowledge distillation,先訓練teacher model,然後用NAS的思路在teacher model中搜尋出最佳student model。OFA可以了解為自動化network pruning或自動distillation。如果OFA實驗效果好,後續還會有關于OFA的實戰經驗的分享。
  • Figure 5種實際效果展示的時候,人像和背景融合的比較自然,但是語義分割歸根到底是一個分類任務,邊緣的pixel“非黑即白”,如果想要和背景自然的融合,需要計算出前景的透明度alpha matte,這裡涉及到另一項背景摳圖技術,和segmentation配合使用效果更佳。其實Figure 5的下圖中已經看出segmentation沒有把頭發分割出來,但是在結果中卻保留了下來,也是用了背景摳圖的原因。Matting除了可以優化segmentation結果,還可以實作切換背景(cf. Figure 7),PS等功能。

下一篇我會介紹一下關于背景摳圖的實戰經驗,敬請期待。

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

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.

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

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

繼續閱讀