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

news2024/11/26 1:44:36

一、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.coloradmin.cn/o/1255288.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

js原理网页内容防复制-原理、实现及破解

大家好&#xff0c;这一集我们来看一下如何通过js代码实现网页内容防复制&#xff0c;并且使用代码复现效果&#xff0c;同时如何破解这种防复制。 视频教程链接&#xff1a;https://www.bilibili.com/video/BV1zM41197y7/ 代码删掉即可&#xff0c;删不掉关闭设置 您可以使用…

网络爬虫(Python:Requests、Beautiful Soup笔记)

网络爬虫&#xff08;Python&#xff1a;Requests、Beautiful Soup笔记&#xff09; 网络协议简要介绍一。OSI参考模型二、TCP/IP参考模型对应关系TCP/IP各层实现的协议应用层传输层网络层 HTTP协议HTTP请求HTTP响应HTTP状态码 Requests&#xff08;Python&#xff09;Requests…

网络爬虫(Python:Selenium、Scrapy框架;爬虫与反爬虫笔记)

网络爬虫&#xff08;Python&#xff1a;Selenium、Scrapy框架&#xff1b;爬虫与反爬虫笔记&#xff09; SeleniumWebDriver 对象提供的相关方法定位元素ActionChains的基本使用selenium显示等待和隐式等待显示等待隐式等待 Scrapy&#xff08;异步网络爬虫框架&#xff09;Sc…

SpringCloud微服务网关Gateway:gateway基本实现、断言工厂、过滤器工厂、浏览器同源策略、跨域问题解决方案

Gateway网关 Spring Cloud Gateway 是 Spring Cloud 的一个全新项目&#xff0c;该项目是基于 Spring 5.0&#xff0c;Spring Boot 2.0和Project Reactor 等响应式编程和事件流技术开发的网关&#xff0c;它旨在为微服务架构提供一种简单有效的统一的 API路由管理方式 为什么…

HTML+CSS+JS网页设计与制作摄影类个人网页

可以使用网页三剑客htmlcssjs实现网页设计与制作&#xff0c;页面排版布局高端大气。 使用HTMLCSS页面布局设计&#xff0c;HTMLCSSJS网页设计与制作摄影类个人网页&#xff0c;这是一个优质的个人网页制作。 凭借简约的设计风格、精湛的制作工艺&#xff0c;突破与创新的理念…

2019年12月 Scratch(四级)真题解析#中国电子学会#全国青少年软件编程等级考试

Scratch等级考试&#xff08;1~4级&#xff09;全部真题・点这里 一、单选题&#xff08;共15题&#xff0c;每题2分&#xff0c;共30分&#xff09; 第1题 以下模块&#xff0c;可以“说”出“我喜欢Apple”的是&#xff1f; A&#xff1a; B&#xff1a; C&#xff1a; …

测试工程师必看系列Jmeter_性能测试:负载测试和压力测试

负载测试 负载测试/容量测试&#xff1a;通过在测试过程中不断的调整负载&#xff0c;找到在多少用户量情况下&#xff0c;系统出现性能下降拐点&#xff1b;也被称为容量测试&#xff1b; 举例&#xff1a; 微信发送红包的负载测试&#xff1a; 1、找运维人员了解目前系统…

【数据库】表的连接在执行时的算法解析,嵌套循环连接算法的几种实现,多表连接中表的数量会影响什么

嵌套循环连接 ​专栏内容&#xff1a; 手写数据库toadb 本专栏主要介绍如何从零开发&#xff0c;开发的步骤&#xff0c;以及开发过程中的涉及的原理&#xff0c;遇到的问题等&#xff0c;让大家能跟上并且可以一起开发&#xff0c;让每个需要的人成为参与者。 本专栏会定期更新…

CountDownLatch实战应用——批量数据多线程协调异步处理(子线程执行事务回滚)

&#x1f60a; 作者&#xff1a; 一恍过去 &#x1f496; 主页&#xff1a; https://blog.csdn.net/zhuocailing3390 &#x1f38a; 社区&#xff1a; Java技术栈交流 &#x1f389; 主题&#xff1a; CountDownLatch实战应用——批量数据多线程协调异步处理(子线程执行事务…

数据库基础教程之数据库的创建(二)

双击打开Navicat,点击:文件-》新建连接-》PostgreSQL 在下图新建连接中输入各参数,然后点击:连接测试,连接成功后再点击确定。 创建数据表   3.1 方法1   3.1.1.双击你的数据库-》双击public-》双击选中表-》右键-》新建表-》常规 3.1.2.设置字段信息   双击选中创建…

【李宏毅-元学习】

一、基本概念 1、元学习&#xff1a;学习如何学习&#xff0c;超参数调整 2、机器学习和元学习 机器学习&#xff1a;定义函数&#xff08;未知参数&#xff09;-定义损失函数-优化&#xff08;最小化损失函数&#xff09; 3、什么是元学习 机器学习通过三个步骤找到了学习算…

建造者模式-C语言实现

UML类图&#xff1a; 代码实现&#xff1a; #include <stdio.h> #include <stdlib.h>// 产品类 typedef struct {char* part1;char* part2;char* part3; } Product;// 抽象建造者类 typedef struct {void (*buildPart1)(void*, const char*);void (*buildPart2)(v…

Linux进程通信——信号(二)

信号处理函数的注册 信号处理函数的注册不只一种方法&#xff0c;分为入门版和高级版 1.入门版: 函数 signal 2.高级版:函数 sigection 信号处理发送函数 信号发送函数也不止一个&#xff0c;同样分为入门版和高级版 1.入门版: 函数 kill 2.高级版: 函数 sigqueue sigactio…

图解系列--Http

1.URI和URL 1.1.URL URL是统一资源定位符。URL正是使用 Web 浏览器等访问 Web 页面时需要输入的网页地址。比如&#xff0c;http://hackr.jp/就是 URL。 1.2.URI 统一资源标识符。 URI 用字符串标识某一互联网资源&#xff0c;而URL表示资源的地点&#xff08;互联网上所处的位…

Unity 自带的一些可以操控时间的属性或方法。

今天来总结下Unity自带的一些可以操控时间的方法。 1、Time.time。比较常用计算运行时间而触发特定事件。 public class Controller : MonoBehaviour {public float eventTime 5f; // 触发事件的时间private float startTime; // 游戏开始的时间private void Start(){startT…

使用凌鲨进行接口联调

接口联调是指在软件开发过程中&#xff0c;不同的团队或模块之间进行接口协作的一种技术手段。它是研发过程中必不可少的一个环节&#xff0c;旨在确保不同模块之间的数据交互和功能调用能够顺畅进行&#xff0c;从而提升整个系统的稳定性和性能。 凌鲨中支持了GRPC&#xff0…

Sentry介绍与使用 - Issues模块

这篇文章是我在公司做 Sentry 相关分享的演讲稿。 大家好&#xff0c;现在由我来讲解 Sentry 的 Issues &#xff08;问题&#xff09;模块。我会分为三个部分来讲&#xff0c;首先我会介绍 Sentry 一些重要的概念&#xff0c;然后讲一下 Issues 的基本使用方式&#xff0c;最后…

【Java】线程池的简单实用

1、什么是线程池 Java当中&#xff0c;为了规避频繁创建调度进程的开销&#xff0c;我们引入了线程。但是如果进一步提高创建销毁频率&#xff0c;线程的开销也不容忽视。 对此我们有两个解决方案 协程&#xff08;轻量级线程&#xff09;&#xff1a;相比线程&#xff0c;把…

Cache学习(4):Cache分配策略Cache更新策略Cache逐出策略

Cache的数据流 常用名词 Allocation 分配Eviction 驱逐分配策略和更新策略分别为当产生Cache miss和Cache hit的时候数据流的具体行为 1 Cache分配策略&#xff08;Cache Allocation Policy&#xff09; Cache的分配策略是指不同情况下为数据分配Cache Line的不同行为。Cac…

2018年8月28日 Go生态洞察:Go 2草案设计初探

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…