PDF: https://arxiv.org/abs/2002.10187
CODE: https://github.com/dvlab-research/3DSSD
一、大体内容
3DSSD是基于点的单阶段3D目标检测器,其提出的动机主要是基于体素的方法(如VoxelNet、PointPillar)在转换体素的时候会丢失信息,而基于点的目标检测方法大都是两阶段方法(如:PointRCNN),其精度虽然高但是推理时间比较慢。
通过分析两阶段模型各部分的耗时情况,作者发现FP层和强化层耗时一班以上(SA层是特征提取必要的,不能省),因此本文的重点在于如何设计一个轻量的单阶段检测器,经过融合采样策略和CG层,3DSSD达到可以剔除FP层和强化层而精度影响不大的效果。
二、贡献点
- 设计了一个轻量有效的基于点的3D单阶段检测器(3DSSD),该检测框预测网络(包含CG层、回归分支、分类分支)去除了比较耗时的FP层。
- 提出一个新的采样策略,不仅采用了基于距离的最远点采样(D-FPS),还融合了基于语义特征的最远点采样(F-FPS),为分类和回归提供更丰富的信息。
- 3DSSD在KITTI和nuScenes数据集上单阶段检测算法中取得了很好的效果仅需要38ms。
三、细节
1. F-FPS
先回顾下PointNet里面提到的FPS,他是随机选一个样本点,然后在选择与该样本点距离最远的一个点作为下一个样本点,依此循环直到满足采样点数量要求,这里面选择的依据是点于点之间空间坐标的欧式距离,也就是这篇论文中提到的D-FPS。
但点云数据比较稀疏,有些物体前景点本身就比较少,按D-FPS采样会丢失很多前景点,为了改进这一情况,作者引入了Feature-FPS(F-FPS),也就是把选点的依据由空间坐标的欧式距离更改为特征之间的距离。
输入点云经过SA层后每个点都会得到一个特征向量,F-FPS基于这些特征之间的距离进行采样。
2. 提出的采样策略怎么融合D-FPS和F-FPS
F-FPS采样可以保留大都数前景点,但由于采样点数量的限制,很多背景点都被过滤掉(背景点语义特征与前景点语义特征相隔较大),这虽然对回归检测框有好处,但是背景点太少的话对分类任务不太友好(样本不均衡)。基于这一点考虑,作者将D-FPS和F-FPS进行融合,以保证有足够的前景点用于回归,以及足够的背景点用于分类,最终的采样点由D-FPS和F-FPS组成,即:
\(C(A, B) = \lambda L_d(A, B) + L_f(A, B)\),其中\(\lambda\)用于控制比例。
通过实验对比分析发现\(\lambda\)取1时其效果最佳,也就是说D-FPS和F-FPS采样各占一半。
这样图中融合采样那里输出就好理解了。
3. 框预测网络的CG层
经过一系列的SA层以及F-FPS和D-FPS的融合(BackBone),得到点的特征用于最终的预测,通常的SA层包含中心点的选择、领域点的提取以及语义特征生成三大块,为了减少计算量并最大限度保留特征信息,作者提出了SA层的变体CG网络,在BackBone之后接入CG层,最后再用于预测。
-
中心点提取
由于D-FPS得到的背景点较多且对框回归没有用处,因此只从F-FPS中选择初始中心点,然后在监督学习的情况下使其向物体中心偏移,称偏移后的点为候选点,然后将这些候选点作为CG层的中心点。
-
领域点提取
和SA层类似,找到候选点周围一定范围内的采样点(D-FPS和F-FPS所有的点)作为领域点(Group操作) -
特征提取
还是采用简单的PointNet结构,即:一个MLP加MaxPool操作,最后才输入到检测头用于回归和分类。
4. Anchor-free的回归分支
这里没有采用Anchor-based,主要是考虑到需要设计多尺度、多朝向的anchor,这在nuScenes等数据集上需要设计几十个Anchor,比较复杂。
对于回归分支需要回归的主要有中心点坐标、大小以及偏转角。
- 中心点
候选点到标注中心的距离\((d_x, d_y, d_z)\) - 大小
候选点预测到的框大小与对应的Gt bbox的距离\((d_l, d_w, d_h)\) - 偏转角
每个候选点预测的角度与实例Gt bbox的转角的偏移,这里引入了bin+res的形式进行回归(这个可参考上一篇讲解的PointRCNN,就是把角度划分成不同的区域,然后引入分类和回归损失)
5. 中心域分配策略
在训练过程中,需要给每一个候选点分配一个标签,在2D检测器中通常采用IOU,设定一个阈值,超过某个阈值的作为正样本,或者是采样掩膜的方式来给每个像素分配一个标签。这里借鉴FCOS中心域的思想来给每个候选点分配一个标签,其可以产生连续的中心域标签,可以更好的进行框回归。
- 什么是中心域
中心域首先在FCOS中提到,如下图简单理解就是有点像高斯热力图,离中心点越近其值越接近于1,越远则越接近于0。
,
其度量方式如下
- 扩展到三维
将上面的度量方式扩展到3D,即考虑前后左右上下6个维度\((f, b, l, r, t, d)\)。
首先判断候选点在哪个真实框里面,得到\(l_{mask}\),其值非0即1。最后的分类标签是两者的乘积。
\(u = l_{ctrness} * l_{mask}\)
6. 损失函数
损失函数包含分类、回归和偏移损失三部分。
其中\(N_c, N_p\)分别表示候选点和前景点数量,\(L_c, L_r, L_s\)分别表示分类、回归、偏移损失,\(s_i, u_i\)表示第i个候选点预测得分和中心域类别。
-
分类损失
分类损失采用的交叉熵损失\(L_c\)对候选点进行度量 -
回归损失
回归损失包含中心点距离损失\(L_{dist}\)、框大小损失\(L_{size}\)、角度损失\(L_{angle}\)和角点位置损失\(L{corner}\)四块。
其中中心点距离损失和框大小损失采用的Smooth_L1损失函数。
角度损失引入了bin + res策略,所以其损失函数如下:
\(d_c^a, d_r^a\)分别表示预测角度类别及残差值,\(t_c^a, t_r^a\)分别表示真实的角度类别及残差值。
角点损失
计算预测框的8个角点与真实角点之间的距离损失。
四、效果
1. 实验效果
实验部分展示了其在KITTI以及nuScenes数据集上的效果。
-
CG层偏移的影响
CG层中带有偏移的效果更好
-
融合采样的实验结果
融合采样比纯D-FPS效果要好
2. 推理时间
推理时间在基于点的目标检测方法中处于领先地位