論文地址:https://arxiv.org/abs/2012.15712
論文代碼:https://github.com/djiajunustc/Voxel-R-CNN
論文背景
基于點的方法具有較高的檢測精度,但基于點的方法通常效率較低,因為對于點集抽象來說,使用點表示來搜索最近鄰的代價更高。
相比于基于點,更高效,基于體素的結構更適合于特征提取,但由于輸入點云被劃分為規(guī)則的網格,因此往往產生較低的準確性(體素化經常導致精確位置信息的丟失)。
基于點的方法一樣準確,與基于Voxels的方法一樣快速的方法?
首先,論文認為精確定位原始點云是不錯的,但沒有必要。基于體素的方法通常會對 bird-eye-view (BEV)表示執(zhí)行目標檢測,即使輸入數據是 3D 體素。相比之下,基于點的方法通常依賴于抽象的點表示來恢復 3D 結構上下文,并基于點方向的特征進行進一步的細化。
通過仔細觀察底層機制,發(fā)現現有的基于體素的方法的關鍵缺點在于,它們將3D特征體轉換為BEV表示,而從未恢復3D結構上下文。SECOND:將體素化數據饋送到三維骨干網進行特征提取。 然后將3D特征體轉換為BEV表示。 最后,利用一個二維主干網和一個區(qū)域建議網絡(RPN)進行檢測。
PV-RCNN:通過添加 Keypoints 分支來保存3D結構信息來擴展 SECOND。 引入體素集抽象(VSA)將多尺度三維體素特征集成到關鍵點中。 通過 ROI-grid-pooling 從關鍵點中進一步提取每個三維區(qū)域 proposals 的特征,進行 box refinement
SECOND 和 PV-RCNN 在檢測性能(即準確性和效率)上存在較大差距:
1.SECOND 是 one-stage 方法,PV-RCNN 提取檢測頭進行 box refinement;
2.PV-RCNN 中的關鍵點保留了三維結構信息,SECOND 直接對BEV表示進行檢測。
3.PV-RCNN 比 SECOND 慢得多;
3.SECOND AP 不如 PV-RCNN。
通過對比得到:
1.三維結構對于三維目標檢測器具有重要的意義,因為單憑BEV表示不足以精確預測三維空間中的 bounding boxes;
2.點-體素特征交互耗時且影響檢測器效率。
論文內容
基于體素的 3D 目標檢測的兩階段框架。
a)一個 3D backbone;
b)一個 2D backbone,后面跟著 RPN;
c)一個 Voxel ROI pooling 和 一個用于 box refinement 的檢測子網。
首先將原始點云劃分為規(guī)則體素,并利用 3D backbone 進行特征提取。然后將稀疏的3D體素轉化為BEV表示,在BEV表示上應用 2D backbone 和 RPN 生成 3D 區(qū)域建議。隨后,使用 Voxel ROI pooling 提取 RoI 特征,并將這些特征輸入檢測子網進行 box refinement。
Voxel ROI pooling
為了直接從三維體素特征體集合空間上下文,論文提出了 Voxel ROI pooling。
Voxel Volumes as Points。 將稀疏 3D volumes 表示為一組非空體素中心點 { v i = ( x i , y i , z i ) } i = 1 N \{v_i=(x_i,y_i,z_i)\}^N_{i=1} {vi?=(xi?,yi?,zi?)}i=1N?及其對應的特征向量{φi}ni=1。 具體而言,利用指數、體素大小和點云邊界計算體素中心的三維坐標。
體素查詢
從 3D feature volumes 中查找相鄰體素。 與無序點云相比,體素在量化空間中有規(guī)律地排列,便于鄰居訪問。 例如,體素查詢的 26-neighbor voxels 可以通過在體素索引
(
i
,
j
,
k
)
(i,j,k)
(i,j,k)上添加一個三重偏移量
(
Δ
i
,
Δ
j
,
Δ
k
)
,
Δ
i
,
Δ
j
,
Δ
k
∈
{
?
1
,
0
,
1
}
(Δ_i,Δ_j,Δ_k),Δi,Δj,Δk∈\{-1,0,1\}
(Δi?,Δj?,Δk?),Δi,Δj,Δk∈{?1,0,1} 來計算。 利用這一特性,論文設計了體素查詢來有效地對體素進行分組。
首先將查詢點量化為一個體素,然后通過 indices translation 轉換獲取相鄰體素。在體素查詢中利用曼哈頓距離,在一個距離閾值內采樣多達
K
K
K 個體素。具體來說,體素
α
=
(
i
α
,
j
α
,
k
α
)
α=(i_α,j_α,k_α)
α=(iα?,jα?,kα?) 和
β
=
(
i
β
,
j
β
,
k
β
)
β=(i_β,j_β,k_β)
β=(iβ?,jβ?,kβ?) 之間的曼哈頓距離
D
(
α
,
β
)
D(α,β)
D(α,β) 計算如下:
D
m
(
α
,
β
)
=
∣
i
α
?
i
β
∣
+
∣
j
α
?
j
β
∣
+
∣
k
α
?
k
β
∣
.
(1)
\tag1 D_m(\alpha , \beta) = |i_\alpha - i_\beta|+|j_\alpha - j_\beta|+ |k_\alpha - k_\beta|.
Dm?(α,β)=∣iα??iβ?∣+∣jα??jβ?∣+∣kα??kβ?∣.(1)具體地,計算體素
α
=
(
i
α
,
j
α
,
k
α
)
α=(i_α,j_α,k_α)
α=(iα?,jα?,kα?) 與
β
=
(
i
β
,
j
β
,
k
β
)
β=(i_β,j_β,k_β)
β=(iβ?,jβ?,kβ?) 之間的曼哈頓距離
D
(
α
,
β
)
D(α,β)
D(α,β) 為:假設三維特征體中有
n
n
n 個非空體素,利用球查詢來查找給定查詢點的相鄰體素,時間復雜度為
O
(
n
)
O(n)
O(n)。然而,進行體素查詢的時間復雜度只有
O
(
K
)
O(K)
O(K),其中
K
K
K 為鄰居數。鄰居感知屬性使得使用體素查詢對鄰居體素特征進行分組比使用球體查詢對鄰居點特征進行分組更有效。
體素 ROI Pooling 層
首先將一個 region proposal 劃分為
G
×
G
×
G
G×G×G
G×G×G 的規(guī)則 sub-voxel。 中心點作為相應子體素的網格點。 由于3D特征量非常稀疏(非空體素占小于3%的空間),不能直接利用最大池化每個 sub-voxel 的特征。取而代之的是,論文將相鄰體素的特征集成到網格點中進行特征提取。具體來說,給定一個網格點
g
i
g_i
gi?,首先利用體素查詢對一組相鄰的體素進行分組
Γ
i
=
{
v
i
1
,
v
i
2
,
.
.
.
,
v
i
K
}
Γ_i = \{ v^1_i, v^2_ i,...,v^K_i\}
Γi?={vi1?,vi2?,...,viK?}。 然后,使用 PointNet 模塊聚合相鄰的體素特征:
η
i
=
max
?
k
=
1
,
2
,
.
.
.
,
K
{
Ψ
(
[
v
i
k
?
g
i
;
?
i
k
]
)
}
,
(2)
\tag2 \eta_i = \max_{k=1,2,...,K}\{ \Psi ([v_i^k - g_i;\phi_i^k]) \},
ηi?=k=1,2,...,Kmax?{Ψ([vik??gi?;?ik?])},(2)其中
v
i
?
g
i
v_i-g_i
vi??gi? 表示相對坐標,
?
i
k
\phi ^k_i
?ik? 是
v
i
k
v^k_i
vik? 的體素特征,
Ψ
(
?
)
\Psi(·)
Ψ(?) 表示MLP。沿著通道進 max pooling 操作
max
?
(
?
)
\max(·)
max(?) 以獲得聚合的特征向量
η
i
η_i
ηi?。特別是,利用體素 RoI Pooling 從 3D backbone network 的最后兩個階段的 3D 特征體素特征中提取體素特征。對于每個階段,設置了兩個曼哈頓距離閾值,以用多個尺度對體素進行分組。然后,將不同階段、不同規(guī)模的特征聚合在一起,得到 RoI 特征。
加速局部聚合
即使使用論文提出的體素查詢,在體素 RoI pooling 中的局部聚合操作(即 PointNet)模塊仍然涉及很大的計算復雜度即使使用論文提出的體素查詢。
如圖所示,總共有
M
M
M 個網格點(
M
=
r
×
G
3
M=r×G^3
M=r×G3,其中
r
r
r 為ROI個數,
G
G
G為網格大?。?,每個網格點分組
K
K
K 個體素。 分組特征向量的維數為
C
+
3
C+3
C+3,包括
C
?
d
i
m
C-dim
C?dim 體素特征和
3
?
d
i
m
3-dim
3?dim 相對坐標。 在應用FC層時,分組體素占用了大量的內存,并導致了較大的計算 FLOPs
(
O
(
M
×
K
×
(
C
+
3
)
×
C
′
)
)
(O(M×K×(C+3)×C^{'}))
(O(M×K×(C+3)×C′))。
論文另外引入了一個加速的 PointNet 模塊,以進一步降低 Voxel Query 的計算復雜度。
將體素特征和相對坐標分解為兩個流。 給定權重為
W
∈
R
C
′
,
C
+
3
W∈\R^{C^{'},C+3}
W∈RC′,C+3 的 FC 層,將其劃分為
W
F
∈
R
C
′
,
C
W_F∈\R^{C^{'},C}
WF?∈RC′,C 和
W
C
∈
R
C
′
,
3
W_C∈\R^{C^{'},3}
WC?∈RC′,3。 由于體素特征與網格點無關,在進行體素查詢之前,在體素特征上應用了一個帶
W
F
W_F
WF? 的 FC 層。 然后,在體素查詢后,只將分組的相對坐標乘以
W
C
W_C
WC? 得到相對位置特征,并將其添加到分組的體素特征中。加速的 PointNet 模塊的 Flop 為
O
(
N
×
C
×
C
′
+
M
×
K
×
3
×
C
′
)
O(N×C×C^{'}+M×K×3×C^{'})
O(N×C×C′+M×K×3×C′)。 由于分組體素的個數
(
M
×
K
)
(M×K)
(M×K) 比
N
N
N 高出一個數量級,加速的 PointNet 模塊比原來的的 PointNet 模塊效率更高。
Backbone 和 RPN
3D backbone network 逐漸將體素化輸入轉換成 feature volumes。然后,將輸出張量沿 Z 軸疊加生成 BEV 特征圖。
2D backbone network 由兩個部分組成:一個自頂向下的特征提取子網絡和一個多尺度的特征融合子網絡,該子網絡由兩個標準的3×3卷積層組成,該子網絡對自頂向下的特征進行上采樣和級聯(lián)。
最后,將 2D backbone network 的輸出與兩個 1×1 卷積層進行卷積,生成3D RPN。
檢測頭
檢測頭以 ROI 特征作為輸入進行 box refinement。 具體來說,共享的2層 MLP 首先將 ROI 特征轉換為特征向量。 然后,將扁平化特征注入兩個 sibling 分支:一個用于 bounding box 回歸,另一個用于置信度預測。bounding box 回歸分支預測從3D RPN 到地面真值 box 的殘差,而置信度分支預測與 IOU 相關的置信度得分。
Training Objectives
RPN損失
將RPN的損失設計為分類損失和 box 回歸損失的組合,如下:
L
R
P
N
=
1
N
f
g
[
∑
i
L
c
l
s
(
p
i
a
,
c
i
?
)
+
L
(
c
i
?
≥
1
)
∑
i
L
r
e
g
(
δ
i
a
,
t
i
?
)
]
(3)
\tag3 \mathcal L_{RPN} = \frac{1}{N_{fg}}[\sum_i \mathcal L_{cls}(p_i^{a},c_i^{*})+ \mathbb L(c_i^{*} \geq 1)\sum_i \mathcal L_{reg}(\delta_{i}^{a},t_{i}^{*})]
LRPN?=Nfg?1?[i∑?Lcls?(pia?,ci??)+L(ci??≥1)i∑?Lreg?(δia?,ti??)](3)其中,
N
f
g
N_{fg}
Nfg? 表示前景錨點的數量,
p
i
a
p^a_i
pia? 和
δ
i
a
δ^a_i
δia? 為分類分支和框回歸分支的輸出,
c
i
?
c^?_i
ci?? 和
t
i
?
t^?_i
ti?? 分別為分類標簽和回歸目標。
L
(
c
i
?
≥
1
)
\mathbb L(c_i^{*} \geq 1)
L(ci??≥1) )表示僅使用前景錨點計算的回歸損失。在這里,利用 Focal 損失進行分類,利用 Huber 損失進行 box regression。
檢測頭損失
分配給 confidence 分支的目標是與IOU相關的值:
l
i
?
(
IoU
i
)
=
{
0
IoU
i
<
θ
L
,
IoU
i
?
θ
L
θ
H
?
θ
L
θ
L
≤
IoU
i
<
θ
H
,
1
IoU
i
>
θ
H
,
(4)
\tag4 l_i^* (\text{IoU}_i) = \begin{cases} 0 &\text{IoU}_i < \theta_L, \\ \frac{\text{IoU}_i - \theta_L}{\theta_H - \theta _ L} & \theta_L \leq \text{IoU}_i < \theta_H,\\ 1 &\text{IoU}_i > \theta_H, \end{cases}
li??(IoUi?)=?
?
??0θH??θL?IoUi??θL??1?IoUi?<θL?,θL?≤IoUi?<θH?,IoUi?>θH?,?(4) 其中,
IoU
i
\text{IoU}_i
IoUi? 是第
i
i
i 個 proposal 和相應的地面真值 box 之間的
I
o
U
IoU
IoU,
θ
H
θ_H
θH? 和
θ
L
θ_L
θL? 是前景和背景
I
o
U
IoU
IoU 閾值 。論文利用二元交叉熵損失進行置信度預測。 與RPN一樣,Box回歸分支也使用Huber損失。 探測頭的損失計算如下:
L
h
e
a
d
=
1
N
s
[
∑
i
L
c
l
s
(
p
i
,
l
i
?
(IoU
i
)
)
+
L
(
c
i
?
≥
1
)
]
(5)
\tag5 \mathcal L_{head} = \frac{1}{N_s}[\sum_i \mathcal L_{cls}(p_i,l_i^*\text{(IoU}_i))+\mathbb L(c_i^{*} \geq 1)]
Lhead?=Ns?1?[i∑?Lcls?(pi?,li??(IoUi?))+L(ci??≥1)](5) 其中
N
s
N_s
Ns? 是訓練階段的抽樣區(qū)域 proposal 數,
L
(
IoU
i
≥
θ
r
e
g
)
\mathbb L(\text{IoU}_i≥θ_{reg})
L(IoUi?≥θreg?) 表示只有
IoU
>
θ
r
e
g
\text{IoU}>θ_{reg}
IoU>θreg? 的區(qū)域 proposals 才會導致回歸損失。文章來源:http://www.zghlxwxcb.cn/news/detail-701678.html
論文總結
論文提出了一種基于體素表示的新型 3D 目標檢測器——Voxel R-CNN。以體素為輸入,Voxel R-CNN首先從鳥瞰視圖的特征表示中生成密集區(qū)域 proposals,然后利用 voxel RoI pooling 從3D體素特征中提取區(qū)域特征,進一步細化。通過充分利用體素表示,Voxel R-CNN在準確性和效率之間取得了平衡。文章來源地址http://www.zghlxwxcb.cn/news/detail-701678.html
到了這里,關于Voxel R-CNN:基于體素的高性能 3D 目標檢測的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!