昨天介紹完YOLO,
今天再介紹一篇Object Detection的論文CornerNet。
目前深度學習方法分為兩類:one-stage和two-stage,
two-stage的方法,例如RCNN系列,
通常會先提取region proposals找出物體候選框,
再根據候選框去分類,得到最後的結果,精確度比較高。
而one-stage方法就是將兩步驟合併,直接預測物體的位置還有類別,所以它的速度通常比two-stage快,
目前主流的方法YOLO, SSD都會用到Anchor Box,就是事先定義好框的大小和比例,再去預測offeset修正,算出物體的BBOX。
但是Anchor Boxes方法有幾個缺點,
第一,需要很大量的Anchor Box,才能確保覆蓋所有的GT,IoU才不會太低,
而且這會導致訓練時的Positive比例很低,因為假設設定9個Anchor,
可能只有1個能當postive,會導致training變慢
另外一個缺點就是,要手動設定Anchor大小和比例,會多很多hyperparameters。
所以這篇CornerNet,希望能夠不使用Anchor Box,而是透過預測Object的corner來做detection,
就是預測所以左上角和右下角的keypoint,然後再把他們group成一組組的BBox。
作者認為這樣做比較好的原因:
網絡結構如圖所示,
首先使用兩個hourglass作為backbone,得到128x128的feature map,
之後分成兩個module,一個預測左上角點,一個預測右下角點。
每個module裡面先做corner pooling,這篇比較創新的部分,等等會介紹,
之後再分別預測heatmap,embedding vector和offset。
這篇group embedding的做法,主要受到一篇2017年的論文:Associative Embedding的啟發,
他原本是做多人姿態檢測,就是偵測所有人體關節點,然後每個關節點用embedding vector來分組。
這篇就用這個方法將把角點分組。
使用了一個變型的focal loss作為detection Loss,詳細解釋可以見論文。
然後,他們認為網路在預測角點時能得到的視覺線索很少,
例如,若要預測左上角點,他需要向右看,找到object的上界,
然後向下看找到左邊界,
但若距離太遠,網路很難學到這件事情,所以他們提出了一個corner pooling的方法來進行增強。
與其他檢測方法的比較,
在COCO競賽上的AP是one-stage中最好的,和two-stage方法比也不差。
結果圖,可以看到就算object重疊,也能很好的預測。