当前位置: 首页 > news >正文

【CVPR 2023】DSVT: Dynamic Sparse Voxel Transformer with Rotated Sets

文章目录

  • 开场白
      • 效果
      • 意图
  • 重点
      • VoxelNet: End-to-End Learning for Point Cloud Based 3D Object Detection
      • X-Axis DSVT Layer
      • Y-Axis DSVT Layer
    • Dynamic Sparse Window Attention
      • Dynamic set partition
      • Rotated set attention for intra-window feature propagation.
      • Hybrid window partition for inter-window feature propagation.
    • Attention-style 3D Pooling
  • 非重点

开场白

  • 先说一下为什么我会看到这篇文章,其实最开始我并没有太关注这篇,因为他算是一种架构上的设计了(类似于convnext这样)。我最开始看到到文章其实是UniTR:A Unified and Efficient Multi-Modal Transformer for Bird’s-Eye-View Representation这篇,因为当时一心说搞一搞bev的检测,看文章的时候发现有些东西看不懂往回找才看到。

  • 这两篇工作其实出自一群人(当然可能略有不同,人有聚散离合么,总会有人要先走),哈哈哈好,言归正传,就是北大的作者搞了个这个东西用来处理3D voxel然后拿了CVPR 2023,然后呢他们又用这个东西去做bev 检测然后有中了 ICCV 2023,这个工作还是挺有延续性的(大家可以注意一下这个配置,在他们iccv那篇paper里面也会出现,有好装备是真不错)。

效果

*先看效果如下,速度其实还可以(27Hz)用tensor rt部署以后当然肯定还是没有pointpillars快,pointpillars在工业界用的还是比较多的,但他的精度确实高不少。
在这里插入图片描述

意图

我们看到效果了,然后再看一下这篇文章作者主打的是什么。

在本文中,作者试图扩大Transformer的适用性,使其能够像在2D视觉中一样,成为户外3D感知的强大backbone。这个backbone是高效的便于部署,无需任何定制的CUDA操作。为了实现这一目标,他们提出了两个主要模块,一个是动态稀疏窗口注意力,以支持具有不同稀疏性的局部窗口的高效并行计算,另一个是一种新颖的可学习的3D池化操作,以对特征图进行下采样并更好地编码几何信息。

然后我们就知道了,主打一个高效和部署方便(从tensor rt的结果可以看出来),然后有两个模块,下面我们重点看的就是这两个模块。

重点

在这里插入图片描述

老样子先看图,如果把图看懂了就知道文章做了些什么了。

我们可以看到点云进去之后经过体素化成为稀疏体素(文章里面说用的voxel feature encoding (VFE) module,这个其实是voxelnet的做法,很简单可以去网上找,或者我先说一下也行。)

VoxelNet: End-to-End Learning for Point Cloud Based 3D Object Detection

在这里插入图片描述
所谓voxel feature encoding (VFE) module就长上面这个样子。

  1. 先对每一个体素的xyz求个均值,然后把每个点从4维的xyzr变成xyzr再加上xyz对各自均值的偏移,这7维度就是point-wise input
  2. 然后过fc把特征拉长到一个固定的维度得到point-wise feature
  3. 然后把拉长的特征过maxpool拿到一个局部聚合的特征(locally aggregated feature)
  4. 然后把point-wise feature和locally aggregated feature直接concat到一起就得到了point-wise concatenated feature.

**好的然后我们接着上面的图来说,过了所谓VFE之后,每个点就变成了稀疏的voxel,对于这些voxel我们可以把他们视为一个一个的Token,然后这些稀疏体素会过X-Axis DSVT Layer,Self-Attention,Y-Axis DSVT Layer,Self-Attention,堆叠几个block后过bev backbone ,用预测头出结果。**整体流程就是这样

X-Axis DSVT Layer

我们再来看一下这一层做了些什么,在 X-Axis DSVT 层,稀疏体素将被分成 X-Axis 主顺序的一系列窗口有界和大小等效子集,并在每个集合中计算自注意力。在下一层,将集合分区切换到 Y-Axis,提供先前集合之间的连接。
在这里插入图片描述

我们可以看到稀疏体素沿着X方向,每固定数目个为一个set被分成了S个,然后送去做self-attenetion,但是我们知道自注意力操作的输入数量和维度都是固定的,数量不够的用mask token做填充。然后就该Y-Axis DSVT Layer了。

Y-Axis DSVT Layer

在这里插入图片描述
我们可以看到一样的操作,只是排序的方向换了一下,改成按Y轴进行排序了。要注意的是在流程图上,是一个一个窗口来的,在窗口内部对体素进行的划分。

其实到这里已经可以了,不过我们也可以再更加详细的按公式来看一看每个步骤具体是怎么做的。

Dynamic Sparse Window Attention

Dynamic set partition

为了在每个窗口内的给定稀疏体素之间执行标准注意,我们将其重新表述为在一系列窗口有界(window-bounded)和大小等效(size-equivalent)子集中的并行计算自我注意。具体来说,在将点转换为 3D 体素后,它们被进一步划分为大小为 L × W × H 的非重叠 3D 窗口列表。。对于特定的窗口,它有 N 个非空体素。

先上公式:
在这里插入图片描述

从里面看(x,y,z)是稀疏体素的坐标,,f是稀疏体素的特征(维度是c),d是inner-window voxel ID,这个id是根据排序策略生成的。

为了生成非重叠和大小相等的局部集,我们首先计算该窗口中所需的子集数量,如下所示:

在这里插入图片描述
where ⌊·⌋ is the floor function (向下取整操作),and I[·] is the indicator function(指示函数是定义在集合上的函数, 用来表示其中有哪些元素属于它的子集 ,就是符合后面这个操作的集和).τ是一个超参数,表示分配给每个集合的非空体素的最大数量。这个S呢就是我们一个窗口中子集的数量,是一个数字。

通过这种方式,我们可以用最少的子集覆盖该窗口中的所有体素。值得注意的是,S 随窗口的稀疏性动态变化。非空体素越多,将分配更多的集合和计算资源来处理这个窗口,这是动态稀疏窗口注意的关键设计。

然后要怎么做呢?
在这里插入图片描述

我们知道了分配的集和 S 的数量后将 N 个非空体素均匀分布到 S 个集合中。具体来说,对于属于第 j 个集合的体素索引,我们计算其第 k 个索引按上面来。该操作可以为每个集和生成特定数量的体。

在获得第j个集合的分区Qj之后,我们基于体素内窗id D={di}N i=1得到相应的体素特征和坐标,如下所示,
在这里插入图片描述
其中 INDEX(·voxels, ·partition, ·ID) 是索引操作,Fj ∈ Rτ ×C 和 Oj ∈ Rτ ×3 是该集合的相应体素特征和空间坐标 (x, y, z)。
这里可能需要给大家整理一下INDEX() 这个函数里面的V,是从公式一中来的;Qj是从公式三(和公式二)中来的,最后的D,是从公式一中的ID部分来,这下应该清楚了。
在这里插入图片描述

通过这种方式,我们获得了一些具有相同数量稀疏体素的非重叠和窗口有界子集。值得注意的是,我们的动态集合划分高度依赖于内窗体素ID,因此我们可以通过不同排序策略的体素ID重新排序来轻松控制每个集合的覆盖局部区域。

Rotated set attention for intra-window feature propagation.

在这里插入图片描述
这部分就是上面block部分的公式化表述了,也没什么好说的大家都能看懂应该。

Hybrid window partition for inter-window feature propagation.

用来swin-transformer,使用两个连续DSVT块之间的窗口移位技术来重新划分稀疏窗口,但它们的窗口大小不同。通过这种设计,可以在不牺牲性能的情况下有效地节省计算成本。也没什么好说的。

Attention-style 3D Pooling

这个操作也比较简单。给一个局部的区域,首先会对稀疏体素进行填充操作把他变成稠密的,然后沿体素的维度做标准最大池化
在这里插入图片描述
然后就是,最大池化过的用来做Q,没经过最大池化的稠密体素做kv.
在这里插入图片描述
他自己说效果更好“With this attention-style 3D pooling operation, our 3D backbone holds the characteristic of fully attention and achieves better performance than our pillar variant.”

剩下的部分和实验就不是很精华了,大家可以自己看

非重点

在这里插入图片描述
在这里插入图片描述

最后呢吹一下水就是这样。“在本文中,我们提出了DSVT,这是一种部署友好但功能强大的仅用于3D感知的变压器主干。为了有效地处理稀疏点云,我们引入了动态稀疏窗口注意力,这是一种新的注意力策略,它将所有稀疏体素划分为一系列大小等效和窗口有界的子集,这些子集可以并行处理,而无需任何定制的CUDA操作。因此,我们提出的DSVT可以通过优化良好的NVIDIA TensorRT来加速,它在各种3D感知基准上以实时运行速度实现了最先进的性能。我们希望我们的DVST不仅可以成为现实世界应用中3D感知的可靠点云处理器,还可以为在其他任务中有效处理稀疏数据提供潜在的解决方案。”

相关文章:

【CVPR 2023】DSVT: Dynamic Sparse Voxel Transformer with Rotated Sets

文章目录 开场白效果意图 重点VoxelNet: End-to-End Learning for Point Cloud Based 3D Object DetectionX-Axis DSVT LayerY-Axis DSVT Layer Dynamic Sparse Window AttentionDynamic set partitionRotated set attention for intra-window feature propagation.Hybrid wind…...

MySQL超入门(1)__迅速上手掌握MySQL

# 1.选择语句 # 注意事项:MySQL不区分大小写,SELECT * 代表选择全部 // 测试一 USE sql_store; -- 使用 sql_store库 SELECT * FROM customers -- 查询customers表 WHERE customer_id 1 OR customer_id 4 -- 条件判断为customer_id 1或customer_id …...

四、浏览器渲染过程,DOM,CSSDOM,渲染,布局,绘制详细介绍

知识点: 1、为什么不能先执行 js文件?? 我们不能先执行JS文件,必须等到CSSOM构建完成了才能执行JS文件,因为前面已经说过渲染树是需要DOM和CSSOM构建完成了以后才能构建,而且JS是可以操控CSS样式的&#…...

2021-06-10 51单片机设计一个蜂鸣器报警电路每秒

缘由求助一下谢谢啦51单片机_嵌入式-CSDN问答设计一个蜂鸣器报警电路,按下K1,蜂鸣器响一声,按下K2,蜂鸣器响三声,按下K3,蜂鸣器长鸣。要求响声和间隔的时间均为1秒,长鸣不限时,但是此时应设置一…...

D‘Agostino-Pearson正态检验|偏度skewness和峰度kurtosis

DAgostino-Pearson检验(也称为DAgostino和Pearson正态性检验)是一种用于检验数据是否符合正态分布的统计检验方法。它基于数据的样本统计量,主要包括偏度(skewness)和峰度(kurtosis)&#xff0c…...

基于树莓派CM4制作img系统镜像批量制作TF卡

文章目录 前言1. 环境与工具2. 制作镜像3. 烧录镜像4. 总结 前言 树莓派烧录完系统做定制化配置比较费时间。在面对大批量的树莓派要配置,那时间成本是非常巨大的。第一次配置完可以说是摸着石头过河,但是会弄了以后再配置,都是一些重复性操…...

【中秋国庆不断更】OpenHarmony组件内状态变量使用:@State装饰器

State装饰的变量,或称为状态变量,一旦变量拥有了状态属性,就和自定义组件的渲染绑定起来。当状态改变时,UI会发生对应的渲染改变。 在状态变量相关装饰器中,State是最基础的,使变量拥有状态属性的装饰器&am…...

【Java 进阶篇】MySQL多表关系详解

MySQL是一种常用的关系型数据库管理系统,它允许我们创建多个表格,并通过各种方式将这些表格联系在一起。在实际的数据库设计和应用中,多表关系是非常常见的,它能够更好地组织和管理数据,实现数据的复杂查询和分析。本文…...

【开发篇】十、Spring缓存:手机验证码的生成与校验

文章目录 1、缓存2、用HashMap模拟自定义缓存3、SpringBoot提供缓存的使用4、手机验证码案例完善 1、缓存 缓存是一种介于数据永久存储介质与数据应用之间的数据临时存储介质使用缓存可以有效的减少低速数据读取过程的次数(例如磁盘IO),提高…...

【Aurora 8B/10B IP(1)--初步了解】

Aurora 8B/10B IP(1)–初步了解 1 Aurora 8b/10b IP的基本状态: •通用数据通道吞吐量范围从480 Mb/s到84.48 Gb/s •支持多达16个连续粘合7GTX/GTH系列、UltraScale™ GTH或UltraScale+™ GTH收发器和4绑定GTP收发器 •Aurora 8B/10B协议规范v2.3顺从的 •资源成本低(请参…...

C++ vector容器的介绍与使用

一、vector简介 std::vector 是 C 标准模板库 (STL) 中的一个动态数组容器。允许存储元素(可以使用任何数据类型作为其元素类型)集合,并能够动态调整其大小。 特点: 动态大小:与常规数组不同,vector 可以…...

openstack的组成

OpenStack 是一个开源的云计算平台,由一系列组件构成,各组件之间相互协作,提供了完整的基础设施即服务(IaaS)解决方案。下面详细解释了 OpenStack 的主要组件及其相互关系: Nova(计算服务&…...

[React] React高阶组件(HOC)

文章目录 1.Hoc介绍2.几种包装强化组件的方式2.1 mixin模式2.2 extends继承模式2.3 HOC模式2.4 自定义hooks模式 3.高阶组件产生初衷4.高阶组件使用和编写结构4.1 装饰器模式和函数包裹模式4.2 嵌套HOC 5.两种不同的高阶组件5.1 正向的属性代理5.2 反向的继承 6.如何编写高阶组…...

【逐步剖C++】-第二章-C++类和对象(中)

前言:本章继【逐步剖C】-第二章-C类和对象(上)介绍有关类和对象更深层次的知识点,这里是文章导图: 本文较长,内容较多,大家可以根据需求跳转到自己感兴趣的部分,希望能对读者有一些帮…...

PL/SQL动态SQL

目录 1. 动态 sql 2. 带参数的动态 sql -- 不使用 USING 传参 1. 动态 sql -- 在 PL/SQL 程序开发中,可以使用 DML 语句,但是很多语句(如 DDL),不能直接在 PL/SQL中执行,这些语句可以使用动态 sql 来实现. 语法格式: EXECUTE IMMEDIATE --动态语句的字符串 [into 变量…...

Python绘图系统24:添加辅助坐标轴

文章目录 辅助坐标增减坐标轴时间轴**代码优化源代码 Python绘图系统: 前置源码: Python打造动态绘图系统📈一 三维绘图系统 📈二 多图绘制系统📈三 坐 标 轴 定 制📈四 定制绘图风格 📈五 数据…...

Java自学网站--十几个网站的分析与评测

原文网址:Java自学网站--十几个网站的分析与评测_IT利刃出鞘的博客-CSDN博客 简介 很多想学Java的人不知道怎样选教程,本文对Java自学网站进行评测。 本文不带主观倾向,只客观分析各个网站的区别。 第1类:大型培训机构(黑马等…...

java接口怎么写

Java接口是一种定义规范的抽象类型,可以包含常量和方法的声明。接口在Java编程中具有重要的作用,可以实现代码的重用和灵活性。本文将详细介绍Java接口的编写方式和使用方法。 一、什么是Java接口 在Java中,接口(Interface&…...

第8章 Spring(二)

8.11 Spring 中哪些情况下,不能解决循环依赖问题 难度:★★ 重点:★★ 白话解析 有一下几种情况,循环依赖是不能解决的: 1、原型模式下的循环依赖没办法解决; 假设Girl中依赖了Boy,Boy中依赖了Girl;在实例化Girl的时候要注入Boy,此时没有Boy,因为是原型模式,每次都…...

从0开始python学习-24.selenium 浏览器常见的操作

1. 浏览器的最大化/最小化:maximize_window () / minimize_window() 2. 设置浏览器的宽高:set_window_size() 3. 设置浏览器的位置:set_window_position(0,0) —》左上角为原点 4. 刷新:refresh() 5. 前进:forward() 6…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

网站指纹识别

网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...

接口自动化测试:HttpRunner基础

相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具,支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议,涵盖接口测试、性能测试、数字体验监测等测试类型…...

基于PHP的连锁酒店管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发,数据库mysql,前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...

学习一下用鸿蒙​​DevEco Studio HarmonyOS5实现百度地图

在鸿蒙(HarmonyOS5)中集成百度地图,可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API,可以构建跨设备的定位、导航和地图展示功能。 ​​1. 鸿蒙环境准备​​ ​​开发工具​​:下载安装 ​​De…...

mac:大模型系列测试

0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何,是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试,是可以跑通文章里面的代码。训练速度也是很快的。 注意…...

Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践

在 Kubernetes 集群中,如何在保障应用高可用的同时有效地管理资源,一直是运维人员和开发者关注的重点。随着微服务架构的普及,集群内各个服务的负载波动日趋明显,传统的手动扩缩容方式已无法满足实时性和弹性需求。 Cluster Auto…...