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应用系统很常见,比如很多网站注册的时候需要上传头像、上传附件等等。当用户点击上传按钮后,后台会对上传的文件进行判断 比如是否是指定的类型、后缀名、大小等等,然后将其按…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...
【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
蓝桥杯 冶炼金属
原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...
2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...
【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制
使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...
