目标检测系列(七)——CornerNet:detecting objects as paired keypoints
文章目錄
- 摘要
- 1、引言
- 2、相關工作
- 3、CornerNet
- 3.1 概況
- 3.2 檢測角點
- 3.3 角點的分組
- 3.4 Corner Pooling
- 3.5 沙漏網絡
論文鏈接: https://arxiv.org/abs/1808.01244
代碼鏈接: https://github.com/umich-vl/CornerNet
摘要
本文提出了CornetNet,一種利用單個卷積神經網絡來檢測b-box的方法,且是通過檢測b-box的“左上”和“右下”兩個關鍵點來檢測b-box。
相比之前的單階段檢測器,本文的方法不需要設定一系列的anchor box,且本文引入了corner pooling,有助于網絡更好的定位corners。
CornerNet網絡的效果:在 MS COCO 上獲得了42.2%的 AP,比目前的所有單階段檢測器都要好。
1、引言
目前的單階段檢測因為引入了anchor機制,獲得可以和兩階段檢測相媲美的精度的同時,有較高的效率。單階段檢測器在輸入圖像上放置了密集的 anchor ,并通過微調和回歸 box 尺寸來得到最終的預測。
使用anchor的方法的缺點:
-
正負樣本不均衡:大部分檢測算法的anchor數量都成千上萬,(DSSD中使用了多于40k個anchor,RetinaNet 中使用了多于100k個anchor)但是一張圖中的目標數量并沒有那么多,這就導致正樣本數量會遠遠小于負樣本,因此有了對負樣本做欠采樣以及 focal loss等算法來解決這個問題。
-
引入更多的超參數,比如anchor的數量、大小和寬高比等。
本文 CornerNet 的特點:
-
一種新的、無anchor的單階段目標檢測方法
-
檢測 b-box 的左上和右下角的角點
-
使用單個卷積神經網絡來預測同一目標類別(category)中的所有實例的“左上”角點的和heatmap、右下角點的heatmap、每個檢測到角點的 embedding vector。嵌入向量用于對屬于同一目標的corner進行分組,也就是該網絡的訓練目標是實現對同一目標的“左上”和“右下”角點進行匹配,將兩者預測得到相同的嵌入向量。
-
本文的方法很大程度地簡化了網絡的輸出,并且無需設計相應的 anchor。
-
本文方法靈感源于Newell等人的文章(2017)中的多人姿態估計上下文中關聯嵌入方法,結構如圖1所示。
圖1 將目標檢測為一對b-box的角點利用卷積網絡,對所有的左上角點生成一幅熱力圖,對所有右下角點生成一幅熱力圖,并且對所有檢測到的角點生成一個嵌入式向量。
訓練網絡將屬于同一目標的角點預測成相同的嵌入式向量
-
corner pooling:一種新的 pooling 方法,有助于卷積網絡更好的定位b-box的角點。一個b-box的corner常常位于目標之外,如圖2所示,所以不能使用局部信息來對corner進行定位。
為了確定在某個像素點上是否有“左上”角點,需要從目標邊界的最上邊從右至左來進行水平掃描,從邊界的左邊從下至上來進行垂直掃描,該掃描方法啟發了我們corner pooling 方法的產生。最終的輸出源于兩個特征圖,它包含兩個特征圖; 在每個像素位置,它最大池化從第一個特征映射到右側的所有特征向量,最大池化從第二個特征映射下面的所有特征向量,然后將兩個池化結果一起添加,如圖3所示
我們認為,檢測角點效果比檢測b-box中心點或region proposal 方法更好的原因有兩個: -
b-box 的中心確定后也很難確定b-box的位置,因為其基于目標的四個邊,而定位角點只基于兩個邊,更簡單。且使用 corner pooling使其更加簡單,因為該pooling方法能夠對corner的先驗知識進行編碼。
-
角點能夠提供更有效的方法來密集的離散化box空間,只需要 O(wh)O(wh)O(wh) 個角點就可以表示 0(w2h2)0(w^2h^2)0(w2h2) 個 anchor boxes。
2、相關工作
已有的兩階段目標檢測方法精度高但效率較低,已有的單階段目標檢測方法也借鑒了 anchor-based 方法, SSD 和 RetinaNet 都使用了很多的anchor來進行檢測,但 Lin 等人(2017)在文章中提出,稠密的 anchor box會導致嚴重的正負樣本不平衡問題,從而發生難以訓練或訓練效果較差的問題。故他們提出了focal loss的方法,來動態調整每個anchor box的權重,使得單階段的方法能夠接近兩階段檢測的方法。
RefineDet(2017)提出了對anchor box 進行濾波的方法來減少負box的量,粗尺度的調整 anchor box。
本文的方法受啟發于Newell的多人姿態估計上下文中關聯嵌入[27]。Newell等人提出了一種在單個網絡中檢測和分組人類關節的方法。在他們的方法中,每個檢測到的人類關節都有一個嵌入向量。這些關節是根據它們嵌入向量的距離來分組的。
本文是第一個將目標檢測任務定義為同時檢測和分組角點的任務。我們的另一個新穎之處在于corner pooling layer,它有助于更好定位角點。我們還對沙漏結構進行了顯著地修改,并添加了新的focal loss[23]的變體,以幫助更好地訓練網絡。
3、CornerNet
3.1 概況
cornernet 是通過檢測b-box的左上和右下角點來檢測一個目標的,通過一個卷積網絡預測兩組熱力圖來表示不同類別目標的角點位置,一個熱力圖表示左上角點,一個熱力圖表示右下角點。
神經網絡同時可以對每個檢測到的角點預測嵌入向量,兩個源于同一b-box的角點向量距離肯定是最短的。
為了產生緊的b-box,網絡同時預測偏移來稍微調整角點的位置,有了預測的熱力圖、嵌入向量和偏移,我們就可以使用簡單的后處理方法來得到最終的b-box。
圖4展示了 CornerNet 的結構,我們使用沙漏網絡(hourglass network)作為backbone,沙漏網絡之后跟兩個預測模塊:一個模塊是左上角點,另一個模塊是右下角點。
每個模塊都有其自己的corner pooling 模型對沙漏網絡的輸出進行pooling,即在預測熱力圖、嵌入向量和偏移之前就pooling。
不同于其他檢測器,我們沒有使用來自不同尺度的特征。
3.2 檢測角點
我們需要預測兩組熱力圖,一組是左上角點的熱力圖,另一組是右下角點的熱力圖。
每組熱力圖有 C 個通道(C 為目標類別),大小為 HxW,沒有背景通道。每個通道是表示每個類別的角點的二值掩膜。
對于每個角點,有一個真值 positive 位置,其余的都是 negative 位置,訓練過程中,我們沒有對負位置都使用相同的懲罰,而是根據其到正位置的半徑距離來懲罰,因為一對錯誤的角點檢測如果和正確的角點檢測相距很近,其產生的框和真實框交并比會很大,如圖5所示。
我們通過確保半徑內的一對點生成的邊界框與ground-truth的IoU ≥ t(我們在所有實驗中將t設置為0.3)來確定物體的大小,從而確定半徑。
給定半徑之后,懲罰的量會根據非標準的 2D 高斯分布e?x2+y22δ2e^{-\frac{x^2+y^2}{2\delta^2}}e?2δ2x2+y2?來確定,該高斯分布的中心是在正例位置,且其 δ\deltaδ 是半徑的1/3。
令 pcijp_{cij}pcij? 表示預測的熱力圖中類別 c 在位置 (i,j) 上的得分,ycijy_{cij}ycij? 是用非標準化高斯增強得到的真實熱力圖。
定義 focal loss 的變體如下:
- N 是圖像中目標的個數
- α\alphaα 和 β\betaβ 是控制每個點的權重(貢獻量)的超參數(α=2\alpha=2α=2 、 β=4\beta=4β=4 )
利用 ycijy_{cij}ycij? 中編碼的高斯凸點,(1?ycij)(1?ycij)(1?ycij) 減少了ground-truth周圍點的懲罰。
許多網絡使用下采樣層來綜合全局信息,且減少內存使用,當在圖像的全卷積過程中使用該方法時,網絡的輸出總數小于輸入圖像的大小,所以輸入圖像的位置 (x,y)(x,y)(x,y) 會投影到熱力圖中的(?xn?,?yn?)(\lfloor \frac{x}{n}\rfloor,\lfloor \frac{y}{n}\rfloor)(?nx??,?ny??),其中 nnn 是下采樣因子。
當從熱力圖中定位原圖中的位置時,可能會丟失一定的精度,這會很大的影響小的b-box和其真實框的 IoU,所以在從熱力圖估計原圖中的位置的時候,先估計一個offset來調整一下角點的位置。
其中,OkO_kOk? 是偏移 offset, xkx_kxk? 和 yky_kyk? 是角點 kkk 的坐標。
我們預測的所有類別的左上角共享一組偏移,右下角共享一組偏移。
訓練過程中,我們在真實角點的位置使用 smooth L1 loss :
3.3 角點的分組
一個圖像中可能出現多種不同類別的目標,所以可能會檢測出來多種左上角和右下角的角點,我們需要確定一組左上+右下角點是否源于同一個box。
判斷的方法源于 Newell,因為網絡對源于同一個box的角點預測的嵌入向量的距離是最短的,我們可以基于左上和右下角點的嵌入向量的距離來對角點進行分組,而嵌入向量內在的值是不用關心的,我們只使用兩者的距離。
我們只使用以為的嵌入向量,令etke_{t_k}etk??表示目標 kkk 的 top-left角點,ebke_{b_k}ebk??表示目標 kkk 的 bottom-right 角點。
我們使用 “pull” loss 來訓練網絡來分組角點,使用“push” loss 來分離角點:
其中,eke_kek? 是 etke_{t_k}etk?? 和 ebke_{b_k}ebk?? 的均值,令 Δ=1\Delta=1Δ=1,與偏移損失類似,我們僅在ground-truth角點位置應用損失。
3.4 Corner Pooling
如圖2所示,通常沒有局部視覺證明角點的存在,為了確定一個像素點是不是左上角點(top-left),我們需要從目標邊界最上面從右向左水平掃描,從目標邊界的最左邊從下向上垂直掃描最大值。
我們提出了 corner pooling 來通過編碼一直先驗信息來更好的定位角點。
假設我們想要確定位置 (i,j)(i,j)(i,j) 的像素是否是一個 top-left 角點,令ftf_tft? 和 flf_lfl? 作為 top-left pooling 層的輸入, ftijf_{t_{ij}}ftij?? 和 flijf_{l_{ij}}flij?? 分別為ftf_tft? 和 flf_lfl? 的 (i,j)(i,j)(i,j) 位置上的向量。
特征圖大小為 H×WH\times WH×W,corner pooling 層首先對ftf_tft? 中的 (i,j)(i,j)(i,j) 和 (i,H)(i,H)(i,H) 之間的像素進行最大池化,得到 tijt_{ij}tij?。之后對 flf_lfl? 中的(i,j)(i,j)(i,j) 和 (W,j)(W,j)(W,j) 之間的像素進行最大池化,得到 lijl_{ij}lij?。最后,將 tijt_{ij}tij? 和 lijl_{ij}lij? 相加,結算公式如下:
其中,我們使用的是像素域最大化操作,其過程如圖6所示,右下角點的corner pooling 操作相同。
我們的對所有 (0,j)(0,j)(0,j) 和 (i,j)(i,j)(i,j) 之間的特征向量進行最大池化,對所有 (i,0)(i,0)(i,0) 和 (i,j)(i,j)(i,j) 之間的特征也進行最大池化,然后將兩者重合的地方相加即可。
corner pooling作用:用于預測熱力圖、嵌入向量、偏移
預測模塊結構如圖7所示,第一個部分是修正后的殘差模塊,該修正的殘差模塊中,將第一個 3x3 卷積模塊用 corner pooling 代替。
修正后的殘差模塊:首先用128個通道的3x3的卷積模塊處理從backbone網絡輸出的特征向量,之后使用 corner pooling。
殘差模塊之后:將經過 corner pooling 的特征向量輸入 256 個通道的 3x3 的Conv-BN 層,同時加上一個映射捷徑。
修正的殘差模塊之后連接一個有256通道的3x3卷積模塊,和 3 個Conv-ReLU-Conv 層來產生熱力圖、嵌入式向量和偏移。
3.5 沙漏網絡
CornerNet 網絡使用沙漏網絡作為backbone。
沙漏網絡最初提出是為了人體姿態估計任務,該網絡是一個全卷積網絡,包含了多個沙漏模塊。
沙漏模塊:首先對輸入特征利用一系列的卷積核最大池化進行下采樣,之后通過一系列上采用和卷積層來對特征進行上采樣,使得能夠獲得和原始輸入分辨率一樣的輸出。
因為最大池化會使得丟失一定的細節信息,所以使用跳躍連接層來重現。
當網絡中使用多個沙漏網絡時,沙漏模型可以重新處理特征,來捕捉信息的高層特征,該特性使得沙漏網絡成為目標檢測的理想backbone選擇。
本文的沙漏網絡(hourglass network)包含了兩個沙漏結構,并且我們做了一些修正。
- 我們沒有使用最大池化,使用步長為2來降低特征分辨率,我們降低了5倍的分辨率,并且提高了特征通道數(256,384,384,384,512)。
當對特征進行上采樣時,我們使用 2 個殘差模塊,之后使用最近鄰上采樣。
每個跳躍連接也是由 2 個殘差模塊組成的,沙漏網絡中間有4個512通道的殘差模塊,進入沙漏模塊之前,我們使用步長為2,通道數為128,的7x7的卷積模塊將圖像分辨率降低 4 倍,之后使用步長為2,通道數為256的殘差模塊。
類似于 Newell 的文章,我們也在訓練時增加了中間監督,但沒有給網絡添加中間預測回傳,這會損害網絡性能。
我們給第一個沙漏模塊的輸入和輸出都使用了 1x1 的 onv-BN 模塊,之后通過像素相加并使用 Relu 和殘差模塊,作為第二個沙漏模塊的輸入。
沙漏網絡的深度為104,不同于其他性能較好的檢測器,我們只使用的所有網絡的最后一層的輸出來預測。
總結
以上是生活随笔為你收集整理的目标检测系列(七)——CornerNet:detecting objects as paired keypoints的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微软 Office 365 世纪互联版已
- 下一篇: 目标检测系列(八)——CenterNet