详解3D物体检测模型: Voxel Transformer for 3D Object Detection

在这里插入图片描述
本文介绍一个新的的3D物体检测模型:VoTr,论文已收录于ICCV 2021。 这是第一篇使用 voxel-based Transformer 做3D 主干网络,用于点云数据3D物体检测。由于有限的感受野,传统的 3D 卷积网络检测器(voxel-based)不能有效地捕获大量的环境信息, 于是在本文中作者引入基于 Transformer 的结构,通过自注意力的方式寻找长距离范围内 voxel 之间的关系。

本文主要贡献有:

  • 考虑到非空 voxel 的稀疏性及数量众多的事实,直接对 voxel 使用标准的 Transformer 并不是一件容易的事情。为此,作者提出了 sparse voxel modulesubmanifold voxel module,它们可以有效地对空的和非空的 voxel 进行操作。
  • 为了进一步增大注意力范围,同时维持与卷积检测器相对应的计算开销,作者进一步提出了两种多头注意力机制Local AttentionDilated Attention,同时作者还进一步提出了 Fast Voxel Query,用于加速 voxel 的查询。
  • 本文提出的 VoTr 方法可以用在大多数 voxel-based 的3D检测器,最后作者在 WaymoKITTI 数据集上进行了实验,证明本文提出的方法在提高检测性能时并且保持了相当的计算效率。

论文链接为:https://arxiv.org/pdf/2109.02497.pdf

项目链接为:https://github.com/PointsCoder/VOTR


文章目录

      • 1. Introduction & Related Work
      • 2. Voxel Transformer
        • 2.1 Overall Architecture
        • 2.2 Voxel Transformer Module
        • 2.3 Efficient Attention Mechanism
        • 2.4 Fast Voxel Query
      • 3. Experiments

1. Introduction & Related Work

首先是论文引言部分。之前的 3D 检测方法主要分别两种:point-basedvoxel-basedvoxel-based 的方法首先对点云做栅格化处理,将点云转化为一个个 voxel 然后使用 3D 卷积网络提取特征。之后将 voxel 转换为鸟瞰图最终在鸟瞰图上生成 3D boxes。

但是由于感受野受限,影响着检测器性能。例如,SECOND 模型 voxel 大小是 (0.05m,0.05m,0.1m)(0.05m,0.05m,0.1m)(0.05m,0.05m,0.1m),最后一层最大的感受野是 (3.65m,3.65m,7.3m)(3.65m,3.65m,7.3m)(3.65m,3.65m,7.3m),覆盖不了一辆长度为 4m4m4m 的汽车。感受野的大小与 voxel size VVVkernel size KKKdownsample stride SSSlayer number LLL 四者乘积成正比。增大 VVV 会导致点云量化误差变大;增大 KKK 会导致卷积特征成三次方增大;增大 SSS 会导致低精度的鸟瞰图,会降低最终预测结果; 增大 LLL 会需要更多的计算资源。但是在3D物体检测时,由于点云的稀疏性和不完整性,而我们又需要增大感受野,因此就需要设计一种新的架构来编码更多的上下文信息。

最近 Transformer 在2D物体分类、检测、分割任务上取得了不错的效果,主要是因为自注意力机制可以建立像素间的长距离关系。但是直接将 Transformer 用到 voxel 中会遇到两个问题:

  • 非空的 voxel 分布很稀疏,而图像中像素是很密集的,例如在 Waymo 数据集中非空的 voxel 只占所有的 voxel 0.1%0.1\%0.1%,因此需要设计一个特殊操作只作用于那些非空的 voxel 上;
  • 非空 voxel 的数量是庞大的,例如在 Waymo 数据集中达到了 90k90k90k,如果像标准的 Transformer 那样使用全连接自注意力在计算上是吃不消的,因此,非常需要新的方法来扩大注意力范围同时将每个 query 的注意力 voxel 数保持在较小的范围内

为了解决这两个问题,作者于是提出了 VoTr,具体方法在下一节介绍。下图是3D卷积网络和 VoTr 的感受野图示。在图(a)中,橘色立方体表示的是3D卷积核,黄色的 voxel 被以红色 voxel 为中心的最大感受野所包含。在图(b)中,红色的 voxel 是待查询的 voxel,蓝色 voxel 是它的注意力 voxel,作者发现只使用一个自注意力层就可以覆盖比整个卷积骨干网还要大的区域,而且还可以保持足够细微的3D结构。

在这里插入图片描述
下面是相关研究工作

  • 点云3D物体检测方法:Frustum-PointNetPointRCNN3DSSDVoxelNetSECONDHVNetPV-RCNN
  • Transformer 在计算机视觉的应用:ViTDETRSETRMaX-DeepLabPoint TransformerPointformer

2. Voxel Transformer

2.1 Overall Architecture

现在我们来开始详细介绍 VoTr。整体结构设计和 SECOND 很相似,VoTr 包含三个 sparse voxel module,降采样3次,每一个 sparse voxel module 跟着2个 submanifold voxel module,在所有的模块中都使用到了多头注意力机制。在多头注意力机制中,每一个 query voxel 使用了两种特别的注意力方法:Local Attention 、 Dilated Attention

值得注意的是:submanifold voxel module 只在非空的 voxel 进行注意力操作,而 sparse voxel module 可以在空的 voxel 上提取特征。

在这里插入图片描述


2.2 Voxel Transformer Module

- self-attention on sparse voxels

这里首先介绍 sparse voxel 上的自注意力方法。

  • 假设总共有 NdenseN_{dense}Ndensevoxels,非空 voxel 索引数组 V:Nsparse×3\mathcal{V}:N_{sparse} \times 3VNsparse×3 以及对应特征数组 F:Nsparse×d\mathcal{F}:N_{sparse} \times dFNsparse×d,且 Nsparse ≪Ndense N_{\text {sparse }} \ll N_{\text {dense }}Nsparse Ndense 
  • 特定地,一个要查询的 voxel iii,其注意力范围 Ω(i)⊆V\Omega(i) \subseteq \mathcal{V}Ω(i)V 是由注意力机制确定,对注意力 voxel j⊆Ω(i)j \subseteq \Omega(i)jΩ(i) 进行多头注意力操作,得到注意力特征 fiattendf^{attend}_{i}fiattend
  • fi,fj∈Ff_i,f_j\in\mathcal{F}fi,fjF 分别为查询和注意力 voxel 特征,vi,vj∈Vv_i,v_j\in\mathcal{V}vi,vjV 分别为查询和注意力 voxel 整数索引。根据索引得到 voxel 中心坐标 pi,pjp_i,p_jpi,pj,其中 p=t×(v+0.5)p=t\times(v+0.5)p=t×(v+0.5)。然后可以计算 Qi,Ki,ViQ_i,K_i,V_iQiKi,Vi
    Qi=fiWq,Kj=fjWk+Epos ,Vj=fjWv+Epos(1)Q_{i}=f_{i} W_{q}, K_{j}=f_{j} W_{k}+E_{\text {pos }}, V_{j}=f_{j} W_{v}+E_{p o s} \tag{1} Qi=fiWq,Kj=fjWk+Epos ,Vj=fjWv+Epos(1)位置编码 EposE_{pos}Epos 为:
    Epos=(pi−pj)Wpos(2)E_{p o s}=\left(p_{i}-p_{j}\right) W_{p o s} \tag{2} Epos=(pipj)Wpos(2)自注意力特征为:
    fiattend=∑j∈Ω(i)σ(QiKjd)⋅Vj(3)f_{i}^{a t t e n d}=\sum_{j \in \Omega(i)} \sigma\left(\frac{Q_{i} K_{j}}{\sqrt{d}}\right) \cdot V_{j} \tag{3} fiattend=jΩ(i)σ(dQiKj)Vj(3)
    其中,σ(⋅)\sigma(\cdot)σ() 是softmax归一化函数,这里可以将 3D voxel 的自注意力机制看作是 2D 的自注意力机制的扩展,使用的相对坐标作为位置编码。

- submanifold voxel module
此模块,包含两层网络,第一层是自注意层,连接所有的注意力机制,第二层是简单的前向传播层,这里也使用了残差连接。与标准的 Transformer 不同的是:

  • 在前向传播层之后添加了线性投影层用于调整特征通道数量;
  • 使用了 BN 替代 LN
  • 删除了 dropout ,这是因为这里的注意力 voxel 数量太少了,再使用 dropout 可能会阻碍学习过程;

- sparse voxel module
由于在非空 voxel 没有特征,于是得不到 QiQ_iQi,使用如下方法得到近似 QiQ_iQi
Qi=Aj∈Ω(i)(fj)(4)Q_{i}=\underset{j \in \Omega(i)}{\mathcal{A}}\left(f_{j}\right) \tag{4} Qi=jΩ(i)A(fj)(4)其中 A\mathcal{A}A 是对所有注意力 voxel 特征做最大池化操作,同样地使用公式(3) 进行多头注意力操作,这里没有使用残差连接。


2.3 Efficient Attention Mechanism

现在,着重介绍注意力范围 Ω(i)\Omega(i)Ω(i),注意力机制中非常重要的一个因素。Ω(i)\Omega(i)Ω(i) 应当满足以下三点:

  • Ω(i)\Omega(i)Ω(i) 应该能覆盖相邻的 voxel 以保持细微的3D结构;
  • Ω(i)\Omega(i)Ω(i) 覆盖的范围应尽可能的远以便获得更大的上下文信息;
  • Ω(i)\Omega(i)Ω(i) 所包含的 voxel 数应该尽可能的少,例如小于50,避免计算负载过大;

- local attention
定义 ∅(start,end,stride)\varnothing(start,end,stride)(start,end,stride) 为一个返回非空索引的函数,例如 ∅((0,0,0,),(1,1,1),(1,1,1))\varnothing((0,0,0,),(1,1,1),(1,1,1))((0,0,0,),(1,1,1),(1,1,1)) 返回为 ∅{(0,0,0,),(0,0,1),(0,1,0),...,(1,1,1)}\varnothing\{(0,0,0,),(0,0,1),(0,1,0),...,(1,1,1)\}{(0,0,0,),(0,0,1),(0,1,0),...,(1,1,1)} 八个非空索引。在 Local Attention 中,注意力范围为:
Ωlocal (i)=∅(vi−Rlocal ,vi+Rlocal ,(1,1,1))(5)\Omega_{\text {local }}(i)=\varnothing\left(v_{i}-R_{\text {local }}, v_{i}+R_{\text {local }},(1,1,1)\right) \tag{5} Ωlocal (i)=(viRlocal ,vi+Rlocal ,(1,1,1))(5) 其中 Rlocal=(1,1,1)R_{\text{local}}=(1,1,1)Rlocal=(1,1,1),注意的是这里只返回非空 voxel 的索引。

- dilated attention
注意力范围为:
Ωdilated (i)=⋃m=1M∅(vi−Rend (m),vi+Rend (m),Rstride (m))\∅(vi−Rstart (m),vi+Rstart (m),Rstride (m)),(6)\begin{array}{r} \Omega_{\text {dilated }}(i)=\bigcup_{m=1}^{M} \varnothing\left(v_{i}-R_{\text {end }}^{(m)}, v_{i}+R_{\text {end }}^{(m)}, R_{\text {stride }}^{(m)}\right) \backslash \\ \varnothing\left(v_{i}-R_{\text {start }}^{(m)}, v_{i}+R_{\text {start }}^{(m)}, R_{\text {stride }}^{(m)}\right), \end{array} \tag{6} Ωdilated (i)=m=1M(viRend (m),vi+Rend (m),Rstride (m))\(viRstart (m),vi+Rstart (m),Rstride (m)),(6)

其中 \\backslash\ 是集合相减运算符,Rstart (i)<Rend (i)≤Rstart (i+1),Rstride (i)<Rstride (i+1)R_{\text {start }}^{(i)}<R_{\text {end }}^{(i)} \leq R_{\text {start }}^{(i+1)} , R_{\text {stride }}^{(i)}<R_{\text {stride }}^{(i+1)}Rstart (i)<Rend (i)Rstart (i+1),Rstride (i)<Rstride (i+1), 因此可以逐渐增大查询步伐 Rstride (i)R_{\text {stride }}^{(i)}Rstride (i)
。经过认真设计,注意力机制所能搜寻的范围可以达到15m,而查询的 voxel 数量可以小于50。

下图是一个2D的注意力机制说明(可以轻松扩展到3D场景)。对于要查询的 voxel (红色所示),Local Attention 关注的是局部区域,浅蓝色 voxel 在查询范围内,最终被选择为注意力 voxelDilated Attention 查询的范围比较大(绿色所示),最终非空的 voxel 被选择为注意力 voxel
在这里插入图片描述


2.4 Fast Voxel Query

在上面设计的注意力机制中,查询每个非空的注意力 voxel 是至关重要的。为了查询每个注意力 voxel 可能要花费 O(Nsparse )O\left(N_{\text {sparse }}\right)O(Nsparse ) 时间复杂度,这是十分耗时的(Waymo 数据集中 Nsparse=90kN_{\text{sparse}} = 90kNsparse=90k),因此作者在这里提出了一个基于哈希表的快速查询。

快速查询流程如下图所示,这里与之前的查询方法不同的是,在哈希表中只需要查询 NΩN_{\Omega}NΩ 次,Ω\OmegaΩ 是注意力范围,NΩ≪Nsparse N_{\Omega} \ll N_{\text {sparse }}NΩNsparse 

在这里插入图片描述


3. Experiments

下面是实验部分,作者分别在 WaymoKITTI 数据上进行了测试。VoTr-SSD 选择 SECOND 作为检测框架,VoTr-TSD 选择 PV-RCNN 作为检测框架,将传统的3D卷积替换为本文设计的 Transformer 结构。下面是 Waymo 验证集上的结果。
在这里插入图片描述
下面是在 KITTI 数据集上的结果。这里在 SECOND 框架上提升比较多。
在这里插入图片描述
最后是消融实验,可以看到不同注意力机制、dropout 参数、注意力 voxel 数量、模型参数、推理速度以及注意力权重的比较。
在这里插入图片描述

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

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

相关文章

一步步编写操作系统 65 标准调用约定stdcall 汇编实战

因为c语言遵循的调用约定是cdecl&#xff0c;咱们也自然要遵守cdecl约定了。不过为了起到对比的作用&#xff0c;除了介绍cdecl外&#xff0c;也会介绍下stdcall。 既然咱们用的是调用约定是cdecl&#xff0c;那对它的介绍最好让它离下一节的内容近一些&#xff0c;所以先说一…

Coursera自动驾驶课程第18讲:The Planning Problem

在第17讲《Coursera自动驾驶课程第17讲&#xff1a;An Autonomous Vehicle State Estimator》 我们学习了如何使用多传感器融合进行自车定位&#xff0c;以及传感器的内外参标定和时间同步&#xff0c;我们还讨论了在实际应用中常遇到的问题。 从本讲开始我们将学习一个新的模…

详解3D物体检测模型:Focal Sparse Convolutional Networks for 3D Object Detection

用于3D目标检测的焦点稀疏卷积神经网络【CVPR2022】【3D检测】本文介绍一篇新的 3D 物体检测模型&#xff1a;Focals Conv&#xff0c;论文收录于 CVPR2022。在 3D 检测任务中&#xff0c;点云或体素数据不均匀地分布在3维空间中&#xff0c;不同位置的数据对物体检测的贡献是不…

地平线:面向规模化量产的自动驾驶感知研发与实践

导读 4月27日&#xff0c;地平线智能驾驶感知研发部负责人苏治中就 《面向规模化量产的自动驾驶感知研发与实践》 这一主题进行了直播讲解。 本次课程内容分为4个部分&#xff1a; 1、地平线自动驾驶环境感知量产实践 2、软硬协同的自动驾驶感知算法设计 3、实现规模化量产的“…

Power BI与Power Query、Power Pivot 是什么关系?

搞不清楚Power BI与Power Query、Power Pivot是什么关系&#xff1f;看这篇文章就够了。 刚开始学习PowerBI的时候&#xff0c;总是能碰到Power Query和Power Pivot这两个词&#xff08;下文简称为PQ和PP)&#xff0c;现在中文里面学习PowerBI的资源本来就不是很多&#xff0c…

地平线:上帝视角与想象力——自动驾驶感知的新范式

导读 3月28日&#xff0c;在「地平线自动驾驶技术专场」上&#xff0c;地平线自动驾驶系统架构师刘景初博士围绕《上帝视角与想象力——自动驾驶感知的新范式 》这一主题进行了直播讲解。 本次课程主要分为以下4个部分&#xff1a; 1、自动驾驶结构演化提出算法新需求 2、软件2…

详解Class类文件的结构(上)

前言 相信搞Java开发的同学都经常会接触到Class类文件&#xff0c;了解了JVM虚拟机之后也会大量接触到class字节码&#xff0c;那么它到底是什么样的文件&#xff1f;内部由什么构成&#xff1f;虚拟机又是如何去识别它的&#xff1f;这篇文章就来学习一下Class类文件的结构。…

Coursera自动驾驶课程第19讲:Mapping for Planning

在第18讲 《Coursera自动驾驶课程第18讲&#xff1a;The Planning Problem》 我们对自动驾驶中的规划问题有了一个全面的了解&#xff0c;理解了规划问题中的约束和目标&#xff1b;同时我们还讨论了如何分层如解决规划问题&#xff08;任务规划、行为规划、路径规划和速度曲线…

详解Class类文件的结构(下)

本文继续使用上次的Test.class文件&#xff0c;它是由下面单独的一个类文件编译而成的&#xff0c;没有包。 6. 索引&#xff08;Index&#xff09; 索引又分类索引、父类索引和接口索引集合&#xff0c;类索引&#xff08;this_class&#xff09;和父类索引&#xff08;super…

自动驾驶开源软件和算法库

1. Carla&#xff08;自动驾驶开源仿真软件&#xff09; github&#xff1a;https://github.com/carla-simulator/carladoc&#xff1a;https://carla.readthedocs.io/en/latest/website&#xff1a;http://carla.org/Bounding boxes&#xff1a;https://carla.readthedocs.io/…

Coursera自动驾驶课程第20讲:Mission Planning in Driving Environments

在第19讲《Coursera自动驾驶课程第19讲&#xff1a;Mapping for Planning》 我们学习了自动驾驶中两种环境建图方法&#xff1a;占用网格图&#xff08;occupancy grid map&#xff09; 和 高清地图&#xff08;high-definition road map&#xff09;。 在本讲中&#xff0c;我…

Java实例化对象过程中的内存分配

问题引入 这里先定义一个很不标准的“书”类,这里为了方便演示就不对类的属性进行封装了。 class Book{String name; //书名double price; //价格public void getInfo(){System.out.println("name:"name";price:"price);} } 在这个类中定义了两个属…

【Python学习】 - sklearn学习 - KNN

前言&#xff1a; 针对一个完整的机器学习框架目前还没有总结出来&#xff0c;所以目前只能总结每一个单独的算法。由于现在研究的重点是算法&#xff0c;所以对于数据的处理&#xff0c;数据的分析和可视化呈现&#xff0c;在现阶段并不进行展示&#xff08;这样容易陷入纠结…

重读经典:《End-to-End Object Detection with Transformers》

DETR 论文精读【论文精读】这一次朱毅博士给大家精读的论文是 DETR&#xff0c;是目标检测领域里程碑式的一个工作&#xff0c;文章收录于 ECCV20 。DETR 是 Detection Transformer 的缩写&#xff0c;作者使用 Transformer 简化了目标检测流程&#xff0c;不再需要进行 NMS&am…

Execute SQL Task 参数和变量的映射

Execute SQL Task能够执行带参数的SQL查询语句或存储过程&#xff08;SP&#xff09;&#xff0c;通过SSIS的变量&#xff08;Variable&#xff09;对参数赋值。对于不同的Connection Manager&#xff0c;在Task中需要使用不同的符号&#xff08;Parameter marker&#xff09;来…

【Python学习】 - 手写数字识别 - python读入mnist数据集的多种方法

写在前面&#xff1a; 其实网上有很多读入mnist数据的代码&#xff0c;但是都是比较麻烦冗长的函数&#xff0c;本篇文章介绍几种不算很麻烦的&#xff0c;借用库函数读入数据的方法。 方法1&#xff1a; 方法2&#xff1a; 方法3&#xff1a;

Coursera自动驾驶课程第21讲:Dynamic Object Interactions

在第20讲《Coursera自动驾驶课程第20讲&#xff1a;Mission Planning in Driving Environments》 我们学习了任务规划中常用的三种图搜索算法&#xff1a;Breadth First Search、Dijkstra 和 A* 搜索。 在本讲中我们将讨论运动规划器中使用的方法&#xff0c;以处理动态物体和…

sql server 数据库忘记sa账户密码/ 无管理员账户解决办法

一、计算机超级管理员账户有数据库的管理员权限 用管理员账户登录数据库&#xff0c;直接修改sa账户密码即可。 二、数据库中没有管理员权限的账户 SQL Server 2005/2008提供了针对该情况的更好的灾难恢复方法&#xff0c;无需侵入master数据库&#xff0c;不会对master数据库…

机器学习编译第1讲:机器学习编译概述

MLC-机器学习编译-第一讲-机器学习编译概述课程主页&#xff1a;https://mlc.ai/summer22-zh/ 文章目录1.0 概述1.1 什么是机器学习编译1.2 为什么学习机器学习编译1.3 机器学习编译的关键要素1.3.1 备注&#xff1a;抽象和实现1.4 总结1.0 概述 机器学习应用程序已经无处不在…

重读经典:《The Craft of Research(1)》

跟读者建立联系【研究的艺术一】这一次李沐博士给大家精读的是一本关于论文写作的书籍。这本书总共包含四个大的章节&#xff0c;本期视频李沐博士介绍的是第一个章节&#xff1a;Research&#xff0c;Researchers&#xff0c;and Readers。 0. 前言 视频开头&#xff0c;李沐…