【论文笔记】FSD V2: Improving Fully Sparse 3D Object Detection with Virtual Voxels

原文链接:https://arxiv.org/abs/2308.03755

1. 引言

完全稀疏检测器在基于激光雷达的3D目标检测中有较高的效率和有效性,特别是对于长距离场景而言。

但是,由于点云的稀疏性,完全稀疏检测器面临的一大困难是中心特征丢失(CFM),即因为点云往往分布在物体表面,物体的中心特征通常会缺失。FSD引入实例级表达,通过聚类获取实例,并提取实例级特征进行边界框预测,以避免使用物体中心特征。但由于实例级表达有较强的归纳偏好,其泛化性不足。例如,聚类时需要对各类预定义阈值,且难以找到最优值;在拥挤的场景中可能使得多个实例被识别为一个实体,导致漏检。

本文提出FSDv2,丢弃了FSD中的实例级表达,以追求更高的泛化性。本文引入虚拟体素以替代FSD中的实例,这些虚拟体素通过体素化投票中心得到。为减轻投票质量低带来的影响,虚拟体素被输入轻量级的稀疏虚拟体素混合器(VVM)增强特征,聚合属于同一物体不同虚拟体素的特征,得到覆盖整个实例的特征。VVM模拟了FSD中的实例级特征提取,但不显式地生成实例,以避免产生手工的归纳偏好。由于虚拟体素位于物体中心附近,可将虚拟体素作为“锚点”,从中预测边界框;这可减轻正负样本的不平衡性。

2. 相关工作

2.1 密集检测器

密集检测器(如VoxelNet和PointPillars)将点云转化为密集的3D体素或2D BEV,并使用密集的3D卷积或2D卷积处理。

2.2 半密集检测器

半密集检测器(如SECOND和CenterPoint)将点云转化为稀疏3D体素,使用稀疏3D卷积处理后得到2D密集BEV特征,输入检测头进行检测。其余方法使用Transformer结构增强稀疏主干。

2.3 完全稀疏检测器

完全稀疏检测器(如PointRCNN和VoteNet)基于点云进行检测,无需将点云转化为体素。FSD避免了点云处理中耗时的操作。

3. 准备知识

3.1 FSDv1的整体设计

FSDv1主要包含3部分:(1)点特征提取:使用稀疏体素特征提取器提取体素特征,然后使用基于MLP的颈部网络将体素特征转化为点特征。最后使用轻量级的逐点MLP进行逐点分类和中心投票。(2)聚类:将连接组件标签(CCL)应用在投票的中心,以将点聚类为实例。(3)实例特征提取和边界框预测:详见下文。

3.2 稀疏实例识别

FSDv1实例特征提取的核心是稀疏实例识别(SIR)。

首先,初始的实例点特征输入MLP,并通过最大池化得到实例特征,与实例各点的特征拼接,输入到另一MLP压缩通道维度。迭代执行上述步骤后,将最大池化的结果用于边界框预测。该方法类似一系列PointNet层。

4. 方法

4.1 总体结构

如下图所示,首先使用稀疏体素特征提取器作为主干,并使用MLP用于逐点分类和中心投票(与FSDv1相同)。FSDv2使用虚拟体素化替代聚类,并使用虚拟体素混合器混合不同虚拟体素的特征,用于预测边界框。
在这里插入图片描述

4.2 虚拟体素化

4.2.1 虚拟体素

使用投票中心创建虚拟体素。具体来说,对于每个前景点,预测偏移量得到投票中心。然后将各投票中心与原始点云的并集体素化。虚拟体素即至少包含一个投票中心的体素,而仅含真实点的体素则称为真实体素

虽然投票中心可能有很多,但虚拟体素一般较少,因为投票中心往往彼此接近,且体素大小会设置得比通常更大(主干已经捕捉了细粒度特征,此处无需高分辨率)。

4.2.2 虚拟体素特征编码

引入虚拟体素编码器,类似FSDv1中的SIR结构,区别在于FSDv1提取实例特征而本文提取体素特征。首先为投票中心生成特征,此处将生成投票中心的点的(经过主干编码后的)特征作为投票中心特征,并将预测偏移量作为额外特征以与真实点区分。对于真实点则设置虚拟偏移量0。然后使用SIR结构聚合虚拟体素内真实点和虚拟点的特征。

4.3 虚拟体素混合器

虚拟体素混合器(VVM)用于混合虚拟体素特征、真实体素特征和主干输出的多尺度特征。

4.3.1 混合虚拟体素特征的动机

当中心投票效果不佳时,一个物体的中心附近可能会有多个虚拟体素,但这些体素没有交互。

4.3.2 混合虚拟体素与真实体素的动机

由于虚拟体素来自预测的前景点,当预测不准时会有前景信息损失。

4.3.3 混合多尺度特征

多尺度特征包含主干输出的多尺度真实体素特征和4.1节中得到的虚拟/真实体素特征。由于特征是稀疏而不规则的,多尺度特征融合不能像图像一样进行通道维度的拼接。

设(相对于虚拟体素特征的)步长 s s s下的稀疏特征为 F s ∈ R N s × C s F_s\in\mathbb{R}^{N_s\times C_s} FsRNs×Cs,其中 N s N_s Ns为体素数, C s C_s Cs为通道数。体素的坐标为 I s ∈ R N s × 3 I_s\in\mathbb{R}^{N_s\times 3} IsRNs×3,转化到 s ~ \tilde{s} s~步长下的坐标为 I s s ~ I_s^{\tilde{s}} Iss~。虚拟体素化得到的特征为 F 1 F_1 F1。首先将 I s I_s Is转化为 I s 1 I_s^1 Is1
I s 1 = I s × s + ⌊ s / 2 ⌋ I_s^1=I_s\times s+\lfloor{s/2}\rfloor Is1=Is×s+s/2
按下式得到聚合的稀疏特征和体素坐标:
F a g g = Concat ( Linear ( F 1 ) , Linear ( F 2 ) , ⋯   , Linear ( F L ) ) I a g g = Concat ( I 1 , I 2 1 , ⋯   , I L 1 ) F_{agg}=\text{Concat}(\text{Linear}(F_1),\text{Linear}(F_2),\cdots,\text{Linear}(F_L))\\ I_{agg}=\text{Concat}(I_1,I_2^1,\cdots,I_L^1) Fagg=Concat(Linear(F1),Linear(F2),,Linear(FL))Iagg=Concat(I1,I21,,IL1)
其中线性层用于将特征转换为相同的通道数。

注意 I a g g I_{agg} Iagg可能包含重复元素,因为不同尺寸的体素可能有相同的坐标。本文使用动态池化操作DP来去除重复坐标,将重复坐标对应的特征求取均值,得到单一特征。

4.3.4 VVM的模型结构

使用SparseUNet处理上述聚合结果。

4.4 讨论:聚类v.s.虚拟体素

当中心投票一致时,所有投票中心位于同一虚拟体素内,假设聚类是完美的,则本文的虚拟体素化方法与FSDv1的实例表达类似。

但当中心投票不一致时,会导致多个虚拟体素,每个体素编码了物体的部分形状。虚拟体素混合器使得虚拟体素之间可以交互,以编码完整几何信息。此时也与FSDv1的实例表达类似。

总的来说,本文的方法可以避免SIR中的手工参数设计,使得模型更简单通用。

4.5 虚拟体素分配

4.5.1 潜在的设计选择

传统的分配方法对于虚拟体素而言是次优的。因为:

  • 虚拟体素不总是填充物体中心,特别是对于远处或大型物体。因此,基于中心的分配方法是不可行的。
  • 基于锚框的方法需要逐类的超参数(如锚框大小),这和本文提高泛化性的设计思路冲突。
  • 最近体素分配方法(将离中心最近的体素分配给对应的物体)会导致模糊性且阻碍优化。因为多个虚拟体素可能位于同一物体中心附近,但只有一个能作为匹配结果。

4.5.2 本文的方法:边界框内体素分配

本文将边界框内的所有虚拟体素作为正样本。

  • 由于虚拟体素数远少于真实体素数,不会导致不同物体的正样本数不平衡。且能提高点很少的物体的召回率。
  • 由于虚拟体素分布于物体中心附近,考虑所有虚拟体素不会导致回归目标有较大方差。
  • 由于真实的边界框标注不会重叠,且点云的稀疏性保证边界框内不包含背景噪声,使得这种分配方法可靠。这解释了为什么基于图像的2D检测需要更加复杂的策略。

4.5.3 虚拟体素位置定义

直接的方法是将体素的几何中心作为虚拟体素的位置,但会导致不精确性和模糊性,因为体素的大小可能会超过一些小物体的大小。

本文考虑体素内点的分布,将体素的位置定义为所含点的加权中心:
x ˉ = ∑ i = 0 N − 1 I ( x i ) x i ∑ i = 0 N − 1 I ( x i ) \bar{x}=\frac{\sum_{i=0}^{N-1}I(x_i)x_i}{\sum_{i=0}^{N-1}I(x_i)} xˉ=i=0N1I(xi)i=0N1I(xi)xi
其中
I ( x ) = { 1 , 若 x ∈ F α , 若 x ∉ F I(x)=\left\{\begin{matrix}1,& 若x\in \mathbb{F}\\\alpha,&若x\notin \mathbb{F}\end{matrix}\right. I(x)={1,α,xFx/F
其中 F \mathbb{F} F为前景点(包含原始点和投票中心)集合, α ∈ [ 0 , 1 ] \alpha\in[0,1] α[0,1]

4.6 虚拟体素头

VVM输出的虚拟体素特征会输入一组MLP预测最终边界框。本文类似CenterPoint进行类别分组。分类分支使用Focal损失,回归分支使用L1损失,回归对象包含虚拟体素几何中心到物体边界框质心的偏移量、尺寸的对数以及朝向角的正余弦。

5. 实验

5.3 主要结果

在WOD数据集和Argoverse数据集上,本文的方法能达到SotA;在nuScenes数据集上,本文的方法能与SotA性能相当。

5.4 聚类v.s.虚拟体素

5.4.1 统计数据

  • 对于大型物体,通常对应多个虚拟体素,且虚拟体素的数量大于聚类簇的数量,这表明VVM的必要性。
  • 对小型物体,虚拟体素和簇的数量都很少,此时二者功能相当。
  • 大型车辆的真实体素比簇和虚拟体素的数量多很多,这表明使用真实体素进行预测会导致不同大小物体的不平衡,而使用较少的虚拟体素预测能减轻这一问题。

5.4.2 拥挤场景的性能

若一个物体和与其最近的同类物体的距离小于2m,则定义该物体处于拥挤场景。性能分解表明,相比于FSDv1,FSDv2在拥挤场景物体上的性能提升比常规场景更大。

5.4.3 消除归纳偏好的有效性

实验表明,FSDv1随训练轮数的增加,性能逐渐饱和;而FSDv2的性能持续上升。

5.5 主要消融研究

5.5.1 基准方案设置

  • 不生成投票中心,但保留投票损失作为额外监督。
  • 仅对真实点使用体素化和体素编码,没有虚拟体素。
  • 真实体素不通过混合器,直接输入检测头预测结果。
  • 由于虚拟体素分配策略对小物体检测有重要影响,保留之。
    实验表明,逐步增加本文提出的模块能在各数据集上一致提高性能。且混合器和虚拟体素对相对大型的物体有性能提升。

5.6 每个组件的性能分析

5.6.1 虚拟体素的有效性

为理解虚拟体素机制的作用,本文设计退化策略,即为预测的中心投票偏移量乘上一个缩放因数 s ∈ [ 0 , 1 ] s\in[0,1] s[0,1],当 s = 1 s=1 s=1时为FSDv2的正常情况; s = 0 s=0 s=0时虚拟体素完全退化。实验表明:

  • 大型物体在大缩放因数下的性能较好。因为大型物体的中心包含空体素的可能性更高。
  • 缩放因数对小型物体的影响很小。因为此时的偏移量很小,不同缩放因数下的虚拟体素位置接近。
  • 对于barrier类别,大缩放因数能极大地提升性能。这是因为通常它们相邻放置,小缩放因数会导致从两个相邻实例的边界预测,导致模糊性。

5.6.2 虚拟体素编码器(VVE)的作用

将投票中心的特征置零后进行编码(这样,虚拟体素的特征仅来自真实点)。实验表明,上述改动会导致性能下降,且VVE对小物体的性能提升更明显。

5.6.3 虚拟体素混合器的输入

考虑三种组合:(1)仅输入虚拟体素;(2)输入虚拟体素和真实体素;(3)输入虚拟体素和多尺度体素。实验表明引入真实体素能极大提高性能,多尺度体素能在多数类别上进一步提高性能。

5.6.4 虚拟体素分配的作用

实验表明:

  • 略微增大小物体的GT框能帮助分配更多标签,但过分增大会因为噪声或边界框重叠而降低性能。
  • 使用虚拟体素质心比几何中心对小物体更有利,进一步使用加权质心能进一步提高性能。
    使用最近虚拟体素分配方法会导致性能严重下降,但增加分配的虚拟体素数量能减小性能下降。考虑最近的10个虚拟体素时性能达到饱和。

5.6.5 虚拟体素大小

实验表明,性能对虚拟体素的大小不敏感,且更大的体素能有略高的性能,这是因为此时大型物体的虚拟体素更少,不同大小物体的样本不平衡性被减轻。

5.7 运行时间评估

实验表明,FSDv2比FSDv1有更高的性能和效率。其中FSDv2的虚拟体素化与体素编码比FSDv1的聚类有更快的速度,但混合器考虑了真实体素,比FSDv1的SIR更慢。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【2023传智杯-新增场次】第六届传智杯程序设计挑战赛AB组-ABC题复盘解题分析详解【JavaPythonC++解题笔记】

本文仅为【2023传智杯-第二场】第六届传智杯程序设计挑战赛-题目解题分析详解的解题个人笔记,个人解题分析记录。 本文包含:第六届传智杯程序设计挑战赛题目、解题思路分析、解题代码、解题代码详解 文章目录 一.前言二.赛题题目A题题目-B题题目-C题题目-二.赛题题解A题题解-…

固态硬盘SSD

目录 1.2 组成1.3 读写性能特性1.4 与机械硬盘相比的特点1.5 磨损均衡技术 \quad \quad SSD基于闪存技术Flash Memory, 属于电可擦除ROM, 即EEPROM \quad 1.2 组成 \quad \quad \quad 系统对固态硬盘的读写是以页为单位的 固态硬盘里的块相当于机械硬盘里的磁道 固态硬盘里的页…

网络基础---网络层详解(图文清晰易懂!!!)

目录 一、网络层的功能 二、IP数据包的格式 三、ICMP协议 1.ICMP协议的概念和作用 2.ping命令 2.1 ping 的格式 2.2 ping选项 2.3 当我们ping不通时,及服务器出现问题,如何排错 2.4 信息传递时出现的问题类型和具体情况 四、冲突域和广播域 1.…

在线网页生成工具GrapesJS

项目地址 https://github.com/GrapesJS/grapesjshttps://github.com/GrapesJS/grapesjs 项目简述 这是一个基于node.js的在线网页生成项目,对简化开发有很大的帮助。 主要使用的语言如下: 编辑页面如下: 使用也很简洁 具体可以看下项目。…

HNU计算机视觉作业一

前言 选修的是蔡mj老师的计算机视觉,上课还是不错的,但是OpenCV可能需要自己学才能完整把作业写出来。由于没有认真学,这门课最后混了80多分,所以下面作业解题过程均为自己写的,并不是标准答案,仅供参考 …

“HALCON error #2454:HALCON handle was already cleared in operator set_draw“

分析:错误提示是窗口句柄已经被删除,这是因为前边的一句 HOperatorSet.CloseWindow(hWindowControl1.HalconWindow); 关掉了窗口,屏蔽或删除即可。

在过去的12个月里生成了2亿页的PDF,并识别了31万分钟的音频

在过去的12个月里,生成了2亿页的PDF,并识别了31万分钟的音频。这个项目已经上线了3年,目前有接近400家的医院和法庭接入了这个产品。目前在美国、澳大利亚、印度有多个数据中心。整个产品线有接近1500人的服务团队。

分类预测 | GASF-CNN格拉姆角场-卷积神经网络的数据分类预测

分类预测 | GASF-CNN格拉姆角场-卷积神经网络的数据分类预测 目录 分类预测 | GASF-CNN格拉姆角场-卷积神经网络的数据分类预测分类效果基本描述模型描述程序设计参考资料 分类效果 基本描述 1.GASF-CNN格拉姆角场-卷积神经网络的数据分类预测(完整源码和数据) 2.自…

No CUDA GPUs are available

文章目录 前言尝试方法一、尝试方法一二、尝试方法二 总结 前言 之前用服务器跑的时候,发现是可以跑的。但当有其他人一同使用的时候,就会抛出:No CUDA GPUs are available,这个时候我尝试了以下两种方式解决,后面终于…

移动距离

蓝桥杯其他真题点这里👈 //偶数行需要反转,判断行数时,最后一个需要特判,可以用向上取整 //也可以把传入的值减一,下标从0开始 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader;public class Main{static…

Zabbix监控腾讯云VPC

一、简介 私有网络(Virtual Private Cloud,VPC)是腾讯云上一块由用户自定义的逻辑隔离网络空间,为云服务器、云数据库等资源提供安全可控的网络环境。通过构建逻辑隔离的、用户自定义配置的网络空间,用户能够提升其云…

坚鹏:兴业银行EAST5.0政策解读及数据质量提升方案培训

兴业银行股份有限公司(简称“兴业银行”)成立于1988年8月,2022年总资产9.27万亿元,是经国务院、中国人民银行批准成立的首批股份制商业银行之一,总行设在福州市。现已发展成为横跨境内外,线上线下结合&…

飞天使-linux操作的一些技巧与知识点2

TCP 的三次握手 第一次,客户端与服务端建立链接,需要发送请求连接的消息 第二次,服务端接口到数据后,返回一个确认的操作*(至此客户端和服务端链路建立成功) 第三次,服务端还需要发送要与客户端…

网络入门---网络编程初步认识和实践(使用udp协议)

目录标题 前言准备工作udpserver.hpp成员变量构造函数初始化函数(socket,bind)start函数(recvfrom) udpServer.ccudpClient.hpp构造函数初始化函数run函数(sendto) udpClient.cc测试 前言 在上一篇文章中我们初步的认识了端口号的作用,ip地址和MAC地址在网络通信时…

【记忆】施密特正交化

图片源自https://www.zhihu.com/question/485986805

学员自创“编程羔手”,作为新手来看待攻城狮,程序猿,码农,码奴,码畜...

在编程的世界里,我们就是那些编程羔手,如同懵懂的羔羊一样,刚刚踏入代码的草原。我们是攻城狮的侄子,程序猿的徒弟,码农的学徒,尚未尝过码奴的辛酸,更没有领略过码畜的无奈。我们是那些初出茅庐…

idea import 不让打包时自动带*

场景 因为多人开发,合代码时经常发现因自动import带*了,导致各种问题。 解决

视觉检测系统在半导体行业的应用

一、半导体产业链概述 半导体产业链是现代电子工业的核心组成部分,涵盖了从原材料到最终产品的整个生产过程。这个产业链主要分为以下几个环节: 1.原材料供应:半导体行业的基石是半导体材料,如硅片、化合物半导体等。这些材料需要…

EP15:动态内存管理概述(c语言)malloc,calloc,realloc函数的介绍使用及柔性数组的介绍

如果学习方向是c方向那么c语言有三个板块的知识是非常重要的. 1:指针 2:结构体 3;动态内存管理. 序言:在c语言中,什么是动态内存 C语言中的动态内存是指在程序运行时,根据需要动态地分配内存空间的一种内存管理方式。与静态内存相比,动态内存的大小和生…

详细了解STM32----GPIO

提示:永远支持免费开源知识文档,喜欢的点个关注吧!谢谢! 文章目录 一、什么是GPIO?二、GPIO基本结构三、GPIO的输入输出模式1、推挽输出2、开漏输出3、复用推挽4、复用开漏1、浮空输入2、上拉输入3、下拉输…