1 anchor-based
深度學習目標檢測通常都被建模成對一些候選區域進行分類和回歸的問題。在單階段檢測器中,這些候選區域就是通過滑窗方式產生的 anchor;在兩階段檢測器中,候選區域是 RPN 生成的 proposal,但是 RPN 本身仍然是對滑窗方式產生的 anchor 進行分類和回歸。
基于Anchor based 的目標檢測
- 二階段目標檢測算法: Faster RCNN、Mask RCNN、Cascade RCNN
?- 在特征圖的每一個點生成大小比例不一的anchor,然后通過RPN對anchor進行篩選 - 單階段目標檢測算法: YOLO V2~V4、SSD、RetinaNet
?- 把原圖分為若干個網格,然后通過聚類的方法,每個網格當中得到不同尺寸的anchor,然后再和真實框做一個IOU的比較,得到訓練目標
2 anchor-free
anchor-free是通過另外一種手段來解決檢測問題的。同樣分為兩個子問題,即確定物體中心和對四條邊框的預測。預測物體中心時,將中心預測融入到類別預測的 target 里面,也可以預測一個 soft 的 centerness score。對于四條邊框的預測,則比較一致,都是預測該像素點到 ground truth 框的四條邊距離,不過會使用一些 trick 來限制 regress 的范圍。
基于Anchor free 的目標檢測
-
關鍵點檢測方法
- (1)CornerNet: 通過檢測對角(左上、右下)代替anchor box 和 corner pooling layer更好的定位對角,然后組合。
- (2)ExtremeNet: 對CornerNet算法的改進,通過串聯多個Hourglass模塊對每個目標預測5個關鍵點(上、下、左、右四個極點和一個中心點),然后組合。
-
通過目標物體的中心點來定位
- (1) CenterNet和FCOS: 通過預測物體中心點及其到邊框的距離來表征目標框
- (1) CenterNet和FCOS: 通過預測物體中心點及其到邊框的距離來表征目標框
3 Anchor free 和 Anchor base 的區別
(1)分類方式不同 : 正負樣本的選擇方式(核心區別)
- Anchor based: 如RetinaNet基于anchor的回歸,首先計算來自不同尺度的anchor box與gt的IoU來確定正負樣本;對于每個目標在所有IoU大于閾值k的anchor box中,選擇最大的作為正樣本,所有IoU小于閾值q的anchor box作為負樣本,其余忽略不計;最后針對正樣本的anchor回歸相對偏移量
- Anchor free: 如FCOS基于center做回歸,使用空間和尺度約束將anchor點分配到不同尺度上,通過判斷特征圖上的點是否落入gt中來確認正負樣本,即將物體邊框內的所有位置都定義為正樣本;最后通過4個距離值和1個 中心點的分數來檢測物體。
(2)回歸方式不同:基于anchor還是point做回歸
如圖(b)RetinaNet回歸的是anchor box和gt的4個偏移量。
如圖(c)FCOS回歸的是中心點到目標四條邊的距離。
4 優缺點
anchor-based
anchor based的優點是可以產生密集的anchor box,使得網絡可以直接進行目標分類和邊界框回歸,提高了目標召回能力,尤其對小目標檢測有明顯的提升。
anchor based的缺點是需要設定很多超參數,如尺度、長寬比等,這些參數很難設計,并且會影響檢測性能。另外,anchor based的方法也會產生很多冗余的框,增加了計算量和內存消耗。
anchor-free
anchor free的優點是不需要預設anchor,只需要對不同尺度的特征圖的目標中心點和寬高進行回歸,減少了耗時和算力。同時,anchor free的方法也可以避免一些由于anchor設置不合理導致的漏檢或重復檢測問題。
anchor free的缺點是由于每個位置只預測一個框,可能會導致一些重疊或遮擋區域無法被檢測到。另外,anchor free的方法也需要一些特殊的損失函數或結構來提高精度和穩定性。