Sparse4Dv2

Sparse4D: Multi-view 3D Object Detection with Sparse Spatial-Temporal Fusion

相关内容:总览,Sparse4D v1,Sparse4D v3,
单位:地平线(Sparse4D v1 原班人马)
GitHub:https://github.com/HorizonRobotics/Sparse4D
论文:https://arxiv.org/abs/2305.14018
时间:2023-05
找博主项目讨论方式:wx:DL_xifen
讨论QQ群:345458279

摘要

  1. 稀疏算法在多视角时序感知任务中,非常灵活
  2. 本文,提出另一个增强版本的Sparse4D ,改进了时序融合模块,是利用递归的方式实现了多帧特征采样
  3. 有效的解耦了图像特征和结构化的锚框特征,Sparse4D 可以实现时序特征的高效转换,从而仅通过稀疏特征的逐帧传递来促进时序融合。
  4. 递归的时序融合方法有两个主要的好处。
  5. 首先,它将时序融合的计算复杂度从O (T)降低到O (1),
  6. 其次,它使长时间信息的融合成为可能,从而由于时序融合而导致更显著的性能改进。
  7. Sparse4Dv2,进一步提高了稀疏感知的性能,达到了SOTA的结果在NuScenes 3D检测任务中。

1 引言

  1. 感知模块在自动驾驶系统中起着关键作用。

  2. 实现多传感器与时序特征的高效和有机融合是提高感知性能的关键研究方向

  3. 尽管基于BEV)的方法已经获得了大量的关注,并表现出了较高的感知性能,但我们并不认为它们代表最优的解决方案,理由如下:

    1. 从图像特征到BEV向量空间的转换涉及到重新组织和重新排列密集特征,而不引入额外的视角。然而,这种转换却增加了模型的复杂性
    2. 在感知范围、准确性和计算复杂度之间取得平衡对于获得最佳结果至关重要。不同的驾驶场景(如高速公路、城市或农村地区)需要特定的参数设置,以确保感知能力和计算效率之间的有效权衡。
    3. 在端到端自动驾驶的背景下,基于稀疏的算法产生的实例特征具有更大的意义,因为它们可以更容易地与基于图的模型集成。
  4. 与基于bev的算法不同,PETR系列算法利用基于query的体系结构和全局交叉注意力来实现多视图特征融合。

  5. 类似于原始的DETR,使用了全局注意力,导致高的算力消耗,不能被认为是一种完全的稀疏算法

  6. 基于上述原因,我们专注于稀疏算法,改进感知算法,助力端到端自动驾驶

  7. 我们选择了Sparse4D作为基线算法,进一步增加。


  8. 这个Sparse4D的时时序模块有一个明显的局限性,在执行特征融合之前,它需要采样多帧的历史数据,如图1(a).所示

  9. 这导致了随着历史帧的增加,线性增加了计算复杂度和现存占用。同时难以扩展历史特征。

  10. 图片1

  11. 为了克服上述问题,本文提出了迭代实例特征的方式,替代多帧采样。类似与基于query的跟踪器SteamPETR。


  12. 具体而言,第一帧,采用了单帧的Sparse4D,输出相应的3D边界框和特征。

  13. 对于后续的帧,我们转换前一帧的输出作为当前帧的输入,实例特征保持不变,而实例状态,如3D边界框,则会作为锚框利用自车运动信息,映射到当前帧上。

  14. 锚框的位置embeding也通过锚编码器显示地重新编码

  15. 为了充分利用时序实例特征,本文映入了时序交叉注意力模块在decoder的每一层。

  16. 通过时间投影初始化的实例主要处理轨迹,它们是之前在多个帧上被检测和跟踪的对象。

  17. 对于新出现的对象,我们使用单帧单层解码器初始化它们,选择得分最高的实例子集,然后传播到后续的解码器。

  18. 这种设计避免我们的时序模型增加锚框的数量,从而达到与非时序模型相当的推理速度


  19. 除了时序融合模块,Sparse4Dv2进行了如下的改进:

    1. 将双线性网格采样和加权和结合为一个CUDA算子,重建可变形聚合操作,显著减少了训练过程中的内存占用,并在一定程度上提高了训练速度。
    2. 将摄像机参数编码纳入可变形聚合中,并在训练过程中结合图像和输出坐标增强,以实现更高的感知精度和鲁棒性。
    3. 引入基于激光雷达点云的密集深度监控,便于训练优化,提高检测精度

  20. 在NuScenes数据集上进行了大量3D检测实验,结果显示了Sparse4Dv2具有强大的竞争力

  21. 超越了现有的SOLOFusion和VideoBEV的表现,同时又具有推理速度的优势。

2 Related Works

2.1 基于相机的3D检测

参考sparse 4D v1

2.2 多视角特征融合

参考sparse 4D v1

2.3 时序特征融合

参考sparse 4D v1

3 方法

framework

3.1 整体架构
  1. 第一步:提取多视角特征图: I = { I s ∈ R N × C × H s × W s ∣ 1 ≤ s ≤ S } I=\left\{I_{s}\in\mathbb{R}^{N\times C\times H_{s}\times W_{s}}|1\leq s\leq S\right\} I={IsRN×C×Hs×Ws∣1sS}
  2. 其中S表示特征尺度数,N表示视角数
  3. 第二步,将特征图送入decoder,decoder包括1个单帧层和5个多帧层
  4. 单帧层包括3个模块:deformable aggregation, FFN, 输出层(微调bbox和分类)
  5. 多帧层,处理上述3个以外,还有2个多头注意力
  6. 交叉注意力用于增强时序特征的融合,自注意力用于实例特征之间的交互
  7. 首先,初始化一个实例特征集,其中包括anchor和特征
  8. 使用单帧网络对他们进行微调和评分,选择高分实例作为后续多帧网络的输入
  9. 多帧网络输入除了上述的高分实例,还有前一帧的输出(历史帧的实例)
  10. 每一层的anchor数量是一样的,无论是单帧层还是多帧层
  11. 多帧层的输出作为当前帧的检查结果
  12. 同理,将高分实例会保存,作为下一帧的输入。
3.2 实例时序传播
  1. 在Sparse4D中,一个实例有3个部分表征:anchor、实例特征、anchor embedding

  2. Anchor是结构化信息,包括了实例的状态,有明确的物理含义

  3. 实例特征是高维语义特征,从图像中提取出来的,主要是通过图像编码器获取

  4. anchor embedding 就是anchor进行的特征编码

  5. 一个小的anchor 编码器 Ψ \mathbb{\Psi} Ψ 用于映射anchor结构化信息到高维空间

  6. 这个设计 完全是解耦了图像特征和实例的状态信息,所以就非常容易添加先验知识。

  7. 对于实例时序传播,我们可以投影anchor,然后用anchor编码器 去编码投影后的anchor,同时保持特征不变就好。公式如下:

    A t = P r o j e c t t − 1 → t ( A t − 1 ) , E t = Ψ ( A t ) , F t = F t − 1 A_t=\mathbf{Project}_{t-1\to t}(A_{t-1}),\quad E_t=\Psi\left(A_t\right),\quad F_t=F_{t-1} At=Projectt1t(At1),Et=Ψ(At),Ft=Ft1

  8. 其中, A A A 表示 anchor, E E E表示anchor embedding , F F F 表示特征, Ψ \Psi Ψ表示特征编码器

  9. Sparse4D可以用于处理各种感知任务,仅仅是需要设计不同的anchor 和映射函数,针对不同的任务。

  10. 在3D检查任务中,anchor 设定为3D 边界框,同时映射函数可以如下:
    A t − 1 = { x , y , z , w , l , h , sin ⁡ y a w , cos ⁡ y a w , v x , v y , v z } t − 1 I x , y , z ] t = R t − 1 → t ( [ x , y , z ] + d t [ v x , v y , v z ] ) t − 1 + T t − 1 → t [ w , l , h ] t = [ w , l , h ] t − 1 [ cos ⁡ y a w , sin ⁡ y a w , 0 ] t = R t − 1 → t [ cos ⁡ y a w , sin ⁡ y a w , 0 ] t − 1 [ v x , v y , v z ] t = R t − 1 → t [ v x , v y , v z ] t − 1 \begin{gathered} A_{t-1}=\{x,y,z,w,l,h,\sin yaw,\cos yaw,v_{x},v_{y},v_{z}\}_{t-1} \\ \text{I} x,y,z]_{t}=\mathbf{R}_{t-1\to t}([x,y,z]+d_{t}[v_{x},v_{y},v_{z}])_{t-1}+\mathbf{T}_{t-1\to t} \\ [w,l,h]_{t}=[w,l,h]_{t-1} \\ \left[\cos yaw,\sin yaw,0\right]_{t}=\mathbf{R}_{t-1\to t}\left[\cos yaw,\sin yaw,0\right]_{t-1} \\ \left[v_{x},v_{y},v_{z}\right]_{t}=\mathbf{R}_{t-1\to t}\left[v_{x},v_{y},v_{z}\right]_{t-1} \end{gathered} At1={x,y,z,w,l,h,sinyaw,cosyaw,vx,vy,vz}t1Ix,y,z]t=Rt1t([x,y,z]+dt[vx,vy,vz])t1+Tt1t[w,l,h]t=[w,l,h]t1[cosyaw,sinyaw,0]t=Rt1t[cosyaw,sinyaw,0]t1[vx,vy,vz]t=Rt1t[vx,vy,vz]t1

  11. 其中, d t d_t dt 是表示t与t-1之间的时间间隔, R t − 1 → t \mathbf{R}_{t-1\to t} Rt1t T t − 1 → t \mathbf{T}_{t-1\to t} Tt1t表示t-1到t时刻,自车的旋转矩阵和平移矩阵,

  12. 如果是3D 车道线检测任务,anchor可以定义为polyline,同时映射函数可以映射每一个3D点。

3.3 高效可变性聚合
  1. 可变性聚合实现多尺度多视角的特征融合,其中包括特征采样和加权融合。

  2. 在这里插入图片描述

  3. 其中,算法1 只需要多次加载和存储HBM, 也需要存储大量中间量在训练的反向传播中,特别是当尺寸 f f f特别大的时候,实际上,花费了大量的GPU的显存。

  4. 此外,频繁的HBM的访问也拖慢了推理的速度。

  5. 基于此,本文将特征采样和多尺度/多视角加权封装到一个可变性聚合中,作为一个cuda算子,直接一步输出多点的特征。

  6. 上述算子称之为:Efficient Deformable Aggregation (EDA)

    在这里插入图片描述

  7. EDA表现出优异的并行性能,允许在K维度和C维度上实现完全的并行化。

  8. 单个线程的计算复杂度只有 N × S N \times S N×S​。

  9. 此外,对于多视角场景,一个点最多会被投影到两个视图中,从而导致单线程的计算复杂度仅为2S。

  10. 这种设计利用了gpu和AI芯片的并行计算能力,显著提高了效率,并减少了内存消耗和推理时间。

  11. EDA可以作为一种多功能操作,适用于需要多图像和多尺度融合的各种应用。

相机参数编码
  1. 在sparse4D v1中,可变形聚合中的权值是通过一个全连接层来计算的。
  2. 在训练过程中,摄像机参数的信息逐渐嵌入到这个全连接层的参数中,这可以看作是一种隐式的神经表示或对训练集的过拟合。
  3. 这种方法会导致对相机参数的泛化效果不佳。
  4. 具体来说,当交换两幅图像的输入顺序时,权重顺序没有相应变化,影响感知性能。
  5. 此外,如果我们在训练过程中对摄像机参数应用大规模的数据增强,这种参数化的隐式表征,可能会显著的影响收敛速度。
  6. 为了解决这个问题,我们直接将摄像机参数输入到网络中,并将从输出空间到图像坐标空间的变换矩阵映射到一个高维的特征向量中
  7. 然后,我们将这个特征向量添加到实例特征中,并使用组合特征来计算相应视图的权重。
稠密的深度监督
  1. 在实验中,我们发现基于稀疏的方法在早期训练阶段缺乏足够的收敛能力和速度。
  2. 为了缓解这一问题,我们引入了以点云为监督的多尺度密集深度估计方法。
  3. 在推理过程中,这个子网络将不会被使用。
  4. 对于特征图的每个尺度,我们使用1×1卷积来输出预定义的等效焦距的深度值。
  5. 然后,将这些深度值乘以相机焦距与等效焦距的比率。
  6. 密集深度监督的损失函数使用了普通的L1损失
  7. 在加入密集深度监督后,我们将从Sparse4Dv1中删除深度重权模块

4 实验

  1. benchmark

    • 数据:NuScenes

    • 指标:Average Precision (mAP), mean Average Error of Translation (mATE), Scale (mASE),

      Orientation (mAOE), Velocity (mAVE), Attribute (mAAE) and nuScenes Detection Score (NDS),

  2. 实施细节

    1. backbone:ResNet50, ResNet101 , and VoVNet-99
    2. neck:FPN
    3. pretrained weights:ImageNet-1K +nuImages (ResNet),DD3D(VoVNet)
    4. epochs:100
    5. optimizer: AdawM
    6. without CBGS
    7. augmentation: image data augmentation and lidar rotation augmentation
    8. anchors: 600 temporal instances, 300 single-frame
    9. hyperparameters:Sparse4Dv1
  3. 消融实验以及分析

阅读时间:2024年6月26日

找博主讨论方式:wx:DL_xifen

讨论QQ群:345458279

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

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

相关文章

前置章节-熟悉Python、Numpy、SciPy和matplotlib

目录 一、编程环境-使用jupyter notebook 1.下载homebrew包管理工具 2.安装Python环境 3.安装jupyter 4.下载Anaconda使用conda 5.使用conda设置虚拟环境 二、学习Python基础 1.快排的Python实现 (1)列表推导-一种创建列表的简洁方式 (2)列表相加 2.基本数据类型及运…

eBPF 如何塑造 Linux 和平台工程的未来

当Docker 于 2013 年突然出现时,Linux 容器似乎一夜成名。但容器(以及微服务和Kubernetes)的演变实际上是基于 Linux 操作系统中的内核原语而进行的,历时数十年。 Docker 使用这些原语(即 cgroups 和命名空间&#xf…

Jenkins通过Squid代理服务器添加局域网节点机器

✨前言: 当jenkins在公网上的时候,如果要添加局域网内的服务器为节点机器构建的时候,这里就需要通过squid代理服务来实现了。当然你也可以使用其他的方式例如Apache等等,这里主要介绍通过Squid的方式。 🌟什么是Squi…

计算机视觉(CV)技术:优势、挑战与前景

摘要 计算机视觉作为人工智能的关键领域之一,正迅速改变我们的生活和工作方式。本文将探讨CV技术的主要优势、面临的挑战以及未来的发展方向。 关键词 计算机视觉, 人工智能, 数据处理, 自动化, 伦理问题 目录 引言计算机视觉技术的优势计算机视觉技术的挑战实…

企智汇软件:机电工程项目管理系统智能化管理,洞悉项目全貌!

在机电工程领域,项目管理的复杂性要求系统不仅要能够处理大量的数据和信息,还要能够提供实时的洞察和分析,以支持快速而明智的决策。企智汇机电工程项目管理系统正是为了满足这些需求而设计的,它通过一系列先进的功能,…

入门JavaWeb之 Response 验证码和重定向

Response 写验证码: package com.demo.response;import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse…

安装vue开发者工具

浏览器控制台提示: 打开网址 GitHub - vuejs/devtools: ⚙️ Browser devtools extension for debugging Vue.js applications. 点击添加 上图地址:Installation | Vue Devtools 安装好了

JAVA期末速成库(7)第七、八章

一、习题介绍 第七章 Check Point:P251 7.2,7.4,7.16,8.2 Programming Exercise:7.10,7.14,7.26 二、习题及答案 Check Point: 7.2 When is the memory allocated for an ar…

入门JavaWeb之 JSP 语法、指令、内置对象和 JSTL 标签

导入 jar 包 搜索 jstl-api、standard pom.xml 导入 jar 包 <!-- Servlet 依赖 --><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version><scope>provid…

C语言 | Leetcode C语言题解之第200题岛屿数量

题目&#xff1a; 题解&#xff1a; void cleanLand(char** grid, int gridSize, int ColSize,int row,int column) {if(grid[row][column] 1){//不等于1则清零grid[row][column] 0;}else{//不等于1则返回return ;}int newRow;int newColumn;//上if(row ! 0) //还能上{ne…

暑假本科生、研究生怎么学?来看详细的AI夏令营规划

Datawhale夏令营 发布&#xff1a;2024 AI 夏令营 学习规划 「学习内容详览」 01机器学习方向&#xff1a;2024/7/1~7/7 「Datawhale」邀请想入门人工智能领域并实践机器学习算法的学习者和我们一起来学习~ 详细学习规划如下&#xff1a; 02大模型技术方向&#xff1a;2024/7…

【面试题】信息系统安全运维要做什么

信息系统安全运维是确保信息系统稳定、可靠、安全运行的一系列活动和措施。 其主要包括以下几个方面&#xff1a; 1.系统监控&#xff1a; 实时监测信息系统的运行状态&#xff0c;如服务器的性能指标、网络流量、应用程序的运行情况等。通过监控工具&#xff0c;及时发现系统…

M芯片 Parallels Desktop 19虚拟机安装Windows11教程

Parallels Desktop 19 for Mac 乃是一款适配于 Mac 的虚拟化软件。它能让您在 Mac 计算机上同时运行多个操作系统。您可借此创建虚拟机&#xff0c;并于其中装设不同的操作系统&#xff0c;如 Windows、Linux 或 macOS。使用 Parallels Desktop 19 mac 版时&#xff0c;您可在 …

Volatility 内存取证【信安比赛快速入门】

一、练习基本命令使用 1、获取镜像信息 ./volatility -f Challenge.raw imageinfo 一般取第一个就可以了 2、查看用户 ./volatility -f Challenge.raw --profileWin7SP1x64 printkey -K "SAM\Domains\Account\Users\Names" 3、获取主机名 ./volatility -f Challenge…

微信小程序毕业设计-微信食堂线上订餐系统项目开发实战(附源码+论文)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;微信小程序毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计…

UFS协议—新手快速入门(五)【11-13】

目录 十一、逻辑单元&#xff08;Logical Unit, LU&#xff09; 1、概念 2、UFS逻辑单元的独立特性 3、Well known LU &#xff08;1&#xff09;Boot Logical Units&#xff08;BOOT LUs&#xff09; &#xff08;2&#xff09;RPMB&#xff08;Replay Protected Memory…

使用提示词调教AI

“AI 是我们的数字员工&#xff0c;了解员工的秉性 &#xff0c; 从调教提示词开始。” 网上流传最广的提示词方法论&#xff0c;是“你需要给大模型一个角色”。这确实是一个好的策略&#xff0c;因为小学老师&#xff0c;大学老师这样的角色&#xff0c;预设很多背景信息。这…

独立开发者系列(11)——登录与鉴权

从原理上讲&#xff0c;登录很简单&#xff0c;就是输入账号密码和后台的数据库进行匹配&#xff0c;匹配上了就表示登录了&#xff0c;否则没有登录。这里主要总结的问题&#xff0c;用户登录之后&#xff0c;服务器端怎么确定你登录了&#xff0c;认定身份这个问题。 在刚学会…

德力西空调漏电保护开关HDF-LB32A40A家用电热水器漏电保护器开关

品牌 德力西 型号 HDF-LB 额定电流 40A,32A 漏电保护器类型 2P 产地 中国大陆 电压 1000V及以下 极数 2P 电源方式 交流电 3C证书编号 2020960306000014 独有外观&#xff0c;纤薄时尚&#xff0c;家用漏电保护开关&#xff0c;防触电&#xff0c;漏电保…

C语⾔数据类型和变量

C语⾔数据类型和变量 1.数据类型介绍1.1 字符型1.2 整型1.3 浮点型1.4 布尔类型1.5 各种数据类型的长度1.5.1 sizeof操作符1.5.2 数据类型长度1.5.3 sizeof中表达式不计算 2. signed 和 unsigned3. 数据类型的取值范围4. 变量4.1 变量的创建4.2 变量的分类 5. 算术操作符&#…