您當前的位置:首頁 > 遊戲

目標檢測合集 | CenterNet-Points解析

作者:由 Mengcius 發表于 遊戲時間:2021-03-08

CenterNet: Objects as Points:UT Austin Xingyi Zhou, 伯克利 Dequan Wang(DLA的作者),被引用210次,

https://

arxiv。org/pdf/1904。0785

0。pdf

https://

github。com/xingyizhou/C

enterNet

核心思想

背景:大多目標檢測都會列出一個幾乎詳盡的潛在目標位置列表,並對每個位置進行分類。這是浪費,效率低下,需要額外的NMS後處理。基於滑動視窗的物件檢測器有點浪費,因為它們需要列舉所有可能的物件位置和尺寸。

Anchor-Free,用邊界框中心點來表示物件

使用關鍵點估計來找到中心點,其他屬性如物件大小、尺寸、三維範圍、方向和姿勢,則直接從中心位置的影象特徵迴歸。

特點:比相應的基於邊界框的檢測器更簡單、更快和更精確。沒有對後處理的非最大化抑制。

缺點:同一個類別中的某些物體的GT中心點,在下采樣時會擠到一塊,中心點重疊了,結果可能只能檢測到一個目標了,不過這種密集檢測本來就是難題。

網路結構

流程:目標檢測是一個標準的關鍵點估計問題 [3 OpenPose, 39,60]。

先將影象輸入到生成熱圖的全卷積網路 [37 FCN, 40],熱圖中的峰值就對應於物體中心。

再用每個峰值處的影象特徵來預測物體邊界框的高度和寬度。

Backbone:使用了幾種不同的全卷積編碼器-解碼器網路從影象 I 預測熱圖 ^Y :

A stacked Hourglass network(人體關鍵點檢測中常用);ResNet;Deep Layer Aggregation (DLA,伯克利 Fisher Yu Dequan Wang ,CVPR2018)

DLA是帶多級跳躍連線的影象分類網路,採用全卷積上取樣版的DLA,用deformable卷積來跳躍連線低層和輸出層;將原來上取樣層的卷積都替換成3x3的deformable卷積。在每個輸出head前加了一個的卷積,然後做1x1卷積得到期望輸出。

如圖 Figure6(a)表示Hourglass-104,Figure6(b)表示帶有反捲積做上取樣的ResNet-18,Figure6(c)表示經典的DLA-34網路,而Figure6(d)表示改進的DLA-34網路。

目標檢測合集 | CenterNet-Points解析

Head:在Backbone網路輸出特徵圖之後再接卷積層對映結果即可。比如在目標檢測任務中,用官方的原始碼(Pytorch)來表示一下最後三層,其中hm為heatmap;wh為對應中心點的width和height;reg為偏置量: 參考

(hm): Sequential(

(0): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))

(1): ReLU(inplace)

(2): Conv2d(64, 80, kernel_size=(1, 1), stride=(1, 1))

(wh): Sequential(

(0): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))

(1): ReLU(inplace)

(2): Conv2d(64, 2, kernel_size=(1, 1), stride=(1, 1))

(reg): Sequential(

(0): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))

(1): ReLU(inplace)

(2): Conv2d(64, 2, kernel_size=(1, 1), stride=(1, 1))

相關工作

基於區域分類(區域推薦)的目標檢測: RCNN 從一大組候選區域中列舉(選擇性搜尋、滑動視窗)目標位置,對其進行裁剪,並使用深度網路對每個區域進行分類。 Fast RCNN則裁剪影象特徵,以節省計算量。

基於anchors的目標檢測:Faster RCNN 在檢測網路內生成區域推薦。它在低解析度影象網格周圍取樣固定形狀的邊界框(錨),並將每個邊界框分為“前景與否”。錨點被標記為與任何GT物件重疊為 0。7 的前景,重疊為 0。3 的背景,或者忽略其他物件。每一個生成的區域推薦將再次被分類。將所提出的分類器改為multi-class分類(直接多類別+框迴歸),就形成了單階段檢測器的基礎。對單階段檢測器的一些改進包括錨點形狀先驗(yolov2 yolov3)、不同的特徵解析度(SSD)。

基於關鍵點估計的目標檢測:CornerNet 檢測邊界框的兩個角點作為關鍵點, ExtremeNet檢測所有物件的頂部、左側、底部、右側和中心點。這兩種方法都建立在與我們的CenterNet相同的魯棒關鍵點估計網路上。然而,它們需要在關鍵點檢測後進行組合分組,這會顯著降低每種演算法的速度。另一方面,我們的 CenterNet 只需為每個物件提取一箇中心點,而無需進行分組或後處理。

中心點與Anchor

中心點可以看作是一個未知形狀的anchor,但也有區別:

第一,CenterNet僅根據位置來分配“anchor”,而不是框重疊。對於前景和背景分類,我們沒有手動閾值。

第二,每個物件只有一個正“anchor”,因此不需要NMS。我們只需提取關鍵點熱圖中的區域性峰值 [4,39]。

第三,與傳統的目標探測器[Mask r-cnn](輸出步長為 16)相比, CenterNet 使用了更大的輸出解析度(輸出步長為 4),這就不需要許多的anchor。

目標檢測合集 | CenterNet-Points解析

關鍵點估計器

目標:是預測出一個關鍵點熱圖 ^Y ∈ [0, 1]^(W/R×H/R×C)。預測為 ^Y_x,y,c = 1 時對應於檢測到的關鍵點,^Y_x,y,c = 0 時為背景。

其中 R 是輸出步長,預設R=4;C 是關鍵點型別數量,如在人體姿勢估計中C=17 個人體關節,或在coco目標檢測中 C=80 個物件類別。

訓練時的關鍵點相關表示:參考 CornerNet 訓練關鍵點預測網路,對於類 c 的每一個GT關鍵點 p ∈ R^2,我們計算了一個低解析度的等價值 p~ = [p/R],然後我們用一個高斯核 Y_x,y,c 把所有的GT關鍵點都放在熱圖 Y 上,其中 σ_p 是目標尺寸自適應標準偏差。如果同一類的兩個高斯函式重疊,我們取元素最大值。

關鍵點估計損失 L_k:訓練的目標是得到一個用 focal loss 懲罰減少的畫素邏輯迴歸:

目標檢測合集 | CenterNet-Points解析

其中 α and β 是focal loss的超引數,N是影象 I 中關鍵點的數量。選擇將N歸一化是為了將所有正focal loss例項規範化為 1。和CornerNet一樣在所有的實驗中都使用α=2和β=4。

中心點步長偏移損失 L_off:為了恢復輸出步長引起的離散化誤差,我們還預測了每個中心點的區域性偏移量 ^O 。所有類 c 共享相同的偏移量預測。偏移量透過 L1 Loss 進行訓練(這個監督只在關鍵點位置 p~ 處起作用,其他位置都忽略不計):

目標檢測合集 | CenterNet-Points解析

把物件作為點的任務

將關鍵點估計器擴充套件為通用目標檢測器

目標檢測合集 | CenterNet-Points解析

目標大小損失 L_size:與L_off相似的 L1 Loss:

目標檢測合集 | CenterNet-Points解析

整體的損失 L_det:我們沒有標準化比例,直接使用原始畫素座標。我們用一個常數 λsize 來衡量損失。整體的訓練目標()為:

目標檢測合集 | CenterNet-Points解析

預設設 λsize = 0。1 和 λoff = 1

我們使用單個網路來預測關鍵點 ^Y、偏移量 ˆO 和大小 ˆS。網路預測每個位置總共有 C + 4 個輸出(C是關鍵點數量)。所有輸出共享一個公共的全卷積主幹網。對於每個形式(目標檢測、3D檢測、姿態估計),主幹網特徵之後透過一個單獨的 3×3 卷積、ReLU 和 1×1 卷積。如圖 4 顯示了網路輸出的概述,括號中的數字表示輸出通道。

目標檢測合集 | CenterNet-Points解析

從點到邊界框的表示

在推理時,首先分別提取每個類別的熱圖中的峰值。我們檢測出那些值大於或等於它的8個相鄰連線的並且保持Top 100的峰值的所有響應。

設 ^Pc 為類 c 的n個檢測到的中心點 ^P 的集合,每個

關鍵點位置

用整數座標 (xi, yi) 給出。使用關鍵點值 ^Y_xi,yi,c 作為其檢測置信度的度量。邊界框表示為:

目標檢測合集 | CenterNet-Points解析

所有的輸出都是直接從關鍵點估計產生的,不需要基於IOU的非極大值抑制(NMS)或其他後處理。峰值關鍵點提取可以作為一個充分的NMS替代方案,並且可以在裝置上使用3×3最大池化操作有效地實現。

單目3D檢測

相關工作:Deep3Dbox使用了一種slow-RCNN風格的框架,首先檢測 2D 物件,然後將每個物件輸入 3D 估計網路。 3DRCNN為Faster-RCNN增加了一個額外的head,接著是一個 3D 投影。DeepManta使用了一種由粗到細的更快的 Faster-RCNN訓練多工。我們的方法類似於 Deep3Dbox 或 3DRCNN 的單階段級版本。因此, CenterNet 比其他競爭方法簡單快捷。

目標檢測合集 | CenterNet-Points解析

深度表示:我們為每個人新增一個單獨的 head。深度 d 是每個中心點的單個標量。然而深度很難直接回歸到。我們使用了 Eigen 等人的輸出變換,d = 1/σ(^d) - 1,其中 σ 是 sigmoid 函式。

把計算深度作為關鍵點估計器的一個額外輸出通道 D^。它再次使用兩個卷積層,由 ReLU 分開。與以前的模式不同,它在輸出層使用逆 sigmoidal 變換。透過 sigmoidal 變換,我們在原始深度域中使用 L1損失 來訓練深度估計器。

深度損失:(dk是GT絕對深度,單位為米)

目標檢測合集 | CenterNet-Points解析

尺寸表示:一個物體的3D尺寸是3個標量。我們直接回歸到他們的絕對值,透過在米單位下使用一個單獨的 head ^Γ 和 L1 loss。

尺寸損失:(γk是物體的高度、寬度和長度,單位為米)

目標檢測合集 | CenterNet-Points解析

方向表示:方向在預設情況下是單個標量。然而它很難迴歸。我們遵循Deep3Dbox,透過 in-bin 迴歸將方向表示為2個bin。具體來說,方向是用8個標量進行編碼的,每個 bin 有4個標量 a^ 。對於一個bin中,兩個標量 bi∈R^2 用於softmax分類(分類用softmax loss),其餘兩個標量 ai∈R^2 是in-bin對bin center mi的偏移量的sin和cos值(角度值用L1 Loss)。

一個bin表示角度 B1 = [-7π/6, π/6 ],另一個bin表示角度 B2 = [-π/6, 7π/6 ]。

方向損失:

目標檢測合集 | CenterNet-Points解析

ai = (sin (θ - mi), cos (θ - mi)); ci = 1 (θ∈Bi), 1是指標函式

從8標量編碼中解碼預測的方向為:(其中j為分類分數較大的bin索引)

目標檢測合集 | CenterNet-Points解析

目標檢測結果

環境Intel Core i7-8086K CPU、Titan Xp GPU、Pythorch 0。4。1

基於DLA的速度更快

目標檢測合集 | CenterNet-Points解析

目標檢測合集 | CenterNet-Points解析

參考:GiantPandaCV

還可在我的知乎中檢視其他系列專欄:

CNN模型合集人臉識別合集目標檢測合集CS231n深度視覺筆記OpenCV影象處理教程

標簽: 關鍵點  檢測  卷積  中心點  輸出