CenterNet:Corner-Center三元關鍵點,檢測性能全面提升 | ICCV 2019

為了解決CornerNet缺乏目標內部資訊的問題,提出了CenterNet使用三元組進行目標檢測,包含一個中心關鍵點和兩個角點。從實驗結果來看,CenterNet相對於CornerNet只增加了少量推理時延,但帶來了將近5個點的AP提升

來源:曉飛的演算法工程筆記 公眾號

論文: CenterNet: Keypoint Triplets for Object Detection

Introduction


  CornerNet將目前常用的anchor-based目標檢測轉換為keypoint-based目標檢測,使用角點對表示每個目標,CornerNet主要關注目標的邊界資訊,缺乏對目標內部資訊的獲取,很容易造成誤檢,如圖1所示。為了解決這個問題,論文提出CenterNet,在角點對的基礎上加入中心關鍵點組成三元組進行檢測,既能捕捉目標的邊界資訊也能兼顧目標的內部資訊。另外,為了更好地提取特徵,論文還提出了center pooling和cascade corner pooling,分別用於更好地提取中心關鍵點和角點。

Baseline and Motivation


  CenterNet以CornerNet為基礎,為了檢測角點,CornerNet分別預測左上角點和右下角點的熱圖。另外,為每個角點預測了embedding向量和偏移值,相同目標的角點的embedding向量距離會非常小,偏移值則是對角點進行小範圍調整。最後分別選擇top-k個左上角點和top-k個右下角點,根據embedding向量距離進行配對,預測框置信度為角點對的置信度均值。

  論文對CornerNet的誤檢率進行了分析,如表1所示,大部分的誤檢集中在低IoU區域,有32.7%的預測結果與GT的IoU低於0.05,而小目標的誤檢率高達60.3%,可能的原因是CornerNet無法感知目標內部的資訊,這個問題可以通過ROI池化二次分類來彌補,但是計算消耗很大。於是,論文提出高效的替代方案CenterNet,在CornerNet的角點對上再加入一個目標內部點組成三元組,以最低的成本捕捉目標的內部資訊。

Object Detection as Keypoint Triplets


  CenterNet的整體結構如圖2所示,將每個目標表示為中心關鍵點和角點對。在CornerNet的基礎上增加一個中心關鍵點的熱圖輸出,先按CornerNet的方法獲取top-k個預測框,然後使用中心關鍵點對預測框進行過濾和排序:

  1. 根據分數選擇top-k個中心關鍵點
  2. 結合對應的偏移值將中心關鍵點映射到輸入圖片
  3. 定義每個預測框的中心區域,檢查中心區域是否包含中心關鍵點
  4. 如果中心區域包含中心關鍵點,保留該預測框,將分數替換為三個關鍵點的分數均值。如果中心區域不包含中心關鍵點,則去除該預測框。

  中心區域的大小對檢測結果有直接的影響,區域過小會導致小目標召回率低,而區域過大則會導致大目標準確率低。為此,論文提出了尺寸可知(scale-aware)的中心區域,能夠根據預測框的大小進行調整。定義tl_xtl_y為預測框的左上角點坐標,br_xbr_y為預測框的右下角點坐標,ctl_xctl_y為中心區域的左上角點坐標,cbr_xcbr_y分別為右下角點的坐標,四個點應滿足以下關係:

n為奇數,決定中心區域的尺寸大小,論文對於尺寸小於150和大於150的預測框分別將n設為3和5。

  圖3展示了n=3n=5的中心區域,根據公式1計算尺寸可知的中心區域,然後檢查中心區域是否包含中心關鍵點。

Enriching Center and Corner Information


Center pooling

  通常,目標的幾何中心不一定包含重要的分辨資訊,比如人最有辨識度的地方在頭部,而幾何中心卻在人體的中間。為了解決這個問題,論文提出中心池化來提取更豐富的可辨認資訊。

  如圖a所示,主幹網路輸出特徵圖後,在判斷中心關鍵點時,取特徵圖水平方向和垂直方向的最大值之和作為分數,這樣能夠很好地幫助中心關鍵點的檢測。

Cascade corner pooling

  由於角點通常在目標之外,缺少目標的相關資訊,CornerNet使用corner pooling來解決這個問題,如圖b所示,取邊界方向的最大值作為分數,但這會導致角點過於關注邊界資訊。

  為了解決這個問題,需要讓角點能夠關注目標的內部,cascade corner pooling如圖c所示,首先在邊界方向找到最大值,然後在邊界最大值處向內找到內部最大值,將兩個最大值相加作為分數輸出,這樣角點能夠同時關注邊界資訊和目標資訊。

  Center pooling和cascade corner polling可通過組合不同方向的corner pooling進行簡單實現,如圖5所示。需要注意,圖5b為cascade top corner pooling模組,只輸出左上角點在top方向值,還要加上cascade left corner pooling輸出的left方向值。cascade left corner pooling的結構跟圖5b類似,只是交換Top pooling和Left pooling的位置。

Training and Inference


Training

  CenterNet的輸入解析度為$511\times 511,最後的熱圖大小為$128\times 128,完整的網路損失函數為:

L^{co}_{det}L^{ce}_{det}為focal loss,用來訓練網路檢測角點和中心關鍵點,L^{co}_{pull}L^{co}_{push}為角點pull損失和push損失,用來最大化和最小化embedding向量的距離,L^{co}_{off}L^{ce}_{off}為L1損失,用來調整角點和中心點的偏移值。

Inference

  測試時同時使用原圖和水平翻轉圖片,每個圖分別保留70個中心關鍵點、左上角點和右上關鍵點來預測,最後綜合兩個圖片的結果進行Soft-nms輸出。

Experiments


  與SOTA目標檢測方法對比。

  與CornerNet的錯誤率優化對比。

  對比實驗。

CONCLUSION


  為了解決CornerNet缺乏目標內部資訊的問題,CenterNet使用三元組進行目標檢測,包含一個中心關鍵點和兩個角點。從實驗結果來看,CenterNet相對於CornerNet只增加了少量推理時延,但帶來了將近5個點的AP提升。



如果本文對你有幫助,麻煩點個贊或在看唄~
更多內容請關注 微信公眾號【曉飛的演算法工程筆記】

work-life balance.