[论文阅读]Point Density-Aware Voxels for LiDAR 3D Object Detection(PDV)

news2024/11/18 19:33:09

PDV

Point Density-Aware Voxels for LiDAR 3D Object Detection
论文网址:PDV
论文代码:PDV

简读论文

摘要

LiDAR 已成为自动驾驶中主要的 3D 目标检测传感器之一。然而,激光雷达的发散点模式随着距离的增加而导致采样点云不均匀,不适合离散体积特征提取。当前的方法要么依赖体素化点云,要么使用低效的最远点采样来减轻密度变化引起的有害影响,但在很大程度上忽略了点密度作为特征及其与 LiDAR 传感器距离的可预测关系。本文提出的解决方案,点密度感知体素网络 (PDV),是一种端到端的两阶段 LiDAR 3D 目标检测架构,旨在考虑这些点密度变化。 PDV 通过体素点质心有效地定位来自 3D 稀疏卷积主干的体素特征。然后,使用核密度估计 (KDE) 和具有点密度位置编码的自注意力,通过密度感知 RoI 网格池模块聚合空间局部体素特征。最后,利用 LiDAR 的点密度与距离关系来完善最终的边界框置信度。

引言

3D 目标检测是自动驾驶汽车领域的关键感知问题之一,因为目标姿态估计直接影响感知pipeline中下游任务的有效性。在自动驾驶传感器堆栈中,LiDAR 已成为用于 3D 目标检测的最流行的传感器之一,因为它可以通过激光产生准确的 3D 点云。
然而,对激光雷达数据的依赖是以点密度随距离变化为代价的。遮挡等其他因素也会产生影响,但最主要的原因是,随着距离的增加,激光雷达激光器之间的角度偏差会导致点的自然偏离。因此,距离较远的物体比距离激光雷达较近的物体返回的点要少。
基于体素的方法[Voxel r-cnn, Second, Cia-ssd, Voxelnet]通常忽略点密度,仅依赖于点云的量化表示。当提供高体素分辨率时,如 KITTI 数据集的情况,基于体素的方法 [Sessd] 优于基于点和基于点体素的方法。然而,在具有较大输入空间的数据集(例如 Waymo 开放数据集)上,由于内存限制,体素分辨率受到限制。因此,如图 1 (a) 所示,由于体素特征和点云之间的空间错位,精细的对象细节会丢失,从而导致性能下降。
在这里插入图片描述
其他方法 [Pv-rcnn, Pointrcnn] 试图通过最远点采样 (FPS) 来纠正点密度变化,如图 1 (b) 所示。虽然在非均匀分布的点云上的采样位置有效,但作为点云中计算点的数量的函数缩放比例很差,增加了运行时间并限制了第二阶段提案细化的采样点的数量。
点密度还会影响对较小物体(例如行人和骑自行车的人)的检测。这些物体与激光雷达的激光束相交的表面积较小,导致物体定位效果较差。也许信息丰富的是,当前最先进的方法在很大程度上忽略了行人和骑自行车者的检测性能,仅关注汽车或车辆类别[Voxel r-cnn, Pyramid r-cnn, Voxel transformer for 3d object detection, Sessd]。随着转向具有更高环境覆盖范围的数据集,架构必须能够扩展到更大的输入空间,并作为 3D 目标检测的多类解决方案。
因此,本文提出点密度感知体素网络 (PDV),通过利用体素点质心定位和直接考虑多类 3D 目标检测中点密度的特征编码来解决这些已识别的问题。贡献:

  • Voxel Point Centroid Localization. : PDV对每个非空体素中的LiDAR点进行分区,以计算每个体素特征的点质心,如图1©所示。通过使用点质心定位体素特征以进行第二阶段建议细化,PDV 使用点密度分布在特征编码中保留细粒度的位置信息,而不需要昂贵的点云采样方法(如 FPS)。
  • Density-Aware RoI Grid Pooling. : 本文增强感兴趣区域(RoI)网格池化[Pv-rcnn],将局部点密度编码为附加特征。首先,使用核密度估计(KDE)对每个网格点球查询处的局部体素特征密度进行编码,然后使用新颖的点密度位置编码在网格点之间进行自注意力[Attention is all you need]。密度感知 RoI 网格池化在整个区域提案的背景下捕获局部点密度信息,以进行第二阶段细化。
  • Density Confidence Prediction. : 通过使用最终边界框质心位置和最终边界框中原始 LiDAR 点的数量作为附加特征,进一步细化边界框置信度预测。因此,利用 LiDAR 建立的距离和点密度之间的内在关系来进行更明智的置信度预测。

PDV 在 Waymo 开放数据集上的表现优于所有当前最先进的方法,并在 KITTI 数据集上实现了有竞争力的性能。

相关工作

Point-based LiDAR 3D Object Detection. : 基于point的方法使用原始点云来提取点级特征以进行边界框预测。 F-PointNet在点云上应用 PointNet,通过基于图像的 2D 目标检测进行分割。 PointRCNN通过 PointNet++ 主干网直接生成点级 RoIs,并使用点级特征进行边界框细化。 STD 提出了用于RoI特征提取的PointsPool,而3DSSD在原始点云上采用了新的采样策略,为下采样点云中的对象保留足够的内部点。 Point-GNN 使用原始点云构建一个图,并聚合节点级特征来生成预测。基于point的方法利用昂贵的点云采样和分组,这不可避免地需要很长的推理时间。
Voxel-based LiDAR 3D Object Detection. : 基于体素的方法将点云划分为体素网格,直接应用 3D 和 2D 卷积来生成预测。 CIA-SSD 采用鸟瞰(BEV)网格上的光网络来提取鲁棒的空间语义特征,并带有置信校正模块以实现更好的后处理。 Voxel-RCNN 提出Voxel RoI pooling,通过聚合体素特征来生成RoI特征。 VoTr 提出了一种基于 Transformer 的 3D 主干作为标准稀疏卷积层的替代方案。基于体素的方法的性能受到量化点云的限制,因为细粒度的点级信息在体素化过程中丢失。
Point-Voxel-based LiDAR 3D Object Detection. : 基于point-voxel的方法利用点云的体素和点表示。 SA-SSD 在训练期间使用辅助网络,从中间体素层插入点级特征。 PV-RCNN 采用 RoI 网格池化来有效地将 FPS 采样的关键点特征聚合在每个边界框提案内均匀间隔的网格上。 PV-RCNN++ 提出了 FPS 的修改版本,以实现更快的点采样和用于 RoI 网格池化的 VectorPool 聚合。 CT3D 在每个边界框提案中构造一个圆柱形 RoI。它采用基于transformer的编码器-解码器架构,直接从附近点提取 RoI 特征,而不使用中间体素特征。 Pyramid-RCNN 将 RoI 网格池化的思想从一组均匀分布的网格扩展到不同尺度的多组网格,并具有自适应球查询半径,但计算成本明显更高。当前基于point-voxel的方法没有明确考虑每个 RoI 内点云密度的变化,并且由于依赖于点云采样,通常需要很长的推理时间。
Point Density Estimation. : KDE 使用一组有限的样本以及选定的核函数和带宽来估计随机变量的概率分布函数。有几种方法使用 KDE 在点云中进行特征编码。 MC Convolution 使用卷积积分的蒙特卡罗估计来处理非均匀采样点云,并使用 KDE 来估计局部卷积内点的可能性。 PointConv 也使用 KDE,但使用额外的前馈网络(FFN)估计每个样本的可能性。本文没有限制重新加权的密度估计,而是使用 KDE 作为密度感知 RoI 网格池化中每个网格点球查询中的附加功能。

方法

PDV
PDV 使用具有 3D 稀疏卷积主干的两阶段方法来进行初始边界框建议,然后在第二阶段通过每个体素层中的体素特征和原始点云数据进行细化。图 2 显示了 PDV 框架的概述。

3D Voxel Backbone

本文使用与 SECOND 类似的体素骨干进行初始边界框提议。PDV 的输入是点云,它被定义为一组 3D 点 {pi = {xpi , fpi} |i= 1,,,Np} 其中 xpi ∈ R3 是 xyz 空间坐标,fpi ∈ RF 是附加特征,例如每个点的强度或伸长率,Np 是点云中的点数。首先,点云被体素化,随后使用一系列 3D 稀疏卷积进行编码,然后是用于初始边界框提案的区域提案网络 (RPN)。每个体素层具有不同的空间分辨率,根据原始体素网格大小具有 1x、2x、4x 和 8x 下采样分辨率。每层中的体素特征用于第二阶段的边界框细化。

Voxel Point Centroid Localization

受 KPConv 中网格子采样的启发,体素点质心定位模块在空间上定位非空体素特征,以便在密度感知 RoI 网格池中进行聚合。
令 Vl = {Vlk = {hVlk , fVlk} | k = 1,,,Nl} 是第 l 体素层中的非空体素集合,其中 hVlk 是 3D 体素索引,fVlk 是相关体素特征向量,Nl 是体素层 l 的非空体素数量= 1,,L。首先,通过根据空间坐标 xi 和体素网格维度计算它们的体素索引 hVlk,将同一体素内的点分组到集合 N(Vlk) 中。然后计算每个体素特征的点质心:
在这里插入图片描述
由于卷积层中的体素是稀疏格式,因此使用中间哈希表来有效地将每个计算的体素点质心映射到其相应的特征向量。如图 3 所示,体素点质心和稀疏体素特征都与共享体素索引相关联。中间哈希表使用匹配的体素索引hVlk 将质心cVlk 与Vlk 链接。
在这里插入图片描述
使用体素的一个优点是,可以使用先前的体素层质心计算,根据卷积块的步长、填充和内核大小有效地计算后续体素点质心。令 Cl+1 k = {cVlj | Kl+1(hVl j ) = hVl+1 k } 是体素点质心的集合,其中 Kl+1 是将体素索引 hVl j 映射到 hVl+1 k 的卷积块。然后,可以对分组的体素点质心进行加权平均,以计算后续层中的质心:
在这里插入图片描述
通过避免使用每层的整个点云重新计算质心,体素点质心定位可以更有效地扩展到更大的点云。

Density-aware RoI Grid Pooling

密度感知 RoI 网格池化建立在 RoI 网格池化的基础上,通过结合 KDE 和自注意力来增强池化方法,将点密度特征编码到每个提案中。首先,U ×U ×U 均匀网格点 Gb = {g1, , , gU3} 对每个边界框提案 b 进行采样。
Local Feature Density. : 本文使用 KDE 来估计每个网格点球查询中的局部特征密度。密度感知 RoI 网格池化不像 MC Convolution 和 PointConv 那样将估计密度限制为特征重新加权,而是将估计概率密度编码为球查询中的附加特征,以实现更隐式的特征编码。首先,聚合每个网格点附近的相邻特征,其中 N(gj) 是以 gj 为中心、半径为 r 的球体中的体素点质心集:
在这里插入图片描述
其中局部偏移 cVl k − gj 和似然性 p(cVl k |gj) 作为附加特征附加,如图 4 所示:
在这里插入图片描述
使用 KDE 计算每个网格点的似然度:
在这里插入图片描述
一旦附加了特征,PointNet 多尺度分组(MSG)模块用于获取每个网格点 gj 的特征向量 fl gj :
在这里插入图片描述
本文使用多个半径 r 来捕获每个网格点不同尺度的特征密度,并将输出特征连接在一起。最后,从不同体素层附加特征以获得每个网格点的最终特征:
在这里插入图片描述
Grid Point Self-Attention. : 每个 RoI 网格点编码的特征都局限于球查询的大小,但不同网格点之间缺乏相互依赖的关系。一个简单的解决方案是使用自注意力来捕获网格点之间的远程依赖关系,但简单地添加注意力模块缺乏LiDAR点云的几何信息。因此,本文还引入了一种新型的位置编码,它考虑了点云内的点密度。
在这里插入图片描述
如图5所示,自注意力模块在非空网格点特征之间进行自注意力,使用标准 Transformer 编码器层和类似于非局部神经网络块的残差连接:
在这里插入图片描述
其中 Tgi 是 fgi 的 Transformer 编码器层输出,~fgi 是输出网格特征。空网格点特征|N(gi)| = 0 不受自注意力模块影响,并保留其原始特征编码。
Point Density Positional Encoding. : 通过使用局部网格点位置和框提案中的点数将位置编码添加到自注意力模块中。使用相同的 U×U×U 网格分辨率将边界框提案划分为体素 Vgj 来为每个网格点建立体素。每个网格特征的位置编码计算如下:
在这里插入图片描述
其中 δgj = Xgj −Cb 是 gj 与边界框提案质心 cb 的相对位置,|N(Vgj )|是每个网格点体素 Vgj 中的点数,并且 ϵ 是常数偏移。通过利用每个体素内的局部偏移和点数,密度感知 RoI 网格池能够捕获每个区域提案内的点密度。

Density Confidence Prediction

PDV 还利用扫描对象上的距离和 LiDAR 点数量之间的关系来预测最终边界框预测的置信度。共享 FFN 首先对来自密度感知 RoI 网格池模块的扁平化特征进行编码。然后,两个独立的 FFN 分支对框细化和框置信度输出的特征进行编码。在框置信度分支中,另外附加两个特征来预测最终边界框 ∼b 的输出置信度 p∼b:
在这里插入图片描述
其中 fs b~ 是共享 FFN 的输出特征向量,cb~ 是最终边界框的质心,|N(~b)|是最终边界框中的原始点数。

Training Losses

本文对 PDV 使用端到端训练策略,并联合训练区域提案损失 LRPN 和提案细化损失 LRCNN。 LRPN 计算如下:
LRPN
其中Lcls是focal loss,Lreg是smooth-L1损失,yb是预测的类向量,y⋆b是地面真值类别,rb是预测的RoI锚残差,r⋆b是地面真值锚残差,β 是比例因子。 LRCNN 的组成为:
LRCNN
其中 p⋆ b~是由 3D RoI 及其相关的地面真实边界框缩放的置信度训练目标,如 PV-RCNN中所做的那样。因此 LRCNN 是:
LRCNN
其中 r b~ 是预测的边界框残差,r⋆b~是地面真实残差。 smooth-L1 损失用于回归边界框残差。使用与 PV-RCNN 相同的置信度和回归目标。

结论

本文提出了 PDV,一种新颖的 LiDAR 3D 物体检测方法,该方法使用体素特征和原始点云数据来解释 LiDAR 点云中的点密度变化。 PDV 在点云采样成本昂贵且体素分辨率较低的大型输入空间中特别有用,从而在 Waymo 数据集上实现最先进的性能,并在 KITTI 数据集上获得具有竞争力的结果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1138461.html

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

相关文章

云原生架构设计理论与实践

云原生架构设计理论与实践 云原生架构概述 云原生的背景 云原生定义和特征 云原生架构的设计原则 架构模式 服务化架构模式 Mesh化架构模式 Serverless模式 存储计算分离模式 分布式事务模式 可观测架构 事件驱动架构 云原生架构相关技术 容器技术 云原生微服务技术 无服务…

orm连接mysql

7.2 ORM ORM可以帮助我们做两件事 创建、修改、删除数据库中的表(不用写SQL语句)。无法创建数据库操作表中的数据(操作表中的数据)。 1.自己创建数据库 启动自己的mysql服务自带的工具创建数据库 create database gx_day5 DE…

CMake多文件构建初步

前面学习了cmake,不熟悉,只是记录了操作过程;下面再继续; 略有一点进步,增加一个代码文件,之前是1个代码文件; 如下图,prj是空文件夹, CMakeLists.txt如下;…

MySQL多表关联on和where速度对比实测谁更快

MySQL多表关联on和where速度对比实测谁更快 背景 今天发现有人在讨论:两张MySQL的数据表按照某一个字段进行关联的时候查询,我们使用on和where哪种查询方式更快。百闻不如一见,我们来亲自测试下。 先说结论 Where、对等查询的join速度基本…

vue使用smooth-signature实现移动端电子签字,包括横竖屏

vue使用smooth-signature实现移动端电子签字&#xff0c;包括横竖屏 1.使用smooth-signature npm install --save smooth-signature二.页面引入插件 import SmoothSignature from "smooth-signature";三.实现效果 四.完整代码 <template><div class&quo…

第13期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区&#xff0c;集成了生成预训练 Transformer&#xff08;GPT&#xff09;、人工智能生成内容&#xff08;AIGC&#xff09;以及大型语言模型&#xff08;LLM&#xff09;等安全领域应用的知识。在这里&#xff0c;您可以…

asp.net学生考试报名管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net学生考试报名管理系统是一套完善的web设计管理系统系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为vs2010&#xff0c;数据库为sqlserver2008&#xff0c;使 用c#语言开发 应用技术&#xff1a;asp…

YouTrack 中如何设置邮件通知

在 YouTrack 中&#xff0c;默认是不会邮件通知的。 你可以为你的账号设置邮件通知。 设置的方法为单击用户属性&#xff0c;然后在弹出的小窗口中选择属性选项。 设置邮件通知 在通知 Tab 页面中&#xff0c;选择发送邮件的方式&#xff0c;默认这个选项是不选择的。 用户…

React之如何捕获错误

一、是什么 错误在我们日常编写代码是非常常见的 举个例子&#xff0c;在react项目中去编写组件内JavaScript代码错误会导致 React 的内部状态被破坏&#xff0c;导致整个应用崩溃&#xff0c;这是不应该出现的现象 作为一个框架&#xff0c;react也有自身对于错误的处理的解…

spring boot利用redis作为缓存

一、缓存介绍 在 Spring Boot 中&#xff0c;可以使用 Spring Cache abstraction 来实现缓存功能。Spring Cache abstraction 是 Spring 框架提供的一个抽象层&#xff0c;它对底层缓存实现&#xff08;如 Redis、Ehcache、Caffeine 等&#xff09;进行了封装&#xff0c;使得在…

vue实现多时间文字条件查询

// 搜索功能 // 获取搜索框内容 const dateOneref() const dateTworef() // 重新创建数组 const itemList ref([]); const query()>{console.log(formattedDateTime.value);console.log(list.value);itemList.value list.value.filter(item > {//获取数据框的内容是否与…

垃圾回收系统小程序

在当今社会&#xff0c;废品回收不仅有利于环境保护&#xff0c;也有利于资源的再利用。随着互联网技术的发展&#xff0c;个人废品回收也可以通过小程序来实现。本文将介绍如何使用乔拓云网制作个人废品回收小程序。 1. 找一个合适的第三方制作平台/工具&#xff0c;比如乔拓云…

C++之Linux syscall实例总结(二百四十六)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

进程和多线程

目录 进程 1. 如何管理进程 2. 进程调度 3. 内存管理 4. 进程间通信 多线程 线程和进程的关系&#xff1a; 线程安全问题 进程 一个正在运行的程序,就是一个 进程,进程是一个重要的 "软件资源",是由操作系统内核负责管理的。每个进程都对应一些资源,在上图中…

【面试经典150 | 栈】简化路径

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;字符串数组模拟栈 其他语言python3 写在最后 Tag 【栈】【字符串】 题目来源 71. 简化路径 题目解读 将 Unix 风格的绝对路径转化成更加简洁的规范路径。字符串中会出现 字母、数字、/、_、. 和 .. 这几种字符&#…

c语言之源码反码和补码

c语言源码反码和补码 c语言之源码反码和补码 c语言源码反码和补码一、源码反码补码的介绍二、源码反码补码例子三、源码反码补码练习 一、源码反码补码的介绍 原码、反码、补码是计算机中对数字的二进制表示方法。 原码&#xff1a;将最高位作为符号位&#xff08;0表示正&…

sipp3.6多方案压测脚本

概述 SIP压测工具sipp&#xff0c;免费&#xff0c;开源&#xff0c;功能足够强大&#xff0c;配置灵活&#xff0c;优点多。 有时候我们需要模拟现网的生产环境来压测&#xff0c;就需要同时有多个sipp脚本运行&#xff0c;并且需要不断的调整呼叫并发。 通过python脚本的子…

一文讲透 “中间层” 思想

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《EffectiveJava》独家解析》专栏作者。 热门文章推荐&…

【打靶】vulhub打靶复现系列3---Chronos

【打靶】vulhub打靶复现系列3---Chronos 一、主机探测 结合之前的方法&#xff08;arp探测、ping检测&#xff09;&#xff0c;因为我们的靶机和攻击机都在第二层&#xff0c;所以打靶时候我们更依赖arp协议 tips&#xff1a;我在运行期间发现&#xff0c;netdiscover窗口没关…

vue中如何给后端过来的数组中每一个对象加一个新的属性和新的对象(不影响后端的原始数据)

方法&#xff1a; 先看后端的原数据 1、给数组中每一个对象加一个新的属性&#xff1a; 输出查看数组list的值&#xff1a; 2、给数组list加入新的对象&#xff1a; 输出结果&#xff1a; 3、总结&#xff1a; 如果是数组中每个对象新增属性就用map遍历每个对象加入新增的属性…