基於anchor-free的目標檢測算法CenterNet研究

2020.04.18 小記

近期一直在MOT算法研究,目前SOTA算法核心還是基於CenterTrack網絡,而CenterTrack又是基於anchor-free式的CenterNet網絡,CenterNet是繼YOLO目標檢測算法以來新創的目標檢測派系,yolo系列都是anchor-based算法,因此着重研究了下CenterNet,其在相同速度下,CenterNet的精度比YOLOv3提高了4個左右的點,後將對此算法結果復現,並考慮相關算法遷移。

2019年比較新的目標檢測的論文,拋棄了主流的使用anchor迴歸檢測框的機制.不得不慨嘆,AI算法日新月異,層出不窮,好吧我不知道怎樣形容了,目標檢測一段時間沒看,就蹦出這麼多新點子新算法,真是讀論文的還沒寫論文的快。啊啊No!

進入正題...

============================分=============割==================線===============================

CenterNet(指本文的做法)將目標檢測過程看做是中心點的預測,並預測出下采樣誤差偏移量和預測框尺寸。也是一種關鍵點檢測的方法,主要在CornerNet上進行改進。

使用上,CenterNet可以用於2D、3D的目標檢測以及人體姿勢的關鍵點檢測。

paper:CenterNet的真實論文名稱叫做objects as points

先來看看效果吧:

 

驚不驚喜意不意外?CenterNet不僅可以用於目標檢測,還可以用於其他的一些任務,如肢體識別或者3D目標檢測等等,但是今天我們就重點說說目標檢測的部分。CenterNet 牛逼的地方在於他不僅可以做2D目標檢測,只需要少量擴展就可以遷移到3D目標檢測和人體關鍵點檢測上。

摘要

 圖像檢測中的檢測框默認是軸對稱的,大多數比較成功的檢測方法都是要列舉很大數量的候選框,再進一步進行定位和分類。但是這樣的做法往往是多餘而又低效率的。本文中我們提出了一種對物體的中心點進行定位的方法,並且在此基礎上回歸出物體的其他屬性,比如尺寸、3D位置、方向甚至是姿態。我們提出的網絡稱之爲CenterNet,它是一個端到端可微分,更簡化快捷精度更高的方法。

那CenterNet相比於之前的one-stage和two-stage的目標檢測有什麼特點?

  • CenterNet的“anchor”僅僅會出現在當前目標的位置處而不是整張圖上撒,所以也沒有所謂的box overlap大於多少多少的算positive anchor這一說,也不需要區分這個anchor是物體還是背景 - 因爲每個目標只對應一個“anchor”,這個anchor是從heatmap中提取出來的,所以不需要NMS再進行來篩選
  • CenterNet的輸出分辨率的下采樣因子是4,比起其他的目標檢測框架算是比較小的(Mask-Rcnn最小爲16、SSD爲最小爲16)。

總體來說,CenterNet結構優雅簡單,直接檢測目標的中心點和大小,是真anchor-free。

 

1. Introduction

對於目標檢測,one-stage的方法是給圖像中使用了一個叫anchor的機制,去排布很多框在圖像中,直接進行框的打分;而two-stage的方法會對這些框中的featuremap進行重新計算,再進一步進行分類和迴歸。後處理一般使用的是非極大值抑制,以去掉那些重複的框。因爲大多數訓練都不適用這種端到端的檢測,這種後處理一般比較難以微分和訓練。儘管如此,在過去的5年,在這方面也有許多方法提出。但是這種基於滑動窗的檢測方法需要去枚舉各種潛在的圖像位置和尺寸,是比較浪費時間的。

在本文我們提出的方法,用boundingbox中心點來代表這個物體,隨後在這個點的基礎上對物體的其他屬性比如尺寸,維度,3D位置和方向和姿態等進行迴歸。這樣一來,物體檢測就成爲了一個標準關鍵點估計問題。我們把圖像輸入到一個全卷積網絡,產生對應的熱圖。熱圖中的峯值點就對應着圖像中物體的中心,在中心附近的特徵也可以對物體的bbox寬和高進行預測。整個網絡的訓練是在稠密監督學習上進行的,使用單向網絡向前傳遞,不需要非極大值抑制等後處理方式。我們的方法還可以對物體的其他屬性進行預測,比如在預測物體3D信息的時候,會單獨預測物體的3D邊界框尺寸和物體方向;對於人體姿勢估計,我們把關節點視爲人體中心點的位置偏離,並在中心點位置直接對它們進行迴歸。

 

2. Related work

(1) 基於區域分類region proposal的物體檢測方法

RCNN通過產生大量的區域候選框,再用深度神經網絡對這些框進行提取特徵和分類;Faster-RCNN是先進行特徵提取,再對特整圖進行產生候選框和分類,以減少計算量。然而,這兩種方法都是基於低效率的特徵提取方法。

(2) 基於隱藏的anchor的物體檢測

RCNN在網絡中就進行的候選區域的產生,它在對分辨率的圖像網格之上列舉出了很多固定尺寸的bbox(具體稱之爲anchor),並進一步進行分類判斷它是不是“前景”,如果anchor與真值的重疊率大於0.7就視爲是前景,否則認爲是背景或者忽略。每一個得到的前景anchor隨後會進行一種基於多尺度分類的檢測。我們所提出的方法與這種one-stage的基於anchor的機制比較類似,我們提出的物體中心點可以被理解成一種不可知形狀的anchor,如圖3。我們的中心點機制有幾個特點:

  • l 它不是基於與真實框的重疊率來分配anchor,而是利用位置信息,我們沒有一個區分前景和背景的閾值。
  • l 對於每個物體,我們只提出一個positive anchor,因此就不需非極大值抑制進行過濾。我們只是對關鍵點熱圖中的局部峯值進行關注。
  • l CenterNet的輸出分辨率很高,這也消除了對多個anchor的需求。

傳統的基於anchor的檢測方法,通常選擇與標記框IoU大於0.7的作爲positive,相反,IoU小於0.3的則標記爲negative,如下圖a。這樣設定好box之後,在訓練過程中使positive和negative的box比例爲1:3來減少negative box的比例(例如SSD沒有使用focal loss)。

而在CenterNet中,每個中心點對應一個目標的位置,不需要進行overlap的判斷。那麼怎麼去減少negative center pointer的比例呢?CenterNet是採用Focal Loss的思想,在實際訓練中,中心點的周圍其他點(negative center pointer)的損失則是經過衰減後的損失(上文提到的),而目標的長和寬是經過對應當前中心點的w和h迴歸得到的。

 

(3) Object detection by keypoint estimation

CoreNet[30]檢測bbox的兩個角點作爲關鍵點,ExtremeNet【61】預測bbox的左右上下的值。這些點的估計和我們的CenterNet有着類似的魯棒的網絡,但是他們的方法需要在估計到點後進一步進行組合,是比較費時間的。我們的方法在估計到點後不用進行其他後處理。

(4) Monocular 3D object detection

3D框估計在自動駕駛領域很有用,Deep3Dbos方法利用slow-RCNN的框架,在估計到的2D信息後進行3D投影。CenterNet也用了類似的方法但是比他們的快,減少了計算。

 

使用的網絡

論文中CenterNet提到了三種用於目標檢測的網絡,這三種網絡都是編碼解碼(encoder-decoder)的結構:

  1. Resnet-18 with up-convolutional layers : 28.1% coco and 142 FPS
  2. DLA-34 : 37.4% COCOAP and 52 FPS
  3. Hourglass-104 : 45.1% COCOAP and 1.4 FPS

每個網絡內部的結構不同,但是在模型的最後都是加了三個網絡構造來輸出預測值,默認是80個類、2個預測的中心點座標、2箇中心點的偏置。

前提條件

附一張檢測的效果圖:

假設輸入圖像爲,其中 [公式] 和 [公式] 分別爲圖像的寬和高

然後在預測的時候,我們要產生出關鍵點的熱點圖(keypoint heatmap): [公式] ,其中 [公式] 爲輸出對應原圖的步長,而 [公式] 是在目標檢測中對應着檢測點的數量,如在COCO目標檢測任務中,這個 [公式] 的值爲80,代表當前有80個類別。

R是生成熱圖的步長,C是熱圖中關鍵點的數量。通常在人體估計中C=17,而物體檢測中C=80,同時R一般取4,以對圖像進行下采樣。當 [公式]時表示這個點就是估計到的關鍵點, [公式] 時表示這個點就是背景點。

這樣, [公式] 就是一個檢測到物體的預測值,對於 [公式] ,表示對於類別 [公式] ,在當前 [公式] 座標中檢測到了這種類別的物體,而 [公式] 則表示當前當前這個座標點不存在類別爲 [公式]的物體。

在整個訓練的流程中,CenterNet學習了CornerNet的方法。對於每個標籤圖(ground truth)中的某一 [公式] 類,我們要將真實關鍵點(true keypoint) [公式] 計算出來用於訓練,中心點的計算方式爲 [公式] ,對於下采樣後的座標,我們設爲 [公式] ,其中 [公式] 是上文中提到的下采樣因子4。所以我們最終計算出來的中心點是對應低分辨率的中心點。

然後我們利用 [公式] 來對圖像進行標記,在下采樣的[128,128]圖像中將ground truth point以 [公式] 的形式,用一個高斯核 [公式]來將關鍵點分佈到特徵圖上,其中 [公式] 是一個與目標大小(也就是w和h)相關的標準差。如果某一個類的兩個高斯分佈發生了重疊,直接取元素間最大的就可以。

 

每個點 [公式] 的範圍是0-1,而1則代表這個目標的中心點,也就是我們要預測要學習的點。

論文亮點:

  1. 設計模型的結構比較簡單,小白也可以輕鬆看明白,不僅對於two-stage,對於one-stage的目標檢測算法來說該網絡的模型設計也是優雅簡單的。
  2. 該模型的思想不僅可以用於目標檢測,還可以用於3D檢測和人體姿態識別,雖然論文中沒有是深入探討這個,但是可以說明這個網絡的設計還是很好的,我們可以藉助這個框架去做一些其他的任務。
  3. 雖然目前尚未嘗試輕量級的模型(這是我接下來要做的!),但是可以猜到這個模型對於嵌入式端這種算力比較小的平臺還是很有優勢的,希望大家多多嘗試一些新的backbone(不知道mobilenetv3+CenterNet會是什麼樣的效果),測試一下

當然說了一堆優點,CenterNet的缺點也是有的,那就是:

  • 在實際訓練中,如果在圖像中,同一個類別中的某些物體的GT中心點,在下采樣時會擠到一塊,也就是兩個物體在GT中的中心點重疊了,CenterNet對於這種情況也是無能爲力的,也就是將這兩個物體的當成一個物體來訓練(因爲只有一箇中心點)。同理,在預測過程中,如果兩個同類的物體在下采樣後的中心點也重疊了,那麼CenterNet也是隻能檢測出一箇中心點,不過CenterNet對於這種情況的處理要比faster-rcnn強一些的,具體指標可以查看論文相關部分。
  • 有一個需要注意的點,CenterNet在訓練過程中,如果同一個類的不同物體的高斯分佈點互相有重疊,那麼則在重疊的範圍內選取較大的高斯點。

 

 

推薦幾個資源:

0)官方項目地址:

xingyizhou/CenterNet​github.com圖標

1) 官方推薦-船舶檢測訓練:

https://blog.csdn.net/weixin_42634342/article/details/97756458​blog.csdn.net

 

2) 官方推薦-行人頭肩檢測訓練:

https://blog.csdn.net/weixin_41765699/article/details/100118353​blog.csdn.net

 

3) 官方推薦-檢測跟蹤:

kimyoon-young/centerNet-deep-sort​github.com圖標

 

 

參考文獻:

1.https://zhuanlan.zhihu.com/p/66048276 

2.https://zhuanlan.zhihu.com/p/94093056

3.http://bbs.cvmart.net/topics/1667

4.https://zhuanlan.zhihu.com/p/85194783

 

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