論文:CornerNet: Detecting Objects as Paired Keypoints
Github:https://github.com/umich-vl/CornerNet
ECCV2018 Oral,作者美國密歇根大學heilaw ,論文提出了基于左上和右下2點的有别于傳統檢測的檢測架構,該架構是一種自下而上的檢測架構。是一種先有檢測頂點,再有物體邊框的思想。而傳統的檢測架構都是自上而下的思想。都是先有邊框,再在框中回歸關鍵點。中間還提出了corner pooling也是神來之筆,簡單奏效,可以比傳統的pooling獲得更大的感受野。中間的Embedding借鑒的openpose。

基于Anchor檢測的缺點:
- 需要大量的anchor來覆寫檢測物體,其中DSSD需要40K的anchor,RetinaNet需要100K的anchor。這樣大量的anchor中隻有一小部分會與GT覆寫成為正樣本,其餘大部分未與GT覆寫的就會成為負樣本,使得訓練中正負樣本失衡。并且産生大量的計算消耗。
- 需要對anchor設定大量的長寬比和尺度。增加了設計的複雜性。設定還需要引入一些先驗知識。
是以引出本文的隻需要回歸2個坐标點的無anchor檢測架構。
整體架構:
CornerNet 為one-stage檢測架構。有别于傳統的檢測架構,像faster RCNN,yolo,ssd等。傳統的檢測架構是要根據anchor來回歸物體的檢測框,通過中心坐标和長寬(x,y,width,height)實作。CornerNet 隻需要回歸左上頂點和右下頂點就可以确定物體的檢測框,直接去掉了anchor。
整體架構如上圖,輸入圖像為511*511。輸出特征為128*128。
CornerNet 的基礎網絡結構采用hourglass類型的網絡子產品,連續堆疊了2個這樣的子產品。hourglass結構可以很好的結合局部特征和全局特征。在hourglass子產品中沒有使用pooling操作,而是使用stride=2的卷積實作下采樣,這也可以獲得更快的速度。最終feature map被縮小5倍。其中卷積層的通道數分别為(256; 384; 384; 384; 512)。hourglass結構的網絡深度為104層。
CornerNet 的檢測子產品如上圖所示。上圖隻表示了top-left部分的結構,bottom-right也有類似的結構。經過backbone之後,首先經過corner pooling操作,輸出pooling後的特征圖,然後再和backbone的特征圖做融合。相當于resnet中的shortcut結構在這裡使用corner pooling替換。最終分為3個分支,分别輸出heatmap,Embedding,offsets。
由于coco有80個類别,分類不帶背景類别,是以網絡最終輸出的heatmap為128*128*80*2,分為top-left和bottom-right兩個。
網絡輸出的嵌入向量Embedding為128*128*80*2,同樣分為top-left和bottom-right兩個。
網絡偏移offsets為128*128*2,所有類别共用一個偏移量,分為x,y兩個偏移值。
傳統的檢測架構的heatmap值作為了邊框的分數,邊框的位置是通過(x,y,width,height)确定的。而CornerNet 的heatmap既做了邊框的分數,還做了邊框的位置。由于網絡不斷下采樣會造成最終的坐标和原始圖像的有偏移,這裡采用了回歸的offsets解決。至于左上角的點和右下角的點的配對,使用Embedding來解決。
在網絡子產品輸出完畢後,首先在top-left和bottom-right的heatmap中分别取100個分數最高的框。也就是100個左上角頂點,100個右下角頂點。兩兩組合一共可以産生10000個坐标框。然後兩兩配對的頂點中,如果類别不是同一類就會被剔除。如果bottom-right點的坐标高于top-left點的坐标,也就是說右下角的頂點在左上角的頂點的左上方時也會被剔除。再在剩下的配對坐标中計算兩兩相似度。相似度高于0.5的,也就是說不是一組組合,也會被剔除。最終将留下的配對點做NMS操作。輸出最終的結果框。
Loss函數:
CornerNet的整體loss函數如上公式。包含檢測的損失Ldet,Embedding的損失Lpull+Lpush,offsets的損失Loff。
檢測的損失Ldet:
該損失為基于focal loss修改的分段損失函數。
C:通道數
H:高度
W:寬度
N:物體的個數
α,β :超參數,α=2,β=4
Pcij:通道c在(i,j)位置的預測的分數
Ycij:通道c在(i,j)位置的真實label,該label經過非歸一化的高斯函數處理過。
其中2D高斯核函數為
中心為label位置的中心,方差σ 1/3物體的半徑。
Embedding的損失Lpull+Lpush:
Embedding的損失包含将相同類别拉近的pull損失和将不同類别拉遠的push損失。主要實作将相同類别的分數都學習到接近平均分數,将不同類别的分數之間的距離都學到>=1。
N:物體的個數
etk:top-left的物體k的分數
ebk:bottom-right的物體k的分數
ek:etk和ebk的平均
∆ :margin,這裡取1
offsets的損失Loff:
Loff采用的損失為smooth L1損失,
ok :為偏移量,由(x,y)兩項組成
Corner Pooling :
Corner pooling先做水準方向從右向左的max pooling,再做從下到上的max pooling。最終會得到1個水準方向pooling後的特征圖和垂直方向pooling後的特征圖。然後再将這2個特征圖element-wise相加,得到最終的pooling 結果。
總結:
(1)CornerNet 第一次提出了一種自下而上的檢測架構,并且在coco資料集上取得了one-stage最高的精度
(2)Corner pooling思想非常好,可以獲得比傳統pooling更好的感受野。