【水文2】從自己的工作經驗思考:Anchor Free 方法的重新出現
之前自己所做的檢測工作也經歷一個從直接預測到選擇加入 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