天天看點

《CornerNet:Detecting Objects as Paired Keypoints》論文筆記1. 概述2. CornerNet3. 論文效果

1. 概述

這篇文章提出了CornerNet的目标檢測模型,該模型是一個直通檢測檢測模型,與Faster RCNN那種兩階段的檢測模型不一樣,更類似于SSD與YOLO。但是與SSD等模型不同的是其并不使用anchor boxes,而是提出了一種叫做corner pooling的操作幫助網絡更好地定位目标。在COCO資料集上的表現性能超過了所有現有的檢測網路。

anchor boxes機制在現有兩階段以及直通檢測網絡模型中被廣泛使用,這些模型中也是通過anchor的檢出來進行邊界的回歸。但是anchor也會帶來其的缺點,該文章中大體給出了兩點:

1)通常需要大量的anchor,在DSSD中需要40k,而在RetinaNet中則需要100k。這麼大量的anchor就帶來了正例anchor的數量與負例anchor的比例及其不成比例,進而降低了網絡的訓練速度。

2)anchor boxes的引入帶來了許多的超參數,并且需要進行細緻設計。包括anchor boxes的數量、尺寸、長寬比例。特别是在單一網絡在多尺度進行預測的情況下會變得複雜,每個尺度都需要獨立設計。

下圖是這篇文章中使用的網絡結構可以描述為:

《CornerNet:Detecting Objects as Paired Keypoints》論文筆記1. 概述2. CornerNet3. 論文效果

在該方法中舍棄傳統的anchor boxes思路,提出CornerNet模型預測目标邊界框的左上角和右下角一對頂點。使用單一卷積模型生成熱點圖和連接配接矢量:所有目标的左上角和所有目标的右下角熱點圖,每個頂點的連接配接矢量(embedding vector)。也就是該方法在卷積的輸出結果上,分别預測邊界框的左上角與右下角,之後尋找它們之間的對應關系。

主要思路其實來源于一篇多人姿态估計的論文。基于CNN的2D多人姿态估計方法,通常有2個思路(Bottom-Up Approaches和Top-Down Approaches):

Top-Down framework:就是先進行行人檢測,得到邊界框,然後在每一個邊界框中檢測人體關鍵點,連接配接成每個人的姿态,缺點是受人體檢測框影響較大,代表算法有RMPE;

Bottom-Up framework:就是先對整個圖檔進行每個人體關鍵點部件的檢測,再将檢測到的人體部位拼接成每個人的姿态,代表方法就是openpose。

在文章中給出了兩個創新點:

1)文章将目标檢測上升到方法論,基于多人姿态估計的Bottom-Up思想,首先同時預測定位框的頂點對(左上角和右下角)熱點圖和embedding vector,根據embedding vector對頂點進行分組,論文中提到分組的依據是同目标的兩個角點距離是很小的。

2)文章提出了corner pooling用于定位頂點。自然界的大部分目标是沒有邊界框也不會有矩形的頂點,依top-left corner pooling 為例,對每個channel,分别提取特征圖對應位置處的水準和垂直方向的最大值,然後求和。

《CornerNet:Detecting Objects as Paired Keypoints》論文筆記1. 概述2. CornerNet3. 論文效果

3)文中提出的CornerNet模型基于hourglass架構,使用focal loss的變體訓練神經網絡。

為什麼基于角點的檢測要比基于anchor boxes的檢測效果更好,這裡假設了兩個原因:

1)anchor boxes的中心是依賴于目标的四條邊,但是角點卻隻需要兩個邊,而且還是使用了corner pooling,因而表現比anchor好。

2)采用了更加高效的空間檢測框機制,這裡隻使用 O ( w ∗ h ) O(w*h) O(w∗h)個角點就代表了 O ( W 2 ∗ h 2 ) O(W^2*h^2) O(W2∗h2)的可能檢測框。

2. CornerNet

CornerNet的整體結構:

《CornerNet:Detecting Objects as Paired Keypoints》論文筆記1. 概述2. CornerNet3. 論文效果

上面的圖中給出的是CornerNet的網絡結構圖,可以看出CornerNet模型架構包含三部分,Hourglass Network,Bottom-right corners&Top-left Corners Heatmaps和Prediction Module。

其中Hourglass Network是人體姿态估計的典型架構,論文堆疊兩個Hourglass Network生成Top-left和Bottom-right corners,每一個corners都包括corners Pooling,以及對應的Heatmaps, Embeddings vector和offsets(為了提升框的精度)。embedding vector使相同目标的兩個頂點(左上角和右下角)距離最短, offsets用于調整生成更加緊密的邊界定位框。最後預測框也是在這三個生成的結果的基礎上使用後處理算法進行實作的。

2.1 Detecting Corners

Paper模型生成的heatmaps包含C channels(C是目标的類别,沒有background channel),每個channel是二進制掩膜,表示相應類别的頂點位置。

《CornerNet:Detecting Objects as Paired Keypoints》論文筆記1. 概述2. CornerNet3. 論文效果

對于每個頂點,隻有一個ground-truth,其他位置都是負樣本。但是網絡的輸出并不會從開始就與上圖示注的綠色虛線重合,因而是按照了一定的政策來進行組合的。具體來講是這樣的:在訓練過程,模型減少負樣本,在每個ground-truth頂點設定半徑r區域内都是正樣本,這是因為落在半徑r區域内的頂點依然可以生成有效的邊界定位框,論文中設定 I o U = 0.7 IoU=0.7 IoU=0.7。那麼對于與實際的定位有偏移的網絡輸出論文使用了懲罰,是按照沒有歸一化的而為高斯函數 e − x 2 + y 2 2 σ 2 e^{-\frac{x^2+y^2}{2\sigma^2}} e−2σ2x2+y2​設定的,其中 σ = 1 3 \sigma=\frac{1}{3} σ=31​,中心坐标是标注的角點定位。

p c i j p_{cij} pcij​表示類别為c,坐标是 ( i , j ) (i,j) (i,j)的預測熱點圖, y c i j y_{cij} ycij​表示相應位置的ground-truth,其指融合了前面的提到的高斯半徑。論文提出變體Focal loss表示檢測目标的損失函數:

《CornerNet:Detecting Objects as Paired Keypoints》論文筆記1. 概述2. CornerNet3. 論文效果

其中參數 N N N是圖檔中目标的總數,參數 α = 2 \alpha=2 α=2與 β = 4 \beta=4 β=4适用于控制每個部分的貢獻程度。

在卷積神經網絡中存在着下采樣層,這樣從原始的圖像輸入到最後的heatmap産生的這個過程會累計誤差,特别是在對一些小目标的物體進行檢測的時候,這樣的誤差就無法接受了,因而文章引入了偏移修正來修正它:

《CornerNet:Detecting Objects as Paired Keypoints》論文筆記1. 概述2. CornerNet3. 論文效果

然後使用L1損失與原圖示注的位置對其進行修正:

《CornerNet:Detecting Objects as Paired Keypoints》論文筆記1. 概述2. CornerNet3. 論文效果

最後的網絡損失函數是上面的幾個相加的形式:

《CornerNet:Detecting Objects as Paired Keypoints》論文筆記1. 概述2. CornerNet3. 論文效果

其中, α = β = 0.1 , γ = 1 \alpha=\beta=0.1,\gamma=1 α=β=0.1,γ=1。

2.2 Grouping Corners

輸入圖像會有多個目标,相應生成多個目标的左上角和右下角頂點。對頂點進行分組,論文引入Associative Embedding的思想,模型在訓練階段為每個corner預測相應的embedding vector,通過embedding vector使同一目标的頂點對距離最短,即是模型可以通過embedding vector為每個頂點分組。

模型訓練 L p u l l 損 失 函 數 L_{pull}損失函數 Lpull​損失函數使同一目标的頂點進行分組, L p u s h 損 失 函 數 L_{push}損失函數 Lpush​損失函數用于分離不同目标的頂點。 e t k e_{tk} etk​是左下角的頂點, e b k e_{bk} ebk​是右下角的頂點。

《CornerNet:Detecting Objects as Paired Keypoints》論文筆記1. 概述2. CornerNet3. 論文效果

2.3 Corner Pooling

2.3.1 top-left corner

一般來說在heatmap上并不存在直覺的選擇依據,因而文章中采用了corner pooling的方法。對于在左上角的角點(頂點)使用其在水準與垂直方向上分分别使用max pooling,然後對其結果合并來實作角點的定位,其運算流程可以通過下面這幅圖來進行說明

《CornerNet:Detecting Objects as Paired Keypoints》論文筆記1. 概述2. CornerNet3. 論文效果

對于要判定點 ( x , y ) (x,y) (x,y)是不是左上角的角點, 這裡使用 f t f_t ft​與 f l f_l fl​去代表這個左上角點pooling layer的特征圖,使用 f t i , j f_{t_{i,j}} fti,j​​與 f l i , j f_{l_{i,j}} fli,j​​來代表在位置 ( i , j ) (i,j) (i,j)處 f t f_t ft​與 f l f_l fl​的特征向量。對于輸入大小為 W ∗ H W*H W∗H大小的特征圖,計算位置 ( i , j ) (i,j) (i,j)處到 ( i , H ) (i,H) (i,H)在 f t f_t ft​的向量 t i , j t_{i,j} ti,j​,計算位置 ( i , j ) (i,j) (i,j)處到 ( j , W ) (j,W) (j,W)在 f l f_l fl​的向量 l i , j l_{i,j} li,j​,最後再将兩個加起來作為最後的輸出。

《CornerNet:Detecting Objects as Paired Keypoints》論文筆記1. 概述2. CornerNet3. 論文效果

2.3.2 bottom-right corner

bottom-right corner的計算與上面top-left的計算是類似的。它在 ( 0 , j ) (0,j) (0,j)到 ( i , j ) (i,j) (i,j)的特征圖與 ( i , 0 ) (i,0) (i,0)到 ( i , j ) (i,j) (i,j)的特征圖上進行最大池化操作之後再将兩者得到的結果相加得到最後的結果。

2.3.3 預測子產品

預測子產品使用的結構使用ResNet與卷積組合的形式,其結構(top-left corner部分)如下。最後預測生成Heatmap、Embeddings、Offsset。

《CornerNet:Detecting Objects as Paired Keypoints》論文筆記1. 概述2. CornerNet3. 論文效果

2.4 Hourglass Network

Hourglass Network同時包含了bottom-up(from high resolutions to low resolutions)和top-down (from low resolutions to high resolutions)。而且,整個網絡有多個bottom-up和top-down過程。這樣設計的目的是在各個尺度下抓取資訊。針對目标檢測任務,論文調整了Hourglass一些政策。

3. 論文效果

《CornerNet:Detecting Objects as Paired Keypoints》論文筆記1. 概述2. CornerNet3. 論文效果

**PS:**在這篇文章涉及到了SHM(Stack Hourglass Model),不了解的小夥伴可以參考這篇文章快速了解:Stacked Hourglass Networks - 堆疊沙漏網絡結構詳解

繼續閱讀