Anchor-free系列之FSAF

Feature Selective Anchor-Free Module for Single-Shot Object Detection(CVPR2019)

文章來自卡內基梅隆CMU,是針對單階段目標檢測算法的優化。

一、Motivation

在目標檢測任務中,物體的多尺度信息一直是難點和痛點, 目前為止主要是從網絡結構設計、損失函數、訓練方式等方面去緩解尺度帶來的煩惱,特別是小物體檢測,至今沒有一個好的解決方案。

CNN的低層的特徵語義信息比較少,但是目標位置準確;高層的特徵語義信息比較豐富,但是目標位置比較粗略。Feature Pyramid Network(FPN)利用多級的特徵圖去預測不同尺度大小的物體,其中高層特徵帶有高級語義信息和較大的感受野,適合檢測大物體,而淺層特徵帶有低級的細節語義信息和較小的感受野,適合檢測小物體。FPN逐步融合深層特和淺層特徵,使得逐步增加淺層的特徵的高級語義信息來提高特徵表達能力,提升檢測效果,已經成為目標檢測領域的標配。

但是FPN有一個隱藏問題:如何選擇合適feature map負責檢測物體?

比如在two-stage裡面,會有RoI pooling,將物體對應的特徵區域摳出來送入不同分支完成分類和位置迴歸。Faster R-CNN用的是RoI pooling,Mask R-CNN用的是RoIAlign,這個地方改進是為了解決pooling操作帶來的misalignment問題,但不是本文關注的重點。本文關注的是如何“合理”地選擇feature來檢測物體,並且針對的是single-stage這一類模型。

single-stage模型中,定義了一系列稠密的均勻分佈的anchor,這些anchor會根據其不同的尺寸大小和不同的feature map聯繫起來。在FPN的backbone中,高層的feature map分辨率高,得到的anchor數量多尺寸小,淺層的feature map分辨率低,得到的anchor數量少尺寸大,anchor的生成是根據feature map不同而定義的。在anchor 匹配gt階段確定gt歸屬於哪些anchor,這個過程隱式的決定了gt會由哪層feature map負責預測。不管是生成anchor還是gt match 過程,都是由size這個變量決定, 這樣的設計作者認為它是 heuristic 的,可能會使得選擇的特徵不是最優的,從而影響檢測器的性能。那麼何不讓模型自動學習選擇合適的feature 去做預測呢?

二、Method---FSAF( Feature Selective Anchor-Free Module)

很明顯,要想取代上述的分配方式,那麼“把 FPN 上所有層的所有 anchor 和 ground-truth 計算 IoU”這一步就不能有。因此作者提出了一個 anchor-free 的 module,稱為 FSAF。FSAF模塊讓每個instance自動的選擇最合適的feature,在這個模塊中,anchor box的大小不再決定選擇哪些feature進行預測,也就是說anchor (instance) size成為了一個無關的變量,這也就是anchor-free的由來。因此,feature 選擇的依據有原來的instance size變成了instance content,實現了模型自動化學習選擇feature。

1、無錨點特徵選擇模塊:

Anchor-free系列之FSAF

Anchor-free系列之FSAF

文章提出的FSAF以RetinaNet為主體結構,添加一個FSAF分支和原來的classification subnet、regression subnet並行,在不改變原有結構的基礎上實現完全的end-to-end training,特別是,FSAF還可以集成到其他single-stage模型中,比如SSD、DSSD等。

2、anchor -free branch怎麼實現不借助anchor檢測物體?

諸如 CornerNet、CenterNet、ExtremeNet 等不借助 anchor 去檢測的方法已經層出不窮。FSAF採用了一個更加簡單的方法實現anchor free detection: 在 RetinaNet 的 box 和 cls 分支上僅僅各加了一層 conv layer,分別生成一個 W × H × K classification output 和一個 W × H × 4 的 regression output,

Anchor-free系列之FSAF

其中 K 是類別數量,classification output 的 每一個 pixel 就表示這個位置應該是什麼類別,它的標籤可以通過 ground-truth 投影計算,並且設置一定的比例後得到。在 instance 的 0.2 倍 box 內為目標區域,提供的標籤即為“車”這個 class id;在 0.5 倍 box 內為可忽略區域;其他都設為無目標區域。

對於分類任務來說,將ground-truth map分成了三種情況:存在目標區域、可忽略區域、無目標區域。無錨分支的總分類損失是所有非忽略區域的Focal Loss之和,根據所有有效框區域內的像素總數歸一化。對於迴歸任務來說,就是預測4個位置偏移量映射。無錨分支的總迴歸損失是所有有效區域上IoU損失的平均值。

3、Online Feature Selection

為了找到最佳的特徵層級,FSAF模塊根據目標內容來選擇,而不像基於錨點的方法那樣採用目標邊界框的大小來分配層級。在線選擇特徵的過程如下圖所示。

Anchor-free系列之FSAF

選擇過程如下:

每個feature level計算classification loss和box regression loss:

Anchor-free系列之FSAF

所有feature level中選擇loss最小的作為梯度反傳。

  • 在訓練時,anchor-free與 anchor-based 的分支進行加權訓練,通過 λ = 0.5 進行權衡。每個anchor通過FPN各卷積層,經過anchor-free計算focal loss和IoU loss,最佳的pyramid level通過最小化focal loss和IoU loss實現。
  • 在推斷時, FSAF可以單獨作為一個分支輸出預測結果,也可以和原來的anchor-based分支同時輸出預測結果。兩者都存在時,兩個分支的輸出結果merge然後NMS得到最後預測結果。

4、實驗

作者通過消融分析了anchor-free的必要性,online feature selection的重要性,以及選擇的feature level是不是最優的。同時還指出FSAF非常robust和efficient,在多種backbone條件下,都有穩定的漲點。在ResNext-101中,FSAF超過anchor-based1.2個點,同時快了68ms,在AB+FSAF情況下,超過RetinaNet1.8個點,只慢了6ms,效果也是非常顯著的。

Anchor-free系列之FSAF

Anchor-free系列之FSAF

消融實驗結果顯示的幾個規律:

僅僅使用無錨點分支只能取得不錯的結果,當使用無錨點分支和基於錨點的分支聯合檢測的時候,性能才能得到SOT的水平;

FSAF模塊可以更好地發現具有挑戰性的目標;

在線特徵選擇對於無錨點分支和基於錨點分支一起工作才是至關重要的;

在不同骨幹網絡上都能起到改善作用證明了FSAF模塊的魯棒性和高效性。

三、總結

1、文章從feature selection角度設計了新的FSAF module來提升性能,從loss角度來看,提升了梯度反傳的效率,只更新特定scale內物體對應的梯度。但作者有一點還未給出實驗以證明:關於有效區域和忽略區域的比例是不是應該再分析一下,感覺對實驗結果是有影響的。


2、論文提出的anchor-free,是說不在根據anchor size提取特徵,而是根據FSAF模塊自動選擇合適的feature,既anchor (instance) size成為了一個無關的變量。不是說不在使用anchor的方式。

3、FSAF可以集成到其他single-stage模型中,比如SSD、DSSD等。


分享到:


相關文章: