- 同步到知乎anchor_based-anchor_free object detectors
- 前言:最近關注了大量目標檢測的論文,比較火的就是anchor based和anchor free兩類問題;閱讀了很多知乎大佬的文章,記錄一些,方便以后學習,若有版權問題,可以刪除,謝謝!
anchor based 和 anchor free的問題
- Anchor-based 方法處理的尺度范圍雖小,但更精准;Anchor-free 方法覆蓋的尺度范圍較大,但檢測微小尺度的能力低下。
- Anchor-based 和 Anchor-free 方法的輸出在定位方式和置信度得分方面差異顯著,直接合並兩個輸出困難很大,具體原因如下:
- 其一,對於 Anchor-based 方法,ground truth IoU ≥ 0.5 的錨點將被視為正訓練樣本。可以發現,正負樣本的定義與邊界框回歸結果無關,這就導致 Anchor-based 分支每個錨點輸出的分類置信度實質上表示的是「錨點框住的區域是人臉」的置信度,而不是「網絡預測的回歸框內是人臉」的置信度。故而分類置信度很難評估網絡實際的定位精度。
- 其二,對於 Anchor-free 方法,網絡訓練方式類似於目標分割任務。輸出的特征圖以邊界框中心為圓心,半徑與邊界框尺度成比例的橢圓區域被定義為正樣本區域,特征圖其它位置(像素)被視為背景。通過這種方式,Anchor-free 分支的分類置信度得分實質為「該像素落在人臉上」的置信度,而且該分類置信度與定位的准確度的關聯同樣很弱。
- 總而言之,Anchor-based 方法和 Anchor-free 方法的分類置信度都與回歸定位精度關聯甚微,其置信度得分也分別代表着不同的含義。
- reference: 人臉檢測江湖的那些事兒——從曠視說起: 將兩個分支融合。
- anchor-based的算法的缺點:
- 對於每個預選框我們都要根據不同的任務去設置其參數,如長寬比,尺度大小,以及anchor的數量,這就造成了不同參數所導致的AP有很大的不同,同時調參耗時耗力。
- 產生的預選框在訓練階段要和真實框進行IOU的計算,這會占用很大的運行內存空間和時間。對於單階段算法來說,為了使其更為有效的檢測小目標,通常進行FPN結構以及使用更低的特征圖,這樣來說產生預選框的數量就會增加很多很多。
- 針對不同的任務,比如人臉識別和通用物體檢測,所有的參數都需要重新調節,這樣一個模型的遷移能力就體現不出來了
anchor based 和 anchor free方法
-
anchor based
- SSD
- RetinaNet
- Faster R-CNN
- 首先預設一組不同尺度不同位置的固定參考框,覆蓋幾乎所有位置和尺度,每個參考框負責檢測與其交並比大於閾值 (訓練預設值,常用0.5或0.7) 的目標,anchor技術將問題轉換為"這個固定參考框中有沒有認識的目標,目標框偏離參考框多遠",不再需要多尺度遍歷滑窗,真正實現了又好又快。
- anchor設計:anchor的密度,anchor的大小,anchor的形狀數量,檢測層Pn的數量,檢測層Pn的感受野
- 目標檢測中的Anchor: Faster RCNN+SSD+FPN+RetinaNet
- 錨框:Anchor box綜述
-
anchor free
- DenseBox
- UnitBox
- Yolov1
- CornerNet
- FSAF for Single-Shot Object Detection: 在RetinaNet基礎上添加了anchor free分支,然后根據instance監督,在FPN每一層學習anchor大小,根據IoU loss最小分配選擇對應anchor的特征;然后進行anchor based聯合訓練;GA-RPN方法直接學習特征圖上每個位置的anchor大小,沒有監督信息,思路上很insight,個人感覺是不是只在最后又監督信息,訓練難度是否要大些。參考:
Guided Anchoring 可以看做是 anchor-prior-free,但是整體框架保持與 anchor-based 一致,所以可以插入到現有的 anchor-based 的方法里面,性能提升也會稍微明顯一點。類似於在首先進行 anchor-free 的預測,然后以預測結果作為 anchor 進行進一步地修正。 - FoveaBox : 假設FPN中每一個層預測一定范圍內的bounding box,而每個特征金字塔都有一個basic area,即
32*32到512*512。但FoveaBox為了使每個層去響應特定的物體尺度,對每個金字塔層L 都計算一個有效范圍如下,其中用來控制這個尺度范圍。- 與DenseBox和UnitBox不同,FoveaBox並不是直接學習目標中心到四個邊的距離,而是去學習一個預測坐標與真實坐標的映射關系,假如真實框為 (x_1, y_1, x_2, y_2) ,我們目標就是學習一個映射關系 (t_{x_1}, t_{y_1}, t_{x_2}, t_{y_2});
- 接着使用簡單的L1損失來進行優化,其中為 z=\sqrt{S_l} 一個歸一化因子,將輸出空間映射到中心為1的空間,使得訓練穩定。最后使用log空間函數進行正則化。
- FoveaBox整體設計思路為anchor-free,不需要人為的去定義anchor的參數,但仍然需要手工的去設置參數,比如每層的area的范圍,以及正樣本區域的縮放因子的參數。總的來說還是不錯的,吸取了DenseBox的大量優點,也對其進行了優化。在預測坐標方面,不是單純的去預測一個distance,而是去學習一個映射Transform。
- 目標檢測:FoveaBox(2019)
- FCOS: FCNs的網絡在密集檢測例如語義分割任務都有很好的效果,那我們能不能用語義分割的思想逐像素點的來解決檢測問題呢?
- 存在一個問題,就是真實標簽的區域交疊問題,如果那個分割區域交疊了,那么交疊區域到底算是那個問題的呢?
- A.如果大尺度和小尺度的重疊,比如人和手中的蘋果,作者使用了FPN結構來在每一層加以限定,因為這兩者之間的尺度相差較大,文章中共有5個區間來限定[0,64][64,128]等等
- B.如果一個像素點在同一層落到了多個GT區域,這樣也會ambiguous。這是作者簡單的會使用最小區域來作為回歸目標
- It is worth noting that FCOS can leverage as many foreground samples as possible to train the regressor.
- Here l∗, t∗, r∗ and b∗ are the distances from the location to the four sides of the bounding box
- 借鑒了人體關鍵點檢測的思路來做detection:CornerNet,第一個貢獻是設計了一個針對top-left和bottom-right的heatmap,找出那些最有可能是top-left和bottom-right的點,並使用一個分支輸出embedding vector,幫助判斷top-left與bottom-right之間的匹配關系。第二個貢獻是提出了Corner Pooling,因為檢測任務的變化,傳統的Pooling方法並不是非常適用該網絡框架。
- ExtremeNet: 將角點檢測改為極值點檢測,更加穩定,最終在singe scale上是40.1%(不如CorNerNet),但是mult-scale上比CorNerNet高了1.1個點。
- 如何評價最新的兩篇基於point的目標檢測模型CenterNet?
- CenterNet: 精度高,核心思想是通過中心點抑制誤檢;使用Cascade Corner Pooling模塊提取圖像的Corner heatmaps,並采用與CornerNet中一樣的方法,根據左上角和右下角點,得到物體的bounding box;使用Center Pooling模塊,提取圖像的Center heatmap,根據Center map的得到所有的物體中心點。使用物體中心點對提取到的bounding box進行進一步過濾,如果box的中間區域沒有中心點存在,則認為此box不可靠。
- Objects as Points(CenterNet):速度快,出發點是用中心點做盡可能多的任務,基本上把中心點玩出了花,通過檢測中心點以及預測各種長寬和 offsets 不僅能做 2D detection,還能做 3D detection 還能做 pose estimation。不需要voting,也不需要nms。直接predict centers,然后(再)predict長寬。
- CornerNet-Lite:CornerNet-Lite,基於關鍵點的目標檢測算法;CornerNet-Saccade 是追求高准確率(mAP)的同時,盡可能提高速度(FPS);CornerNet-Squeeze 是追求高實時性(FPS)的同時,盡可能提高准確率(mAP)。
- 淺談Anchor-Free based目標檢測(一)
- 目標檢測:Anchor-Free時代
-
作者:MatthewHou;鏈接:https://www.zhihu.com/question/321205293/answer/662068880
-
最近的CVPR object detection部分, anchor-free大火特火. 基本上都逃不過15年的Densebox和18的CornerNet這兩篇文章的思路, 剩下的無非就是如何更高效的用點來表示一個box. Grid-RCNN用NxN個點來表示, ExtremeNet用四個極值點+一個中心點來表示, CenterNet用兩個角點+一個中心點來表示, Objects as Points(提出的框架也叫CenterNet)用一個中心點+長寬值來表示, FCOS用點+到框的四個距離來表示....你看這些anchor-free的文章, 精度高的也有, CenterNet更是在coco-testdev上刷到了47的AP, 速度快的也有, Objects as Points可以在保證41.6AP值的情況下達到35ms一幀(GPU Titan V下, 而且輸入是512*512). 所以感覺CornerNet-Lite出現的稍微晚了些, 基本上它能做的事情其它框架都可以做. (吐槽一下, 這幾篇文章真的大同小異, 如果可以把每篇文章的優點都結合起來, 再優化下, 說不定accurate/speed真的可以都提上去).
cascade 方法
- 定位精度:2018 WIDER Challenge Face Detection : Cascade R-CNN是最早通過做 Cascade 提升模型 Regression 能力的方法,將其移植到單步檢測器上。
- 實例分割的進階三級跳:從 Mask R-CNN 到 Hybrid Task Cascade: 將這種結構或者思想引入到實例分割中並不是一件直接而容易的事情,如果直接將 Mask R-CNN 和 Cascade R-CNN 結合起來,獲得的提升是有限的,需要更多地探索檢測和分割任務的關聯。
- Kong, T., Sun, F., Liu, H., Jiang, Y., & Shi, J. (2019). Consistent Optimization for Single-Shot Object Detection: 這篇工作其實最想做的是在One stage的框架內,實現了一個兩級的Cascade refinement。
