基于点云 RGBD的3D视觉检测技术

  3D视觉技术相较于2D视觉能获取更丰富更全面的环境信息,慢慢的变成了机器人导航、无人驾驶、增强/虚拟现实、工业检测等领域的关键技术.当前基于2D的的计算机视觉技术日趋成熟,在很多领域取得了很不错的进展,但我们真实的世界是三维空间,利用2D的技术对真实世界进行建模存在先天的缺陷——深度信息缺失,咱们不可以从2D图片中获得物体的绝对尺度和位置,而这一点在点云中不会存在问题.“从单幅图像到双目视觉的3D目标检测算法”介绍了基于单目(monocular)视觉以及双目(binocular)视觉的3D目标检测算法,单目做3D检测完全是数据驱动,通过机器学习模型结合摄影几何的约束去拟合3D空间的数据分布;双目视觉会有额外的视差信息,可以重建出景深信息,所以能得到比单目视觉更强的空间约束关系,在3D目标检测任务重的精度相比单目会更好。

  今天的文章主要介绍基于点云数据的目标检测,点云可以直接由激光雷达扫描得到也能够最终靠深度传感器比如PrimeSense的PrimeSensor、微软的Kinect、华硕的XTionPRO等带深度感知的设备获取RGBD图像然后构造点云.

  点云数据天然具有强几何信息,很适合3D目标检测任务,常见的三维数据格式有点云(point cloud),体素(voxel grid),Mesh以及TSDF,对于每种格式的应用场景这里不做过多描述. 目前基于3D点云的目标检测大致分为以下几类:

  该作者提出了一个多视角(Multi-View)的3D物体检验测试框架,采用多模态的数据作为输入包括点云的BVE图, 点云FV图以及对应的RGB图。

  从上图能够正常的看到,作者将鸟瞰图中点云进行离散化,按照0.1m X 0.1m的cell进行投影并针对按照Z轴将点云划分成M层得到具有M个通道的Height map; Density map是统计的投影到X-Y平面的点云密度; Intensity map是对点云中每个点反射强度的统计. 下图是MV3D的网络结构图,分为三个分支,采用CNN对每个分支进行encoding,其中利用第一个BVE分支进行proposal box的预测.该框架属于两阶段预测的方法,在第二个refine的阶段,作者实验了不同的策略对第一阶段三个分支的latent feature进行融合 :

  AVOD能够理解为MV3D的加强版本也是2-stage的方法,由于MV3D的最后做proposal的feature map相较于原始输入小了8倍,导致其对小目标物体极其不友好,而AVOD则采用了时下流行的FPN结构,最后融合后的feature map为full resolution,同时保留了不同level的图像信息(底层细节+高层语义),这样就提高了对小目标物体的检测能力。

  通过以上几点改进,AVOD相比MV3D在KITTI的car这个类别上提升了10%的性能.

  基于体素的方法将整个场景的点云转换为体素网格(Voxel Grid),并使用3D CNN作为backbone进行proposal和后续物体bbox回归和分类。由于3D卷积由于多了一个深度/时间通道的存储和计算成本很高,以最基本的kernel size为例 3D (3x3x3) 参数量是2D (3x3) 的三倍, 在三维空间中进行卷积操作的扫描窗口数相比二维卷积也多了很多,所以通常基于3D卷积的方法计算成本通常相当高。目前基于Voxel的检测/分割方法有3D-FCN[4] 和SparseConv[5]等

  该方法的主要工作是将DenseBox扩展到了3D Voxel空间, 通过一个3D全卷积网络作为backbone进行encoding分别得到objectness map和 bounding box map, 然后通过对每一个区域进行分类和回归获取最终的结果.由于三维点云的天然稀疏性,所以对应的Voxel grid也是稀疏的,作者在文中使用了额外的一个channel (0/1)去表达Voxel是否是由点存在的.

  3D卷积带来了计算和存储的大幅度的增加,尤其是当前网络深度慢慢的变深这种计算变得很昂贵. 针对点云的天然稀疏性特点(Voxel化的结果也是具有稀疏性),卷积过程中有大量的操作可以省掉,稀疏卷积的目的是减少无效的计算,提升卷机和池化的效率以此来实现对稀疏特征图的加速计算.论文[5]中提出的Submanifold sparse convolution network在保证精度不降低的前提下将计算量成倍降低同时存储量降低50%, 为客服传统卷积active site扩张的问题, SCNN通过引入active site的来保证卷积过程中特征图的稀疏.在具体实现上仍然使用传统卷积进行卷积,但是对于原input中为ground state(没有真值的grid)的部分,计算的时候直接丢弃,按照0来进行计算,从而使计算量减少。

  从下图可知在ShapeNet的3D分割的任务中SSCN(红色)相比经典的3D卷积网络(橙色)在mIOU=0.7的时候计算量相差一个数量级.

  说到直接基于点云的方法就必须提PointNet[8]和PointNet++[9], 点云数据具有一些显著的特点——数据点无序性、数据点数量可变性等,无序就表示网络一定要能在改变数据点顺序的情况下输出相同的结果,数量可变就表示网络一定要能处理不同数量的采样点。

  1.针对点云无序性——采用Maxpooling作为对称函数。最大池化操作就是对所有成员作比较,把最大的留下来,其余舍弃掉,所以,不管顺序如何变化,最大值是不会改变的。

  上图为PointNet架构图, 网络输入n*3的数据,n就是采样点的个数,3表示三维坐标。经过几层mlp(多层感知器)获得n*1024维的采样点特征,然后使用max pooling进行对称操作得到1024维的整体特征(global feature)。Pointnet的大部分或说几乎全部的处理都是针对单个采样点的,很难建模点云的局部结构,网络对三维模型局部信息的提取能力有很大的缺陷,所以作者后续又提出了改进方案PointNet++.

  PointNet++通过对原始的点云进行Grouping实现对点云数据的划分,在每个group中使用pointnet进行embedding提取局部特征,然后不断抽象,提取更高维的特征,PointNet++使用点球模型,从全部数据集中选出若干质心点,然后选取半径,完成覆盖整个数据集的任务。

  在质心点的选取上,采用的是FPS算法, 即随机选取一个点,进而选择离这个点最远的点加入到结果集中,迭代这样的一个过程,直到结果集中点的数量达到某个给定值.

  在点云数据集中,有些地方比较稠密,有些地方比较稀疏,在稀疏的区域如果半径太小就会覆盖很少的点云,因此导致提取不到有用特征. 论文中提出两种方法解决这一个问题:

  (1) MSG(multi-scale grouping),即把每种半径下的局部特征都提取出来,然后组合到一起,但MSG有一个巨大的问题是运算的问题

  作者使用了一个2D检测器(FPN)在RGB图像中进行物体检测作为3D点云中的proposal, 利用当前RGB帧对应的相机投影矩阵,将一个2D bounding box 能转换形成frustum (视锥体),然后从frustum point cloud中收集点送入pointnet进行点云分割以及后续的姿态估计。

  通过点云的前景/背景分割模块可以过滤到无用的点,物体的结构信息会更强;然后通过T-Net(轻量级的Pointnet)预测物体的中心进行对齐;最后通过一个Amodal 3D Box的regressor去回归参数化的位置: 物体中心(cx,cy,cz),大小(h,w,l)和航向角θ来参数化3D边界框。采用“残差”办法来进行边界框中心估计。c1-reg: T-net参数 ; c2-reg: 中心点; h-cls,h-reg 方向角度; s-cls, s-reg 3D box 尺寸,具体细节请参考原文这里不做展开.

  PointRCNN可以类比FastRCNN都属于两阶段的方法,PointRCNN第一阶段采用了pointnet++作为backbone提取proposal区域, 其中每个点都会产生一个anchor box保证了这一阶段高的召回率; 第二阶段将ROIPooling过的点云送入一个轻量级的pointnet++并将此阶段学习的局部特征和第一阶段学习到的特征进行融合用于对每一个proposal的box的回归和分类得到更准确的pose和size. 细节太多不做展开,请移步[11]了解详情.

  随着硬件技术的逐渐完备,3D视觉已经到来. 目前3D视觉技术的发展仍在逐步迭代演进过程中,2D和3D信息有很强的互补性,许多二维图像中形成的方法论都可以在3D视觉中进行迁移改进. 除了持续进行3D技术的研发, 3D视觉的应用还是要从具体场景的使用诉求和成本等多重因素共同考虑。

  *博客内容为网友个人发布,仅代表博主个人自己的观点,如有侵权请联系工作人员删除。

相关新闻