CenterNet
論文 CenterNet: Keypoint Triplets for Object Detection
當前目標檢測領域,基於anchor的檢測是比較流行的,首先生成anchor,然後對其進行分類以及座標偏差迴歸,這種檢測方法是符合直覺的,但是存在一些缺點,比如需要大量的anchors保證以較高的IOU覆蓋所有GT bboxes,而且anchor的size和aspect ratio需要手動精心設計,此外,anchor通常與GT bbox的邊不重合,導致anchor可能只包含部分目標資訊並且可能包含了背景資訊,給分類過程增加了一定的難度。所以,出現了很多anchor free的檢測方法,其中CornerNet作為一種基於keypoint的檢測方法被提了出來,透過檢測目標的一對角點從而定位目標,對角點的預測是分類相關的,所以預測出角點並將一對角點grouping進同一目標,檢測出目標位置的同時也確定了目標的分類。不過CornerNet也存在一些問題,這在ExtremeNet中也簡單說明了。CornerNet之後,也出現了很多工作,對CornerNet進行改進,例如ExtremeNet,還有,這篇論文CenterNet,關於CenterNet的本質,可先直接跳至末尾總結部分獲取CenterNet一句話的概況。
本文作者認為,CornerNet綜合目標整體資訊的能力較弱,因為目標定位僅依賴於對兩個角點的檢測,角點檢測是利用了CornerPooling,比如左上角,則是觀察向右和向下兩個方向,未能綜合目標的整體資訊(即,未考慮目標內部的資訊)。如圖1,檢測出了很多錯誤的bbox,
為了解決CornerNet會出現很多錯誤bbox這一問題,作者對CornerNet進行裝備,使得具有認識proposal region的視覺pattern的能力,從而能確定bounding box是否正確。作者提出的方法名為CenterNet,除了檢測一對角點,還檢測額外一個keypoint:探測proposal的中心塊,即空間bbox幾何中心的區域。直覺告訴我們,如果預測bbox與gt bbox有較高的IOU,那麼 中心keypoint處於預測bbox的中心塊的機率也較高,反之也成立。與corner相同,中心keypoint也是分類相關的。
從上述這段話可見,先檢測出 bbox,然後使用center keypoint進行過濾錯誤的bbox。事實上,作者檢測bbox這一操作與CornerNet中一樣。
測試階段,當透過檢測出top-left 和bottom-right keypoints後,對任意一組 top-left和bottom-right corner,使用embedding和offset,可以得到bbox,以及對應的分類c,那麼這個bbox是否有效還需要作如下檢查:先得到bbox的中心塊,然後使用center keypoint對應的offset將center keypoint同樣映射回原輸入image中去,檢測bbox的中心塊區域是否包含相同分類c的center keypoint,這就表示bbox是否有效。過程如圖1底部,CenterNet使用三個keypoints來表徵目標。
為了更好的檢測center keypoint和corner,作者又利用了:
center pooling,位於center keypoint的預測分支,有助於center keypoint獲得更多的有關目標的易識別的視覺pattern。
cascade corner pooling,這是在原先CornerNet的Corner Pooling基礎上,增加感知目標內部資訊的能力。
這兩種pooling後面會進行詳細介紹,此處可先跳過。
Related Work
目標檢測相關工作回顧這裡就省略,與ExtremeNet中的類似,我們直接討論CenterNet的框架設計。
Baseline和動機
使用CornerNet作為baseline,CornerNet 生成兩組heatmaps用於預測對角點,heatmap是multi-channel,表示某location是某個分類的keypoint的機率。除了keypoint heatmap,還生成 角點座標offset和角點embedding。Embedding用於grouping,座標offset則是對角點座標從heatmap映射回原輸入image大小時作的微調操作。
如表1所示,作者深度分析了CornerNet,在COCO資料集上計算了false discovery
值。
其中
,
表示Average-Precision,
,
是
時的平均精度,
是
的平均值,
,
表示目標的scale,small(area<
),medium(
area<
),large(area>
)。
從表1中可見,即使IOU閾值很低時,錯誤bbox的比例依然還是較大
,這表示平均每100 個預測bbox中有32。7個與gt box的最大IOU 低於0。05。在目標scale較小時,錯誤bbox的比例甚至高達60。3%。造成這種現象的原因之一就是CornerNet(Corner Pooling)無法觀察bbox的內部區域。為了使CornerNet能認識bbox之內的視覺pattern,一種可能的辦法是將CornerNet適配到2-stage detector中去,使用RoI pooling去觀察bbox之內的視覺pattern,即增加一個分支,使用RoI pooling對bbox先進行pooling操作,然後增加layers以判斷bbox是否是positive,顯然這種方法大大增加了計算量。
這就是本文動機,提出了一個高效的替代方案,CenterNet ,能夠探測bbox內部的視覺pattern,以解決CornerNet中很多錯誤bbox的問題。為了檢測目標,CenterNet使用三個keypoints,而非CornerNet使用的兩個。CenterNet保持了CornerNet的 1-stage 這個優點,同時部分繼承了RoI pooling的功能性。由於僅僅關注中心區域的資訊,方法的計算代價還是很小的。
Keypoint Triplets目標檢測
網路結構如圖2,使用中心keypoint以及一對corners表徵一個目標。
具體來講,在CornerNet的基礎上,增加一個Center Keypoint的heatmap和相應的offsets。使用與CornerNet中一樣的方法,生成top k 個bounding boxes,然後為了過濾掉錯誤的bounding boxes,利用center keypoints按如下步驟進行:1)根據bbox的得分選擇top k個bboxes;2)根據center keypoint的offset將center keypoint 重新映射回 輸入image中去;3)對bbox定義一箇中心區域,並檢查這個中心區域是否包含center keypoint。注意,center keypoint的分類必須要與bbox的分類一致;4)如果中心區域檢測出一個center keypoint,則保留這個bbox,同時,bbox的得分替換為三個keypoints的得分均值。
中心區域的size顯然是很關鍵的。小的中心區域會導致小bbox的召回率較低,而大的中心區域則降低大bbox的精度。因此,中心區域size根據bbox的size而進行調整是比較合適的。對於小bbox,中心區域的size較大些,而對於大bbox,中心區域的size則較小些。假設bbox
需要被保留,記其左上角和右下角座標為
,定義一箇中心區域
,其左上角和右下角座標為
,那麼滿足:
其中n是奇數。要弄懂為啥有這個關係其實不難,反過來,根據中心區域的左上角和右下角座標,易知中心區域的中心點與bbox的中心點是重合的,
然後中心區域的size為
可見中心區域大小是預測bbox大小的
倍,且位於預測bbox中心。
本文作者對於bbox的scale小於150和大於150時分別設定
和
,如圖3所示,
Enriching Center and Corner Information
Center Pooling
目標的幾何中心不一定能傳遞可識別的視覺pattern,比如 人類頭部包含了較強的視覺pattern,而中心往往在人體中間。為了解決這個問題,作者提出Center Pooling以捕獲更豐富的可識別視覺pattern。
圖4(a)為Center Pooling的基本原理,backbone輸出feature map(參考圖2),為了判斷feature map上某pixel是否是center keypoint,需要從水平和垂直兩個方向尋找最大值,並將這兩個最大值相加。這個過程其實與Corner Pooling類似。
Cascade corner pooling
Corners通常位於目標外部,其區域性特徵都來自於背景,無法表徵目標,CornerNet使用corner pooling來解決這個問題。如圖4(b)所示,Corner Pooling從邊界方向上尋找最大值以確定Corner,但是這使得Corner對邊界敏感。為了解決這個問題,作者令Corner觀察目標的視覺pattern。如圖4(c)所示,首先沿著邊界方向尋找邊界最大值,然後從最大值位置處向目標內部觀察並尋找內部最大值,最後將這兩個最大值相加。對topmost,leftmost,bottommost和rightmost,分別是垂直向bottom的方向,水平向right的方向,垂直向top的方向以及水平向left的方向尋找內部最大值。如此,Corner就同時具備了邊界資訊和目標的視覺pattern。
Center Pooling和Cascade corner pooling如圖5所示,
圖5(a)是Center Pooling的結構圖,為了得到某方向的最大值,例如水平方向,則將left pooling和right pooling順次連線,垂直方向類似。圖5(b)是Cascade top corner pooling結構圖,相比較於Corner Pooling,在top corner pooling之前增加了left corner pooling。注意:圖5(b)僅僅是top corner pooling,要完成類似CornerNet中的top-left corner pooling,還需要另外進行left corner pooling,這是與top corner pooling對稱的的結構,即 left pooling和top pooling位置互換,然後將top corner pooling和left corner pooling這兩個結構的輸出相加,bottom corner pooling和right corner pooling類似處理。
Training and Inference
Training
網路從頭開始訓練,輸入image的大小為
,輸出heatmap大小為
。使用與CornerNet中相同的資料擴增策略以便訓練出一個robust的model,使用Adam最佳化訓練損失:
這個損失顯然是在原CornerNet的損失基礎上增加center的檢測損失和座標偏差損失。
Inference
對於單尺度測試,將原image以及水平翻轉image作為網路輸入。對多尺度測試,則將原image和水平翻轉image以解析度的0。6,1,1。2,1。5和1。8倍作為網路輸入,在heatmap上選擇top 70 center keypoints,top 70 top-left corners以及top 70 bottom-right corners用於檢測bbox。將水平翻轉image上檢測出的bbox 再水平翻轉回去併合並進 原image上檢測出來的bbox。使用Soft-nms 移除冗餘的bbox。最終根據得分選擇top 100 bbox。
Experiments
實驗部分的介紹閱讀原論文就好了,這裡挑幾點說明一下。
Incorrect Bounding Box Reduction
AP 度量反應了網路能預測多少高質量的目標bbox(
),但是無法反應網路生成多少不正確的目標bbox(
),FD則是一個合適的度量,反應了不正確的bbox的比例。表3顯示了CornerNet和CenterNet的FD,
其中511表示輸入image的邊長,52和104表示backbone分別使用hourglass-52和hourglass-104,從表中可見,CornerNet生成更多的不正確bbox,並且比起medium和large bbox,會生成更多不正確的small bbox。
Ablation Study
Central region exploration 增加center heatmap分支使得AP上升2。3%(從37。6%到39。9%),在小目標下,AP上升4。6%,這個提升比其他目標尺度(medium,large)更明顯,對大目標的AP提升近乎可以忽略(從52。2%到52。3%)。從機率上來講,這也不足為奇,因為小目標的center keypoint比起大目標的更加容易定位。
Error Analysis
探測bbox內的視覺模式依賴於center keypoints。如果錯過某個center keypoint(未能被檢測到),那麼CenterNet將錯過bbox內的視覺模式。將預測center keypoint替代為ground truth center keypoints,然後發現結果如表5所示,
從表5中可見,使用了GT center keypoints,AP有不同程度的提升,這說明基於center keypoint的目標檢測遠遠未達到效能瓶頸。
總結
為了降低CornerNet的FD(false detection),在CornerNet基礎上透過修改Corner Pooling為Cascade Corner Pooling,並增加Center Keypoint(同時提出center pooling用於檢測center keypoint),然後將改進後的CornerNet檢測出來的bbox,利用center keypoint進行過濾無效的bbox,達到降低FD的目的。