NAS Definition
- 基於搜索策略,並結合約束條件 (如accuracy、latency),在搜索空間內 (set of candidate operations or blocks)探索最優網絡結構、或組件結構 (如detector的backbone、FPN);
- 高效的NAS算法,通常是Trade-off between data-driven and experience-driven,data-driven實現高效率、自動化搜索,experience-driven減小搜索空間、降低過擬合;
- Proxy task: 評估搜索結果 (searched architecture);
NAS-FCOS: Fast Neural Architecture Search for Object Detection
- GitHub (PyTorch): https://github.com/Lausannen/NAS-FCOS
- Related work:
- NAS-FPN: https://github.com/DetectionTeamUCAS/NAS_FPN_Tensorflow
- FCOS: https://github.com/tianzhi0549/FCOS
- Per-pixel prediction in bbox without prior anchors,類似於EAST OCR檢測;
- Multi-level prediction (FPN),消除bbox重疊區域內的ambiguity;
- Center-ness for filtering out the low-quality bboxes;
- Motivation:
- 爲one-stage anchor-free detector (well known FCOS)搜索FPN與detection head:
- 如何從backbone選取特徵,並如何構造FPN、輸出multi-level features;
- 當FPN features共享同一個head時,如何確定head的結構;
- 爲one-stage anchor-free detector (well known FCOS)搜索FPN與detection head:
- Search Space:
- 將FCOS視作encoder-decoder架構,backbone表示encoder,FPN與head表示decoder;
- FPN由一系列basic block (bbt)構成,對backbone提取特徵C={C2, C3, C4, C5}、以及bbt輸出特徵執行merge操作:
- basic block (bbt)基本結構:
- candidate ops(搜索空間):
- aggregation包括element-wise sum與concat+conv(搜索空間);
- high-level low resolution feature通過bilinear interpolation完成上採樣;
- 連續實施7次bbt,最後三個bbt輸出的features,作爲FPN的P3、P4與P5;對於沒有被使用的融合特徵,累加到P3、P4與P5;P5再通過後續兩次降採樣獲得P6與P7;
- Head由連續6個Convolution構成,candidate ops除包含FPN ops之外,也包括基本的1x1與3x3 conv(搜索空間);用Group Norm替換Batch Norm;
- Search Strategy:
- 將train-set劃分爲meta-train與meta-val,分別訓練與評估搜索的architecture;
- 採用漸進式策略,先搜索FPN,再搜索head,減輕搜索負擔;
- 搜索、訓練時,固定backbone,並預先緩存backbone輸出特徵C,提高搜索效率;
- 以LSTM-based controller作爲predictor,以當前配置序列與reward作爲輸入,優化訓練predictor;predictor輸出下一時刻的架構配置;具體參考:
- Fast Neural Architecture Search of Compact Semantic Segmentation Models via Auxiliary Cells;
- GitHub (PyTorch): https://github.com/DrSleep/nas-segm-pytorch
- Evaluation metric:採用negative loss sum替代AP,作爲reward,節省AP計算時間:
- 搜索結果:
- 結構示例:
- AP on COCO:
- Search time:~4 days using 8 V100 GPUs;
DetNAS: Backbone Search for Object Detection
- GitHub (PyTorch): https://github.com/megvii-model/DetNAS
- GitHub (PyTorch): https://github.com/megvii-model/ShuffleNet-Series/tree/master/DetNAS
- Related Work:
- 目前的NAS主要針對ImageNet分類網絡;基本方法包括RL-based (NASNet, MNASNet)、Gradient-based (DARTS)與Evolutionary-based等;
- 目標檢測網絡的訓練方法:
- ImageNet預訓練基礎網絡;然後遷移至目標檢模型作爲backbone,確保特徵提取能力:
- 預訓練尺度與目標檢測尺度最好能適配,具體可參考SNIP (An Analysis of Scale Invariance in Object Detection):https://arxiv.org/abs/1711.08189
- 或者直接在目標檢測數據集上train from scratch:
- 通常需要在較大規模的dataset(如COCO)上訓更多的epoches,小規模檢測集無法確保特徵提取能力(如VOC);
- 訓練圖片較大的情況下,Batch size通常比較小,需要採用sync-BN或group-norm;
- ImageNet預訓練基礎網絡;然後遷移至目標檢模型作爲backbone,確保特徵提取能力:
- New Method for Backbone Search:
- 避免了ImageNet上NAS、以及ImageNet預訓練的costly過程,具體包括如下三個步驟(總體爲one-shot NAS策略):
- Step-1:首先在ImageNet上訓練SuperNet(包含了所有可選的candidate subnet);採用path-wise方式,每次迭代只選中一個network path用於forward/backward;
- Step-2:以SuperNet爲backbone,在目標檢測任務上fine-tuning;同樣採用path-wise策略;且使用SyncBN,跨GPU完成BN,確保BN的精度;
- Step-3:採用遺傳算法完成best-backbone的搜索;需要從訓練集採樣500張圖片,重新統計sub-net的BN層的running mean/variance;
- SuperNet的架構(搜索空間):
- 如表1所示,包括large與small兩種搜索結構,都包含5個stage;
- c1/c2、n1/n2表示每個stage的通道數與block數;
- 除第0個stage外,large的第1、2、3、4個stage包含的building block數分別爲8、8、16、8;small則是4、4、8、4;
- 基本building block爲shuffenet-v2 block;除第0個stage外,每個stage的第一個block負責降採樣(stride=2);
- 可搜索參數爲kernel size(3、5、7或xception);在SuperNet預訓練時,這四個參數對應的block並排放置,在每個train iteration隨機選中其中一個block,用以構造特定的network path;
- large與small的搜索空間大小分別爲4^40與4^20;
- Evolutionary Search:
- 完成SuperNet的ImageNet預訓練、與檢測集上的fine-tuning之後,隨機選定一組subnet集合(滿足約束條件,FLOPS低於閾值);
- 然後在驗證集上評估每個subnet,以AP作爲fitness(以COCO爲例);
- 選擇Top-P個subnets用於mutation與crossover,且各佔一半用於生成next generation:
- crossover:每個block從兩個parents中隨機選擇(相同block位置);
- mutation:每個block隨機替換爲supernet中的一個(相同block位置);
- 生成next generation subnets需要滿足約束條件(FLOPS或inference speed);
- 上述過程迭代指定步驟,最終獲得best backbone;
- 相比較而言,RL方法需要仔細設計reward,gradient方法需要精心設計loss function;
- 實驗結果:
- 避免了ImageNet上NAS、以及ImageNet預訓練的costly過程,具體包括如下三個步驟(總體爲one-shot NAS策略):
XNAS: Neural Architecture Search with Expert Advice
- DARTS:
- GitHub (PyTorch):https://github.com/quark0/darts
- GitHub (TensorFlow): https://github.com/NeroLoh/darts-tensorflow
- XNAS:
- GitHub (PyTorch): https://github.com/NivNayman/XNAS
- 基於Prediction with Expert Advice (PEA),將NAS看成在線選擇任務 (online selection task);
- 將DARTS的搜索空間 (candidate operations),看成多個單獨的expert子空間;
- 結合指數化梯度 (Exponentiated Gradient)和Wipe-out機制,有效緩解Hard pruning,同時逐步減小搜索空間 (平滑過渡),可進一步簡化問題複雜度、並降低過擬合;
- 允許不同的expert group設置不同的learning rate (multi learning rates);
- 有向無環圖 (directed acyclic graph):
- 實驗結果: