目標檢測新方法:CornerNet詳解


目標檢測新方法:CornerNet詳解

 

原文:https://arxiv.org/abs/1808.01244

源碼:https://github.com/umich-vl/CornerNet

CornerNet: Detecting Objects as Paired Keypoints (ECCV2018)

 

Hei Law, Jia Deng

University of Michigan, Ann Arbor

 

目錄

1 Motivation

2 Contribution

3 Framework

3.1 overview

3.2 Backbone: Hourglass Network

3.3 prediction modules

3.4 Corner pooling

4 Train

4.1 Loss function

4.2 Training details

5 Test

6 性能對比

7總結


 

1 Motivation

在state-of-the-art的目標檢測算法中,都用到了設置anchor-box的方法。anchor-box的使用使得one-stage的算法性能能夠挑戰two-stage。但是使用anchor-box會有兩個缺點:

1) anchor-box的數量需要設置很多 (DSSD: more than40k, RetinaNet: more than 100k) 。其中只有一小部分和ground truth重合,生成了大量的負例,造成正負樣本不平衡,降低了訓練效率。

2) anchor-box的使用引入了很多超參數,如anchor的數量,大小,長寬比。增加了算法的設計難度。

本文提出一種新的檢測方法,使用一對關鍵點:框的左上角和右下角來代替bounding box。

 

2 Contribution

1.用一對corner代替了anchor box,並提出了一種新的one-stage檢測方法。

2. 提出了一種新的池化方法:corner pooling。

 

3 Framework

3.1 overview

圖1 overview  of CornerNet

CornerNet是一種one-stage檢測方法,其框架如圖1所示。主干網采用了Hourglass Network。主干網后緊跟兩個prediction modules,其中一個檢測top-left corners ,另一個檢測bottom-right corners,最后對兩組corner進行篩選,組合,修正得到object的一對corners,從而定位object的box。

圖2  Heatmaps和Embeddings

Heatmaps和Embeddings都是prediction modules最后生成出來的特征圖,top-left corners 和bottom-right corners各有一組。Heatmaps預測哪些點最有可能是Corners點,Embeddings用於表征屬於相同對象的corner的相似度。它們的通道數都為C,C是object的類別數 (不包括background) 。最后的Offsets用於對corner的位置進行修正。每個corner修正前的坐標位置就是該corner在feature maps上的坐標點映射回原圖的位置。

從圖2中我們可以看出,綠框中兩個corner對應位置的Embedding的features分布相似度高,所以代表這對corner屬於同一個object,黃框同理。

3.2 Backbone: Hourglass Network

Hourglass Network出自論文:Stacked Hourglass Networks for Human Pose Estimation。這里不再闡述具體結構,原作者也只用了很小的篇幅描述這部分內容。

圖3 Hourglass Network結構

一個Hourglass Network由若干個Hourglass組成,Hourglass的具體結構如圖4。

圖4 A single Hourglass

Hourglass先由卷積和池化將feature maps下采樣到一個很小的尺度,之后再用nearest neighbor upsampling的方法進行上采樣,將feature maps還原到最開始的尺度。不難看出,下采樣和上采樣是對稱的,並且在每個upsampling層都有一個skip connection,skip connection上是一個residual modules。

使用這種沙漏結構的目的是為了反復獲取不同尺度下圖片所包含的信息。例如一些局部信息,包括臉部和手部信息。人體姿態估計也需要對整個人體做一個理解,也就是一些全局信息,包括人體的方位,肢體的動作以及相鄰關節點的關系。最后通過上采樣和殘差結構將局部信息和全局信息組合起來。

CornerNet采用了2個Hourglass組成的Hourglass Network,作者在使用Hourglass時做了一些小調整,包括:

1) Hourglass在下采樣時不再進行max-pooling,而是在卷積時通過stride=2進行下采樣。下采樣的卷積進行5次,輸出feature maps的通道數分別為(256, 384, 384, 384, 512)

2) 在每個skip connection,有兩個residual modules。

3) 圖片進入Hourglass前,進行了2次下采樣。使用一個kernel size=7*7,stride=2,channel=128的卷積和一個stride=2,channel=256的residual block,將width和height縮小為以前的1/4。

 

3.3 prediction modules

圖5 prediction modules (Top-left)

Top-left和bottom-right的prediction modules結構相同,我們以Top-left為例,如圖5所示。Prediction modules的前半部分類似殘差結構。Backbone中的feature maps進入prediction modules后分成三條支路:上面兩條支路經過3*3的卷積后,進行corner pooling,相加匯集成1路,隨后再進行3x3的卷積和batch normalization;最下面的支路進行1*1的卷積和batch normalization 后,與上路相加后送入到Relu函數中。隨后,再對feature maps進行3*3的卷積,接着分三路3*3的卷積+Relu后產生了Heatmaps, Embeddings, Offsets三組feature maps。(在最后一層,原作者給的圖和其文字描述不一致)

 

3.4 Corner pooling

圖6 corner pooling (Top-left)

Corner pooling是作者在CornerNet中提出的一種新的池化方式,用在prediction modules中。如果讀者們仔細思考這種池化方式,會發現Corner pooling設計得十分精妙。

池化方法如圖6所示(以Top-left為例,Bottom-right與其方向相反)。對於第1組feature maps,對每行feature scores按從右向左的順序選擇已滑動過范圍的最大值,對於第2組feature maps,對每列feature scores按從下向上的順序選擇已滑動過范圍的最大值。

那么,作者提出corner pooling的動機是什么呢?其實為了更好地適應corner的檢測。在目標檢測的任務中,object的corner往往在object之外,所以corner的檢測不能根據局部的特征,而是應該對該點所在行的所有特征與列的所有特征進行掃描。

舉個例子,如果我們能在某行和某列檢測到同一個object的邊界特征,那么這行和這列的交點就是corner,這是一種間接且有效的找corner的方法。

還有一點值得注意的是,池化時不能直接對整行或整列進行max pooling,當一張圖上有多個目標時,這樣會導致誤檢。

 

4 Train

4.1 Loss function

對於Heatmaps, Embeddings, Offsets三組feature maps,都各自用於一種loss計算。

Heatmaps: detecting corners

該loss是Focal loss的變體,其中,pcij代表類別C的predicted corner在位置 (i, j) 處的得分,得分越高就越可能是corner。ycij表示ground truth的Heatmaps,由Gaussian公式算出,中心點是ground truth的位置,σ=1/3,是一個超參數。(1-ycij)可以理解predicted corner到gt corner的距離,只是這個距離被Gaussian非線性化了,使得負樣本的懲罰減少了。

Embeddings: grouping corners

其中,etk是object左上角的embedding得分,ebk是object右下角的embedding得分,ek代表etk和ebk的均值。N代表gt中的object數量。

Pull loss越小,則同一object的左上角和右下角的embedding得分距離越小;Push loss越小,則不同object的左上角和右下角的embedding得分距離越大。

Offsets: correcting corners’ position

  代表Offsets的predicted offset;Ok代表gt的offset;N代表gt中的object數量。

我們得到total loss:

其中,α, β, γ是超參數,分別取0.1, 0.1, 1。

4.2 Training details

1) 隨機初始化的,沒有在任何外部數據集上進行預訓練。

2) 遵循Focal loss for dense object detection中的方法設置預測Heatmaps的卷積層的biases。

3) 網絡的輸入分辨率是511×511, 輸出分辨率為128×128。

4) 為了減少過擬合,我們采用了標准的data augmentation,包括隨機水平翻轉、隨機縮放、隨機裁剪和隨機色彩抖動,其中包括調整圖像的亮度,飽和度和對比度。

5) 使用PCA分析圖像數據。

6) 使用Adam優化訓練損失

 

5 Test

測試時,使用simple post-processing算法從Heatmaps, Embeddings, Offsets生成邊界框。首先在heatmaps上使用3*3的max pooling進行非極大值抑制(NMS)。然后從Heatmaps中選擇scores前100的top-left corners和前100的bottom-right corners,corner的位置由Offsets上相應的scores調整。 最后,計算top-left corners和bottom-right corners所對應的Embeddings的L1距離。距離大於0.5或包含不同類別的corners pairs將被剔除。配對上的top-left corners和bottom-right corners以Heatmaps的平均得分用作檢測分數。

作者沒有使用resize的方法保持輸入圖像的原始分辨率一致,而是維持原分辨率,用0填充缺失和超出的部分。 原始圖像和翻轉圖像都參與測試,並應用soft-nms來抑制冗余檢測。 僅記錄前100個檢測項。 Titan X(PASCAL)GPU上的每個圖像的平均檢測時間為244ms。使用檢測速度top100的測試圖片,計算出CornerNet在TitanX(PASCAL)GPU上的平均推斷時間為每張圖片224ms。

 

6 性能對比

 

7 總結

這篇文章提出了一種全新的one-stage目標檢測算法,讓人耳目一新。不過雖說是one-stage算法,其速度還是比較慢的。文章里面還有好多細節可以摳,比如說Heatmaps, Embeddings, Offsets的輸出按理都應該是0~1之間的一個數,可是作者在這里並沒有闡明是怎么處理的,只有擼完代碼再回過頭來看了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM