天天看點

物體檢測之CornerNet

論文:CornerNet: Detecting Objects as Paired Keypoints

Github:https://github.com/umich-vl/CornerNet

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

物體檢測之CornerNet

基于Anchor檢測的缺點:

  1. 需要大量的anchor來覆寫檢測物體,其中DSSD需要40K的anchor,RetinaNet需要100K的anchor。這樣大量的anchor中隻有一小部分會與GT覆寫成為正樣本,其餘大部分未與GT覆寫的就會成為負樣本,使得訓練中正負樣本失衡。并且産生大量的計算消耗。
  2. 需要對anchor設定大量的長寬比和尺度。增加了設計的複雜性。設定還需要引入一些先驗知識。

是以引出本文的隻需要回歸2個坐标點的無anchor檢測架構。

整體架構:

物體檢測之CornerNet

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

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

CornerNet的整體loss函數如上公式。包含檢測的損失Ldet,Embedding的損失Lpull+Lpush,offsets的損失Loff。

檢測的損失Ldet:

物體檢測之CornerNet

該損失為基于focal loss修改的分段損失函數。

C:通道數

H:高度

W:寬度

N:物體的個數

α,β :超參數,α=2,β=4

Pcij:通道c在(i,j)位置的預測的分數

Ycij:通道c在(i,j)位置的真實label,該label經過非歸一化的高斯函數處理過。

其中2D高斯核函數為

物體檢測之CornerNet

中心為label位置的中心,方差σ 1/3物體的半徑。

Embedding的損失Lpull+Lpush:

物體檢測之CornerNet

Embedding的損失包含将相同類别拉近的pull損失和将不同類别拉遠的push損失。主要實作将相同類别的分數都學習到接近平均分數,将不同類别的分數之間的距離都學到>=1。

N:物體的個數

etk:top-left的物體k的分數

ebk:bottom-right的物體k的分數

ek:etk和ebk的平均

∆ :margin,這裡取1

offsets的損失Loff:

物體檢測之CornerNet

Loff采用的損失為smooth L1損失,

ok :為偏移量,由(x,y)兩項組成

Corner Pooling :

物體檢測之CornerNet
物體檢測之CornerNet

Corner pooling先做水準方向從右向左的max pooling,再做從下到上的max pooling。最終會得到1個水準方向pooling後的特征圖和垂直方向pooling後的特征圖。然後再将這2個特征圖element-wise相加,得到最終的pooling 結果。

物體檢測之CornerNet

總結:

(1)CornerNet 第一次提出了一種自下而上的檢測架構,并且在coco資料集上取得了one-stage最高的精度

(2)Corner pooling思想非常好,可以獲得比傳統pooling更好的感受野。

繼續閱讀