CVPR2019的一篇Poster論文,設計了一種巧妙的方法對NAS的搜索空間進行剪枝,提高搜索效率。

Partial Order Pruning: for Best Speed/Accuracy Trade-off in Neural Architecture Search?

arxiv.org

1. Background

CNN模型在圖像任務上雖然具有很高的性能,但是同時也需要消耗巨大的計算量。對於部署模型而言,如何做到精度和速度的平衡就是一個至關重要的問題。

現有的NAS方法或者人工設計網路通常只關注於高性能,通過FLOPs來評估網路的運行速度,但是實際上,模型的計算速度還受到了內存訪問的影響。雖然現有的部分NAS方法,基於FLOPs作為目標搜索結構,但是它們並沒有真正考慮實際推理速度,以及在目標設備上的推理速度。

因此,這篇論文提出了一種以目標設備運行速度作為評估指標的NAS方法,通過巧妙的剪枝方法,對搜索空間進行剪枝,提高搜索效率,來找到Accuracy/Speed Trade-off的boundary。

2. Method

方法部分有三個細節內容-搜索空間/估計推理速度/搜索空間剪枝。

首先是對NAS搜索空間的設計。論文中的搜索空間相對比較簡單,以ResNet的結構作為框架,如下圖所示,整個處理流程分為6個階段,1-5階段每個階段進行一次降採樣,第6個階段做GAP以及最終的分類。由於網路框架相對固定,因此搜索的內容其實就是每一個block的寬度(同時,對寬度取值也做了限制,只能在{64,128,256,512,1024}中取值),以及每個階段block的數量。

具體框架採用ResNet的結構,針對深度和寬度進行搜索

其次是關於推理速度的估計,作者利用了TensorRT庫的特性,來估算網路的推理速度。通過實驗發現,具有相同輸出維度的block通常具有相同的latency,因此作者通過枚舉寬度和解析度,得到了一個查閱表。

然後就是論文的核心內容,搜索空間剪枝(Partial Order Assumption)。對於一個已知的結構如{(128),(256,256),(512)},這個結構具有三個階段,第一階段一個block,128寬;第二階段兩個block,256寬;第三階段一個block,512寬。對於其的拓展出來的結構,可以有兩個變化維度,一個是在寬度上增加,一個是在深度上變化(增加block)。因此就有了partial order的關係,如下圖所示。

相似結構之間的關係

通過這樣的關係就可以定義結構之間的前驅後繼關係,類似於大小關係。由此根據這種關係,作者做出了一個假設,若x<y則Lat(x)<=Lat(y),Acc(x)<=Acc(y)。這種關係雖然並不適用於幾百層的網路之間的關係,但是作者的大量統計結果上看,這種關係是成立的,即使存在不滿足的情況,但其精度差小於0.1%,可以看作是計算誤差。

綜上所述,定義了完整的搜索空間,評價網路的方法,以及對搜索空間簡直的方法,整體的搜索流程就比較清晰了。偽代碼如下圖所示。

搜索演算法流程

此外,除了搜索backbone網路結構,作者還設計了簡單的分割decoder框架,搜索對decoder同樣有效。框架如下圖所示。

分割模型框架

3. Experiment

實驗方面,目標硬體選擇了一個高性能GPU(1080TI)和一個嵌入式設備(Nvidia Jetson TX2)。測試的目標數據集選擇了ImageNet分類數據集和Cityscapes分割數據集。

對於backbone網路的搜索,作者設定目標設備在TX2上,同時latency在1ms-5ms之間,整個搜索過程大約涉及了200個網路,在整體訓練結束後,取出兩個限制條件下最優的結構重新訓練,獲得最高精度,結果如下圖所示。

實驗結果

可以看出來,雖然在FLOPs上看,搜索出來的模型結構DF沒有明顯優勢,但是其latency卻很低,因此FLOPs來衡量網路的速度其實並不是一個很好的指標。相對於同量級的結構,DF結構都具有相對明顯的優勢。

在decoder的結構搜索上,同樣取得了很好的效果。

分割模型結果

此外,作者還對演算法的一些效果做了ablation study,考察了一下隨著迭代次數變化,POP篩掉的結構數量,以及搜索數量對最終結果的影響。根據統計,整體加速效果大概是2.2倍左右(訓練200個模型後,剪枝了438個候選模型),同時,隨著探索數量的提升,最終結果的準確率和穩定性也都有提升。

更具體的內容請參考原文。


推薦閱讀:
相关文章