ICCV23 | Ada3D:利用动态推理挖掘3D感知任务中数据冗余性
论文地址:https://arxiv.org/abs/2307.08209
项目主页:https://a-suozhang.xyz/ada3d.github.io/
01. 背景与动因
3D检测(3D Detection)任务是自动驾驶任务中的重要任务。由于自动驾驶任务的安全性至关重要(safety-critic),对感知算法的延迟与准确性都有很高的要求,然而,由于车载计算平台一般硬件资源受限(由于价格和能耗的限制,典型平台为边缘嵌入式计算平台,相较于常用的消费级GPU,计算与显存资源都更为受限制)。为实现上述需求,感知模型的效率存在提升的需求。
基于稀疏体素(Sparse Voxel)的3D检测方法因为其优异性能获得了广泛关注。通过将空间分为规则的小方格(体素,3D的像素),将不规则点云转化为规整的稀疏体素表征,采用3D稀疏卷积算子对其进行特征提取。
然而,其存在着硬件效率相对较低的问题,如下图所示,即使3D稀疏卷积只有原本稠密卷积的1/7计算量,却需要1.3x的执行时间。
典型的基于体素的3D检测器的框架如下所示,主要包含两大部分,分别在3D与2D域(Domain)进行处理。首先将点云体素化为体素表征,采用3D稀疏卷积的3D Backbone提取特征。经过一个3D转2D的投影(在Z轴做Average Pooling)转化为稠密的2D BEV(Bird-Eye-View 表征)。
研究者发现,除了现有3D感知模型效率优化工作所关注的模型冗余性之外,数据冗余性是提升3D感知方法效率的一个重要方面。
针对3D体素空间,存在着大量的冗余背景点,以及接近传感器中心过稠密的冗余点;针对2D鸟瞰图(BEV)空间,由于其由3D体素投影得到,其中大多数(80%以上)位置的像素值为0。在现有方法中,大量的计算和存储被浪费在了这些冗余的数据之中。
研究者进行了验证实验以说明3D检测任务中输入冗余性,如下图所示。当随机从输入点云中删除约30%的点时(蓝色曲线),仅造成了小于0.5的mAP损失。若从不在ground-truth bounding box中删除点(橙色曲线,删除的点可近似看做对3d检测任务无信息损失),及时丢失了70%的点,仍然没有明显的精度损失。以上实验结果展示了输入点云存在较大的冗余性,有压缩与优化空间。
02. 方法描述
基于此动因,提出了基于动态推理的效率优化框架 - Ada3D,让模型在推理中识别出冗余部分,并自适应的跳过其计算存储,以减少模型计算资源优化。在无精度损失的情况下,Ada3D方法能减少40%的3D体素与80%的2D像素,获得等效约5x的计算量(FLOPs)与内存(Memory)优化。并在实际硬件测试中展示约1.5x的延迟(Latency)优化与2.2x的峰值内存(Peak Memory)优化。
论文提出的Ada3D动态推理框架主要包含以下3个部分,方法框架图见下:
(1) 一个共享的轻量化BEV空间像素重要性预测器
(2) 考虑点云密度先验的空间过滤方法
(3) 保持稀疏性的批归一化
2.1 BEV空间重要性预测器 (BEV-space Importance Predictor)
我们在模型的3D骨干与2D骨干网络的多个位置应用了一个共享的BEV空间的预测器,该预测器将模型的特征映射到每个像素的相对重要性程度。如下图所示,我们采用了CenterPoint模型中的基于物体中心的热力图(Center-based Object Heatmap)来作为预测器需要拟合的目标。以每个ground-truth bounding box的中心为中心,在周围以球状高斯函数渲染。通过学习,预测器能够从输入特征中识别出“出现识别目标”的概率。预测器由5层的高效组卷积(Group Convolution)组成,且处理低分辨率的特征,整个预测器的计算代价少于原本模型的1%,仅引入了极少的额外计算。
该重要性预测器能够较好的预测出各输入点的重要性程度,如下图所示,橙色代表着预测器输出置信度较高的区域,基本识别出了Boudning Box周围的点。
2.2 考虑点云密度先验的空间过滤方法 (Density-guided Spatial Filtering)
激光雷达所产生的点云有着独特的特性,如下图左图所示,距离传感器中心近处的点更加稠密,而远处的点则较为稀疏。该现象可能会导致预测器更倾向于对近处的点给出更高的置信度预测,从而忽视远处的物体。因此,我们引入了基于密度先验的空间过滤方法,同时考虑预测器分数与点云的密度,以补偿远处稀疏部分的点。
引入了密度先验后,能够显著的提升空间过滤的准确度。以下图为例,在左下角重要性预测器的输出中,远处较为稀疏的Box1与Box5并无较高的置信度,而经过密度矫正之后的热力图中,能够识别出Box1与Box5。
定量来看,对比引入密度先验前后所丢弃输入的“在box中的比例”,密度先验能够减少错误丢弃box中的点,进而减少精度损失。
2.3 保持稀疏性的批归一化 (Sparsity-Preserving Batch Normalization)
在基于体素的3D检测器中,2D的BEV特征是由稀疏的3D体素所投影得到。因此,很大部分的像素点的位置是背景,具有0值(如下图中的蓝色部分)。但是,经过第一次批归一化层之后,特征图将失去稀疏度。为保持2D特征图的稀疏图以进行稀疏加速,我们对原本的批归一化进行了改进,设计了一种“维持稀疏性的批归一化方法”(Sparsity-preserving Batch Normalization),跳过了归一化中减均值的操作,能够在不减少性能的前提下维持2D特征图的稀疏度。
02. 实验分析
3.1 算法加速比分析
我们在KITTI,nuScenes,ONCE等公开数据集上测试了Ada3D的加速效果。如下图所示:
在KITTI数据集上,当加速策略较为保守时(Ada3D-A),甚至能提升模型的性能。
在无精度损失情况下(Ada3D-B),能获得约5倍的计算和存储(FLOPs/Memory)优化。在少量精度损失(Ada3D-C, <1mAP)下,能够获得约一个数量级(10x)的计算存储优化。
3.2 硬件效率分析
除了理论加速比之外,我们面向Nvidia GPU平台对Ada3D算法进行了实测。测试环境为:RTX3090,CUDA-11.1,SPConv v2.2.6 Gather Scatter GEMM dataflow。如下图所示,从硬件测试中,我们能归纳出以下结论:
-
对于voxel-based 3d detector,加速2D部分与加速3D部分都很重要,2D BEV bakcbone的实际耗时与内存消耗占比,比3D部分更高。
-
理论的计算存储加速比(5x),与实际的硬件加速比存在较大的gap(1.5x/2.2x)。
针对该现象,我们进一步分析其原因在于稀疏卷积的加速比与稀疏比的增加并不线性。当稠密度较高时候(20%),采用稀疏卷积相比稠密计算加速比不高。在3D检测模型场景中,3D部分数据由于已经有较高的稀疏度,因此稀疏比增加能近乎线性的反映到实际加速比。而2D部分,由于是从全稠密增加稀疏度,加速比增长比稀疏度增长更慢。
3.3 应用分析
Ada3D方法关注压缩数据层面冗余性,与关注模型冗余性的压缩方法可进行组合。如下图所示,Ada3D可以进一步对SPVNAS所搜索出的高效模型,或者是新颖设计的全稀疏模型,进行进一步的冗余性压缩。
04. 总结
针对3D感知任务中输入数据存在冗余性的问题,我们提出了基于动态推理的框架Ada3D,能够有效的在模型推理过程中通过去除冗余的输入数据,减少模型的计算和存储消耗。在典型的基于体素的3D检测器中,在不损失性能的前提下,我们能够去除约40%的3D体素与80%的2D像素,实现约5x的flops与memory优化,并在GPU设备上获得了1.5倍的延迟与2.2倍的峰值内存的优化。Ada3D方法能够与现有的模型压缩方法组合,且在专用硬件平台上有更高的效率优化空间。
有关Ada3D的更多信息,请关注我们的项目网站:https://a-suozhang.xyz/ada3d.github.io/。有关Ada3D的后续工作与其他算法(LLM,Diffusion)的软硬件协同优化方法,请关注我们的实验室主页:Home (欢迎访问同学交流学习)
作者:赵天辰
关于TechBeat人工智能社区
▼
TechBeat(www.techbeat.net)隶属于将门创投,是一个荟聚全球华人AI精英的成长社区。
我们希望为AI人才打造更专业的服务和体验,加速并陪伴其学习成长。
期待这里可以成为你学习AI前沿知识的高地,分享自己最新工作的沃土,在AI进阶之路上的升级打怪的根据地!
更多详细介绍>>TechBeat,一个荟聚全球华人AI精英的学习成长社区
相关文章:

ICCV23 | Ada3D:利用动态推理挖掘3D感知任务中数据冗余性
论文地址:https://arxiv.org/abs/2307.08209 项目主页:https://a-suozhang.xyz/ada3d.github.io/ 01. 背景与动因 3D检测(3D Detection)任务是自动驾驶任务中的重要任务。由于自动驾驶任务的安全性至关重要(safety-critic),对感知算法的延…...

软件工程模型-架构师之路(四)
软件工程模型 敏捷开发: 个体和交互 胜过 过程和工具、可以工作的软件 胜过 面面俱到的文件、客户合作胜过合同谈判、响应变化 胜过 循序计划。(适应需求变化,积极响应) 敏捷开发与其他结构化方法区别特点:面向人的…...

ubuntu20.04共享文件夹—— /mnt/hgfs里没有共享文件夹
参考文章:https://blog.csdn.net/Edwinwzy/article/details/129580636 虚拟机启用共享文件夹后,/mnt/hgfs下面为空,使用 vmware-hgfsclient 查看设置的共享文件夹名字也是为空。 解决方法: 1. 重新安装vmware tools. 在菜单…...

Redis中的有序集合及其底层跳表
前言 本文着重介绍Redis中的有序集合的底层实现中的跳表 有序集合 Sorted Set Redis中的Sorted Set 是一个有序的无重复值的集合,他底层是使用压缩列表和跳表实现的,和Java中的HashMap底层数据结构(1.8)链表红黑树异曲同工之妙…...

js 小程序限流函数 return闭包函数执行不了
问题: 调用限流 ,没走闭包的函数: checkBalanceReq() loadsh.js // 限流 const throttle (fn, context, interval) > {console.log(">>>>cmm throttle", context, interval)let canRun…...

【数据结构】堆的初始化——如何初始化一个大根堆?
文章目录 源码是如何插入的?扩容向上调整实现大根堆代码: 源码是如何插入的? 扩容 在扩容的时候,如果容量小于64,那就2倍多2的扩容;如果大于64,那就1.5倍扩容。 还会进行溢出的判断,…...

【韩顺平 零基础30天学会Java】程序流程控制(2days)
day1 程序流程控制:顺序控制、分支控制、循环控制 顺序控制:从上到下逐行地执行,中间没有任何判断和跳转。 Java中定义变量时要采用合法的前向引用。 分支控制if-else:单分支、双分支和多分支。 单分支 import java.util.Scann…...

从入门到精通Python隧道代理的使用与优化
哈喽,Python爬虫小伙伴们!今天我们来聊聊如何从入门到精通地使用和优化Python隧道代理,让我们的爬虫程序更加稳定、高效!今天我们将对使用和优化进行一个简单的梳理,并且会提供相应的代码示例。 1. 什么是隧道代理&…...

19万字智慧城市总体规划与设计方案WORD
导读:原文《19万字智慧城市总体规划与设计方案WORD》(获取来源见文尾),本文精选其中精华及架构部分,逻辑清晰、内容完整,为快速形成售前方案提供参考。 感知基础设施 感知基础设施架构由感知范围、感知手…...

[赛博昆仑] 腾讯QQ_PC端,逻辑漏洞导致RCE漏洞
简介 !! 内容仅供学习,请不要进行非法网络活动,网络不是法外之地!! 赛博昆仑是国内一家较为知名的网络安全公司,该公司今日报告称 Windows 版腾讯 QQ 桌面客户端出现高危安全漏洞,据称“黑客利用难度极低、危害较大”,腾讯刚刚已经紧急发布…...

python Requests
Requests概述 官方文档:http://cn.python-requests.org/zh_CN/latest/,Requests是python的HTTP的库,我们可以安全的使用 Requests安装 pip install Requests -i https://pypi.tuna.tsinghua.edu.cn/simple Requests的使用 Respose的属性 属性说明url响…...

【深入解析:数据结构栈的魅力与应用】
本章重点 栈的概念及结构 栈的实现方式 数组实现栈接口 栈面试题目 概念选择题 一、栈的概念及结构 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端 称为栈顶,另一端称为栈底。栈中的数…...

安卓机显示屏的硬件结构
显示屏的硬件结构 显示屏的硬件结构主要由背光源、液晶面板和驱动电路构成。可以将液晶面板看成一个三明治的结构,即在两片偏振方向互相垂直的偏光片系统中夹着一层液晶层。自然光源通过起偏器(偏光片之一)后,变成了垂直方向的偏…...

基于swing的超市管理系统java仓库库存进销存jsp源代码mysql
本项目为前几天收费帮学妹做的一个项目,Java EE JSP项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。 一、项目描述 基于swing的超市管理系统 系统有3权限:管…...

常用系统命令
重定向 cat aa.txt > bbb.txt 将输出定向到bbb.txt cat aaa.txt >> bbb.txt 输出并追加查看进程 ps ps -ef 显示所有进程 例⼦:ps -ef | grep mysql |:管道符 kill pid 结束进程, 如 kill 3732;根据进程名结束进程可以先…...

【Spring专题】Spring之Bean生命周期源码解析——阶段四(Bean销毁)(拓展,了解就好)
目录 前言阅读建议 课程内容一、Bean什么时候销毁二、实现自定义的Bean销毁逻辑2.1 实现DisposableBean或者AutoCloseable接口2.2 使用PreDestroy注解2.3 其他方式(手动指定销毁方法名字) 三、注册销毁Bean过程及方法详解3.1 AbstractBeanFactory#requir…...
配置Docker,漏洞复现
目录 配置Docker 漏洞复现 配置Docker Docker的配置在Linux系统中相对简单,以下是详细步骤: 1.安装Docker:打开终端,运行以下命令以安装Docker。 sudo apt update sudo apt install docker.io 2.启动Docker服务:运…...

微信小程序 游戏水平评估系统的设计与实现_pzbe0
近年来,随着互联网的蓬勃发展,游戏公司对信息的管理提出了更高的要求。传统的管理方式已无法满足现代人们的需求。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,随着各行业的不断发展,使命召…...
moba登录不进去提示修改问题问题解决方式
问题: 安装moba后,运行时运行不起来,提示输入密码,安装、卸载多个版本都不行 方法: 使用ResetMasterPassword工具进行重置主密码 官网下载地址: MobaXterm Xserver and tabbed SSH client - resetmaster…...

Unsafe upfileupload
文章目录 client checkMIME Typegetimagesize 文件上传功能在web应用系统很常见,比如很多网站注册的时候需要上传头像、上传附件等等。当用户点击上传按钮后,后台会对上传的文件进行判断 比如是否是指定的类型、后缀名、大小等等,然后将其按…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...

初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖
在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会࿰…...

Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...

【 java 虚拟机知识 第一篇 】
目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...

GraphRAG优化新思路-开源的ROGRAG框架
目前的如微软开源的GraphRAG的工作流程都较为复杂,难以孤立地评估各个组件的贡献,传统的检索方法在处理复杂推理任务时可能不够有效,特别是在需要理解实体间关系或多跳知识的情况下。先说结论,看完后感觉这个框架性能上不会比Grap…...
js 设置3秒后执行
如何在JavaScript中延迟3秒执行操作 在JavaScript中,要设置一个操作在指定延迟后(例如3秒)执行,可以使用 setTimeout 函数。setTimeout 是JavaScript的核心计时器方法,它接受两个参数: 要执行的函数&…...

qt+vs Generated File下的moc_和ui_文件丢失导致 error LNK2001
qt 5.9.7 vs2013 qt add-in 2.3.2 起因是添加一个新的控件类,直接把源文件拖进VS的项目里,然后VS卡住十秒,然后编译就报一堆 error LNK2001 一看项目的Generated Files下的moc_和ui_文件丢失了一部分,导致编译的时候找不到了。因…...

RushDB开源程序 是现代应用程序和 AI 的即时数据库。建立在 Neo4j 之上
一、软件介绍 文末提供程序和源码下载 RushDB 改变了您处理图形数据的方式 — 不需要 Schema,不需要复杂的查询,只需推送数据即可。 二、Key Features ✨ 主要特点 Instant Setup: Be productive in seconds, not days 即时设置 :在几秒钟…...