原論文:Auto-FPN: Automatic Network Architecture Adaptation for Object Detection Beyond Classificationhtml
以前的AutoML都是應用在圖像分類或者語言模型上,AutoFPN成功地將這技術應用到了目標檢測任務上。node
傳統two-stage目標檢測網絡結構
在介紹AutoFPN以前,首先大體介紹一下two-stage目標檢測網絡的結構組成。算法
- backbone:即用來提取圖像特徵的網絡結構,經常使用ResNet或VGG來提取特徵
- RPN(region proposal networks): 這個網絡的做用是在backbone提取獲得的特徵的基礎上進一步預測出若干個區域,好比faster-rcnn可能會生成2000個proposals,這些proposals中可能存在錯誤的或者存在些許誤差的,因此還須要進一步由後面的網絡處理
- RCNN (region CNN) head: 簡單理解就是針對生成的proposal區域作進一步的分類和位置迴歸。
AutoFPN
AutoFPN的創新點在後面兩個網絡中,以下圖示,主要是針對backbone的特徵先作自動fusion操做(Auto-fusion),另外就是對head網絡使用NAS技術搜索獲得一個網絡用於分類和迴歸(Auto-head)。網絡
Auto-fusion
Auto-fusion實際上是基於以前的一些工做的改進,以下圖示:ide
- 最開始SSD會對不一樣尺度的特徵圖作預測
- 以後FPN提出了自上而下的鏈接方式,將不一樣尺度的特徵圖信息進行結合
- PANet經過直接將最底層的特徵與最高層的特徵圖進行鏈接,進一步加強特徵圖之間的聯繫
- Auto-fusion則是經過搜索網絡結構來讓算法自動找到不一樣層之間最合適的鏈接方式。
Auto-fusion搜索方法設計考慮的有以下兩個方面:性能
- 搜索空間覆蓋全部的鏈接方式
- 由於在TridenNet中使用dilated conv獲得了不錯的效果,因此不一樣大小的dilated conv加入到了搜索空間中去。搜索空間以下:
- no connection (none)
- skip connection (identity)
- 3×3 dilated conv with rate 2
- 5×5 dilated conv with rate 2
- 3×3 dilated conv with rate 3
- 5×5 dilated conv with rate 3
- 3×3 depthwise-separable conv
- 5×5 depthwise-separable conv
下面結合上圖介紹Auto-fusion結構的表示方式。url
對於backbone提取的4個特徵圖咱們用${P^0_1,P^0_2,P^0_3,P^0_4}$表示,$P^0_4$表示第0層的第4個特徵圖,其高寬都比原圖的小4倍。那麼若是Auto-fusion結構一共有$L$層,則第$l$層的特徵圖可表示爲$P^l_1,P^l_2,P^l_3,P^l_4$。第$l-1$層的$i$節點到第$l$層的$j$節點的operation可表示爲(這裏若是不明白先了解一下DARTS這篇論文):spa
$$ \begin{array}{c}{\hat{O}{i \rightarrow j}\left(P{j}^{l-1}\right)=\sum_{O^{k} \in \mathcal{O}{N}} \alpha{i \rightarrow j}^{k l} O_{i \rightarrow j}^{k l}\left(P_{j}^{l-1}\right)} \ {\text { where } \sum_{k=1}^{\left|O_{N}\right|} \alpha_{i \rightarrow j}^{k l}=1, \text { and } \alpha_{i \rightarrow j}^{k l} \geq 0}\end{array} $$.net
下圖給出了Auto-fusion某一層的示意圖,能夠看到由於要使得不一樣尺度的特徵圖能作融合操做,首先都會用conv 1*1的操做,然後再計算不一樣operation的權重。設計
Auto-fusion對於one-stage和two-stage目標檢測網絡都適用。
Auto-head
Auto-head其實簡單理解就是和DARTS同樣搜索獲得一個CNN結構,示意圖以下
不過有以下幾個方面做了修改,有必要提一下:
- Auto-head由$M$個cell組成,每一個cell由7個nodes組成。每一個cell有兩個inputs,分別是前一個和前前一個cell的outputs。
- 在DARTS中,最後有兩類cell,分別是normal cell和reduction cell。而在Auto-head中每一個cell的結構能夠不同,也就是說Auto-head能夠由$M$個不一樣的cell組成
- Auto-head中沒有使用reduction cell,由於到了這一步特徵圖大小已經很小了(如7*7)
- 同上,涉及到卷積的操做也不用dilated conv了,可是爲了更好地提取特徵,在每一個operation後面還會加上3*3和5*5的卷積操做。
Resource constraint
AutoFPN還加入了資源約束,這樣既能夠避免生成的模型過大,也可以加速搜索和訓練過程。很直觀的一種想法是將forward時間做爲約束條件,可是測得的forward時間相對於模型參數並非可微的,因此考慮以下三個方面來對資源約束建模:
- 模型大小
- FLOPs
- memory access cost (MAC)
公示表示以下:
$$ C(\alpha, \beta)=\sum_{i, j, k, l} \alpha_{i \rightarrow j}^{k l} C\left(O_{i \rightarrow j}^{k l}\right)+\sum_{i, j, k} \beta_{i \rightarrow i}^{k} C\left(O_{i \rightarrow j}^{k}\right) $$
那麼總的loss表達式以下:
$$ \mathcal{L}(w, \alpha, \beta)=\mathcal{L}_{m o d e l}(w, \alpha, \beta)+\lambda C(\alpha, \beta) $$
其中$\alpha$表示模型參數,即咱們常說的卷積核參數或者全鏈接層參數等,$\beta$表示模型結構參數,即記錄了不一樣operation的權重。值得一提的是$\lambda$這個參數,由於經過修改這個參數的大小,咱們可以控制模型的相對大小,例如若是咱們令$\lambda$比較大,那麼最終獲得的網絡大小就會相對小一些,反之則大一些。在論文中,給出了三個等級的效果,具體結果看下一節。
實驗結果
Auto-fusion和Auto-head搜索結果
下圖給出了Auto-fusion和Auto-head搜索結果,能夠看到identity和conv_5*5在兩個結構中用的最多。
不一樣大小模型的結果對比
按照文中的說法是分別Auto-fusion和Auto-head是分別進行搜索的,因此最後的AutoFPN是將兩者最好的結果進行組合獲得的。能夠看到在不一樣的數據集上搜索獲得的網絡結構更小,並且結果也能更好。
不過我看這結果有幾個疑問,就是結果的提高到底算不算顯著呢?結構的提高有多少實際上是煉丹煉出來而不是搜網絡結構搜出來的呢?ε=(´ο`*)))唉
NAS baseline比較結果
最後文中還給出了不一樣搜索策略的結果對比,能夠看到基於梯度降低的效果仍是很不錯的。
訓練tricks大放送
做者很良心給出了5個訓練技巧:
- 先訓練初始化結構一段時間,而後再開始搜索網絡結構:Starting optimizing architecture parameters in the middle of training can improve the results by 1%;
- 在搜索階段固定backbone參數:Freezing the backbone parameters during searching not only accelerates the training but also improves the performance;
- 搜錯階段不要用BN:Searching with BN will decrease the performance by 1.7%;
- 在搜索head結構時,最好使用訓練好的neck結構:During searching for the head, loading the pretrained neck will boost the performance by 2.9%;
- 大模型對neck部分性能有些許提高,可是對head好像並無:Without resource constraints, our method becomes larger with only a small im- provement in neck but no improvement in head.
<footer style="color:white;;background-color:rgb(24,24,24);padding:10px;border-radius:10px;"><br> <h3 style="text-align:center;color:tomato;font-size:16px;" id="autoid-2-0-0"><br> <b>MARSGGBO</b><b style="color:white;"><span style="font-size:25px;">♥</span>原創</b><br> <br><br> <br><br> <b style="color:white;"><br> 2019-12-3<p></p> </b><p><b style="color:white;"></b><br> </p></h3><br> </footer>