3D目标检测的整个目标是通过绘制定向的 3D 边界框并分配标签来识别感兴趣的目标。考虑两种常用的3D目标检测方式,即图像和点云,检测3D空间中的物体对于增强现实、机器人和自动驾驶等广泛应用至关重要。3D探测器将生成具有大小、位置、方向和类别参数的3D边界框,以对检测到的物体进行定位和分类,使系统能够感知和理解周围环境。3D物体探测器可分为LiDAR点云、立体图像或单目图像。这项愿景任务的关键挑战与我们的使用方式、表现方式以及组合方式密切相关。由于手头只有图像,核心挑战来自缺乏深度信息。尽管在从图像恢复深度方面已经取得了很大进展,但这仍然是一个不恰当的反向问题。同一物体在不同的3D姿态下,在图像平面上会产生不同的视觉外观,不利于表征的学习。由于手头只有点云,关键的困难在于表示学习。点云本质上是稀疏的 点云本质上是不规则的和无序的。相机具有价格低廉、彩色信息、感知密集等诸多独特优势,使用相机进行3D目标检测已成为一个活跃的研究领域。然而,由于图像中缺乏精确的3D信息,基于LiDAR的3D探测器和基于摄像头的3D探测器之间存在较大的性能差距。因此,使用相机进行3D目标检测是一项极具挑战性的任务。
一、基础
开源数据集:常用的数据集包括KITTI、Waymo Open Dataset、nuScenes等。这些数据集提供了丰富的3D点云和对应的标签,推动了3D检测算法的发展。对应详细介绍和下载可参考前面笔记自动驾驶开源数据集下载-CSDN博客
基准:上述数据集通常提供标准的评估指标,如平均精度(AP)和平均召回率(AR),用于评估模型性能。
对于其他的一些基础细节比如坐标转换,标定等可以参考以前学习笔记自动驾驶相关的传感器和坐标系-CSDN博客
二、检测方法
对于感知3d检测方法总结可以参考https://blog.csdn.net/xiaomu_347/article/details/138545618
1.基于图像
》单目图像方法
单目图像方法使用单个RGB图像进行3D检测。由于缺乏深度信息,这些方法通常需要通过学习或几何推理来估计深度。
- 2D到3D投影:从2D检测器输出的边界框开始,通过深度估计和几何约束来推断物体的3D位置和尺寸。
- Mono3D:通过生成多个候选3D框并优化其位置来检测3D物体。
- Deep3DBox:使用2D检测器检测物体,然后通过最小化3D边界框的投影误差来推断其3D姿态。
- 深度估计与3D回归:直接在2D图像上进行3D回归,估计物体的3D位置、尺寸和姿态。
- M3D-RPN:使用区域提议网络(RPN)在单目图像上生成3D候选区域,并通过特征提取和回归来精确检测。
- SMOKE:通过卷积神经网络从单目图像中直接回归出3D边界框。
》双目图像方法
双目图像方法使用一对立体图像进行3D检测,这些图像能够提供深度信息,使得3D推断更加准确。
- 立体匹配与深度图生成:首先生成稠密深度图,然后在深度图上进行3D物体检测。
- Pseudo-LiDAR:将双目图像生成的深度图转换为伪LiDAR点云,并使用点云检测方法进行检测。
- Stereo R-CNN:结合双目图像对的几何关系,从立体图像中提取深度信息进行3D检测。
》多视角图像方法
多视角图像方法利用从多个摄像头捕获的图像进行3D检测,这些方法可以结合来自不同角度的信息,提高检测的准确性。
- 视角融合:从多个视角图像中提取特征,并融合这些特征进行3D检测。
- MV3D:使用鸟瞰图、前视图和立体图像的特征融合来生成3D候选框。
- F-PointNet:在RGB图像上生成2D候选区域,并在这些区域内使用点云进行精细3D检测。
- BEVFormer:BEVFormer是一种利用Transformer架构从多视角图像生成鸟瞰视图(Bird's Eye View, BEV)特征图的网络结构。它通过融合多视角图像特征,生成高分辨率的BEV表示,从而进行精确的3D目标检测。
- occ:Occ网络结构专注于生成占用网格(Occupancy Grid),即通过预测环境中每个网格单元是否被占用,来进行场景理解和3D目标检测。这种方法常用于自动驾驶和机器人导航。
目前基于相机图像的3d检测主要集中到bev视角下,对应的方法细节可以参考https://blog.csdn.net/xiaomu_347/article/details/139843046
2. 基于lidar点云
基于lidar的3D检测方法大致可以分为三类:基于体素、基于点和混合方法。
》基于体素的方法
这些方法将3D点云划分成固定大小的体素,然后将每个体素的特征输入到卷积神经网络中进行处理。
- VoxelNet:将点云数据分割成体素,并通过3D卷积提取特征。
- SECOND:采用稀疏卷积操作以提高计算效率。
》基于点的方法
这些方法直接在原始点云数据上进行操作,不需要体素化过程,能够更好地保留空间信息。
- PointNet/PointNet++:直接处理点云数据,通过MLP网络提取特征。
- PointRCNN:使用PointNet对点云进行特征提取,并生成候选区域进行目标检测。
》混合方法
结合了基于体素和基于点的方法,利用两者的优势进行检测。
- PV-RCNN:结合PointNet和VoxelNet的优势,使用体素特征增强点云特征。
3. 基于融合方法
》前融合
前融合是在数据预处理阶段,将来自不同传感器(如相机、LiDAR等)的原始数据进行融合,然后作为整体输入给深度学习模型。
方法和结构
- 多视角图像拼接:将来自多个摄像头的图像拼接成一幅大图,然后进行2D或3D检测。
- 多模态数据叠加:将LiDAR点云和相机图像的数据进行空间对齐和叠加,形成一个多模态输入。
- 体素化处理:将LiDAR点云进行体素化处理,并结合相机图像中的颜色或纹理信息,形成体素化输入。
该方法在模型的输入阶段进行融合,能够简化后续处理步骤。同时不同模态的数据在早期就得到了集成,有助于捕捉不同模态之间的相关性。但也存在早期融合过程中可能丢失一些细节信息以及不同传感器的数据需要进行精确的空间对齐,这个过程可能复杂且耗时等不足。典型的网络结构有
》特征融合
特征融合是在模型的中间阶段,将从不同传感器提取的特征进行融合。常见的方法包括将来自不同传感器的特征图进行拼接或通过注意力机制进行融合。
方法和结构
- 特征拼接:将从相机图像和LiDAR点云中提取的特征图进行通道维度上的拼接,然后通过卷积层进行处理。
- 多模态注意力机制:使用注意力机制对来自不同模态的特征进行加权融合,提升重要特征的权重。
- 融合模块设计:设计专门的融合模块,如点特征提取网络(PointNet)和图像特征提取网络的结合,通过卷积操作进行特征融合。
该方法在特征层面进行融合,能够保留更多的原始信息。可以通过灵活设计不同的特征融合策略,以适应不同的应用需求。但是在中间层进行特征融合,可能增加模型的计算复杂度和内存消耗。同时需要设计有效的融合机制,以确保不同模态特征的有效融合,难度比较大。
》后融合
后融合是在检测结果阶段,将来自不同传感器的检测结果进行融合。通常是在单独处理每种模态的数据后,再将它们的检测结果进行组合和优化。
方法和结构
- 结果加权融合:根据每种模态的置信度,对各自的检测结果进行加权平均,得到最终的检测结果。
- 非极大值抑制(NMS):对不同模态的检测结果进行合并,通过非极大值抑制算法去除冗余的检测框。
- 集成学习方法:使用集成学习方法(如Boosting、Bagging等)将多个模态的检测结果进行融合,提升整体检测性能。
该方法支持不同模态的数据可以独立处理,减少了融合的复杂度。同时在后期进行融合,可以更好地整合不同模态的检测结果,提高鲁棒性。同样的在检测结果阶段进行融合,可能无法充分利用不同模态之间的互补信息。需要等待所有模态的结果,可能影响实时性。
4、基于时序的3d检测
根据数据类型,这些方法可分为三类:激光雷达序列检测、流输入检测和视频检测。
》激光雷达序列检测
大多数使用多帧点云的检测方法首先通过共享检测器对点云的每一帧生成3D候选框,然后采用LSTM、Graph、Transformer等方法聚合不同帧上的对象信息。
》流输入检测
将每个LiDAR分组视为独立样本来检测3D对象,并在顺序分组上应用时间模块来学习分组之间的关系。
》视频检测
基于视频的检测方法通常通过在不同帧上跟踪和融合相同的对象来扩展基于图像的3D对象检测器。所提出的跟踪器包括LSTM和3D卡尔曼滤波器。
BEV时序多模态3D检测
三、训练框架
目前工业还是学术上主流深度学习框架都是基于pytorch,而3d检测多采用的是商汤基于torch封装开发的mmdet3d,对于这个框架的操作和学习可以参考这篇学习笔记https://blog.csdn.net/xiaomu_347/article/details/138905328。
参考链接:
1、3D Object Detection for Autonomous Driving: AComprehensive Review