论文解读|用于从RGB-D数据进行3D物体检测的Frustum PointNets
原创 | 文 BFT机器人
01
摘要
论文研究了室内和室外场景中基于RGBD数据的3D目标检测。论文的方法不仅仅依赖于3D方案,而是利用成熟的2D对象检测器和先进的3D深度学习进行对象定位,即使是小对象也能实现高效率和高召回。
直接在原始点云中学习,可以在强遮挡或非常稀疏的点下也能够精确地估计3D边界框。在KITTI和SUN RGB-D 3D检测基准测试中,此方法展现出显著的优势,不仅具有实时能力,而且在性能上表现出色。
02
介绍
这篇论文介绍了一种用于从RGB-D数据中进行3D物体检测的新框架,称为"Frustum PointNets"。该方法通过将深度图像转换为3D点云并利用PointNets网络处理点云数据,实现了在三维空间中对物体进行分类和定位的任务。
与以往的方法不同,该方法以3D为中心,直接在3D空间中操作点云数据,而不是将RGB-D数据视为2D地图。通过在3D坐标上连续应用变换,点云被对齐成一系列更受约束和规范的帧,使得3D几何图案更加明显,从而更容易进行3D物体检测。此外,该方法可以更好地利用3D空间的几何和拓扑结构,使得学习者可以更自然地参数化和捕获许多几何结构,如重复、平面性和对称性。
论文展示了该方法在KITTI 3D物体检测和鸟瞰图检测等基准测试中取得了领先地位。与之前的技术相比,"Frustum PointNets"在3D汽车AP上的效率提高了8.04%,运行速度高达5 fps。同时,在室内RGBD数据上,该方法在SUN-RGBD基准测试中也取得了显著的性能提升。
论文的主要贡献包括提出了新的框架"Frustum PointNets",展示了如何训练3D物体探测器并在基准测试中实现了最先进的性能,同时提供了广泛的定量评估和定性结果来验证该方法的优势和局限性。
二维目标检测器:
03
相关工作
基于RGB-D数据的3D目标检测
此节介绍了解决3D检测问题的不同方法,包括基于前视图像的方法、基于鸟瞰图的方法以及基于3D的方法。前视图像的方法利用RGB图像和形状先验或遮挡模式进行三维边界框推断,而基于鸟瞰图的方法则将LiDAR点云投影到鸟瞰图中,使用区域建议网络进行三维边界框建议。然而,这些方法在检测小物体和多物体场景方面存在一定滞后和适应性不足。
相比之下,研究人员提出了基于3D点云的方法。一些方法使用支持向量机训练手工设计的几何特征来进行3D目标分类,然后使用滑动窗口搜索定位目标。其他方法将整个场景的点云转换为体积网格,并使用3D体积CNN进行目标提议和分类。
然而,由于高昂的三维卷积成本和大的搜索空间,这些方法的计算成本较高。最近,也有一些2D驱动的3D目标检测方法,但他们使用的是手工制作的特征和简单的全连接网络,速度和性能上都不是最优的。
相较于这些方法,该研究提出了一种更灵活有效的解决方案,即使用深度3D特征学习(PointNets)。将深度数据表示为点云,并利用先进的3D深度网络(PointNets)能更有效地利用3D几何结构。这种方法在解决3D检测问题上具有优势。
点云上的深度学习
此节总结了现有的在点云处理方面的方法。大多数方法在进行特征学习之前都会将点云转换为图像或体积的形式。有些方法采用体网格方法将点云转换为体网格,并将图像CNN泛化为3D CNN。
另一些方法设计了更高效的3D CNN或神经网络架构来利用点云的稀疏性。然而,这些基于CNN的方法仍然需要对点云进行量化处理。最近出现了一些新型的网络架构,如PointNets,直接使用原始的点云数据而不进行转换。PointNets已经在单个对象分类和语义分割方面得到了应用,而本文则探索了如何将这种架构扩展应用于3D对象检测。
04
三维检测与Frustum PointNets
如图所示,三维目标检测系统包括三个模块:截锥体建议、三维实例分割和三维模态边界框估计。首先,使用二维CNN对象检测器对二维图像区域进行检测和分类。然后,将这些二维区域转换为3D截锥体提案。
对于每个截锥体内的点云(每个点具有n个点和c个通道,如XYZ坐标和强度),通过对每个点进行二值分类来分割出对象实例。根据分割后的目标点云(具有m个点和c个通道),使用轻量级回归点网(T-Net)进行平移对齐,使其质心接近模态盒(3D边界框)的中心。最后,使用盒估计网络对目标的模态三维边界框进行估计。
Frustum建议
利用二维目标检测器在RGB图像中提取二维目标区域,并对这些区域进行分类。然后,利用相机投影矩阵,将这些二维边界框提升到3D截锥体中,定义了物体的3D搜索空间。接下来,他们收集截锥内的所有点,形成一个截锥点云。
由于截锥可能朝向多个方向,点云的位置变化较大,所以为了提高算法的旋转不变性,他们通过旋转截锥体的中心轴使其与图像平面正交。这个过程被称为从RGB-D数据中提取截锥体点云的截锥体建议生成。
他们采用了基于FPN的模型,并在ImageNet分类和COCO目标检测数据集上预训练模型权重。然后,在KITTI 2D目标检测数据集上进一步微调模型权重,以分类和预测3D模态边界框。有关二维检测器训练的更多细节可在论文附录中找到。
三维实例分割
在给定一个二维图像区域及其对应的三维图像的情况下,实现三维目标检测的方法。论文指出直接在深度图上使用二维CNN回归三维对象位置并不容易,因为遮挡和混乱的情况在自然场景中很常见,可能导致严重的3D定位问题。
为了解决这个问题,论文建议在3D点云中进行实例分割,而不是在2D图像中进行。通过基于点云的圆锥体网络实现三维实例分割,然后能够实现基于残差的三维定位,预测三维边界框的中心在一个局部坐标系中。这种方法可以应对不同传感器设置下物体距离的变化。
该网络在截锥体中提取点云,并预测每个点属于感兴趣对象的概率。每个截锥体只包含一个感兴趣的对象,而其他点可能是不相关的区域、遮挡物体或位于感兴趣对象后面的实例。
网络通过学习遮挡和杂波模式,并识别某一类物体的几何形状来进行分割。在多类检测情况下,还利用2D检测器的语义信息进行更好的实例分割。经过3D实例分割后,提取被分类为感兴趣对象的点,并进一步规范化其坐标以提高算法的平移不变性。作者故意不缩放点云,以保持局部点云的实际大小,有助于框大小的估计。
三维模态边界框估计
给定分割的对象点(在3D掩模坐标中),该模块通过使用盒回归PointNet和预处理变压器网络来估计对象的面向模态的3D边界框。
论文提出了基于T-Net的学习三维对齐方法。尽管我们已经对被分割的对象点按照质心位置对齐,但发现掩模坐标框的原点可能离模态盒中心很远。
为此,论文引入了轻量级回归PointNet(T-Net),用于估计完整对象的真实中心,并通过转换坐标,将预测的中心调整为原点。T-Net的架构和训练与之前的工作类似,可以看作是一种特殊类型的空间变压器网络(STN)。与原始STN不同的是,论文采用显式监督来预测从掩模坐标原点到真实物体中心的中心残差。
对于给定3D物体坐标中的物体点云,盒估计网络用于预测给定3D物体点云中的物体的模态边界框,即使该物体的一部分不可见也能进行预测。网络架构类似于对象分类,但不再输出对象分类分数,而是输出3D边界框的参数。
在参数化3D边界框时,论文采用中心(cx, cy, cz)、大小(h, w, l)和朝向角θ(沿上轴)来表示。我们采用"残差"方法对框的中心进行估计。盒估计网络预测的中心残差与之前的T-Net中心残差和被掩点的质心结合,从而恢复绝对中心。
对于盒的大小和航向角度,我们采用之前的工作中的方法,使用分类和回归混合公式。具体来说,我们预定义了N个大小的模板和N个相等间隔角度的框。论文的模型将尺寸/角度分类到预定义的类别,并预测每个类别的残差值来调整高度、宽度、长度和角度。最后,净输出总共为3 + 4×NS + 2×NH数。
多任务损失训练
论文优化了涉及的三个网络(3D实例分割PointNet, T-Net和模态盒估计PointNet)的多任务损失。
针对最终的三维框精度进行优化,引入了一种新的正则化损失,即角损失。该损失旨在优化所有三个参数(中心、大小和方向),以获得最佳的三维框估计,特别是在IoU度量下,避免航向角度的偏离对三维框的精度产生主导影响。通过角损失的加入,可以实现对中心、大小和方向等参数的共同优化,从而提高三维框的准确度。
05
实验
实验分为三个部分。首先,比较了KITTI和SUN-RGBD上最先进的3D目标检测方法。其次,论文提供了深入的分析来验证我们的设计选择。最后,展示了定性结果,并讨论了论文方法的优势和局限性。
Frustum PointNet模型的实验结果和观察。主要观察如下:
对于合理距离内未遮挡物体的简单情况,模型输出的3D实例分割蒙版和3D边界框非常准确。
模型甚至可以从部分数据中预测正确的模态3D框,即使使用很少的点。这些结果对于人类来说,仅仅使用点云数据来注释是困难的。
在一些情况下,虽然在图像中定位具有许多附近甚至重叠的2D框的物体可能具有挑战性,但转换到3D空间后,定位变得更容易。
模型的一些失败模式表明可能需要改进的方向。例如,在稀疏点云中,姿态和大小估计可能不准确,图像特征可能有助于解决这个问题。
当一个截锥体中有来自同一类别的多个实例时,模型可能会输出混合的分割结果。如果能够在每个截锥体中提出多个3D边界框,可能可以缓解这个问题。
2D检测器有时会因为光线较暗或遮挡较强而错过目标,但三维实例分割和模态三维框估计PointNets并不局限于RGB视图建议,也可以扩展到鸟瞰图中提出的3D区域。
总的来说,该模型在许多情况下表现良好,但也面临一些挑战和改进的空间。
作者 | 淳豪
排版 | 居居手
更多精彩内容请关注公众号:BFT机器人
本文为原创文章,版权归BFT机器人所有,如需转载请与我们联系。若您对该文章内容有任何疑问,请与我们联系,将及时回应。
相关文章:

论文解读|用于从RGB-D数据进行3D物体检测的Frustum PointNets
原创 | 文 BFT机器人 01 摘要 论文研究了室内和室外场景中基于RGBD数据的3D目标检测。论文的方法不仅仅依赖于3D方案,而是利用成熟的2D对象检测器和先进的3D深度学习进行对象定位,即使是小对象也能实现高效率和高召回。 直接在原始点云中学习࿰…...

3ds Max图文教程: 使用动态工具Mass FX 创建风铃动画
推荐: NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 1. 简单的场景设置 步骤 1 打开 3ds Max。 打开 3ds Max 步骤 2 我将向您展示风铃背后的动态 通过简单的场景设置进行模拟。一旦你有了这个想法,你就可以应用这个 技术到复杂的风铃结构。 基…...

抖音矩阵系统源码开发搭建部署分享
一、 功能开发设计 (1)数据概览:账号,视频top10数据统计 (2)AI视频创意:原创视频批量剪辑,阶乘算法,去重原理 (3)同城拓客:线下门店…...

Grafana图形web监控的安装与配置
目录 一、安装并配置 二、Web访问 三、Grafana启用zabbix插件 四、Grafana添加zabbix数据源 五、创建仪表盘 创建监控项完成保存仪表盘 六、查看创建的仪表盘 七、在现有的dashboard(仪表盘)中添加图形 八、查看最终dashborad(仪表盘&#x…...

【机器学习】了解 AUC - ROC 曲线
一、说明 在机器学习中,性能测量是一项基本任务。因此,当涉及到分类问题时,我们可以依靠AUC - ROC曲线。当我们需要检查或可视化多类分类问题的性能时,我们使用AUC(曲线下面积)ROC(接收器工作特…...

Docker 容器生命周期:创建、启动、暂停与停止----从创建到停止多角度分析
🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~ἳ…...

C++STL库中的vector
文章目录 vector的介绍及使用 vector深度剖析及模拟实现 动态二维数组理解 一、vector的介绍及使用 1.vector的介绍 1. vector是表示可变大小数组的序列容器。 2. 就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进…...

PHP 药店管理系统mysql数据库web结构apache计算机软件工程网页wamp
一、源码特点 PHP 药品管理系统 是一套完善的web设计系统,系统采用smarty框架进行开发设计,对理解php编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 PHP 药店管理系统mysql数据库web结构apache计 下载地址…...

【多选框、表格全选】element el-checkbox、el-table
话不多说 先看效果: 多选框: 表格全选: <template><div><div class"titleLabel"><div class"lineStyle"></div>统计部门</div><div style"display: flex"><e…...

【Java】微服务负载均衡算法实现
前言 本篇实现一下分布式中负载均衡的实现策略,以及负载均衡算法是如何实现的。 什么是负载均衡? Java负载均衡是指在多台服务器之间分配负载,以提高服务器的性能和可用性。它通过将请求分发到多台服务器来减少单个服务器的压力࿰…...

分类、回归常用损失函数
分类: 交叉熵损失函数(Cross-entropy loss function) KL散度、交叉熵损失函数、nn.CrossEntropyLoss()_HealthScience的博客-CSDN博客 权重交叉熵损失函数(Weighted cross-entropy loss function) BCEWithLogitsLo…...
SaaS到底是什么,如何做?这份笔记讲明白了
阅读本篇文章,您将可以了解:1、什么是SaaS;2、SaaS的商业模式;3、SaaS的技术架构;4、国内比较好的SaaS平台。 一、什么是SaaS SaaS即软件即服务(Software as a Service),是一种通过…...

Python 单继承、多继承、@property、异常、文件操作、线程与进程、进程间通信、TCP框架 7.24
单继承 class luban:def __init__(self, name):self.name nameself.skill "摸鱼飞弹"self.damageLevel 20def attack(self):print("{} 使用了技能{} ,给敌方带来了极大的困扰\n""并有{}% 的机会造成一击必杀的效果".format(self.…...

【英杰送书第三期】Spring 解决依赖版本不一致报错 | 文末送书
Yan-英杰的主 悟已往之不谏 知来者之可追 C程序员,2024届电子信息研究生 目录 问题描述 报错信息如下 报错描述 解决方法 总结 【粉丝福利】 【文末送书】 目录: 本书特色: 问题描述 报错信息如下 Description:An attempt…...

ClickHouse修改和删除操作
文章目录 ClickHouse介绍为什么不推荐更新和删除如何实现更新操作如何实现删除操作官方文档 ClickHouse介绍 ClickHouse是由俄罗斯的Yandex公司开发的一款快速、可扩展的列式数据库管理系统。它专门针对OLAP场景设计,在海量数据分析和查询方面具有出色的性能表现&a…...

比selenium体验更好的ui自动化测试工具: cypress介绍
话说 Cypress is a next generation front end testing tool built for the modern web. And Cypress can test anything that runs in a browser.Cypress consists of a free, open source, locally installed Test Runner and a Dashboard Service for recording your tests.…...

Python编译过程和执行原理
hello,这里是Token_w的文章,主要讲解python的基础学习,希望对大家有所帮助 整理不易,感觉还不错的可以点赞收藏评论支持,感谢! 目录 一. Python执行原理二. Python内部执行过程2.1 编译过程概述2.2 过程图解…...

opencv 图像距离变换 distanceTransform
图像距离变换:计算图像中每一个非零点距离离自己最近的零点的距离,然后通过二值化0与非0绘制图像。 #include "iostream" #include "opencv2/opencv.hpp" using namespace std; using namespace cv;int main() {Mat img, dst, dst…...

消息队列——rabbitmq的不同工作模式
目录 Work queues 工作队列模式 Pub/Sub 订阅模式 Routing路由模式 Topics通配符模式 工作模式总结 Work queues 工作队列模式 C1和C2属于竞争关系,一个消息只有一个消费者可以取到。 代码部分只需要用两个消费者进程监听同一个队里即可。 两个消费者呈现竞争关…...

QT实现用户登录注册功能
本文实例为大家分享了QT实现用户登录注册的具体代码,供大家参考,具体内容如下 1、login.h ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 #ifndef LOGIN_H #define LOGIN_H #include <QWidget> namespace Ui { c…...

Docker--harbor私有仓库部署与管理
目录 一、构建私有库 1.下载 registry 镜像 2.在 daemon.json 文件中添加私有镜像仓库地址 3.运行 registry 容器 4.为镜像打标签 5.上传到私有仓库 6.列出私有仓库的所有镜像 7.列出私有仓库的centos镜像有哪些tag 8.测试私有仓库下载 二、Harbor 简介 1.什么是Harb…...

idea复制一份web服务在不同端口启动
Idea 运行多个微服务 Idea 一个服务开启多个端口运行 idea 开启多个端口服务_idea开启多个服务_HaHa_Sir的博客-CSDN博客 IntelliJ IDEA 中一个服务按多个端口同时启动与显示Services面板_一个服务多个端口_Touch&的博客-CSDN博客 Idea中一个服务按多个端口同时启动_idea…...

CRM系统化整合从N-1做减法实践 | 京东物流技术团队
1 背景 京销易系统已经接入大网、KA以及云仓三个条线商机,每个条线商机规则差异比较大,当前现状是独立实现三套系统分别做支撑。 2 目标 2022年下半年CRM目标是完成9个新条线业务接入,完成销售过程线上化,实现销售规则统一。 …...

STM32CUBUMX配置RS485(中断接收)--保姆级教程
———————————————————————————————————— ⏩ 大家好哇!我是小光,嵌入式爱好者,一个想要成为系统架构师的大三学生。 ⏩最近在开发一个STM32H723ZGT6的板子,使用STM32CUBEMX做了很多驱动&#x…...

苹果iOS 16.6 RC发布:或为iPhone X/8系列养老版本
今天苹果向iPhone用户推送了iOS 16.6 RC更新(内部版本号:20G75),这是时隔两个月的首次更新。 按照惯例RC版基本不会有什么问题,会在最近一段时间内直接变成正式版,向所有用户推送。 需要注意的是,鉴于iOS 17正式版即将…...

【100天精通python】Day16:python 模块的搜索目录和导入模块异常时的处理方法
目录 1 搜索模块所在目录 2 模块不在搜索目录中 2.1 添加模块所在的目录到PYTHONPATH环境变量 2.2 修改sys.path 2.3 使用绝对路径导入 2.4将模块复制到Python搜索路径中的任意一个目录 2.5 总结 3 其他导入的模块异常处理 3.1 模块未安装 3.2 模块名称拼写错误 3.3模…...

SOC FPGA介绍及开发设计流程
目录 一、SoC FPGA简介 二、SoC FPGA开发流程 2.1 硬件开发 2.2 软件开发 一、SoC FPGA简介 SOC FPGA是在FPGA架构中集成了基于ARM的硬核处理器系统(HPS),包括处理器、外设和存储器控制器。相较于传统的仅有ARM处理器或 FPGA 的嵌入式芯片,SOC FPGA既…...

MySQL vs. Oracle: 函数比较与联系
引言 MySQL和Oracle是两个广泛使用的关系型数据库管理系统(RDBMS),它们提供了丰富的函数库来处理和操作数据。本文将详细介绍MySQL和Oracle的所有函数,并逐一介绍它们的相同和不同之处,以帮助读者更好地理解和使用这两…...

【Django学习】(十五)API接口文档平台_项目流程分析_日志器_认证_授权
一、API接口文档平台 使用API接口文档不经可以很好的的维护接口数据,还给测试人员的接口测试工作带来了便利; 我们可以在全局配置文件中添加路由路径生成接口文档 1、使用docs接口文档维护接口 1.1在全局配置文件里指定用于支持coreapi的Schema # 指…...

经营简报及考核360表格
文章目录 经营简报效果图代码tableObjectSpanMethod.js 考核360委员会效果图 经营简报效果图不需要合并单元格且有汇总表头的 懒得封装了,所以整体没有封装 经营简报 效果图 代码 <template><el-tableref"tableRef":data"tableData.lengt…...