本文是基于图像的3D目标检测算法。
贡献:
ps:
伪点云(【3D目标检测】Monocular 3D Object Detection with Pseudo-LiDAR Point Cloud)
作者构建了一个基于伪点云表示的目标检测器和一个基于图像表示的目标检测器,两者除了深度图的表示不同其余部分都相同。
实验中的深度图表示成伪点云的方法:
实验中深度图表示成图像的方法(PatchNet-vanilla):
可以发现,前三步是一模一样,第四步中只有深度图表示不一样,第五步思想一样,也就是说两个实验的设置中几乎只有深度图表示这一项不一样。
左图就是伪点云的表示,每个点对应3个特征,总共有M个点;右图是图像的表示,总共有
N
∗
N
=
M
N*N=M
N∗N=M个像素,每个像素对应3个通道,完全一样的数据,就是表示或者理解不同而已。
下面是实验的结果:一二行是同样的结构两次训练的结果(为了消除实验设置的影响),可以发现两个实验的结果几乎是相同的,那么通过实验也就证明了作者的观点,算法的效果和深度图的表示没有关系。
基于上面的发现,作者就有了新的想法,既然效果一样,那就可以用基于深度图的图像表示来做了。
因为基于图像的表示可以采用成熟的2D CNN做,并且是端到端的,而且生成的图像是稠密的(因为点云的稠密的或者说是对原图上所有的点进行了深度估计得到的),而基于伪点云的表示只能采用基于点云的方法做,后者一方面没那么成熟,另一方面伪点云与真实点云也存在不同(点密度、局部不对齐、长尾问题,详情见【3D目标检测】Monocular 3D Object Detection with Pseudo-LiDAR Point Cloud)。
算法流程:
骨干网络
:作者采用了ResNet-18+SE模块
掩码全局池化(mask global pooling ):
就是对特征提取网络中得到的特征做了一个mask,后面的全局最大池化只对前景做,能够使得特征更具有鲁棒性
mask生成:
主要参考了【3D目标检测】Accurate Monocular Object Detection via Color-Embedded 3D Reconstruction for AD中前景分割的部分,关键就是在深度图中设置门限值,作者在每个patch的平均深度的基础上添加一个偏移作为门限值,小于这个门限的就是前景,否则就是背景。
检测头:
检测头是专门为KITTI数据集设计的,三个分支对应三个难度,每个分支预测7个参数。为了避免无效计算,设置了一个小模块用来预测难度,然后使用对应难度的分支。
损失函数:
参考了 【3D目标检测】Frustum PointNets for 3D Object Detection from RGB-D Data 的损失函数,分别计算中心点、尺寸和航向角的损失,并且额外使用角点的损失。
因为上面的实验证明了基于伪点云表示的方法和一个基于图像表示的方法是等价的,因此作者对图像表示方法中的中间图像进行了消融实验,证明了从图像到点云坐标系转换的过程的重要性。(我感觉最多就只能证明这个过程的重要性,要说它是决定性因素,实验未免太少了吧。)
实验做法就是深度图的图像表示中有3个patch,选中其中的一部分,效果不好,说明需要完整的3D数据;将得到的点云坐标系下的3D坐标
(
X
,
Y
)
(X,Y)
(X,Y)转换成原始图像坐标系下的2D坐标
(
x
,
y
)
(x,y)
(x,y),效果差了,说明深度图代表的深度信息应该在点云坐标系下使用3D坐标表示而不是原始图像坐标系下的2D坐标表示。
本文提到的坐标系转换不一定是真正的本质原因,但是给这种提升数据做3D目标检测的算法开拓了新的思路。