CenterNet算法筆記(目標檢測論文)

論文名稱:CenterNet: Keypoint Triplets for Object Detectiontectionhtml

論文連接:https://arxiv.org/abs/1904.08189git

代碼連接:https://github.com/Duankaiwen/CenterNetgithub


簡介

該論文是由中科院,牛津大學以及華爲諾亞方舟實驗室聯合提出。截至目前(2019.04.19),CenterNet應該是one-stage目標檢測方法中性能(精度)最好的方法。網絡

傳統的基於關鍵點的目標檢測方法例如最具表明性的CornerNet經過檢測物體的左上角點和右下角點來肯定目標,但在肯定目標的過程當中,沒法有效利用物體的內部的特徵,即沒法感知物體內部的信息,從而致使該類方法產生了不少誤檢 (錯誤目標框)。ide

本文利用關鍵點三元組即中心點、左上角點和右下角點三個關鍵點而不是兩個點來肯定一個目標,使網絡花費了很小的代價便具有了感知物體內部信息的能力,從而能有效抑制誤檢。另外,爲了更好的檢測中心點和角點,該論文分別提出了center poolingcascade corner pooling來提取中心點和角點的特徵。該方法在MS COCO上,得到了47% AP,超過了全部已知的 one-stage 檢測方法,並大幅度領先,其領先幅度至少達4.9%,推理時間略慢(270ms using a 52-layer hourglass backbone and 340ms using a 104-layer hourglass backbone per image)。函數

Anchor-based缺陷:anchor數量巨大,anchor人工自主設計,anchor與gt不對齊不利於分類性能

 

Anchor-free缺陷:Cornernet的全局信息獲取能力較弱,沒法正確group同一物體的兩個點如上圖,前100個預測框中有不少是長寬比不協調的誤檢(CornerNet經過embedding vector來group角點,可是該機制經過corner pooling僅依賴物體的邊沿,並無利用物體內部信息,事實證實根據人類vision pattern肯定一個物體更多考慮其內部信息),這個問題能夠經過互補信息解決——好比aspect ratio(anchor利用寬高比加速回歸,可是角點沒法)學習

CenterNet原理

預測框與gt有高iou而且gt的中心在預測框的中心區域,則這個預測框有更高的可能性是準確的,因此經過判斷一個proposal的中心區域是否包含一個同類物體的中心點來決定它是否正確。以下圖:測試

 

提出更好的兩種檢測角點和中心點的機制center poolingcascade corner pooling。center pooling用於預測中心點分支,經過相加特徵圖水平和垂直方向上最大值得到。cascade corner pooling相似與原來的corner pooling模塊,只不過同時獲取內部和邊沿信息以增長穩定性。優化

Baseline and Motivation

使用CornerNet做爲基準,CornerNet使用heatmaps、embeddings、offsets肯定目標的左上右下角點以肯定物體位置類別,具體不予闡述,可參考博主另外一篇博文CornerNet論文筆記

爲了可以量化的分析誤檢問題,本論文提出了一種新的衡量指標,稱爲FD (false discovery) rate, 此指標可以很直觀的反映出誤檢狀況。FD rate 的計算方式爲 FD = 1-AP, 其中 AP 爲 IoU 閾值取[0.05 : 0.05 : 0.5]下的平均精度。統計了 CornerNet 的誤檢狀況,以下表table1所示:

 

能夠看到,FD = 37.8,而FD5高達32.7,這意味着即便把gt匹配條件限制的很嚴格:只有那些與 ground-truth 的 IoU< 0.05 的才被認定爲錯誤目標框,每100個預測框中仍然平均有32.7 個錯誤目標框!而小尺度的目標框其FDs更是達到了60.3!關鍵問題在於讓網絡具有感知物體內部信息的能力。一個較容易想到的方法是把 CornerNet 變成一個 two-stage 的方法,即利用 RoI pooling 或 RoI align 提取預測框的內部信息,從而得到感知能力。但這樣作開銷很大,所以本文提出了用關鍵點三元組來檢測目標,這樣使得本文在 one-stage 的前提下就能得到感知物體內部信息的能力。而且開銷較小,由於只需關注物體的中心,從而避免了 RoI pooling 或 RoI align 關注物體內部的所有信息。

方法介紹

利用關鍵點三元組檢測物體

 

上圖figure2爲 CenterNet 的結構圖。網絡經過 center pooling 和 cascade corner pooling 分別獲得 center heatmap 和 corner heatmaps,用來預測關鍵點的位置。獲得角點的位置和類別後,經過 offsets 將角點的位置映射到輸入圖片的對應位置,而後經過 embedings 判斷哪兩個角點屬於同一個物體,以便組成一個檢測框。正如前文所說,組合過程當中因爲缺少來自目標區域內部信息的輔助,從而致使大量的誤檢。爲了解決這一問題,CenterNet 不只預測角點,還預測中心點。對每一個預測框定義一箇中心區域,經過判斷每一個目標框的中心區域是否含有中心點,如有則保留,而且此時框的 confidence 爲中心點、左上角點和右下角點的confidence的平均,若無則去除,使得網絡具有感知目標區域內部信息的能力,可以有效除錯誤的目標框。

另外中心區域的尺度會影響錯誤框去除效果。中心區域太小致使不少小尺度的錯誤目標框沒法被去除,而中心區域過大致使不少大尺度的錯誤目標框沒法被去除,所以本文提出了尺度可調節的中心區域定義法以下公式(1)。該方法能夠在預測框的尺度較大時定義一個相對較小的中心區域,在預測框的尺度較小時預測一個相對較大的中心區域。以下圖figure3所示,n的值根據邊界框是否大於150進行設置爲3或5。

 

 

豐富中心點和角點特徵

 Center pooling:一個物體的中心並不必定含有很強的,易於區分於其餘類別的語義信息。例如,一我的的頭部含有很強的,易於區分於其餘類別的語義信息,可是其中心每每位於人的中部。本文提出了center pooling 來豐富中心點特徵。上圖figure4(a)爲該方法原理,center pooling提取中心點水平方向和垂直方向的最大值並相加,以此給中心點提供所處位置之外的信息。這一操做使中心點有機會得到更易於區分於其餘類別的語義信息。Center pooling 可經過不一樣方向上的 corner pooling 的組合實現。一個水平方向上的取最大值操做可由 left pooling 和 right pooling經過串聯實現,同理,一個垂直方向上的取最大值操做可由 top pooling 和 bottom pooling經過串聯實現,具體操做以下圖figure5(a)所示,特徵圖兩個分支分別通過一個3×3Conv-BN-ReLU作水平方向和垂直方向的corner pooling,最後再相加(圖b爲Cascade corner pooling模塊,注意與圖(a)並無鏈接)。

Cascade corner pooling: 該模塊用於預測物體的左上和右下角點,通常狀況下角點位於物體外部,所處位置並不含有關聯物體的語義信息,這爲角點的檢測帶來了困難。Figure4(b)爲傳統作法,稱爲corner pooling(CornerNet中提出)。它提取物體邊界最大值並相加,該方法只能提供關聯物體邊緣語義信息,對於更加豐富的物體內部語義信息則很難提取到。Figure4 (c)爲cascade corner pooling 原理,它首先提取物體邊界最大值,而後在邊界最大值處繼續向內部(圖中沿虛線方向)提取最大值,並與邊界最大值相加,以此給角點特徵提供更加豐富的關聯物體語義信息。Cascade corner pooling可經過不一樣方向上的 corner pooling 的組合實現,如圖figure5(b)所示,展現了cascade top corner pooling 原理(博主認爲Cascade corner pooling只是爲了經過內部信息豐富角點特徵,也就是級聯不一樣方向的corner pooling達到內部信息的疊加,最終目的仍是要預測角點,因此左上角點經過cascade top corner pooling+cascade left corner pooling實現,右下角點經過cascade right corner pooling+cascade bottom corner pooling實現,figure5(b)只是畫出了其中一個module,其餘3個module相似,也就是用cascade corner pooling module代替原CornerNet中的Corner Pooling)。

訓練和推理

 

損失函數如上式(2),由角點位置損失(focal loss)+中心點位置損失+embedding損失+角點和中心點offsets損失(l1loss)組成,結構與CornerNet類似,只是增長中心點損失項,α,β和γ分別爲0.1,,01,1。使用batch size爲48在8 Tesla V100 (32GB) GPUs上迭代480K次,前450K次學習率爲2.5×10-4,後30K次學習率降爲2.5×10-5。代碼使用pytorch實現,沒有預訓練,輸出分辨率爲511×511,損失函數優化策略爲adam。

實驗

 

實驗結果代表 CenterNet 得到了47%的AP,超過了全部已知的 one-stage 檢測方法,並大幅度領先,其領先幅度至少達4.9%。最近目標檢測方法在COCO數據集上基本在以百分之零點幾的精度往前推動,由於coco數據集難度很高,而CenterNet往前推動了將近5個百分點。同時,CenterNet 的結果也接近two-stage方法的最好結果。值得注意的是,CenterNet 訓練輸入圖片分辨率只有 511X511,在 single-scale下,測試圖片的分辨率爲原圖分辨率(~500),在 multi-scale下,測試圖片的分辨率最大爲原圖分辨率的1.8倍。而two-stage的輸入圖片的分辨率通常最短邊也要>600,甚至更大,好比D-RFCN+SNIP和 PANet。並且本文方法是 Train from scratch。

 

上表Table3爲 CenterNet 與 CornerNet 的單獨對比,能夠看出在coco數據集上CenterNet消除大量誤檢框,尤爲是在小物體上。

速度方面,Two-stage 方法論文中通常是不報的。One-stage方法只在較淺的backbone上如VGG-16上報速度,通常處理一張圖片須要十幾毫秒,在較深的backbone上速度爲慢一些,處理一張圖片須要幾百毫秒,但仍是要比 two-stage 的方法快。本文在一張 Nvidia Tesla P100 顯卡上比較了CornerNet和CenterNet,CornerNet511-104 測試速度約爲 300ms/幀,而 CenterNet511-104 的測試速度約爲340ms/幀,比 baseline 慢約 40ms/幀。但對於更輕backbone,CenterNet511-52的測試速度約爲270ms/幀,比CornerNet511-104快約30ms/幀,並且其精度不管是single-scale test 仍是 multi-scale test 都比CornerNet511-104高。

 

上圖figure6代表CenterNet 與 CornerNet 的對比結果。(a) 和 (b) 代表 CenterNet 能有效去除小尺度的錯誤目標框。(c) 和 (d) 代表 CenterNet 能有效去除中等尺度和大尺度的錯誤目標框。(e)是否採用center pooling檢測中心點。(f)對比分別使用corner pooling和cascade corner pooling檢測角點。

 

上圖figure7代表, CenterNet 去除了大量錯誤的目標框,所以即便在目標框的 confidence 較低的狀況下,依然能保證較好的檢測結果,上圖展現了 confidence 在0.5以上的目標框分佈狀況。

 

上表Table4 爲消融實驗。第一行爲CornerNet結果。中心點的加入 (CRE) 使得網絡提高了2.3% (37.6% vs 39.9%)。對於中心點的檢測,本實驗使用傳統的卷積操做進行。其中小尺度目標提高的最多,提高了4.6% (18.5% vs 23.1%),而大尺度目標幾乎沒有發生變化。這說明小尺度的錯誤目標框被去除的最多,這是由於從機率上講,小尺度目標框因爲面積小更容易肯定其中心點,所以那些錯誤的小目標框不在中心點附近的機率更大,所以去除的最多。Center pooling (CTP) 的加入使網絡進一步提高了0.9%。值得注意的是,大尺度目標提高了1.4% (52.2% vs 53.6%),小目標和中等目標也獲得了必定的提高,這代表 center pooling 可以使中心點得到更易於區分於其餘類別的語義信息Cascade corner pooling (CCP) 使得使網絡性能進一步提高。第二行的試驗中,咱們將 CornerNet 的corner pooling 替換成了 cascade corner pooling,性能提高了0.7% (37.6% vs 38.3%)。能夠觀察到大目標的 AP 沒有發生變化,AR 卻提高了1.8% (74.0% vs 75.8%), 這說明 cascade corner pooling 經過加入了物體內部信息可以感知更多的物體,可是因爲大目標因爲面積過大,使其容易得到較明顯的內部特徵而干擾了邊緣特徵,所以使得預測出的目標框位置不精確。當結合了 CRE 後,因爲 CRE 可以有效去除錯誤目標框,所以使大目標框的AP獲得了提高 (53.6% vs 55.8%).

 

上表Table5 爲錯誤實驗分析。將檢測的中心點用真實的中心點代替,實驗結果代表中心點的檢測準確度還有很大的提高空間。同時該結果還代表要想更進一步的提高檢測精度,須要進一步提高中心點的檢測精度。

總結

這篇CenterNet使用關鍵點三元組(左上,右下,中心點)來肯定一個目標,與CornerNet相比增長一箇中心點來消除誤檢框,故事點在於「網絡具有感知物體內部信息的能力」,並在最後做者認爲能夠移植到其他anchor或anchor-free的檢測器上,博主比較贊成做者所提觀點,好比目前潮流的attention機制就是加強物體之間的relation或者加強物體內部語義信息。與此相比,原CornerNet團隊提出的CornerNet-Lite中的CornerNet-Saccade將原任務分爲兩個階段,第一階段粗檢利用attention maps找到可能存在目標的中心點,第二階段精檢crop區域的全部目標,此兩階段方法與本文思想相似,都是經過加入中心點這一限定加強檢測器性能。

相關文章
相關標籤/搜索