前言:视觉感知包括二维和三维视觉感知,其最终目的是为了获取三维世界坐标系下感兴趣的目标和场景的信息。单目相机下,需要几何约束或者海量数据来学习,以此来推测三维信息。双目相机下,可基于立体视觉原理来计算目标的深度信息,但在光照条件比较差或者纹理信息比较少的区域,很难找到匹配特征,因此深度估计效果会比较差,而且深度估计的精度会随着距离的增加会显著降低。相比于视觉系统间接推测三维信息,激光雷达可直接获取物体和场景的三维信息,因此激光雷达对于视觉传感器来说是一个很好的补充。
1. 激光雷达基础
(1)激光探测与测距系统(Light Detection And Ranging, LiDAR)
- 激光波长
- 905nm:需要限制功率,以保证对人眼没有损伤
- 1550nm:对人眼没有损伤,探测距离更远,但是成本高
- 测距原理
- 单脉冲飞行时间法(ToF):测出发射脉冲到接收脉冲所需的时间,再结合光速计算距离
- 调频连续波(FMCW):与毫米波类似,在后续毫米波雷达章节介绍
- 结构光法:在激光SLAM中有过详细介绍
- 硬件结构
- 机械旋转式:包含多个发射接收模块,需要人工调教。因此成本高,量产困难。另外,实际中当车身发生震动颠簸时会对机械转动模块产生较大影响,故很难满足车规级要求。
- 半固态(MEMS):采用微电子的机械系统来驱动激光雷达中的微小悬镜,然后将激光束反射到不同方向,这样可减少发射接收模块数量,从而降低生产成本,是目前自动驾驶系统中较为常见的量产方案。
- 全固态(FLASH):它没有空间扫描过程,也没有悬镜去反射激光束。是短时间内发射激光束,同时覆盖大面积的区域,但目前技术还不是很成熟。
- 考虑到整个生产成本、量产难度、车规级要求以及技术成熟度,目前半固态式激光雷达是比较有前景的。
(2)为什么要使用激光雷达——传感器之间的互补性
- 摄像头
- 优点:能够提取丰富的纹理和颜色信息,适用于目标的检测和分类,以及语义信息的提取
- 缺点:3D信息的感知能力比较弱,且受光照条件影响比较大
- 激光雷达
- 优点:能够精确感知目标的3D信息,且不受光照影响
- 缺点:成本较高,量产难度大,受天气影响较大
(3)不同级别自动驾驶系统的需求
-
L2级(自适应巡航 + 车道保持)
可以采用纯视觉系统来进行简单的目标检测和距离估计,因为此时驾驶主体是驾驶员本身,驾驶员需要时刻保持对车辆的掌控和周围环境的观察,自动驾驶系统只是起到辅助的作用。 -
L3级(拥堵辅助,领航辅助)
至少需要配备前向的激光雷达,来对车辆行进方向的运动或静止障碍物进行精确的距离估计 -
L4级(RoboTaxi)
在特定场景下,车辆可完全自主行驶,不需要驾驶员接管。需要多个激光雷达提供360°视场,以及需要一定的系统冗余性,当一个激光雷达失效时,其他激光雷达还能继续完成感知任务。
2. 点云数据库
(1)三种数据库比较
(2)WOD上的基准测试结果
- 基准算法:PointPillar物体检测算法
- 性能指标
- 输出3D框与ground truth的3D框进行对比
- 忽略高度信息,在俯视图(BEV)上将输出2D框与ground truth投影的2D框进行对比(大小、朝向等)
- Average Percision(AP),APH(AP with Heading)——带朝向的AP
- LEVEL_1/LEVEL_2(将数据分为两种 不同难度进行对比)
- 检测结果
- 远距离目标检测准确率较低
- 行人的检测准确率较低
- 不同城市的数据之间存在较大差异,算法的适应性不佳
- 增加训练数据可以显著地提高检测准确率
3. 基于激光雷达的物体检测算法概述
(1)大致流程
- 输入
- 点:X,Y,Z和反射强度R
- 点云:多个点的集合(它是无序的,非结构化的数据)
- 输出
- 目标的类别和置信度
- 目标的边框(Bounding Box):中心点3D坐标,长宽高,旋转角度
- 目标的其他信息:速度,加速度等
- 点云表示方法
- 点视图(Point View, PV):原始点云集合
- 俯视图(Brid’e Eye View, BEV):将点云量化为3D网格,将3D网格在高度方向上进行压缩可得到2D网格
- 前视图(Range View, RV):将点云投影到图像平面
- 多视图融合:俯视图+点视图,俯视图+前视图
(2)基于不同视图的激光雷达物体检测算法
- 点视图:PointNet/PointNet++,Point-RCNN,3D SSD
- 俯视图:VoxelNet,SECOND,PIXOR,AFDet
- 前视图:LaserNet,RangeDet
- 多视图融合
- 俯视图+点视图:PointPillar,SIENet,PV-CNN
- 俯视图+前视图:MV3D,RSN
4. 基于点视图的激光雷达物体检测
(1)PointNet
- 论文:QI et al, PointNet. Deep learning on point sets for 3d classification and segmentation, 2017.
- 核心思路:点云特征提取
- MLP(多个全连接层)提取点特征:n个点,特征由3维提升到1024维
- MaxPooling得到全局特征:1024维
- 可端到端学习,对点云进行分类/语义分割
- 拓展到物体检测:可先对点云进行聚类,然后使用PointNet对每一个聚类进行分类,即Clustering得到候选 + PointNet分类(经过clustering后,每个类别不一定都包含n个点。对于没有n个点的类别,需要进行上采样,对于超过n个点的类别,需要进行下采样,最终目的是使得每个类别都包含n个点)
- 大致流程:
输入n个点,每个点是由(X,Y,Z)坐标组成。首先,进行一个input transform空间变换,将不同朝向的物体归一化到一个统一的视角下(统一坐标系),使得不同物体的点云处于同一坐标系下。然后,通过MLP对点云进行点特征提取(由 n × 3 n \times 3 n×3转换为 n × 1024 n \times 1024 n×1024)。接着,通过MaxPooling进行全局特征提取(在n个点维度上进行Max Pooling,由 n × 1024 n \times 1024 n×1024转换成 1 × 1024 1 \times 1024 1×1024)。最后,通过MLP对1024大小的一维向量进行分类,获取点云分类结果。
(2)PointNet++
-
论文:Qi et al, PointNet++. Deep hierachical feature learning on point sets in a metric space, 2017.
-
它是在物体检测方向进行扩展:Clustering + PointNet
- 用聚类的方式来产生多个候选点集,每个候选点集采用PointNet来提取特征
- 上述过程重复多次:上一层的点集经过全局特征提取后看作下一层的点(Set Abstraction, SA)。也就是说,每个候选点集可以表示成一个特征向量,因此可将每个候选点集看成一个新的点,它有一个与之对应的特征向量。所以,多个候选点集可看成由多个点组成的新点云,它与原始点云在形式上是一样的。然后,再用上述过程对新点云进行相同处理,如此可重复多次。
- 点特经过多次聚类+PointNet特征提取后,会得到比较稀疏的点云,每个点特征具有较大的感受野,包含周围环境的上下文信息。因此,每个点可以看作物体的候选,实现对物体分类和检测的目的。
- PointNet++最后对得到的稀疏点云再经过PointNet进行场景的全局分类,同时将稀疏点云恢复到原始点云,进行点云分割。
(3)PointNet和PointNet++中存在的问题
- 无法利用视觉领域成熟的检测框架,比如:Faster R-CNN,YOLO等
- Clustering部分的计算复杂度较高,而且难以并行处理
- 两个改进方法:Point R-CNN,3D SSD
(4)Point R-CNN
论文:Shi et al. PointRCNN. 3D Object Proposal Generation and Detection from Point Cloud, 2018.
-
核心思想:点处理(第一步) + Faster R-CNN(后三步)
- 通过PointNet++提取点特征,同时进行前景分割,以区分物体点和背景点
- 每个前景点生成一个3D候选框
- 对每个候选框内的点进行ROI Pooling,得到固定大小的特征向量。
- 最后与Faster RCNN一样,进行一系列的特征提取,如对bounding box进行分类,并修正其位置和大小
-
运行速度瓶颈 (Point R-CNN中的前景分割是怎么实现的)
- Point R-CNN是通过前景分割来代替聚类,在一定程度上可减少聚类所带来的计算量。但在进行前景分割时,需要通过PointNet++将点集特征经过上采样映射回原始点云(因为聚类生成的点集无法很好地覆盖所有物体),这一部分是比较耗时的。
- 在ROI Pooling中需要全局搜索属于每个物体候选框中的点
(5)3D SSD
- 论文:Yang et al., 3dssd:Point-based 3d single stage object detector, 2020
3D SSD相对于Point R-CNN而言,做出了如下改进:
-
提高聚类质量
- PointNet++是考虑点与点之间的空间距离(几何特征)进行聚类,3D SSD是同时考虑点与点之间在几何与特征空间上的相似度来进行聚类。
- 此时,聚类可以更好地覆盖场景中的物体,可直接以聚类的输出作为物体候选,而不用再上采样到原始点云。
-
避免重复计算
- 高质量的聚类算法输出每个cluster的中心和邻域点,无需再上采样到原始点云。
-
提高了聚类质量后,可确定聚类中的点属于哪个类别。因此,可避免在ROI Pooling阶段全局搜索场景中的所有点来确定其中每个点属于哪个物体候选框。
5. 基于俯视图的激光雷达物体检测
(1)VoxelNet
-
论文:Zhou and Tuzel, Voxelnet: End-to-end learning for point cloud based 3d object detection, 2018.
-
大致内容:特征学习网络(Feature Learning Network)、3D卷积网络(Convolutional Middle Layers)、区域候选网络(Region Proposal Network)
-
特征学习网络
- Grouping & Sampling:将输入点云在三维空间中进行量化,具体操作为:将三维空间划分为三维网格,每个网格中会分配到相应数量的点,然后通过上采样与下采样操作,来统一每个网格中的点数量。
- Voxel Feature Encoding(VFE):先通过全连接层对每个网格中的点进行特征提取,然后对提取到的每个点特征进行Mean Pooling获取特征均值,最后将每个点特征与特征均值进行concat拼接,得到新的点特征,由此得到的特征既包含该点自身的特征,也包含该网格的整体特征(具有一定的邻域信息)。
- Stacked VFE:重复多次VFE操作
-
3D卷积网络
经过stacked VFE特征提取后,得到一个四维的Tensor。然后,采用3D卷积网络提取三维空间特征,并将高度压缩到一维,最终得到一个类似于二维图像表示形式的三维Tensor。
- 区域候选网络
在经过上述3D卷积网络后,得到类似于二维图像的特征,因此可采用类似于二维图像物体检测网络来进行处理。下面是通过类似于U-Net结构的网络进行特征提取,然后分别使用分类和回归Head进行处理。
(2)VoxelNet中存在的问题
- 数据表示低效,存在大量空白区域
- KITTI数据库一般生成5K-8K个Voxel,只有0.5%的Voxel是非空的
- 改进方法:SECOND(采用稀疏卷积,避免空白区域的无效计算)
- 三维卷积计算量巨大
- 改进方法:PIXOR(将3D网格通过手工设计的方式压缩到2D)
(3)SECOND(Sparsely Embedded Convolutional Detection)
- 论文:Yan et al., Second: Sparsely embedded convolutional detection, Sensors, 2018.
- 大致结构
- 使用稀疏卷积避免无效计算:
将VoxelNet中的3D卷积转换为稀疏卷积,相应的输入由稠密的网格表示形式转化为稀疏的结构,即只保留非空的网格特征,同时记录每个非空网格的索引位置,其余模块与VoxelNet类似。
- 稀疏卷积操作:首先,网格数据上是由稠密表示转换为稀疏表示。其次,卷积操作只在非空网格上进行卷积操作,如下图所示:
(4)PIXOR(Oriented 3D object detection from Pixel-wise neural network predictions)
-
论文:Yang et al., Pixor. Real-time 3d object detection from point clouds, CVPR, 2018.
-
核心思想:通过手工设计高度维度的特征,将高度维度变成特征通道,从而将3D卷积变成2D卷积,可以使用2D卷积来提取特征。其中,手工设计包括Occupancy和Intensity两个方面的内容。
- Occupancy:对于 L × W × H L \times W \times H L×W×H的网格,将高度维度划分成 H H H个格子,若当前高度格子内有点,则该高度格子参数为1,否则为0。
- Intensity:对于 L × W × H L \times W \times H L×W×H的网格,将高度 H H H上所有点的反射强度进行平均,将 H H H维压缩成1维。
- Total:将Occupancy和Intensity特征合并起来,由此将三维网格转换成 L × W × ( H + 1 ) L \times W \times (H+1) L×W×(H+1)格式的图像(图像大小: L × W L \times W L×W,通道数: H + 1 H+1 H+1)
6. 俯视图与点视图的比较
(1)俯视图
- 优点:输入结构化数据,网络结构简单,可以通过标准的卷积操作得到最终的检测结果
- 缺点:对量化参数敏感:粗网格导致较大的信息损失,细网格导致较大的计算量和内存使用量
(2)点视图
- 优点:没有量化损失,数据比较紧致
- 缺点:输入非结构化数据,网络结构复杂,并行处理困难,提取邻域特征困难
(3)检测结果比较
算法 | VoxelNet | SECOND | PIXOR | Point RCNN | 3D SSD |
---|---|---|---|---|---|
点云表示 |