Fast Neural Architecture Search of Compact Semantic Segmentation Models via Auxiliary Cells git
2019-04-24 14:49:10
網絡
Paper:https://arxiv.org/pdf/1810.10804.pdf app
在過去的許多年,你們一直認爲網絡結構的設計是人類的事情。可是,近些年 NAS 的發展,打破了這種觀念,用自動化的方法在給定的數據上設計合適的網絡結構,變的勢不可擋。本文在語義分割的任務上,嘗試搜索高效的 encoder-decoder framework,並在其餘相似任務上作了驗證。函數
1. 方法:性能
1.1 問題定義:測試
咱們考慮 dense prediction task T, 輸入是 3維的 RGB image,輸出是 C 維的 one-hot segmentation mask,C 是等於類別數目的。咱們將從該輸入到對應輸出的函數,記爲 f,即:全卷積網絡結構。咱們假設 f 能夠進一步的分解爲兩個部分,即:e-表明 encoder,d-表明 decoder。咱們用預訓練的分類任務的模型來初始化 encoder e,另外,decoder d 部分,就是選擇訪問 encoder 的多個輸出,而後選擇利用哪些 operation 在這個上面進行對應的操做。優化
1.2 Search Space:spa
這裏做者着重關注 decoder 部分,該 decoder 能夠訪問 pre-trained encoder 的多個 layer,從而能夠得到多個不一樣分辨率的輸出。爲了使得采樣的結構緊湊,每個 encoder 的輸出會通過一個 1*1 convolution,獲得相同數目的 channel。咱們依賴於 RNN 模型,來序列的產生該利用的 layer 的索引 (produce pairs of indices of which layers to use) 以及在這些數據上利用什麼操做。特別的,這些操做的序列組合起來,獲得一個 cell(如圖1所示)。一樣的 cell 可是用不一樣的 weights,對採樣到的 layer 進行操做;兩個 cell 的輸出進行 sum。在 sampling pooling 以後添加 resultant layer。採樣的 layer 個數是由超參數控制的,文中設置爲 3,容許 controller (即 RNN)來恢復出該 encoder-decoder architecture,好比:FCN, RefineNet。全部的非採樣的加和輸出,都被組合起來,而後輸入到 1*1 卷積中,以進行降維。scala
做者使用了以下的 11 種操做,做爲搜索空間:設計
1.3 Search Strategy:
做者將 training set 劃分爲兩個不連續的集合,meta-train 以及 meta-val。meta-train 是用於訓練在特定任務上的 sampled architecture,meta-val 則是用於衡量 trained architecture 的性能,並提供給 controller 一個 scalar,在 DRL 中一般稱爲 reward 。給定採樣的序列,其 logarithmic probabilities 以及 reward signal, the controller 都用 PPO 進行優化。因此,本文的任務就有兩個訓練過程:
inner --- optimization of the sampled architecture on the given task,
outer --- optimization of the controller.
做者接下來對 inner 的過程進行了詳細的介紹。
1.4 Progressive Stages:
做者將 inner training process 分爲兩個階段:在第一個階段,固定住 the encoder weights,因此其輸出是能夠預先計算的,而後僅僅訓練 decoder 部分。這種策略能夠快速的更新 decoder 的權重,能夠對 sampled architecture 進行一個合理的性能評估。咱們探索了一個檢測的方法來決定是否繼續,在第二階段訓練 the sampled architecture。確切的說,當前 reward value 是和所看到的 running mean of rewards 相比較,若是大於平均值,咱們繼續訓練。不然,咱們以 1-p 的機率來終止訓練過程。機率 p 在搜索過程當中是從 0.9 漸變的(annealed)。
而這麼作的動機是:在第一個階段,雖然有些許噪聲,可是仍然能夠提供潛在的 sampled architecture 的合理預測。至少,他們提供了一個可靠地信號:the sampled architecture is non-promising, 當僅僅花費幾秒鐘在這個任務上。這種簡單的方法,在前期能夠鼓勵探索。
1.5 Fast training via Knowledge Distillation and Weights' Averaging:
對於語義分割任務來講,須要屢次的迭代纔可以收斂。經過用 pre-trained classification model 來初始化 encoder 部分能夠很大程度上緩解該問題,可是對於 decoder 來講,不存在這種 pre-trained model。做者探索了幾種其餘的策略,來加速收斂過程:
1). we keep track of the running average of the parameters during each stage and apply them before the final valivation.
2). we append an additional l2-loss term between the logits of the current architecture and a pre-trained teacher network.
這兩種方法的組合容許咱們接受一個很是可靠地分割模型的性能預測。
1.6 Intermediate Supervision via Auxiliary Cells:
做者添加了一個 輔助單元(auxiliary cell),該 cell 是和 main cell 相同的。同時,在訓練和測試階段,其也不影響 main classifier 的輸出,而僅僅對剩下的網絡提供更好的梯度。最終,每個採樣的網絡結構的獎勵,仍然由 main classifier 的輸出決定。爲了簡單起見,咱們僅僅在該輔助輸出上計算分割損失(segmentation loss)。中間監督的概念,並非很新,可是前人的工做僅依賴於輔助分類器,而本文做者首次將 decoder 的設計與輔助單元的設計相結合。
2. Experiments:
下面該 decoder 網絡結構就是做者搜索出來的,取得了很好的分割效果。
==