ICCV 2023 | Ada3D: 利用动态推理挖掘3D感知任务中数据冗余性

2024-03-08 00:40

本文主要是介绍ICCV 2023 | Ada3D: 利用动态推理挖掘3D感知任务中数据冗余性,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

点击蓝字

ce7cb6b3c8235dc1d1836ade58ab94bf.jpeg

关注我们

AI TIME欢迎每一位AI爱好者的加入!

以下内容来源于将门创投

adad70b3cd943ca2de5097b0e7a957db.png

作者:赵天辰

机构:清华大学电子工程系 

研究方向:硬件友好的高效深度学习

论文标题:Ada3D : Exploiting the Spatial Redundancy with Adaptive Inference for Efficient 3D Object Detection

论文地址:https://arxiv.org/abs/2307.08209

0. 背景与动因

3D检测(3D Detection)任务是自动驾驶任务中的重要任务。由于自动驾驶任务的安全性至关重要(safety-critic),对感知算法的延迟与准确性都有很高的要求,然而,由于车载计算平台一般硬件资源受限(由于价格和能耗的限制,典型平台为边缘嵌入式计算平台,相较于常用的消费级GPU,计算与显存资源都更为受限制)。为实现上述需求,感知模型的效率存在提升的需求。

基于稀疏体素(Sparse Voxel)的3D检测方法因为其优异性能获得了广泛关注。通过将空间分为规则的小方格(体素,3D的像素),将不规则点云转化为规整的稀疏体素表征,采用3D稀疏卷积算子对其进行特征提取。

b5cb0a9bd2cbd071144f8e7a94583a3a.png

然而,其存在着硬件效率相对较低的问题,如下图所示,即使3D稀疏卷积只有原本稠密卷积的1/7计算量,却需要1.3x的执行时间。

92c608a80e831ebba71bb72d48e7043c.png

典型的基于体素的3D检测器的框架如下所示,主要包含两大部分,分别在3D与2D域(Domain)进行处理。首先将点云体素化为体素表征,采用3D稀疏卷积的3D Backbone提取特征。经过一个3D转2D的投影(在Z轴做Average Pooling)转化为稠密的2D BEV(Bird-Eye-View 表征)。

b775bc0175b900855d06d328f17bdd92.png

研究者发现,除了现有3D感知模型效率优化工作所关注的模型**冗余性**之外,**数据冗余性**是提升3D感知方法效率的一个重要方面。

针对3D体素空间,存在着大量的冗余背景点,以及接近传感器中心过稠密的冗余点;针对2D鸟瞰图(BEV)空间,由于其由3D体素投影得到,其中大多数(80%以上)位置的像素值为0。在现有方法中,大量的计算和存储被浪费在了这些冗余的数据之中。

研究者进行了验证实验以说明3D检测任务中输入冗余性,如下图所示。当随机从输入点云中删除约30%的点时(蓝色曲线),仅造成了小于0.5的mAP损失。若从不在ground-truth bounding box中删除点(橙色曲线,删除的点可近似看做对3d检测任务无信息损失),及时丢失了70%的点,仍然没有明显的精度损失。以上实验结果展示了**输入点云存在较大的冗余性,有压缩与优化空间**

e9beb2f23844a85144bac9f5dd58bc88.png

1. 方法描述

基于此动因,提出了**基于动态推理的效率优化框架 - Ada3D**,让模型在推理中识别出冗余部分,并自适应的跳过其计算存储,以减少模型计算资源优化。在无精度损失的情况下,Ada3D方法能减少40%的3D体素与80%的2D像素,获得等效约5x的计算量(FLOPs)与内存(Memory)优化。并在实际硬件测试中展示约1.5x的延迟(Latency)优化与2.2x的峰值内存(Peak Memory)优化。

166d3ca3b4356749736e7f3fa9d77b63.png

论文提出的Ada3D动态推理框架主要包含以下3个部分,方法框架图见下:

(1) 一个共享的轻量化BEV空间像素重要性预测器

(2) 考虑点云密度先验的空间过滤方法

(3) 保持稀疏性的批归一化

ea7d784daf4dbe87e081796de1beea10.png

1.1 BEV空间重要性预测器 (BEV-space Importance Predictor)

我们在模型的3D骨干与2D骨干网络的多个位置应用了一个共享的BEV空间的预测器,该预测器将模型的特征映射到每个像素的相对重要性程度。如下图所示,我们采用了CenterPoint模型中的基于物体中心的热力图(Center-based Object Heatmap)来作为预测器需要拟合的目标。以每个ground-truth bounding box的中心为中心,在周围以球状高斯函数渲染。通过学习,预测器能够从输入特征中识别出“出现识别目标”的概率。预测器由5层的高效组卷积(Group Convolution)组成,且处理低分辨率的特征,整个预测器的计算代价少于原本模型的1%,仅引入了极少的额外计算。

2a06166fa66b1dc712166882dc56dacf.png

该重要性预测器能够较好的预测出各输入点的重要性程度,如下图所示,橙色代表着预测器输出置信度较高的区域,基本识别出了Boudning Box周围的点。

97f2f8480150bedf0e88f1aec860fef9.png

1.2 考虑点云密度先验的空间过滤方法 (Density-guided Spatial Filtering)

激光雷达所产生的点云有着独特的特性,如下图左图所示,距离传感器中心近处的点更加稠密,而远处的点则较为稀疏。该现象可能会导致预测器更倾向于对近处的点给出更高的置信度预测,从而忽视远处的物体。因此,我们引入了基于密度先验的空间过滤方法,同时考虑预测器分数与点云的密度,以补偿远处稀疏部分的点。

89024e8e3d16cf35fb124522a152a9e5.png

引入了密度先验后,能够显著的提升空间过滤的准确度。以下图为例,在左下角重要性预测器的输出中,远处较为稀疏的Box1与Box5并无较高的置信度,而经过密度矫正之后的热力图中,能够识别出Box1与Box5.

1218054b5057a2f6a50f9652ea50d44a.png

定量来看,对比引入密度先验前后所丢弃输入的“在box中的比例”,密度先验能够减少错误丢弃box中的点,进而减少精度损失。

0ae0722d57d23ec2bdcc646f30c6348f.png

1.3 保持稀疏性的批归一化 (Sparsity-Preserving Batch Normalization)

在基于体素的3D检测器中,2D的BEV特征是由稀疏的3D体素所投影得到。因此,很大部分的像素点的位置是背景,具有0值(如下图中的蓝色部分)。但是,经过第一次批归一化层之后,特征图将失去稀疏度。为保持2D特征图的稀疏图以进行稀疏加速,我们对原本的批归一化进行了改进,设计了一种“维持稀疏性的批归一化方法”(Sparsity-preserving Batch Normalization),跳过了归一化中减均值的操作,能够在不减少性能的前提下维持2D特征图的稀疏度。

177c6e54e5c725d30a78bd9fdc4e8887.png

 2. 实验分析

2.1 算法加速比分析

我们在KITTI,nuScenes,ONCE等公开数据集上测试了Ada3D的加速效果。如下图所示:

a4ab7a901adb65be0c6ab513a0f0a2b5.png

579cc6738cff247b614a1210dfd854bf.png

065f8e07588f641c26de4c054b747e07.png

在KITTI数据集上,当加速策略较为保守时(Ada3D-A),甚至能提升模型的性能。

在无精度损失情况下(Ada3D-B),能获得约5倍的计算和存储(FLOPs/Memory)优化。在少量精度损失(Ada3D-C, <1mAP)下,能够获得约一个数量级(10x)的计算存储优化。

f813727abe431ee0a2b42af3f05e5758.png

 2.2 硬件效率分析

除了理论加速比之外,我们面向Nvidia GPU平台对Ada3D算法进行了实测。测试环境为:RTX3090,CUDA-11.1,SPConv v2.2.6 Gather Scatter GEMM dataflow。如下图所示,从硬件测试中,我们能归纳出以下结论:

(1) 对于voxel-based 3d detector,加速2D部分与加速3D部分都很重要,2D BEV bakcbone的实际耗时与内存消耗占比,比3D部分更高。

(2) 理论的计算存储加速比(5x),与实际的硬件加速比存在较大的gap(1.5x/2.2x)。针对该现象,我们进一步分析其原因在于稀疏卷积的加速比与稀疏比的增加并不线性。当稠密度较高时候(20%),采用稀疏卷积相比稠密计算加速比不高。在3D检测模型场景中,3D部分数据由于已经有较高的稀疏度,因此稀疏比增加能近乎线性的反映到实际加速比。而2D部分,由于是从全稠密增加稀疏度,加速比增长比稀疏度增长更慢。

3c83ff734d7ccee8408011825c99adcf.png

2.3 应用分析

Ada3D方法关注压缩数据层面冗余性,与关注模型冗余性的压缩方法可进行组合。如下图所示,Ada3D可以进一步对SPVNAS所搜索出的高效模型,或者是新颖设计的全稀疏模型,进行进一步的冗余性压缩。

3fd4d9f86b888c656ac4135ceb6ae48d.png

3. 总结

针对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)的软硬件协同优化方法,请关注我们的实验室主页:https://nicsefc.ee.tsinghua.edu.cn/

 (欢迎访问同学交流学习)

提醒

点击“阅读原文”跳转到01:23:17

可以查看回放哦!

往期精彩文章推荐

bb032d6239564c51a1f212535e58b9c2.jpeg

记得关注我们呀!每天都有新知识!

 关于AI TIME 

AI TIME源起于2019年,旨在发扬科学思辨精神,邀请各界人士对人工智能理论、算法和场景应用的本质问题进行探索,加强思想碰撞,链接全球AI学者、行业专家和爱好者,希望以辩论的形式,探讨人工智能和人类未来之间的矛盾,探索人工智能领域的未来。

迄今为止,AI TIME已经邀请了1100多位海内外讲者,举办了逾550场活动,超600万人次观看。

fefc69dc5b1459c0417ecf20db62462e.png

我知道你

在看

~

a10f151fa4674db503d37249d7e018d0.gif

点击 阅读原文 观看回放!

这篇关于ICCV 2023 | Ada3D: 利用动态推理挖掘3D感知任务中数据冗余性的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/785392

相关文章

MySQL 中查询 VARCHAR 类型 JSON 数据的问题记录

《MySQL中查询VARCHAR类型JSON数据的问题记录》在数据库设计中,有时我们会将JSON数据存储在VARCHAR或TEXT类型字段中,本文将详细介绍如何在MySQL中有效查询存储为V... 目录一、问题背景二、mysql jsON 函数2.1 常用 JSON 函数三、查询示例3.1 基本查询3.2

SpringBatch数据写入实现

《SpringBatch数据写入实现》SpringBatch通过ItemWriter接口及其丰富的实现,提供了强大的数据写入能力,本文主要介绍了SpringBatch数据写入实现,具有一定的参考价值,... 目录python引言一、ItemWriter核心概念二、数据库写入实现三、文件写入实现四、多目标写入

SpringQuartz定时任务核心组件JobDetail与Trigger配置

《SpringQuartz定时任务核心组件JobDetail与Trigger配置》Spring框架与Quartz调度器的集成提供了强大而灵活的定时任务解决方案,本文主要介绍了SpringQuartz定... 目录引言一、Spring Quartz基础架构1.1 核心组件概述1.2 Spring集成优势二、J

MySQL中动态生成SQL语句去掉所有字段的空格的操作方法

《MySQL中动态生成SQL语句去掉所有字段的空格的操作方法》在数据库管理过程中,我们常常会遇到需要对表中字段进行清洗和整理的情况,本文将详细介绍如何在MySQL中动态生成SQL语句来去掉所有字段的空... 目录在mysql中动态生成SQL语句去掉所有字段的空格准备工作原理分析动态生成SQL语句在MySQL

使用Python将JSON,XML和YAML数据写入Excel文件

《使用Python将JSON,XML和YAML数据写入Excel文件》JSON、XML和YAML作为主流结构化数据格式,因其层次化表达能力和跨平台兼容性,已成为系统间数据交换的通用载体,本文将介绍如何... 目录如何使用python写入数据到Excel工作表用Python导入jsON数据到Excel工作表用

Mysql如何将数据按照年月分组的统计

《Mysql如何将数据按照年月分组的统计》:本文主要介绍Mysql如何将数据按照年月分组的统计方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql将数据按照年月分组的统计要的效果方案总结Mysql将数据按照年月分组的统计要的效果方案① 使用 DA

鸿蒙中Axios数据请求的封装和配置方法

《鸿蒙中Axios数据请求的封装和配置方法》:本文主要介绍鸿蒙中Axios数据请求的封装和配置方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.配置权限 应用级权限和系统级权限2.配置网络请求的代码3.下载在Entry中 下载AxIOS4.封装Htt

Redis实现延迟任务的三种方法详解

《Redis实现延迟任务的三种方法详解》延迟任务(DelayedTask)是指在未来的某个时间点,执行相应的任务,本文为大家整理了三种常见的实现方法,感兴趣的小伙伴可以参考一下... 目录1.前言2.Redis如何实现延迟任务3.代码实现3.1. 过期键通知事件实现3.2. 使用ZSet实现延迟任务3.3

Java调用C++动态库超详细步骤讲解(附源码)

《Java调用C++动态库超详细步骤讲解(附源码)》C语言因其高效和接近硬件的特性,时常会被用在性能要求较高或者需要直接操作硬件的场合,:本文主要介绍Java调用C++动态库的相关资料,文中通过代... 目录一、直接调用C++库第一步:动态库生成(vs2017+qt5.12.10)第二步:Java调用C++

Linux中的计划任务(crontab)使用方式

《Linux中的计划任务(crontab)使用方式》:本文主要介绍Linux中的计划任务(crontab)使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、前言1、linux的起源与发展2、什么是计划任务(crontab)二、crontab基础1、cro