目標檢測中的anchor-based 和anchor free
1. anchor-free 和 anchor-based 區別
深度學習目標檢測通常都被建模成對一些候選區域進行分類和回歸的問題。在單階段檢測器中,這些候選區域就是通過滑窗方式產生的 anchor;在兩階段檢測器中,候選區域是 RPN 生成的 proposal,但是 RPN 本身仍然是對滑窗方式產生的 anchor 進行分類和回歸。
anchor-free是通過另外一種手段來解決檢測問題的。同樣分為兩個子問題,即確定物體中心和對四條邊框的預測。預測物體中心時,將中心預測融入到類別預測的 target 里面,也可以預測一個 soft 的 centerness score。對於四條邊框的預測,則比較一致,都是預測該像素點到 ground truth 框的四條邊距離,不過會使用一些 trick 來限制 regress 的范圍。
2. anchor-free類算法歸納
A.基於多關鍵點聯合表達的方法
a.CornerNet/CornerNet-lite:左上角點+右下角點
b.ExtremeNet:上下左右4個極值點+中心點
c.CenterNet:Keypoint Triplets for Object Detection:左上角點+右下角點+中心點
d.RepPoints:9個學習到的自適應跳動的采樣點
e.FoveaBox:中心點+左上角點+右下角點
f.PLN:4個角點+中心點
B.基於單中心點預測的方法
a.CenterNet:Objects as Points:中心點+寬度+高度
b.CSP:中心點+高度(作者預設了目標寬高比固定,根據高度計算出寬度)
c.FCOS:中心點+到框的2個距離
3. 為什么 anchor-free 能卷土重來
anchor-free 的方法能夠在精度上媲美 anchor-based 的方法,最大的功勞我覺得應該歸於 FPN,其次歸於 Focal Loss。(內心OS:RetinaNet 賽高)。在每個位置只預測一個框的情況下,FPN 的結構對尺度起到了很好的彌補,FocalLoss 則是對中心區域的預測有很大幫助。當然把方法調 work 並不是這么容易的事情,相信有些細節會有很大影響,例如對重疊區域的處理,對回歸范圍的限制,如何將 target assign 給不同的 FPN level,head 是否 share 參數等等。
4. anchor-free 和 single anchor
上面提到的 anchor-free 和每個位置有一個正方形 anchor 在形式上可以是等價的,也就是利用 FCN 的結構對 feature map 的每個位置預測一個框(包括位置和類別)。但 anchor-free 仍然是有意義的,我們也可以稱之為 anchor-prior-free。另外這兩者雖然形式上等價,但是實際操作中還是有區別的。在 anchor-based 的方法中,雖然每個位置可能
只有一個 anchor,但預測的對象是基於這個 anchor 來匹配的,而在 anchor-free 的方法中,通常是基於這個點來匹配的。
3. anchor-free 的局限性
雖然上面幾種方法的精度都能夠與 RetinaNet 相媲美,但也沒有明顯優勢(或許速度上有),離兩階段和級聯方法相差仍然較遠。和 anchor-based 的單階段檢測器一樣,instance-level 的 feature representation 是不如兩階段檢測器的,在 head 上面的花樣也會比較少一些。順便吐槽一下,上面的少數 paper 為了達到更好看的結果,在實驗上隱藏了一些細節或者有一些不公平的比較。
6. 目標檢測算法一般可分為anchor-based、anchor-free、兩者融合類,區別就在於有沒有利用anchor提取候選目標框。
A. anchor-based類算法代表是fasterRCNN、SSD、YoloV2/V3等。
fasterRCNN-設置了3種尺度3種寬高ratio一共9個anchor提取候選框
B. anchor-free類算法代表是CornerNet、ExtremeNet、CenterNet、FCOS等。
CornerNet-直接預測每個點是左上、右下角點的概率,通過左上右下角點配對提取目標框
C.融合anchor-based和anchor-free分支的方法:FSAF、SFace、GA-RPN等。
FSAF-既有根據先驗設定的anchor-based分支,也有anchor-free分支增強對異常ratio目標的檢測能力
7. anchor(也被稱為anchor box)是在訓練之前,在訓練集上利用k-means等方法聚類出來的一組矩形框,代表數據集中目標主要分布的長寬尺度。在推理時生成的特征圖上由這些anchor滑動提取n個候選矩形框再做進一步的分類和回歸(詳細敘述請參考提出anchor思想的fasterRCNN一文)。也就是傳統目標檢測算法中,在圖像金字塔上使用的那個m*n的滑窗。只不過傳統方法中特征圖是不同尺度的,滑窗一般是固定大小的;而類似於fasterRCNN算法中特征圖是固定的,anchor是多尺度的。
三種典型的目標檢測框架流程圖
8. Yolo算法一共有三個版本,YoloV1可以算作anchor-free類;YoloV2開始引入anchor,YoloV3也使用了anchor。