首发于SIGAI
基于点云 / RGBD的3D视觉检测技术

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

原创声明:本文为 SIGAI 原创文章,仅供个人学习使用,未经允许,不能用于商业目的。

其它机器学习、深度学习算法的全面系统讲解可以阅读《机器学习-原理、算法与应用》,清华大学出版社,雷明著,由SIGAI公众号作者倾力打造。

本文PDF全文链接:基于点云 / RGBD的3D视觉检测技术

基于点云 / 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点云的目标检测大致分为以下几类:


1.基于鸟瞰图(Bird-Eye-View)的方法:


此类方法将点云投射到鸟瞰图上,利用BEV图生成proposal区域进而结合多个模态RGB/Front-View点云进行3D bbox的预测. 其中代表性的方法有MV3D[1] 和AVOD[2]


MV3D



该作者提出了一个多视角(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进行融合 :


Early fusion, Late fusion 和 Deep fusion, Deep fusion的方式增加了中间层不同模态特征的交换效果相比前两种方式稍好.



AVOD


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



AVOD只使用了BEV和 RGB图像,舍弃了MV3D中所有的FV(Front View)和BEV中的Intensity feature,在保证性能的前提下减少了一个分支的计算量,在作者的实验中BEV和RGB图像足够诠释物体在3D空间中的信息。另一个区别,相比MV3D中采用ROIPooiling进行特征采样,AVOD采用了crop-and-resize的策略.



此外AVOD尝试了三种不同的3D Bounding Box编码方式如下图所示,可以看到AVOD利用一个底面以及高度约束了3D Bounding Box的几何形状,即要求其为一个长方体,而MV3D只是给出了8个顶点,没有任何的几何约束关系。此外,MV3D中8个顶点需要一个24维(3x8)的向量表示,而AVOD只需要一个10维(2x4+1+1)的向量即可 , Regression target : (∆x1…∆x4, ∆y1...∆y4, ∆h1, ∆h2)。



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


2.基于Voxel Grid的方法:


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



3D-FCN


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



损失函数:


\mathcal{L}=\sum_{\mathbf{p} \in \mathcal{P}} \mathcal{L}_{\text {obj }}(\mathbf{p})+w \sum_{\mathbf{p} \in \mathcal{V}} \mathcal{L}_{\mathrm{box}}(\mathbf{p})


SparseConv


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的时候计算量相差一个数量级.



Part-A^2 Net[6]中作者采用了SSCN作为主干网络进行Segmentation以及Part Prediction以及Region proposal,相比基于PointNet的 backbone , SSC网络对局部结构信息具有更强的建模能力.



3.基于原始点云的方法:


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


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


2.针对刚体变化——对齐网络T-net学习点云的旋转,将物体进行对齐.



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


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


1.如何进行局部划分?


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


2.如何确定每个group点的数量/密度?


在点云数据集中,有些地方比较稠密,有些地方比较稀疏,在稀疏的区域如果半径太小就会覆盖很少的点云,从而导致提取不到有用特征. 论文中提出两种方法解决这个问题: (1) MSG(multi-scale grouping),即把每种半径下的局部特征都提取出来,然后组合到一起,但MSG有一个巨大的问题是运算的问题 (2) MRG (multi-resolution grouping)由两部分向量聚合构成,分别为上一层即Li-1层的向量和直接从Li层上的raw point提取的特征构成。



接下来我们介绍两个经典的机遇点云的检测方法:


F-PointNets [10]


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



F-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 尺寸,具体细节请参考原文这里不做展开.


\begin{aligned} L_{\text {multi-task}}=& L_{\text {seg}}+\lambda\left(L_{c 1-r e g}+L_{c 2-r e g}+L_{h-c l s}+\right.\\ &\left.L_{h-r e g}+L_{s-c l s}+L_{s-r e g}+\gamma L_{\text {corner}}\right) \end{aligned}

PointRCNN [11]


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

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

参考文献

[1] Zhou, Y., Tuzel, O.: Voxelnet: End-to-end learning for point cloud based 3d object detection. CoRR abs/1711.06396 (2017)

[2] Ku, J., Mozifian, M., Lee, J., Harakeh, A., Waslander, S.: Joint 3d proposal generation and object detection from view aggregation. arXiv preprint arXiv:1712.02294 (2017)

[3] 廖子:AVOD: 自动驾驶场景下多视角聚合的3D检测

[4] B. Li. 3d fully convolutional network for vehicle detection in point cloud. arXiv:1611.08069, 2016. 2.

[5] Benjamin Graham, Martin Engelcke, and Laurens van der Maaten. 3d semantic segmentation with submanifold sparse convolutional networks. arXiv preprint arXiv:1711.10275, 2017.

[6] Shaoshuai Shi, Zhe Wang, Xiaogang Wang, Hongsheng Li, Part-A^2 Net: 3D Part-Aware and Aggregation Neural Network for Object Detection from Point Cloud

[7] Charles R Qi, Wei Liu, Chenxia Wu, Hao Su, and Leonidas J Guibas. 2017a. Frustum PointNets for 3D Object Detection from RGB-D Data. arXiv:1711.08488 (2017)

[8] C. R. Qi, H. Su, K. Mo, and L. J. Guibas. Pointnet: Deep learning on point sets for 3d classification and segmentation. Proc. Computer Vision and Pattern Recognition (CVPR), IEEE, 2017. 1, 2, 4, 5, 10, 11, 13

[9] C. R. Qi, L. Yi, H. Su, and L. J. Guibas. Pointnet++: Deep hierarchical feature learning on point sets in a metric space. arXiv preprint arXiv:1706.02413, 2017. 1, 2, 4, 5, 7, 10, 11, 13, 14

[10] Charles R Qi, Wei Liu, Chenxia Wu, Hao Su, and Leonidas J Guibas. 2017a. Frustum PointNets for 3D Object Detection from RGB-D Data. arXiv:1711.08488 (2017).

[11] Shaoshuai Shi, Xiaogang Wang, and Hongsheng Li. PointRCNN: 3D Object Proposal Generation and Detection from Point Cloud. In CVPR, 2019.

编辑于 2019-10-21

文章被以下专栏收录