写在前面
即便 CNN 检测出的 2D bbox 能为目标深度提供一些线索,后续的预测、规划和运动控制仍然需要更完整的 3D 信息,包括目标的位置、尺寸、方向和速度等。更何况,如果能够恢复目标的 3D 信息,对测距精度的提升也会有很大帮助。
激光雷达和深度相机固然精度很高,但是贵。而且在 Lidar 和 Depth Camera 的基础上加入 RGB 单目相机,也可以增加系统冗余度。也就是说,可劲儿融合。
表征转换 - BEV
BEV(Bird's-eye-view)是一种从俯视角组织 3D 场景或特征的表示方式。它不是简单地把 3D 世界坐标压平成平面,而是把场景结构转换到更适合自动驾驶任务的俯视坐标系中,方便后续进行目标检测、轨迹预测和规划。
将相机图像转换为 BEV,可以使用 Orthographic Feature Transform(OFT)的方法。OFT 使用 ResNet-18 提取透视图像特征,然后在预定义的 voxel area 中积累图像特征,构建 3D voxel feature volume。之后沿着垂直于地面的高度方向聚合,得到 BEV 视角下的特征,最后再使用另一个 ResNet 推理并细化 BEV 图。
这里的 voxel 是体素,和点云(Point Clouds)类似,体素网格(Voxel Grids)、多边形网格(Polygon Meshes)、多视图表示(Multi-view Representations)都可以用来表示 3D 数据。
- 点云:三维空间中点的集合,每个点通常包含 \textstyle x,y,z 坐标,也可以带有反射强度、颜色等属性。
- 体素:3D 空间中的像素。它是量化的、大小固定的空间单元,可以理解为 Minecraft 中的 cube。
- 多边形网格:由点(vertex)和面(face)组成的几何表示。
- 多视图表示:从不同模拟视点渲染得到的 2D 图像集合。
此外,使用 BirdGAN 也可以实现相机图像到 BEV 的转换。但是实验结果显示,BirdGAN 主要在正前方 10 到 15 m 的范围内效果较好,使用场景存在一定限制。
伪激光雷达 Pseudo Lidar
这类方法的思路,是先从图像中估计深度图,再利用相机内参把每个像素反投影到 3D 空间,生成类似激光雷达点云的 pseudo point cloud,因此被称为伪激光雷达。得到点云后,可以复用点云 3D 检测方法,或者将点云特征和图像特征融合,最后回归 3D bbox。
Pseudo-Lidar 原始思路并不限定必须使用某一个固定的深度网络。实际使用时,深度可以来自单目深度估计、双目深度估计,也可以来自更强的深度模型。深度估计越准,生成的 pseudo point cloud 越接近真实 LiDAR 点云,后续 3D 检测效果也越好。
Pseudo-Lidar++ 在这个方向上继续改进深度估计和点云质量,也可以结合稀疏 LiDAR 做深度校正。之所以将图像和稀疏点云结合,是因为稀疏点云中包含真实深度信息,可以显著提高相机估计深度的准确性。
此外,Pseudo-Lidar Color 还可以通过融合颜色信息改善结果,例如把点的表示从 \textstyle (x,y,z) 扩展为 \textstyle (x,y,z,R,G,B)。
目前,Pseudo-Lidar 方法的瓶颈主要有两个:其一是深度估计不准确会导致局部错位;其二是物体边缘附近的深度尾影会造成边缘泄漏。总的来说,这类方法的上限很大程度上取决于深度估计质量。
关键点和形状
这个思路依赖目标的几何先验。车辆可以近似看作刚体,且拥有比较稳定的特征点,比如车头角点、A/C 柱和车顶角点等。行人不是严格刚体,但仍然可以利用头、肩、髋、膝等稳定关键点,以及人体尺寸先验。除此之外,车辆和行人的基本尺寸分布通常也是可利用的先验,包括目标整体尺寸和关键点间距。
这种方法大多从 2D 物体检测模型扩展而来,例如从 YOLO 或 RCNN 进一步扩展到关键点检测。
Deep MANTA 在第一阶段的训练和推理中,使用级联 RCNN 架构获取 2D bbox、关键点和模板匹配度。模板对应 3D bbox 的长宽高,即 \textstyle L,W,H。在第二阶段,它结合模板匹配度选择最优 3D 模型,并通过 2D/3D 匹配,例如 EPnP 算法,恢复 3D 位置和方向。
The Earth Ain't Flat 这篇文章主要为了解决不平整道路上的目标重建问题。这个算法的关键,是从单目相机图像中估计 3D 形状和 6DoF 姿态。它也使用了类似 MANTA 的 36 个关键点,但并不根据模板匹配度选择最好的 3D bbox,而是使用一组基础形状和对应的变形系数来表示目标形状。这种方法对真实道路中坡度变化更有泛化能力。
3D-RCNN 可以估计形状、姿态和尺寸等参数,并进一步渲染场景。但是这种方法需要较多输入,例如 3D bbox、3D CAD 模型、2D 实例分割等,因此这里不再赘述。
此外,RoI-10D、Mono3D++、MonoGRNet、MonoGRNet V2 等相似算法,也会使用 semi-automatic 的方式,把 CAD 模型和 3D bbox ground truth 结合起来标注 3D 关键点。但是,大规模标注目标关键点非常复杂且耗时。目前仅有少数数据集,例如百度 ApolloScape,提供了密集关键点标注和 mesh 格式的形状数据。
Ground Plane Polling(GPP)则通过自动生成 3D bbox 注释所需的虚拟关键点来构建约束。它会预测比估计 3D bbox 所需更多的信息,并使用这些预测信息生成公共属性集。它的思想有点类似 RANSAC(随机抽样一致),通过投票和一致性约束提高对异常值的鲁棒性。
RTM3D(Real-time Mono-3D)也使用虚拟关键点,并采用类似 CenterNet 的结构,直接检测 8 个立方体 vertex 加立方体中心的 2D 投影。这种方法还回归距离、方向和大小,是实时单目 3D 目标检测方法之一。
受 CenterNet 的启发,SMOKE(Single-Stage Monocular 3D Object Detection via Keypoint Estimation)放弃了 2D bbox 回归,直接预测 3D bbox。它将 3D bbox 编码为 3D 立方体中心投影上的一个点,尺寸、距离、偏航角为其附加属性。这种算法还实现了在 60 m 内小于 5% 的距离预测误差。代码:https://github.com/lzccccc/SMOKE
Monocular 3D Object Detection with Decoupled Structured Polygon Estimation and Height-Guided Depth Estimation 这篇论文提出了 3D vertex 的 2D 投影估计,也就是结构化多边形,和深度估计解耦的方法。它使用与 RTM3D 类似的方法回归立方体的 8 个投影点,然后使用垂直边缘高度作为距离估计的强先验信息。由此得到一个粗略的 3D 立方体,这个立方体可以作为 BEV 的种子位置。这种方法相比 Pseudo-Lidar,在一些场景中会更稳定。
Monoloco 与上述方法不同,它专注于回归行人的 3D 位置。行人不是刚体,而且姿态变化明显,所以预测行人位置更困难。它使用关键点检测器,例如自上而下的 Mask RCNN 或自下而上的关键点检测方法,提取行人关键点。然后利用行人相对固定的高度,尤其是肩部到臀部这一段大约 50 cm 的长度来推断深度,与 MonoGRNet V2 的思路相似。该方法使用多层感知器(Fully Connected Neural Network),将深度与所有关键点线段长度关联起来进行回归。
通过 2D/3D 限制进行测距
这类方法利用 2D/3D 一致性,把 2D bbox 提升为 3D bbox。Deep3DBox 和上述基于关键点、形状的方法相似,它增加了 local yaw 回归和子类型平均尺寸的偏移,用来从 2D bbox 推理 3D bbox。这个算法严重依赖 2D bbox 检测的准确性,并且几何求解阶段依赖 2D bbox 的大小和位置,而不是端到端地从图像外观特征中学习优化。
FQNet 为 Deep3DBox 增加了一个细化阶段:先在 3D 种子位置周围进行密集采样,再利用渲染得到的 3D 线框对 2D patch 进行评分。不过,密集采样需要大量时间,因此算法实时性较差。
Shift R-CNN 通过主动回归 Deep3DBox 提出的尺寸偏移量,避免了密集采样。所有已知的 2D 和 3D bbox 都作为 ShiftNet 全连接网络的输入,并用于细化 3D 位置。
MVRA 在神经网络中加入 2D/3D 约束,并迭代地细化被截断的 box。它引入了一个 3D 重建层,将 2D 提升为 3D。这个算法注意到 Deep3DBox 难以处理被截断的 box,因为被截断的 box 的 vertex 不一定对应真实物体范围。因此,它对截断 box 迭代使用 3 个约束,而不是 4 个约束,进行方向细化;全局偏航角通过两次迭代中在 \textstyle \pi/8 和 \textstyle \pi/32 区间内的试验和错误进行估计。
MonoPSR 首先生成 3D 预测,然后重建物体的局部点云。中心点预测阶段使用 2D bbox 的 height 和回归得到的 3D height 来估计深度,并在估计深度的基础上将 2D bbox 重投影至 3D 空间。它的 3D 预测比较准确,平均绝对误差约为 \textstyle \pm 1.5 m。
GS3D 基于 Faster RCNN 框架。它使用本地方向和从 2D bbox 高度估计的距离生成一个粗略 3D bbox。深度估计使用了一个统计先验:3D bbox 的 height 在 2D 图像中的投影大约是 2D bbox height 的 0.93 倍,这个先验来自对训练数据集的统计分析。此外,它还使用 RoIAlign 扩展的表面特征提取算法来改善 3D 检测结果。
这种方法很自然地扩展了 2D 物体检测框架,因此在工程实现上比较实用。
直接生成 3D bbox
MonoDIS 基于扩展的 RetinaNet 架构,直接回归 2D bbox 和 3D bbox。它没有直接监督 2D 和 3D bbox 输出的每个部分,而是从整体上进行 bbox 回归。它的思想主要是为不同距离的目标学习不同表征,但是模型对超出训练距离范围的目标缺乏泛化能力。为了增强远距离目标上的表现,通常需要增加模型容量和相应训练数据。
CenterNet 是一个多功能物体检测框架,可以扩展到很多检测相关任务,例如关键点检测、深度估计、方向估计等。它首先回归一个表示物体中心位置置信度的 HeatMap,并继续回归其他物体属性。因此,将 CenterNet 扩展到 2D 和 3D 物体检测是比较直接的思路。
SS3D 使用类似 CenterNet 的结构,首先找到物体的潜在中心,然后同时回归 2D 和 3D bbox。它通过 26 个代理元素参数化一个 2D 和 3D bbox 元组,并通过动态学习权重来平衡不同元素的损失。该方法还引入 3D IoU loss,使检测和 3D box fitting 可以更紧密地联合优化。不过,这类方法也可能存在局部最小值问题,使用启发式初始化可以改善训练。
直接生成 3D bbox 的方法通常仍然会利用一些启发式假设或 2D 物体检测信息。例如,汽车通常位于地面上,汽车的 3D bbox 投影通常落在对应 2D bbox 所包围的区域内。这些先验能降低单目 3D 目标检测的不适定性。
参考文章
[2] Orthographic Feature Transform for Monocular 3D Object Detection
[3] Learning 2D to 3D Lifting for Object Detection in 3D for Autonomous Vehicles
[4] Multi-Level Fusion Based 3D Object Detection from Monocular Images
[6] Pseudo-LiDAR++: Accurate Depth for 3D Object Detection in Autonomous Driving
[9] RTM3D: Real-Time Monocular 3D Detection from Object Keypoints for Autonomous Driving
[10] Ground Plane Polling for 6DoF Pose Estimation of Objects on the Road
[11] SMOKE: Single-Stage Monocular 3D Object Detection via Keypoint Estimation
[13] Monoloco: Monocular 3D Pedestrian Localization and Uncertainty Estimation
[14] 3D Bounding Box Estimation Using Deep Learning and Geometry
[15] Deep Fitting Degree Scoring Network for Monocular 3D Object Detection
[16] Shift R-CNN: Deep Monocular 3D Object Detection with Closed-Form Geometric Constraints
[17] Multi-View Reprojection Architecture for Orientation Estimation
[18] Monocular 3D Object Detection Leveraging Accurate Proposals and Shape Reconstruction
[19] GS3D: An Efficient 3D Object Detection Framework for Autonomous Driving
[20] Disentangling Monocular 3D Object Detection
[21] Monocular 3D Object Detection and Box Fitting Trained End-to-End Using Intersection-over-Union Loss
[22] Lifting 2D Object Detection to 3D in Autonomous Driving
[23] Monocular 3D Object Detection in Autonomous Driving: A Review
评论