刚刚来到百度实习,方向是3D目标检测,前期工作是做算法调研,撰写本篇博客略作记录

目前,2D目标检测算法已经发展的比较成熟,但是在无人驾驶、机器人、增强现实的应用场景下,普通的2D检测并不能提供感知环境所需要的全部信息,2D检测仅能提供目标物体在二维图片中的位置和对应类别的置信度,但是在真实的三维世界中,物体都是有三维形状的,大部分应用都需要有目标物体的长宽高还有偏转角度等信息。目前的3D目标检测正处于高速发展时期,目前主要是综合利用单目相机、双目相机、多线激光雷达来进行3D目标检测,从成本上来讲,激光雷达>双目相机>单目相机,从目前的准确率上来讲,激光雷达>双目相机>单目相机。但是随着激光雷达的不断产业化发展,成本在不断降低,目前也出现了一些使用单目相机加线数较少的激光雷达进行综合使用的技术方案

因为在百度实习所做的方向是基于激光点云数据的3D目标检测,因此主要对基于点云的方法进行探讨。从点云数据表示的角度来讲,我们可以将现有的主流检测方法分为两类:一种是voxel-based的方法(将不规则的点云数据转换为规则数据),另外一种就是point-based的方法(直接在原始的点云数据上面处理)。前者的代表算法有voxelnet、second、pointpillars等,后者的代表性算法有pointnet、pointnet++、pv-rcnn等算法

voxel-based

VoxelNet

voxelnet是基于voxel的方法的开山之作,将三维点云划分为一定数量的voxel,经过点的随机采样和归一化,对每一个非空voxel使用若干个VFE(Voxel Feature Encoding)层进行局部特征提取,得到voxel-wise feature,然后经过3D Convolutional Middle Layers进一步抽象特征(增大感受野并学习几何空间表示),最后使用RPN(Region Proposal Network)对物体进行分类检测和位置回归。VoxelNet整个pipeline如下图所示

其中,RPN网络结构如图

voxelnet做出了非常大的突破,对如何规格化利用点云信息作出了贡献,但是voxelnet中采用了3D卷积,导致其运算量很大,占用内存过多,因此,second模型被提出

Second

second网络在结构上面并没有太大的创新,主要是采用了稀疏卷积来代替传统的3D卷积,大大提高了网络的计算速度,减少了内存的占用

稀疏卷积

传统的卷积操作,随着网络层的不断加深,会破坏原有数据的稀疏性,原本稀疏的数据会随着网络层不断加深逐渐变得平滑,如下图所示

而稀疏卷积在运算过程中只关注中心点区域,也就是只关注激活区域本身,并且不会造成数据稀疏性的损失,同时大大减少了计算中的运算量,稀疏卷积效果如图所示

PointPillars

pointpillars也是基于voxel的一篇文章,也是目前基于点云的3D目标检测算法中最快的一个,该算法提出一种新的特征编码网络,在体素的垂直列上面不做切割,在鸟瞰图下,将点云数据编码为稀疏的伪图像,利用2D卷积的目标检测算法进行特征提取和检测,从而移除了3D卷积的计算负担

point-based

PointNet

PointNet是直接在点云数据上面提取特征的第一篇文章,是直接处理点云数据方法的开端,整体思想非常简单直观:输入为所有无序的点云坐标,经过一系列的mlp(multi-layer perceptron)对所有点进行特征编码,每个点最终用一个特征向量来表示,然后综合所有点生成一个全局特征向量,再将全局特征向量与每个点的特征向量进行融合。整体思想非常简单,甚至比CNN的结构都要简单,但却是一篇开创性的工作。PointNet整体结构如下图所示

PointNet++

从PointNet的描述中我们可以看到,网络利用了每个点的特征以及全局特征,但是并没有像CNN那样利用局部特征,因此PointNet++在PointNet的基础上面,提出了SA(Set Abstraction)操作,充分利用了数据中的局部信息,set abstraction操作分为三层

1.Sampling layer: 对输入点进行采样,选取出若干个中心点,采用FPS(Farthest Point Sampling)方法

2.Grouping layer: 利用上一步获得的中心点将点集划分为若干个区域

3.Pointnet layer: 对每个区域进行编码,转换为特征向量

PV-RCNN

set abstraction在原始点云数据上面做,保留了准确的位置信息,通过自定义的球半径,感受野更加灵活。稀疏卷积在voxel方法上面使用,速度往往更快,产生的proposal往往质量更高。PV-RCNN综合利用了这两种特征提取方法,在精度上面取得了很大的进步

上图为pvrcnn模型整体结构,本文的主要贡献可以分为三点

1.提出了Voxel Set Abstraction操作,将Sparse Convolution主干网络中多个scale的sparse voxel及其特征投影回原始3D空间,然后将少量的keypoint (从点云中sample而来) 作为球中心,在每个scale上去聚合周围的voxel-wise的特征。这个过程实际上结合了point-based和voxel-based两种点云特征提取的结构,同时将整个场景的multi-scale的信息聚合到了少量的关键点特征中,以便下一步的RoI-pooling

2.提出了Predicted Keypoint Weighting模块,通过从3D标注框中获取的免费点云分割标注,来更加凸显前景关键点的特征,削弱背景关键点的特征

3.设计了更强的点云3D RoI Pooling操作,也就是提出的RoI-grid Pooling: 与前面不同,在每个RoI里面均匀的sample一些grid point,然后将grid point当做球中心,去聚合周围的keypoint的特征。这样做的好处有两个: (1) 球半径灵活,甚至可以包括proposal框外围的关键点,从而获取更多有效特征。(2) 球互相覆盖,每个keypoint可以被多个grid point使用,从而得到更紧密的RoI特征表达。另一方面,这其实也是另一个point (keypoint)与voxel (grid point)特征交互的过程

参考资料

1.VoxelNet: End-to-End Learning for Point Cloud Based 3D Object Detection

2.SECOND: Sparsely Embedded Convolutional Detection

3.3D Semantic Segmentation with Submanifold Sparse Convolutional Networks

4.PointPillars: Fast Encoders for Object Detection from Point Clouds

5.PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation

6.PointNet++: Deep Hierarchical Feature Learning on Point Sets in a Metric Space

7.PV-RCNN: Point-Voxel Feature Set Abstraction for 3D Object Detection



实习

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!