anchor_based-anchor_free object detectors


  • 同步到知乎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 方法


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM