1. 程式人生 > >ECCV2018 | 論文閱讀CornerNet: Detecting Objects as Paired Keypoints

ECCV2018 | 論文閱讀CornerNet: Detecting Objects as Paired Keypoints

CornerNet: Detecting Objects as Paired Keypoints

論文內容詳細整理 !!! 理解CornerNet,看這一篇就夠了~

論文連結:https://arxiv.org/abs/1808.01244
程式碼連結:https://github.com/umich-vl/CornerNet

摘要

我們提出了一種新的目標檢測方法,使用單個卷積神經網路將目標邊界框檢測為一對關鍵點(即邊界框的左上角和右下角)。通過將目標檢測為成對關鍵點,我們消除了現有的one stage檢測器設計中對一組anchors的需要。除了上述新穎的構想,文章還引入了corner pooling,這是一種新型的池化層,可以幫助網路更好地定位邊界框的角點。CornerNet在MS COCO上實現了42.1%的AP,優於所有現有的one stage檢測器。

1 介紹

基於卷積神經網路的物件檢測器(ConvNets)[20,36,15]已經在各種具有挑戰性的基準測試中取得了最新成果[24,8,9]。現有技術方法的一個共同組成部分是anchor boxes[32,35],它們是包含各種尺寸和寬高比的矩形框,是用作檢測的候選框。anchor boxes廣泛用於one stage檢測器[25,10,31,23],它可以獲得與two stage檢測器高度相當的結果[32,12,11,13],同時效率更高。 one stage檢測器將anchor boxes密集地分佈在影象上,通過對anchor boxes進行評分,並通過迴歸來改進其座標來生成最終的邊界框預測。

但anchor boxes的使用有兩個缺點。 首先,我們通常需要一組非常大的anchor boxes,例如: 在DSSD[10]中超過4萬,在RetinaNet[23]中超過10萬, 這是因為訓練器被訓練以分類每個anchor boxes是否與ground truth充分重疊,並且需要大量anchor boxes以確保與大多數ground truth充分重疊。 結果,只有一小部分anchor boxes與ground truth重疊; 這在正負樣本之間造成了巨大的不平衡,減慢了訓練速度[23]。

其次,anchor boxes的使用引入了許多超引數和設計選擇。 這些包括多少個box,大小和寬高比。 這些選擇主要是通過ad-hoc啟發式方法進行的,並且當與多尺度架構相結合時可能會變得更加複雜,其中單個網路在多個解析度下進行單獨預測,每個尺度使用不同的特徵和它自己的一組anchor boxes[25,10,23]。

在本文中,我們介紹了CornerNet,這是一種新的one stage目標檢測方法,可以消除anchor boxes。 我們將一個目標物體檢測為一對關鍵點——邊界框的左上角和右下角。 我們使用單個卷積網路來預測同一物體類別的所有例項的左上角的熱圖,所有右下角的熱圖,以及每個檢測到的角點的嵌入向量。 嵌入用於對屬於同一目標的一對角點進行分組——訓練網路以預測它們的類似嵌入。 我們的方法極大地簡化了網路的輸出,並且無需設計anchor boxes。我們的方法受到Newell等人在多人姿態估計上下文中關聯嵌入的啟發[27]。 圖1說明了我們方法的整體流程。


圖1.我們將一個目標檢測為一對組合在一起的邊界框角點。 卷積網路輸出一個左上角熱圖和一個右下角熱圖,並輸出每個檢測到的角點的嵌入向量。 訓練網路以預測屬於同一目標的角點的類似嵌入。


圖2.通常沒有區域性證據來確定邊界框角的位置。 我們通過提出一種新型別的池化層來解決這個問題。

CornerNet的另一個新穎元件是corner pooling,這是一種新型的池化層,可幫助卷積網路更好地定位邊界框的角點。 邊界框的一角通常在目標之外,參考圓形的情況以及圖2中的例子。在這種情況下,角點不能根據當前的資訊進行定位。相反,為了確定畫素位置是否有左上角,我們需要水平地向右看目標的最上面邊界,垂直地向底部看物體的最左邊邊界。 這激發了我們的corner pooling layer:它包含兩個特徵圖; 在每個畫素位置,它最大池化從第一個特徵對映到右側的所有特徵向量,最大池化從第二個特徵對映下面的所有特徵向量,然後將兩個池化結果一起新增,如圖3所示。

圖3.Corner pooling: 對於每個通道,我們採用兩個方向(紅線)的最大值(紅點),每個方向都來自一個單獨的特徵圖,並將兩個最大值加在一起(藍點)。

我們假設了兩個原因,為什麼檢測角點會比檢測邊界框中心或proposals更好。首先,盒子的中心可能更難以定位,因為它取決於目標的所有4個邊,而定位角取決於2邊,因此更容易,甚至更多的corner pooling,它編碼一些明確的關於角點定義的先驗資訊。 其次,角點提供了一種更有效的方式來密集地離散邊界框的空間:我們只需要用 O ( w h ) O(wh) 角點來表示 O ( w 2 h 2 ) O(w^2h^2) 可能的anchor boxes。

我們證明了CornerNet對MS COCO資料集的有效性。CornerNet實現了42.1%的AP,優於所有現有的one-stage檢測器。此外,通過ablation studies(即模型簡化測試,去掉該結構的網路與加上該結構的網路所得到的結果進行對比),我們發現Corner pooling對於CornerNet的卓越效能起到至關重要的作用。

2 相關工作

Two-stage目標檢測器
Two-stage目標檢測由R-CNN首次引入並推廣[12]。Two-stage檢測器生成一組稀疏的感興趣區域(RoIs),並通過網路對每個區域進行分類。R-CNN使用低層次視覺演算法生成(RoIs)[41,47]。然後從影象中提取每個區域,由ConvNet獨立處理,這將導致大量計算冗餘。後來,SPP-Net[14]和Fast R-CNN[11]改進了R-CNN,設計了一個特殊的池化層(金字塔池化),將每個區域從feature map中池化。然而,兩者仍然依賴於單獨的proposals演算法,不能進行端到端訓練。Faster-RCNN[32]通過引入區域生成網路(RPN)來去除低層次的proposals演算法,RPN從一組預先確定的候選框(通常稱為anchor boxes)中生成proposals。這不僅使檢測器更加高效,通過RPN與檢測網路的聯合訓練,可實現端到端訓練。R-FCN[6]將全連線子檢測網路替換為完全卷積子檢測網路,進一步提高了Faster R-CNN的檢測效率。其他的工作主要集中在結合子類別資訊[42],用更多的上下文資訊在多個尺度上生成目標的proposals[1,3,35,22],選擇更好的特徵[44],提高速度[21],並行處理和更好的訓練過程[37]。

One-stage目標檢測器
另一方面,YOLO[30]和SSD[25]推廣了one-stage方法,該方法消除了RoI池化步驟,並在單個網路中檢測目標。One-stage檢測器通常比two-stage檢測器計算效率更高,同時在不同的具有挑戰性的基準上保持著具有競爭性的效能。

SSD演算法將anchor boxes密集地放置在多個尺度的feature maps之上,直接對每個anchor boxes進行分類和細化。YOLO直接從影象中預測邊界框座標,後來在YOLO9000[31]中,通過使用anchor boxes進行了改進。DSSD[10]和RON[19]採用了類似沙漏的網路[28],使它們能夠通過跳躍連線將低階和高階特性結合起來,從而更準確地預測邊界框。然而,在RetinaNet[23]出現之前,這些one-stage檢測器的檢測精度仍然落後於two-stage檢測器。在RetinaNet[23]中,作者認為密集的anchor boxes在訓練中造成了正樣本和負樣本之間的巨大不平衡。這種不平衡導致訓練效率低下,從而導致結果不佳。他們提出了一種新的loss,Focal Loss,來動態調整每個anchor boxes的權重,並說明了他們的one-stage檢測器檢測效能優於two-stage檢測器。RefineDet[45]建議對anchor boxes進行過濾,以減少負樣本的數量,並對anchor boxes進行粗略的調整。

DeNet[39]是一種two-stage檢測器,不使用anchor boxes就能生成RoIs。它首先確定每個位置屬於邊界框的左上角、右上角、左下角或右下角的可能性。然後,它通過列舉所有可能的角點組合來生成RoI,並遵循標準的two-stage方法對每個RoI進行分類。本文提出的方法和DeNet很不一樣。首先,DeNet不識別兩個角是否來自同一目標,並依賴子檢測網路來拒絕糟糕的RoI。相比之下,我們的方法是一種one-stage方法,使用單個卷積網路來檢測和分組角點。其次,DeNet在人工確定的位置上的區域提取特徵進行分類,而我們的方法不需要任何特徵選擇步驟。第三,引入corner pooling,一種新型的用於增強角點檢測的layer。

我們的方法受到Newell等人在多人姿態估計上下文中關聯嵌入的啟發[27]。Newell等人提出了一種在單個網路中檢測和分組人類關節的方法。在他們的方法中,每個檢測到的人類關節都有一個嵌入向量。這些關節是根據它們嵌入的距離來分組的。本文是第一個將目標檢測任務定義為同時檢測和分組角點的任務。我們的另一個新穎之處在於corner pooling layer,它有助於更好定位角點。我們還對沙漏結構進行了顯著地修改,並添加了新的focal loss[23]的變體,以幫助更好地訓練網路。

3 CornerNet

3.1 概述

在CornerNet中,我們將物體邊界框檢測為一對關鍵點(即邊界框的左上角和右下角)。卷積網路通過預測兩組熱圖來表示不同物體類別的角的位置,一組用於左上角,另一組用於右下角。 網路還預測每個檢測到的角的嵌入向量[27],使得來自同一目標的兩個角的嵌入之間的距離很小。 為了產生更緊密的邊界框,網路還預測偏移以稍微調整角的位置。 通過預測的熱圖嵌入偏移,我們應用一個簡單的後處理演算法來獲得最終的邊界框。

圖4提供了CornerNet的概述。 我們使用沙漏網路[28]作為CornerNet的骨幹網路。 沙漏網路之後是兩個預測模組。 一個模組用於左上角,而另一個模組用於右下角。 每個模組都有自己的corner pooling模組,在預測熱圖、嵌入和偏移之前,池化來自沙漏網路的特徵。 與許多其他物體探測器不同,我們不使用不同尺度的特徵來檢測不同大小的物體。 我們只將兩個模組應用於沙漏網路的輸出。

圖4
圖4. CornerNet概述。 骨幹網路之後是兩個預測模組,一個用於左上角,另一個用於右下角。 使用兩個模組的預測,我們定位並分組邊界框的角。

3.2 檢測角點

我們預測兩組熱圖,一組用於左上角,另一組用於右下角。 每組熱圖具有C個通道,其中C是分類的數量,並且大小為H×W。 沒有背景通道。 每個通道都是一個二進位制掩碼,用於表示該類的角點位置。

對於每個角點,有一個ground-truth正位置,其他所有的位置都是負值。 在訓練期間,我們沒有同等地懲罰負位置,而是減少對正位置半徑內的負位置給予的懲罰。 這是因為如果一對假角點檢測器靠近它們各自的ground-truth位置,它仍然可以產生一個與ground-truth充分重疊的邊界框(圖5)。我們通過確保半徑內的一對點生成的邊界框與ground-truth的IoU ≥ t(我們在所有實驗中將t設定為0.7)來確定物體的大小,從而確定半徑。 給定半徑,懲罰的減少量由非標準化的2D高斯   e x 2 + y 2 2 σ 2 \ e^{-\frac{x^2+y^2}{2σ^2}} 給出,其中心位於正位置,其 σ σ 是半徑的1/3。

圖5
圖5.用於訓練的“Ground-truth”熱圖。在正位置半徑範圍內(橙色圓圈)的方框(綠色虛線矩形)仍然與地ground-truth(紅色實心矩形)有很大的重疊。

p c i j p_{cij} 為預測熱圖中 c c 類位置 ( i , j ) (i,j) 的得分, y c i j y_{cij} 為用非標準化高斯增強的“ground-truth”熱圖。我們設計了一個區域性損失(focal loss)的變體[23]:
L d e t = 1 N c = 0 C i = 1 H J = 0 W { ( 1 p c i j ) α log ( p c i j ) if  y c i j  = 1 ( 1 y c i j ) β ( p c i j ) α log ( 1 p c i j ) otherwise 1 L_{det} = \frac{-1}{N}\sum_{c=0}^C\sum_{i=1}^H\sum_{J=0}^W \begin{cases} (1-p_{cij})^\alpha\log(p_{cij}) & \text{if $y_{cij}$ = 1} \\ (1-y_{cij})^\beta(p_{cij})^\alpha\log(1-p_{cij}) & \text{otherwise} \end{cases}(1)
其中N是影象中目標的數量, α \alpha β \beta 是控制每個點的貢獻的超引數(在所有實驗中我們將 α \alpha 設定為2, β \beta 設定為4)。利用 y c i j y_{cij} 中編碼的高斯凸點, ( 1 y c i j ) (1-y_{cij}) 項減少了ground-truth周圍的懲罰。

許多網路[15,28]涉及下采樣層以收集全域性資訊和減少記憶體使用。 當它們完全卷積應用於影象時,輸出的尺寸通常小於影象。 因此,影象中的位置 ( x , y ) (x,y) 被對映到熱圖中的位置 ( [ x n ] , [ y n ] ) ([\frac{x}{n}],[\frac{y}{n}]) ,其中n是下采樣因子。當我們將熱圖中的位置重新對映到輸入影象時,可能會丟失一些精度,這會極大地影響小邊界框與ground-truth之間的IoU。 為了解決這個問題,我們預測位置偏移,以稍微調整角位置,然後再將它們重新對映到輸入解析度。

o k = ( x k n [ x k n ] y k n [ y k n ] ) 2 o_k = \Bigl(\frac{x_k}{n}-\Bigl[\frac{x_k}{n}\Bigr],\frac{y_k}{n}-\Bigl[\frac{y_k}{n}\Bigr]\Bigr) (2)