当前位置:网站首页>Point Density-Aware Voxels for LiDAR 3D Object Detection 论文笔记
Point Density-Aware Voxels for LiDAR 3D Object Detection 论文笔记
2022-08-02 05:09:00 【byzy】
原文链接:https://arxiv.org/abs/2203.05662
1 引言
激光雷达的一个问题是产生的点云随距离变远而变得稀疏。
基于体素的方法忽略了点的密度,使用体素中心特征(左图);但对于大范围的输入,内存限制了体素的分辨率,点与体素的不对齐问题导致丢失物体细节,从而导致性能下降。
基于点的方法使用最远点采样(中图),但计算复杂度随采样点的数量增大而增大,限制了细化阶段采样点的数量。
此外由于行人或自行车等目标的表面积小,对于激光雷达来说定位困难,目前的方法都主要关注汽车类别的检测。
本文提出点密度感知体素网络(PDV)利用点质心定位体素和考虑点密度的特征编码,解决上述问题。

主要贡献:
(1)点质心定位体素:对每个非空体素计算其中点的质心(右图);通过在细化阶段使用点质心来定位体素特征,PDV使用点密度分布在特征编码中保留细粒度位置信息。
(2)密度感知RoI网格池化:在RoI网格池化时编码点密度作为额外特征。先使用核密度估计(KDE)在每个网格点球形邻域内编码局部体素特征密度,然后使用带有点密度位置编码的自注意力。该方法捕捉了区域提案中局部点密度信息,用于第二阶段细化。
(3)密度置信度预测:使用最终边界框质心位置和边界框内的点数作为额外特征来细化边界框置信度预测。这样可以利用激光雷达点密度和距离之间的固有关系进行更有根据的置信度预测。
3 方法
如下图所示,PDV使用两阶段检测网络,第一阶段使用3D稀疏卷积主干生成提案,第二阶段使用每个体素层中的体素特征和原始点云数据进行细化。

3.1 3D体素主干
类似SECOND,即体素化后使用3D稀疏卷积,再用RPN生成提案。每个体素层有依次增大的下采样分辨率,且均会被用于第二阶段的细化。
3.2 点质心定位体素
该模块在空间上定位空间体素特征,用于在密度感知的RoI网格池化中聚合。
对某个体素,其中的所有点坐标求取均值,即得到该体素的点质心。使用哈希表将每个体素点质心映射到对应的特征向量。体素点质心和稀疏体素特征均与同一个体素索引相关联。
利用卷积的核大小、步长、填充值,下一层体素的点质心可以通过上一层的结果来计算(即加权求和)。这样可以避免重复计算,从而使该方法可以有效地扩展到更大的点云。
3.3 密度感知RoI网格池化
使用KDE和自注意力的组合来为每个提案编码点密度特征。首先在每个提案内采样
的网格点。
局部特征密度
使用KDE估计每个网格点球形邻域内的局部特征密度。密度感知RoI网格池化将估计的概率密度编码为额外特征。
首先,按下式得到每个网格点(
)球形邻域(
)内体素点质心特征:

其中
是第
层第
个非空体素特征,
是其点质心坐标。
是KDE估计的概率密度(似然值):

其中
为带宽,
为在
坐标上均独立的核(本文使用高斯核)。
得到特征
后,使用PointNet多尺度分组(MSG)模块从每个网格点
获取特征向量:

MSG即使用多个半径
(即球形邻域的半径)为每个网格点捕捉多尺度特征密度,将输出拼接起来。
最终的特征是所有层的特征拼接:
![f_{g_j}=[f_{g_j}^1,\cdots,f_{g_j}^L]](http://img.inotgo.com/imagesLocal/202208/02/202208020509023043_41.gif)
网格点自注意力
不同网格点的特征无相互关系,可使用自注意力抓取网格点的长距离依赖性。如下图所示,自注意力作用于非空网格点特征
,使用标准transformer的编码器
和残差连接,即:
。
对于
的网格点,不输入到自注意力模块,特征不变。

点密度位置编码
仅添加注意力模块缺少激光雷达点云的几何信息,因此使用考虑点云密度的位置编码。该编码使用局部网格点位置和提案内的原始点数,将提案分割为
的体素(每个体素对应一个网格点),则每个网格特征的位置编码为:
![\textup{PE}(f_{g_j})=\textup{FFN}([\delta_{g_j},\log(|N(V_{g_j})|+\epsilon)])](http://img.inotgo.com/imagesLocal/202208/02/202208020509023043_27.gif)
其中
是
位置和边界框质心
的相对位置,
是以
为中心的体素中点的数量,
为常数偏置。这样,RoI网格池化可以捕捉区域提案中点的密度。
3.4 密度置信度预测
使用距离和物体上的激光雷达点数来预测边界框的置信度。
先将密度感知RoI网格池化模块的输出特征拉平,使用共享的FFN编码得到
;然后两个FFN分支分别用于编码特征进行边界框细化和置信度估计。
在置信度估计时,将最终边界框的质心
和最终边界框内的点数
附加到
:
![p_{\tilde{b}}=\textup{FFN}([f_{\tilde{b}}^s,c_{\tilde{b}},\log(|N(\tilde{b})|)])](http://img.inotgo.com/imagesLocal/202208/02/202208020509023043_39.gif)
3.5 训练损失
使用区域提案损失
和提案细化损失
联合训练。

其中
为focal损失,
为预测类别概率向量,
为真实类别;
为SmoothL1损失,
为预测RoI锚框残差,
为真实锚框残差。


其中
是由3D RoI及其相关的真实边界框缩放的置信度训练目标(见PV-RCNN);
为SmoothL1损失,和
分别是预测边界框和真实边界框的残差。
4 实验
使用X/Y轴翻转、全局缩放、全局旋转,以及复制粘贴增广方法。
后处理时,使用非最大抑制来移除冗余边界框。
实验结果:PDV能捕捉体素化丢失的精细信息,实现第二阶段的精确细化。
如果体素网格有更高的体素分辨率,PDV方法带来的提升可能就会受限。
4.3 消融研究
组件
使用体素点质心定位特征比使用体素中心定位特征性能更优,特别是对于小物体来说,因为体素中心可能与点云没有对齐。而体素点质心定位使得特征更靠近物体表面,能为提案细化提供更有意义的几何信息。
使用KDE捕捉特征密度关系也有帮助,特别是对于可变形目标如行人。
使用注意力机制在RoI网格点之间建立长距离依赖性,对行人和自行车的检测有更好的性能。
使用密度置信度预测方法能进一步提高人和自行车的检测精度。
点密度位置编码
使用正弦编码能提高对行人和自行车的检测精度(但对汽车的检测精度有所下降);仅使用网格点坐标作为FFN的输入,性能有极小的提升;仅使用密度特征也有相似的性能提升;组合两者可以达到更好的性能。
4.4 运行时间分析
运行时间比PV-RCNN要略快(性能也更好)。但是本文方法还是达不到实时性要求。
4.5 不同距离下的FP数
随着距离增大,FP数增大。但总的来说比PV-RCNN的FP少,且距离越大,差距越大。可能是使用点密度细化边界框和置信度有利于检测远距离物体。
5 结论
本文方法由其适用于大输入范围,因为点云采样昂贵且体素分辨率低,而本文方法可以有效处理这两个问题。
附录
B.局限性
体素分辨率:分辨率越高,性能提升越小。因为体素中心和点质心的距离变小,且每个非空体素包含的点数接近1,非空体素近似表达了点的密度。
泛化性:本文方法第二阶段依赖于点的密度。如果测试时点的分布于训练时有很大不同(如极端天气下来自物体的点会少很多),可能导致严重的性能下降。
E.点密度-具体图像
绘制图像可以看出,通过使用距离-点密度关系,PDV有效减少了不同距离下训练样本分布外的FP数。
边栏推荐
- Matlab论文插图绘制模板第41期—气泡图(bubblechart)
- 21天学习挑战赛安排
- 卸载redis
- golang环境详细安装、配置
- [C language] LeetCode26. Delete duplicates in an ordered array && LeetCode88. Merge two ordered arrays
- 165.比较版本号
- golang的time包:时间间隔格式化和秒、毫秒、纳秒等时间戳格式输出的方法
- kubernetes affinity, anti-affinity, taint, tolerance
- Google notes cut hidden plug-in installation impression
- navicat connects to MySQL and reports an error: 1045 - Access denied for user 'root'@'localhost' (using password YES)
猜你喜欢

nacos registry

51 MCU Peripherals: Infrared Communication

nacos注册中心

Google 安装印象笔记剪藏插件

The Go language learning notes - dealing with timeout - use the language from scratch from Context

There are more and more talents in software testing. Why are people still reluctant to take the road of software testing?

leetcode一步解决链表反转问题

C language: Check for omissions and fill in vacancies (3)

H5 access payment process - WeChat payment & Alipay payment

51单片机外设篇:点阵式LCD
随机推荐
利用浏览器本地存储 实现记住用户名的功能
配合蓝牙打印的encoding-indexes.js文件内容:
Use the browser's local storage to realize the function of remembering the user name
金山云团队分享 | 5000字读懂Presto如何与Alluxio搭配
Review: image saturation calculation formula and image signal-to-noise (PSNR) ratio calculation formula
复盘:图像饱和度计算公式和图像信噪(PSNR)比计算公式
Browser onload event
LeetCode刷题系列 -- 787. K 站中转内最便宜的航班
C language: Check for omissions and fill in vacancies (3)
Install and use Google Chrome
51 MCU peripherals: DS18B20
Navicat报错:1045 -拒绝访问用户[email protected](使用passwordYES)
Alluxio为Presto赋能跨云的自助服务能力
Mysql数据库 | 基于Docker搭建Mysql-8.0以上版本主从实例实战
ATM系统
25K测试老鸟6年经验的面试心得,四种公司、四种问题…
为什么4个字节的float要比8个字节的long大呢?
PSQL function, predicate, CASE expression and set operations
[PSQL] window function, GROUPING operator
如何优化OpenSumi终端性能?