之前自己所做的檢測工作也經歷一個從直接預測到選擇加入 anchor 的過程。從 Two-stage -> One-Stage -> Two-stage 的技術傾向。

顯然這些選擇不會是心血來潮,也都有我們自己的理由,所以總結思考一下。

Anchor-free or Not?

最近一段時間裡,出現了很多針對目標檢測中的 anchor 方法的反思,有些是拋棄,有些是改進。

比如:

CornerNet -> CenterNet -> ExtremeNet 透過畫素分類(Segmentation)

預測關鍵點

的方法來組織一個bbox

FCOS,FoveaBox 這一類

直接回歸邊界

,這個在 YOLOv1 還有更早之前的各種 One-stage 方法上都被廣泛使用,也是 One-stage 的傳統方法

Guided Anchor 這種嘗試自適應的學習 anchor,類似的,雖然是 anchor-free 但是也是希望更加平滑的根據目標特點來分配尺度:

Feature Selective Anchor-Free Module for Single-Shot Object Detection

1。 Anchor的意義

從自己的工作經驗上來回答 anchor 的好處的話,那麼就是下面的兩點:

容易收斂,降低訓練難度

容易對應目標大小與對應feature map

第一點

不使用 anchor 的情況,boundingbox 迴歸的範圍比較大。只要是不使用 anchor 直接回歸 bbox 的方法,都繞不開這個問題。

這個問題會帶來訓練難度的增加和網路偏好的傾斜:

bbox 迴歸範圍大,會讓計算的 loss 範圍變化很大,而且對大小目標的精度有不同的偏好。

前者會破壞訓練的穩定,後者會讓目標預測不準確。

如果看回歸方法 anchor-free 的論文,都會提到如何緩解這個問題(不論是幾年前的,還是現在新出的),一般的套路:

使用相對值,而非畫素值

Log、Sqrt這類非線性的轉換

IoU Loss 一類,讓偏好更加平衡

使用 anchor 是另外一種緩解這個問題的方法:

anchor 給了迴歸的一個基點,不論大目標、小目標,相對 anchor 的變換範圍都是接近的,這就把迴歸值範圍過大的問題解決掉了。

第二點

在沒有FPN的時代,或者由於效能問題放棄FPN接面構的時候,大小目標都是依賴少數幾個level 的 featuremap 來預測的。

如果不對大小做區分,會造成一個結果:

不同 level 的 featuremap 負責預測的目標大小是不太可控的。

這樣學習過程中不是顯式的區分不同的特徵,而是希望網路權值能夠適應性的學習到不同大小目標的特徵。這個路子在理論上當然沒有問題,但是實際訓練中,增加了訓練難度,也可能是強“網”所難。

有了 anchor,就可以把不同尺寸的目標分配到對應的 anchor 上,這樣對應 anchor 的網路權值就僅僅負責一個比較小的目標尺寸範圍,同時學習過程中,是顯式的透過不同的分支、路徑來傳遞不同尺寸目標的 loss,讓網路更加符合“邏輯”的得到訓練。

以上這兩點,就是我們之前的檢測工作加入 anchor 方法的原因。

2。 Anchor可能的兩個問題

第一,Anchor的分配是 0-1 的硬指標

目標分配在哪個 anchor 上是很粗暴的(誰IoU大就歸誰),而且是一個0-1的選擇。另外 anchor 本身的尺寸、比例是人工指定的,雖然和不同level的featuremap有一定的關係,但並沒有和網路結構的設計有良好的耦合(雖然 anchor 可以透過資料集的聚類來獲得,但是這也只是單方面的與資料集有了耦合)。

實際訓練中,可能同一個目標適合兩個 anchor ,那麼在 loss 的設計上就需要考慮孰輕孰重的問題。對應的兩個 anchor 計算的 loss,是不是可以用一種更加平滑的方法來加權,而非簡單粗暴的0-1選擇?

Anchor 本身的設計,是不是可以透過 網路結構+資料分佈 兩個因素在訓練中也可以不斷更新變化?

第二,Anchor的非平滑

Anchor 可以理解為針對目標大小的離散劃分,將不同大小的目標放入到不同的桶裡面。而且,這些桶是先驗+固定的。

這帶來的問題是:

anchor 打斷了目標大小預測上的平滑。

從訓練的角度來看,都希望能夠有一個

更加平滑的預測,從經驗上看,可以增加網路的泛化效能

當然,即使現在的 anchor-free 的方法,也由於不同的 featuremap level,再另外一個維度上帶來了類似的打斷問題:

很多 anchor-free 的方法在 featuremap level 的選擇也使用人工先驗。

FSAF這篇論文給了一個根據loss大小選擇不同featuremap level的方法,或許未來會有更加平滑、模糊的 featuremap level 的分配方法。

3。 Anchor-free的前提條件

Anchor-free變得具有競爭性的原因在我看看來就是一個:

FPN 或者類似網路結構帶來的多尺度的 feature map 讓 anchor-free 重新具備了競爭力

在這樣的前提下,是否需要anchor變得相對不重要,不過即使目前的 anchor-free 也需要解決沒有 anchor 帶來的迴歸範圍變化太大的問題,怎麼設計 loss 和控制預測值的範圍?

以及,怎樣更加合理的分配目標大小與 featuremap 對應的問題(事實上就是卷積網路的 receptive field 與資料的對應)。

4。 Refs

CornerNet: Detecting Objects as Paired Keypoints

CenterNet: Keypoint Triplets for Object Detection

Bottom-up Object Detection by Grouping Extreme and Center Points

FoveaBox: Beyond Anchor-based Object Detector

FCOS: Fully Convolutional One-Stage Object Detection

Region Proposal by Guided Anchoring

Feature Selective Anchor-Free Module for Single-Shot Object Detection