Structure Aware Single-stage 3D Object Detection from Point Cloud
文章:SA-SSD
代码:SA-SSD
这是来自香港理工大学和达摩院的一篇文章,一作是为在读的博士生,何晨航。通讯作者是张磊,香港理工大学的博导,目前在达摩院。华先胜达摩院的的人,也是为大牛。
Abstract
提出问题:
目前的单级探测器通过完全卷积方式逐步缩小三维点云是有效的。但是缩小特征不可避免的损失空间信息和无法充分利用3D
点云的结构信息,降低了位置精度。
文章工作:
通过显示的利用3D
点云结构信息提升单阶段检测的位置精度。
-
辅助网络:该网络将
backbone
网络中的卷积特征转化为点级的展示。这个辅助网络由两个点级监督联合优化,进而引导卷积特征感知目标结构。训练完成后,可以分离这个辅助网络,因此在推理阶段没有引入多余的计算。 -
part-sensitive warping operation
:考虑到单阶段检测框出现预测框和分类得分不一致的情况,所以使用该操作将得分对齐预测框。
结果:
-
目前在
KITTI
的3D/BEV
检测榜上排名第一(现在已经不是了)。 -
推理速度
25FPS
Introduction
目前的文章以及问题:
单阶段检测的不足:
缩小特征不可避免的损失空间信息和无法充分利用3D
点云的结构信息,降低了位置精度。
两阶段检测的优缺点:
精度提升,无法应用于实时性场景。
解决方法:
auxiliary network
用于提升位置精度,part-sensitive warping operation
改善预测框和对应的分类得分不一致情况
-
auxiliary network
:- 将
backbone
网络的特征转化为逐点展示,然后执行两个任务:- 前景分割使得特征对目标边界敏感
- 逐点中心评估,进而使得特征感知目标内关系
- 将
-
part-sensitive warping operation
- 预测框和对应分类不一致的原因:分类概率于使用的特征映射的当前位置有关,而预测框通常偏离它们的当前位置。
- 对空间特征映射进行分类空间变换
Related Work
Single-stage approaches
Complex-yolo
, Squeezeseg
, Pixor
, Voxelnet
, Pointpillars
, Second
Two-stage approaches
F-Pointnet
, Frustum convnet
, Fast point r-cnn
, Pointrcnn
, Part-aˆ2 net
, STD
Auxiliary task learning
Hdnet
,
Multi-task multi-sensor fusion for 3d object detection
,
Leveraging heterogeneous auxiliary tasks to assist crowd counting
,
Revisiting multi-task learning with rock: a deep residual auxiliary block for visual detection
Structure-Aware 3D Object Detection via Auxiliary Network Learning
backbone and detection networks
Input data representation:
{
p
i
=
(
x
i
,
y
i
,
z
i
)
:
i
=
1
,
.
.
.
,
N
}
:
点
云
坐
标
d
=
[
d
x
,
d
y
,
d
z
]
∈
I
R
3
:
输
入
张
量
的
量
化
步
{
p
‾
i
=
(
⌊
x
i
d
x
⌋
,
⌊
y
i
d
y
⌋
,
⌊
z
i
d
z
⌋
)
:
i
=
1
,
.
.
.
,
N
}
d
=
{
0.05
m
,
0.05
m
,
0.1
m
}
\{p_i = (x_i, y_i, z_i): i = 1,...,N\}:点云坐标\\ d = [d_x, d_y, d_z] \in IR^{3}: 输入张量的量化步 \\ \{\overline p_i = (\lfloor\frac{x_i}{d_x}\rfloor, \lfloor\frac{y_i}{d_y}\rfloor, \lfloor\frac{z_i}{d_z} \rfloor): i = 1,...,N\}\\ d = \{0.05m, 0.05m, 0.1m\}\\
{pi=(xi,yi,zi):i=1,...,N}:点云坐标d=[dx,dy,dz]∈IR3:输入张量的量化步{pi=(⌊dxxi⌋,⌊dyyi⌋,⌊dzzi⌋):i=1,...,N}d={0.05m,0.05m,0.1m}
Network architecture:
- backbone网络:采用的是和
SECOND
一样的网络,有4个卷积块,获得过尺度的特征; - 检测网络:沿着深度通道合并成一个通道,变成
BEV
。之后再利用两个非线性卷积,之后再使用线性卷积分别得到part-sensitive classification maps
和regression maps
Detachable auxiliary network
Motivation:
问题场景:
如图a
所示,目标被遮挡,边界和背景靠的很近。经过卷积,很容易使得目标丢失,或者引入背景点,如图b
所示。
Point-wise feature representation:
-
将
backbone
中特征的非零索引转化为真实世界坐标系的点,表示如下: { ( f j , p j ) : j = 1 , . . . , M } \{(f_j, p_j): j = 1, ..., M\} {(fj,pj):j=1,...,M} -
使用
Pointnet++
中的feature propagation
操作,将上述的数据差值为 { ( f ~ j , p j ) : j = 1 , . . . , N } \{(\tilde f_j, p_j): j = 1, ..., N\} {(f~j,pj):j=1,...,N}。方法如下:
Auxiliary tasks:
-
segmentation task
- 我们在分割分支上利用
sigmoid
函数,来预测每个点的前景、背景可能性,标记为 s ~ i \tilde s_i s~i。 s i s_i si为标签,是否落入边界框中。利用focal loss
α = 0.5 , γ = 2 \alpha = 0.5, \gamma = 2 α=0.5,γ=2
具体如图
c
所示。 - 我们在分割分支上利用
-
center estimation tasks
-
学习每个目标点指向目标中心的相对位置,利用
Smoth l1 loss
△ p ~ ∈ I R N ∗ 3 : 表 示 中 心 评 估 分 支 的 输 出 △ p : 目 标 点 到 对 应 中 心 的 目 标 偏 移 N p o s : 表 示 前 景 点 的 个 数 I [ . ] 表 示 指 标 函 数 \triangle \widetilde p \in IR^{N*3}: 表示中心评估分支的输出\\ \triangle p: 目标点到对应中心的目标偏移\\ N_{pos}: 表示前景点的个数\\ I[.]表示指标函数\\ △p ∈IRN∗3:表示中心评估分支的输出△p:目标点到对应中心的目标偏移Npos:表示前景点的个数I[.]表示指标函数
这两个辅助任务只应用于训练过程,不占用推理过程资源。而且显著提升预测位置的准确度。
Part-sensitive warping
- 将最后分类层改变为K个部分敏感的分类映射
- 将每个特征映射的预测边界框分割成K个子框,将每个子框的中心点作为采样点,进而得到K个采样网格 { S k : k = 1 , 2 , . . . , K } \{S^k: k = 1,2,...,K\} {Sk:k=1,2,...,K},以及对应的分类映射。
- 给定预测框,已经对应的采样点 { ( u k , v k ) = S k : k = 1 , 2 , . . . , K } \{(u^k, v^k) = S^k: k = 1,2,...,K\} {(uk,vk)=Sk:k=1,2,...,K}
- 根据如下公式得到输出的置信映射
C
p
C_p
Cp:
{ x k : k = 1 , 2 , . . . , K } : 表 示 由 最 后 分 类 层 改 变 得 到 的 K 个 部 分 敏 感 的 分 类 映 射 b ( i , j , u , v ) = m a x ( 1 − ∣ i − u ∣ , 0 ) ∗ m a x ( 1 − ∣ j − v ∣ , 0 ) \{x^k: k = 1,2,...,K\}:表示由最后分类层改变得到的K个部分敏感的分类映射\\ b(i,j,u,v) = max(1-|i-u|,0) * max(1-|j - v|,0)\\ {xk:k=1,2,...,K}:表示由最后分类层改变得到的K个部分敏感的分类映射b(i,j,u,v)=max(1−∣i−u∣,0)∗max(1−∣j−v∣,0)
示意图如下:
Loss functions
L c l s : 表 示 分 类 分 支 f o c a l l o s s L b o x : 表 示 预 测 框 分 支 , S m o t h − l 1 l o s s w = 2 , 根 据 S E C O N D u = 0.9 , λ = 2 实 验 所 得 L_{cls}: 表示分类分支 focal loss\\ L_{box}: 表示预测框分支, Smoth-l_1 loss\\ w = 2, 根据SECOND\\ u = 0.9, \lambda = 2 实验所得\\ Lcls:表示分类分支focallossLbox:表示预测框分支,Smoth−l1lossw=2,根据SECONDu=0.9,λ=2实验所得
Experiment
3712 training set
3769 validation set
7518 testing samples
IoU thresheld = 0.7
Implementation details
Training details
lidar point range (0m, 70.4m), (-40m, 40m), (-3m, 1m) in XYZ
match threshold for positive and negitive anchors: 0.6 and 0.45
SGD
batch_size = 2
learning_rate = 0.01
weight_decay = 0.001
learning rate is decayed with a cosine annealing strategy
# inference stage
threshold of low-confidence bounding box = 0.3
IoU threshold for NMS = 0.1
Data augmentation
cut-and-paste strategy
random flipping, global rotation and global scaling to the whole point cloud
Weight selection of auxiliary tasks
Comparison with state-of-the-arts
Ablation study
不同方法对比:
添加不同组成对比:
不同分类置信度处理对比:
running analysis
对标SECOND方法的各个模块:
Conclusion
- 我们首先提出了使用两点级监督来学习辅助网络,以指导在
backbone
网络中学习到的特征来感知3D
目标的结构信息。没有增加推理计算情况下,显著提升了检测的位置准确度。 - 设计了一个
PSW
操作,以减轻预测的边界框与它们在NMS
后处理中的相应置信度之间的不一致。