目標檢測合集 | CenterNet-Points解析
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網路。
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。
關鍵點估計器
目標:是預測出一個關鍵點熱圖 ^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 懲罰減少的畫素邏輯迴歸:
其中 α and β 是focal loss的超引數,N是影象 I 中關鍵點的數量。選擇將N歸一化是為了將所有正focal loss例項規範化為 1。和CornerNet一樣在所有的實驗中都使用α=2和β=4。
中心點步長偏移損失 L_off:為了恢復輸出步長引起的離散化誤差,我們還預測了每個中心點的區域性偏移量 ^O 。所有類 c 共享相同的偏移量預測。偏移量透過 L1 Loss 進行訓練(這個監督只在關鍵點位置 p~ 處起作用,其他位置都忽略不計):
把物件作為點的任務
將關鍵點估計器擴充套件為通用目標檢測器
目標大小損失 L_size:與L_off相似的 L1 Loss:
整體的損失 L_det:我們沒有標準化比例,直接使用原始畫素座標。我們用一個常數 λsize 來衡量損失。整體的訓練目標()為:
預設設 λsize = 0。1 和 λoff = 1
我們使用單個網路來預測關鍵點 ^Y、偏移量 ˆO 和大小 ˆS。網路預測每個位置總共有 C + 4 個輸出(C是關鍵點數量)。所有輸出共享一個公共的全卷積主幹網。對於每個形式(目標檢測、3D檢測、姿態估計),主幹網特徵之後透過一個單獨的 3×3 卷積、ReLU 和 1×1 卷積。如圖 4 顯示了網路輸出的概述,括號中的數字表示輸出通道。
從點到邊界框的表示
在推理時,首先分別提取每個類別的熱圖中的峰值。我們檢測出那些值大於或等於它的8個相鄰連線的並且保持Top 100的峰值的所有響應。
設 ^Pc 為類 c 的n個檢測到的中心點 ^P 的集合,每個
關鍵點位置
用整數座標 (xi, yi) 給出。使用關鍵點值 ^Y_xi,yi,c 作為其檢測置信度的度量。邊界框表示為:
所有的輸出都是直接從關鍵點估計產生的,不需要基於IOU的非極大值抑制(NMS)或其他後處理。峰值關鍵點提取可以作為一個充分的NMS替代方案,並且可以在裝置上使用3×3最大池化操作有效地實現。
單目3D檢測
相關工作:Deep3Dbox使用了一種slow-RCNN風格的框架,首先檢測 2D 物件,然後將每個物件輸入 3D 估計網路。 3DRCNN為Faster-RCNN增加了一個額外的head,接著是一個 3D 投影。DeepManta使用了一種由粗到細的更快的 Faster-RCNN訓練多工。我們的方法類似於 Deep3Dbox 或 3DRCNN 的單階段級版本。因此, CenterNet 比其他競爭方法簡單快捷。
深度表示:我們為每個人新增一個單獨的 head。深度 d 是每個中心點的單個標量。然而深度很難直接回歸到。我們使用了 Eigen 等人的輸出變換,d = 1/σ(^d) - 1,其中 σ 是 sigmoid 函式。
把計算深度作為關鍵點估計器的一個額外輸出通道 D^。它再次使用兩個卷積層,由 ReLU 分開。與以前的模式不同,它在輸出層使用逆 sigmoidal 變換。透過 sigmoidal 變換,我們在原始深度域中使用 L1損失 來訓練深度估計器。
深度損失:(dk是GT絕對深度,單位為米)
尺寸表示:一個物體的3D尺寸是3個標量。我們直接回歸到他們的絕對值,透過在米單位下使用一個單獨的 head ^Γ 和 L1 loss。
尺寸損失:(γk是物體的高度、寬度和長度,單位為米)
方向表示:方向在預設情況下是單個標量。然而它很難迴歸。我們遵循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 ]。
方向損失:
ai = (sin (θ - mi), cos (θ - mi)); ci = 1 (θ∈Bi), 1是指標函式
從8標量編碼中解碼預測的方向為:(其中j為分類分數較大的bin索引)
目標檢測結果
環境Intel Core i7-8086K CPU、Titan Xp GPU、Pythorch 0。4。1
基於DLA的速度更快
參考:GiantPandaCV
還可在我的知乎中檢視其他系列專欄:
CNN模型合集人臉識別合集目標檢測合集CS231n深度視覺筆記OpenCV影象處理教程