CornerNet - Detecting Objects as Paired Keypoints 論文解讀

paper:CornerNet: Detecting Objects as Paired Keypoints
arXiv:https://arxiv.org/abs/1808.01244
github:https://github.com/princeton-vl/CornerNet
conf: ECCV 2018 oral https://www.youtube.com/watch?v=aJnvTT1-spc
intro: predict top-left and bottom-right point, corner pooling, hourglass network

主要內容:
在目標檢測任務中,通常我們會通過中心(x,y)的位置和寬高(w,h)來定義一個bounding box,然後通過模型來求解這四個參數。CornerNet這篇文章將目標檢測任務中的bounding box的求解轉化爲左上和右下這一對點的求解,通過檢測這一對點來完成目標檢測。相比於Faster RCNN,SSD等基於anchor box的目標檢測方法,cornerNet無需設置anchor box。
network overview
主幹網絡:
使用兩個hourglass network作爲主幹網絡,最初是應用在人體關鍵點檢測中。hourglass模塊首先會通過卷積和池化降低feature map的尺寸,然年再通過上採樣和卷積將featrue map恢復到原來的尺寸,另外由於池化會造成細節信息的損失,hourglass通過skip連接將低層的細節特徵添加到經過上採樣的feature map上。通過這樣的構造,hourglass可以同步捕捉到全局和局部的信息。
CornerNet首先使用777*7的卷積將圖像尺寸縮小4倍,通道數增長到128,然後接一個殘差模塊,步長爲2,通道數目爲256。然後使用了兩個hourglass模塊,使用帶步長的卷積代替池化操作進行feature map尺寸減小。在每個hourglass模塊中,進行了5次feature map尺寸的減小,同時將通道數目從256增長到512(256->384->384->384->512)。在上採樣的時候,使用最近鄰插值擴大尺寸,並在上採樣前面增加了兩個殘差模塊。每一個skip連接中也包含了兩個殘差模塊。

檢測網絡:
主幹網絡之後是檢測網絡,包括兩個模塊,前面是一個殘差塊,裏面包括了corner pooling部分;後面是一個卷積模塊,分成了三條分支,分別預測點的heat map,embedding和offset。
prediction module
Corner Pooling:
通常來說,對於bounding box的左上和右下兩個頂點,在圖像中對應的位置上沒有局部的視覺特徵來表示當前存在一個頂點,這與bounding box的中心座標點是有所不同的。因此,要預測這兩個點,需要去看點所在的行和列的情況。例如對於左上角點,就需要看這個點所在列往右去找bounding box的上邊界,看這個點所在的行往下去找bounding box的做邊界。
也就是當前點在行(列)當中右(下)邊的所有值當中取最大值,然後將行和列的最大值相加作爲pooling的結果。
corner pooling
corner pooling的實現:
(1)論文給出的源代碼中的實現(c++):https://github.com/princeton-vl/CornerNet/tree/master/models/py_utils/_cpools/src
(2)基於tensorflow的實現:https://github.com/tensorlayer/tensorlayer/issues/781
基於tensorflow的實現方法是,以top-left點中的top爲例,首先對feature map做一個padding:右邊pading大小爲feature map的寬度減1,左/上/下padding大小爲0;然後對padding之後的feature map做kernal_size爲(feature_map_width,1)的max pooling(valid padding),這樣就得到top-left中的top部分的值,同理可以得到其他3個值。

損失函數:
CornerNet爲每個點預測了其對應的類別和座標,同時爲了實現同一個bounding box 的兩個點組合,爲每一個點預測了一個一維embedding,用embedding向量之間的距離來判斷兩個點是否屬於同一組。損失函數包括三個方面:
L=Ldet+αLpull+βLpush+γLoffL=L_{det}+{\alpha}L_{pull}+{\beta}L_{push}+{\gamma}L_{off}

  • det損失,也就是類別損失,使用focal loss;
  • embedding損失,包括pull,push損失,pull損失使屬於同一個bounding box的兩個point的距離儘量小,push損失使屬於不同bounding box的兩個point的距離儘量大;
  • offset損失,也就是座標偏移損失,是預測的左上或右下點相對於feature map上格子頂點的偏移,跟yolo中的bounding box中心座標偏移類似;
    其中的α=0.1,β=0.1,γ=1{\alpha}=0.1, {\beta}=0.1, {\gamma}=1

模型表現:
COCO AP: 42.4%
FPS:244ms per image

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章