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 方法

相關文章
相關標籤/搜索