当前位置: 首页 > article >正文

机器学习笔记 - 3D对象检测技术路线调研(未完)

一、3D对象检测简述

        3D对象检测是计算机视觉中的一项任务,其目标是根据对象的形状、位置和方向在 3D 环境中识别和定位对象。它涉及检测物体的存在并实时确定它们在 3D 空间中的位置。这项任务对于自动驾驶汽车、机器人和增强现实等应用至关重要。

1、基本流程

         给定图像,估计所有对象实例的3D形状和3D姿态。

        数据收集:收集包含图像和相应 3D 数据的数据集,例如来自 LiDAR 传感器的点云、深度图或立体图像。数据集应使用我们想要检测的对象的3D边界框信息进行注释。

        决定我们将用于捕获 3D 数据的传感器。常见选项包括 LiDAR 传感器、立体摄像头、RGB-D 摄像头(如 Microsoft Kinect)和深度传感器。每种传感器类型都有其优点和局限性,因此请选择适合您应用的传感器类型。

        通过用相应的 3D 边界框标记感兴趣的对象来注释我们的数据。这涉及指定对象的尺寸(长度、宽度、高度)及其在 3D 空间中的位置(通常由对象的质心或边界框的角表示)。Labelbox、VGG 图像注释器 (VIA) 或自定义脚本等工具可以帮助完成此过程。

        预处理:准备训练数据。这可能涉及标准化图像和数据、将图像与相应的 3D 数据对齐以及增强数据以增加训练集的多样性。

        架构选择:选择适合 3D 物体检测的架构。为此目的设计了各种神经网络架构,例如 PointNet、Frustum PointNets、PIXOR、VoxelNet 和 SECOND等等。这些架构可以处理不同类型的输入数据,例如点云或体素网格。

2、技术发展

        据了解目前大概有三个层次的,这里仅仅是个人了解到的一些信息整合,不保证准确,仅供参考。

        1、基于单个2D的RGB图像中围绕对象绘制3D边界框的任务。这是定位任务,但没有任何额外的信息,如深度或其他传感器或多图像。

        2、基于单目深度估计来生成3D点云,将相机转变为伪激光雷达传感器。或者基于深度图+RGB的思路。

        3、基于给定输入(例如RGB图像、LiDAR数据或两者的融合、LiDAR序列数据)识别和定位3D空间中的对象。

二、基于相机的3D对象检测

1、基于RGB图像

        基于锚点的单阶段方法利用图像特征和预定义的 3D 锚框来预测 3D 对象参数。单阶段无锚方法直接从图像像素预测 3D 对象参数。两阶段方法首先从 2D 检测器生成 2D 边界框,然后通过从 2D RoI 特征预测 3D 对象参数,将 2D 检测提升到 3D 空间。

2、基于RGB+深度

        基于深度图像的方法通过融合来自 RGB 图像和深度图像的信息来获得深度感知图像特征。基于伪激光雷达的方法首先将深度图像转换为 3D 伪点云,然后在点云上应用基于激光雷达的 3D 检测器来检测 3D 物体。基于补丁的方法将深度图像转换为二维坐标图,然后在坐标图上应用二维神经网络进行检测。

(1)DD3D

        这些两级检测器随着中间深度估计网络的准确性而提高,中间深度估计网络本身可以通过大规模自监督学习而无需手动标签而得到改进。然而,它们往往比端到端方法更容易遭受过度拟合,并且更复杂,并且与类似的基于激光雷达的检测器的差距仍然很大。

        端到端、单级、单目 3D 物体检测器 DD3D,它可以受益于伪激光雷达方法等深度预训练,但没有其限制。模型架构专为深度估计和 3D 检测之间的有效信息传输而设计,使得能够根据未标记的预训练数据量进行扩展。

我们的方法在两个具有挑战性的基准上取得了最先进的结果,在 KITTI-3D 基准上汽车和行人的 AP 分别为 16.34% 和 9.28%,在 NuScenes 上的 mAP 为 41.5%。

        论文地址

https://arxiv.org/abs/2108.06417icon-default.png?t=N7T8https://arxiv.org/abs/2108.06417

(2)待续

3、基于先验引导

        先验引导方法利用对象形状先验、几何先验、分割和时间约束来帮助检测 3D 对象。从这个思路猜测,如果是没见过的东西,那就不知道咋弄了可能。

4、基于立体估计

        基于 2D 检测的方法首先分别从左图像和右图像生成一对 2D 提案,然后根据配对提案估计 3D 对象参数。基于伪 LiDAR 的方法通过立体匹配预测视差图,然后将视差估计转换为深度和 3D 点云,然后使用基于 LiDAR 的检测器进行 3D 检测。基于体积的方法通过视图变换构造3D特征体积,然后在3D体积上应用基于网格的3D对象检测器进行检测。

四、基于LIDAR的3D对象检测

        用于2D对象检测和分类的CNN 已经成熟。但3D物体检测至少有两点不同:

        1、与 RGB 图像不同,LIDAR 点云是 3D 且非结构化的。

        2、自动驾驶的 3D 检测必须很快(<~100ms)。

        几种 3D 检测方法通过将 LIDAR 点云离散化为 3D 体素网格并应用 3D 卷积来解决第一个问题。然而,与 2D 卷积相比,3D 卷积的计算成本更高,因此延迟也更高。或者,可以将点云投影到自上而下的鸟瞰图 ( BEV ) 或 LIDAR 的本机范围视图 (RV) 中的2D图像。优点是可以通过更快的 2D 卷积有效地处理投影图像,从而产生更低的延迟。

        近几年的相关论文

1、基于点云

        通用的基于点的检测框架包含基于点的骨干网络和预测头。基于点的主干由几个用于点云采样和特征学习的块组成,预测头直接从候选点估计 3D 边界框。

2、基于网格

        基于网格的方法将点云栅格化为 3 种网格表示形式:体素、柱子和鸟瞰图 (BEV) 特征图。2D 卷积神经网络或 3D 稀疏神经网络应用于网格上进行特征提取。最终从 BEV 网格单元预测 3D 对象。

3、基于点体素

        单级点体素检测框架融合了主干网络中的点和体素特征。两阶段点体素检测框架首先使用基于体素的 3D 检测器生成 3D 对象建议,然后使用从点云采样的关键点细化这些建议。

4、基于范围

        第一类基于范围的方法直接根据范围图像中的像素预测 3D 对象,使用标准 2D 卷积或用于特征提取的专用卷积/图运算符。第二类将特征从范围视图转换为鸟瞰视图或点视图,然后从转换后的视图中检测3D对象。

5、基于锚点

        3D 锚框放置在每个 BEV 网格单元处。那些与基本事实具有高 IoU 的锚被选择为正样本。3D 对象的大小和中心从正锚点回归,并且通过基于 bin 的分类和回归来预测对象的航向角度。

6、无锚检测

        无锚学习目标可以分配到不同的视图,包括鸟瞰图、点视图和范围视图。直接从正样本预测对象参数。

五、基于多模态3D物体检测

1、LiDAR-相机融合

(1)早期融合

        早期融合方法在点云特征通过基于 LiDAR 的 3D 物体检测器之前,通过图像信息增强点云特征。在区域级知识融合中,首先对图像进行2D检测以生成2D边界框。然后将 2D 框挤压到视锥体中,为后续基于 LiDAR 的 3D 物体检测选择合适的点云区域。在点级知识融合中,首先将语义分割应用于图像,然后将分割结果从图像像素转移到点并用作附加到每个点的附加特征。增强的点云最终通过 LiDAR 探测器进行 3D 物体检测。

(2)中间融合

        中间融合方法旨在在 3D 对象检测管道的中间步骤进行多模态融合。在骨干网络中,首先通过相机到激光雷达的变换建立像素到点的对应关系,然后利用该对应关系,通过不同的融合算子将激光雷达特征与图像特征融合。融合可以在中间层进行,也可以仅在输出特征图上进行。在提案生成和细化阶段,首先生成 3D 对象提案,然后将其投影到相机和 LiDAR 视图中以裁剪不同模态的特征。最终融合多视图特征以细化用于检测的 3D 对象建议。

(3)后期融合

        基于后期融合的方法对输出进行操作,即分别由基于 LiDAR 的 3D 对象检测器和基于图像的 2D 对象检测器生成的 3D 和 2D 边界框。将3D box和2D box组合在一起并融合,得到最终的检测结果。

六、基于时间序列的3D物体检测

1、基于 LiDAR 序列

        在 LiDAR 序列的时间 3D 对象检测中,采用不同的时间聚合模块来融合来自多帧点云的特征和对象建议。

2、基于流数据

        在产生完整扫描之前,对每个 LiDAR 数据包进行流数据检测。

七、KITTI视觉基准测试

​        提供了一个标准化数据集,用于训练和评估不同 3D 物体检测器的性能。值得深入查看。The KITTI Vision Benchmark Suiteicon-default.png?t=N7T8http://www.cvlibs.net/datasets/kitti/


http://www.kler.cn/a/145954.html

相关文章:

  • 【环境搭建】Metersphere v2.x 容器部署教程踩坑总结
  • 【云岚到家】-day03-门户缓存实现实战
  • 如何将自己本地项目开源到github上?
  • 论文阅读笔记:AI+RPA
  • 软路由系统iStoreOS 一键安装 docker compose
  • 神经网络常见面试题
  • SpringCloud之Gateway(统一网关)
  • C语言第三十三弹---交换变量(不使用临时变量)
  • openssl + ECDH + linux+开发详解(C++)
  • LV.12 D20 RTC实验 学习笔记
  • PTA NeuDs_数据库题目
  • 微机原理_5
  • 【代码随想录刷题】Day18 二叉树05
  • 【从删库到跑路 | MySQL总结篇】数据库基础(增删改查的基本操作)
  • 【古诗生成AI实战】之一——实战项目总览
  • HarmonyOS开发者工具DevEco Studio-汉化
  • 服务器tar压缩解压文件
  • 【MATLAB源码-第90期】基于matlab的OQPSKsimulink仿真,对比初始信号和解调信号输出星座图。
  • 处理数据中的缺失值--删除缺少值的行
  • java io 流,输入流和输出流;节点流和处理流;字节流和字符流
  • Qt/QML编程学习之心得:一个QML工程的学习笔记(十)
  • 【RTP】3: RTPSenderVideo::SendVideo 切片到发送
  • vscode导入STM32CubeIDE工程文件夹未定义警告清除方法
  • 【STL】string类 (下)
  • 【nlp】4.3 nlp中常用的预训练模型(BERT及其变体)
  • 【c++随笔14】虚函数表