平均7倍实测加速,MIT提出高效、硬件友好的三维深度学习方法
moboyou 2025-05-18 14:32 42 浏览
机器之心发布
机器之心编辑部
随着三维深度学习越来越成为近期研究的热点,基于栅格化的数据处理方法也越来越受欢迎。但这种处理方法往往受限于高分辨下巨大的内存和计算开销,因此麻省理工学院 HAN Lab 的研究者提出利用 Point-Voxel CNN 来实现高效的三维深度学习,同时能够避免巨大的数据访问开销并很好地提升了局部性。该论文已被 NeurIPS 2019 接收为 Spotlight Presentation。
- 网站:http://pvcnn.mit.edu
- 论文: https://arxiv.org/pdf/1907.03739.pdf
摘要
随着传感器技术的发展和大量新兴应用场景(AR/VR/自动驾驶)的出现,三维深度学习成为了近期的研究热点。三维数据往往以点云的方式存储,近年来,研究人员抑或是选择先将点云离散化成结构化的、规整的栅格形式(voxels,可以类比 2D 的像素 pixels),再利用体素卷积神经网络(volumetric CNNs,可以看作 2D CNN 的三维推广)对栅格数据进行处理;抑或是选择直接在点云数据上进行卷积计算。
基于栅格化数据的处理方法往往受限于其在高分辨率下巨大的内存和计算开销:从复杂度的意义上说,volumetric CNNs 的运算量和内存占用都和栅格的分辨率的三次方成正比,导致 volumetric CNNs 无法和 2D CNN 一样处理高分辨率的输入。而对于直接在点云上进行深度学习的方法,尽管点云表示大大减少了存储空间上的占用,但要在稀疏的、非结构化的点云数据上进行卷积却绝非易事。
我们发现之前的工作竟需要花 80% 以上的时间进行对数据的不规则访问以作为卷积运算的准备工作,而实际计算所占的时间比例却非常低,这无疑造成了基于点云的深度学习方法往往比较低效。为解决这样的问题,我们提出了 Point-Voxel CNN(PVCNN)来实现高效的三维深度学习。PVCNN 利用点云的形式来存储数据,以减小内存的消耗,而又选择栅格化的形式进行卷积,这样可以避免处理点云稀疏性所带来的巨大的非规则数据访问开销,很好地提升局部性。这种取长补短的设计使我们的 PVCNN 在内存和计算上都十分高效:我们只用十分之一的内存就可以取得远高于 volumetric CNN baseline 的准确率,而对比于多个基于点云直接进行深度学习的方法,我们又可以得到平均 7 倍的实测加速。
PVCNN 同时展现了在嵌入式、端计算设备上部署的潜力:通过缩小 PVCNN 的通道数得到的小模型往往可以在三维语义分割任务上比 PointNet(一个极其高效的模型)快两倍,却达到它性能更加强大的续作 PointNet++的精确度。我们也在与自动驾驶密切相关的三维物体检测任务中验证了我们方法的有效性。基于我们 Frustum-PVCNN 的模型平均相对 Frustum-PointNet++有 2.4% 的 mAP 提升,同时还有 1.5 倍的加速与内存节省。相关工作已经被 Neural Information Processing Systems 2019 接收为 Spotlight Presentation,我们将在 12 月 10 日于温哥华宣讲我们的工作。
背景
三维深度学习在近期研究中取得很大进展。然而,之前的工作更关注如何提升三维深度学习计算子的表征能力,却鲜有研究致力于提升三维深度学习方法的效率。
从计算机硬件的角度看,对于存储器的访问往往对算法的效率有着决定性的影响。下面的左图显示,在硬件上,片下的 DRAM 访存能量消耗比片上的 SRAM 访问或者一次浮点乘加计算贵两个数量级,而 DRAM 访问的带宽也远小于片上资源或是运算资源(这导致了访存可能带来高延时);另一方面,下面的右图揭示了在 DDR 内存中非规则访存带来的危害:频繁的板块冲突(bank conflict)导致数据无法在一个时钟周期内被连续从不同内存板块(bank)中读出,从而进一步提升访存带来的延时。
因此,为使得三维深度学习方法更加高效,我们需要避免大量访存和不规则访存。
对于 2016 年前后被大量研究的基于栅格的三维深度学习方法,制约其效率的掣肘是随分辨率三次方增加的内存/计算渐进复杂度。栅格作为一种类似二维像素的离散化表征形式,其不可避免的困难是落在同一个格中的两个点将在栅格化后变得无法区分,从而导致信息丢失。我们在 ShapeNet 数据集上做了统计,发现如果要在一块 Titan Xp (12GB 显存) 上训练体素卷积神经网络,只能容纳分辨率为 64x64x64 的栅格输入,此时会有 42% 的信息损失(即只有 58% 的点是可区分的),而增加七倍的计算资源也只是能让可区分的点数勉强超过 90%。如前所述,这样的内存消耗是由栅格表征形式本身的复杂度所决定的。
基于点云的深度学习方法则不同,影响其效率的实际上是不规则访存。我们知道,点云上的每个点在三维空间里连续分布,而在内存上相邻的点在真正的三维空间里并不一定相邻。这就给卷积运算,这种定义在每个点邻域上的运算带来挑战。一方面,获得每个点的邻域需要大量的非规则数据访问;另一方面,由于三维空间的连续性,我们无法简单地通过类似 2D CNN 或 Volumetric CNN 的方式去定义一个基于查找表(Look-up Table)的卷积核,只能去动态定义卷积滤波器,这又会带来一些计算开销。
下图显示了我们的发现:之前最先进的基于点云的深度学习方法 DGCNN, PointCNN 和 SpiderCNN,往往需要 50%-80% 的时间进行非规则数据访问和动态卷积核计算,而实际计算的时间甚至可能低至 20% 以下。很显然,从运行时间的角度,基于点云的方法也具有极大的优化空间。
为此我们提出 Point-Voxel Convolution(PVConv)作为一种全新的、高效的三维深度学习计算子。如前所述,PVConv 仍使用点云形式存储数据,因而内存占用小,整体的访存量也小;另一方面,我们的 PVConv 在栅格表征下进行卷积;这样,我们大大省去了传统的基于点云的三维深度学习方法在进行卷积时难以避免的非规则内存访问及动态卷积核生成代价,从而获得上图所示的极高的实际计算比。
通过 2D CNN 般地重复 PVConv,我们可以得到 PVCNN——一个可用于多种三维计算机视觉任务的强大而高效的深度学习网络。我们在多个物体级别、室内场景级别以及室外场景中物体检测的任务中展示了 PVCNN 的有效性。
方法
Point-Voxel Convolution
我们选用两种 Irregular Access Cost 和 Dynamic Kernel Computation Cost 为零的子操作:多层感知机和栅格化卷积。下面我们将展示如何以很低的代价将两者有机结合并得到我们的 Point-Voxel Convolution 这种计算子。上图中上面的分支为基于栅格的信息聚合分支,其分辨率相对较低:
归一化:
输入点云的尺度往往会有一些差异,而我们希望在进行进行栅格化卷积时特征图的尺度是相同的,这就需要进行归一化。在我们的方法中,我们只在栅格分支局部地进行这种归一化操作:将输入点云缩放到单位球中,并通过 [-1, 1] 到 [0, r-1] 的坐标线性映射把点云坐标转成栅格坐标。
栅格化:
我们将点云表示局部地转换成栅格表示以便进行栅格化卷积。直观地,我们利用 Charles Qi 等人提出的对称函数建模同一栅格内的所有点:我们选择将栅格内所有点进行平均池化以得到代表某个栅格的最终特征。
信息整合:
我们在得到的栅格特征图上进行栅格卷积,以达到信息整合的目的。类似于 2D CNN 和普通的 Volumetric CNN,我们在每次栅格卷积后也通过批归一化(BatchNorm)和非线性激活函数(ReLU)。
反栅格化/点云化:
如前所述,栅格表征无可避免地会丢失一部分信息。为了保持点云始终处于高分辨率,我们需要通过反栅格化操作将栅格数据重新转换为点云。一个朴素的想法是直接给落在每个栅格内的点赋上其所在栅格的特征,然而,这样会导致同一栅格内点的特征完全相同。我们也可以选择三线性插值(Trilinear Interpolation)来根据每个点到相邻栅格格点的位置来决定其特征(由相邻的八个栅格点插值得到)。这样,我们可以保证每个点在反栅格化后的特征通常不相同。
上图中的下面分支为基于多层感知机的特征转换分支,它通过一层全连接层保持了点云处于高分辨率,这样的高分辨率信息可以为来自栅格化分支的低分辨率、邻域信息提供重要的补充。当我们得到了两个分支的信息后,我们可以简单地通过 elementwise addition 将它们整合起来,这就是一个完整的 PVConv 操作。
值得注意的是,PVConv 是一个非常高效的计算子。如前述,PVConv 显然得益于两个分支本身不存在非规则访存以及动态卷积核计算。而唯一引入额外开销的栅格化和反栅格化(朴素的)过程,其非连续访存的代价都是 O(n) 次,因为每个点只需要被访问一次;而对于一般的基于点云的三维深度学习计算子,进行一次邻域信息聚合首先要把每个点的邻域信息取来,这里就有 O(kn) 次的非连续内存访问,k 是邻域中的点数,往往在 16 到 64。很显然,PVConv 大大减小了非连续内存访问。另外一方面,PVConv 并不需要像基于点云的三维深度学习计算子那样去计算每个点的邻域,这也大大降低了额外开销。
从宏观上看,我们的 PVConv 中每个步骤都是可导的,并且它的输入和输出都是点云。所以从梯度流的角度看,PVConv 和一般的直接基于点云的三维深度学习计算子一样,既可以通过自身堆叠形成比较深的神经网络,也容易地被整合进任何端到端可训练的三维深度学习网络中(见下两图:第一张是 PVConv 单独组合成 PVCNN,第二张图是 PVConv 嵌入 PointNet++得到 PVCNN++)。
结果
我们在具有代表性的三维视觉数据集:ShapeNet(三维物体部分语义分割),S3DIS(三维室内场景分割)和 KITTI(自动驾驶场景中的三维物体检测)中验证了 PVCNN 的表现。
在 ShapeNet 数据集上,我们的完整通道数模型可以以 2.7 倍的实测加速达到略好于 PointCNN 的性能,同时我们的内存占用也减小了 1.6 倍;而即便我们将通道数缩小四倍,我们的模型也可以在达到 PointNet++, DGCNN 等复杂方法性能的同时比 PointNet(此前这个领域中被认为最为精简、高效的模型)快 1.9 倍、省 1.9 倍内存。
我们同时展示我们的四分之一宽度小模型和我们的完整模型在端计算设备上部署的情况:
完整的 PVCNN 可以在 NVIDIA Jetson AGX Xaviers 上以每秒 20.2 个物体的速度运行,而四分之一宽度版本的小模型在价格仅 99 美元的 NVIDIA Jetson Nano 上也可以达到接近每秒 20 个物体的速度。
通过下图中对 PVConv 两个分支特征的可视化,我们不难发现两个分支确实学到了互补的特征:
基于栅格的分支往往更加关注大而连续的区域,基于点云 MLP 的特征转换分支往往更加关注独立的,不连续的区域。
在 S3DIS 数据集上,我们的方法也具有先进的性能,同时极为高效:只需要七分之一左右的运行时间就可以超越此前优秀的方法 PointCNN。当然,我们的内存消耗也比 PointCNN 小了很多。此外,我们的 0.25 倍通道数小模型均在运行时间比 PointNet 快 1.8 倍的情况下性能超越了更为复杂的 DGCNN 和 RSNet。Tradeoff 曲线更直观地反映了这一点。
在 KITTI 数据集上,我们用 PVConv 替换 Frustum PointNet 系列中三维部分的计算子,并达到明显更优的性能:省 1.5 倍内存和运行时间的条件下,平均检测 mAP 比 Frustum PointNet++高 2.4%。
相关推荐
- Excel技巧:SHEETSNA函数一键提取所有工作表名称批量生产目录
-
首先介绍一下此函数:SHEETSNAME函数用于获取工作表的名称,有三个可选参数。语法:=SHEETSNAME([参照区域],[结果方向],[工作表范围])(参照区域,可选。给出参照,只返回参照单元格...
- Excel HOUR函数:“小时”提取器_excel+hour函数提取器怎么用
-
一、函数概述HOUR函数是Excel中用于提取时间值小时部分的日期时间函数,返回0(12:00AM)到23(11:00PM)之间的整数。该函数在时间数据分析、考勤统计、日程安排等场景中应用广泛。语...
- Filter+Search信息管理不再难|多条件|模糊查找|Excel函数应用
-
原创版权所有介绍一个信息管理系统,要求可以实现:多条件、模糊查找,手动输入的内容能去空格。先看效果,如下图动画演示这样的一个效果要怎样实现呢?本文所用函数有Filter和Search。先用filter...
- FILTER函数介绍及经典用法12:FILTER+切片器的应用
-
EXCEL函数技巧:FILTER经典用法12。FILTER+切片器制作筛选按钮。FILTER的函数的经典用法12是用FILTER的函数和切片器制作一个筛选按钮。像左边的原始数据,右边想要制作一...
- office办公应用网站推荐_office办公软件大全
-
以下是针对Office办公应用(Word/Excel/PPT等)的免费学习网站推荐,涵盖官方教程、综合平台及垂直领域资源,适合不同学习需求:一、官方权威资源1.微软Office官方培训...
- WPS/Excel职场办公最常用的60个函数大全(含卡片),效率翻倍!
-
办公最常用的60个函数大全:从入门到精通,效率翻倍!在职场中,WPS/Excel几乎是每个人都离不开的工具,而函数则是其灵魂。掌握常用的函数,不仅能大幅提升工作效率,还能让你在数据处理、报表分析、自动...
- 收藏|查找神器Xlookup全集|一篇就够|Excel函数|图解教程
-
原创版权所有全程图解,方便阅读,内容比较多,请先收藏!Xlookup是Vlookup的升级函数,解决了Vlookup的所有缺点,可以完全取代Vlookup,学完本文后你将可以应对所有的查找难题,内容...
- 批量查询快递总耗时?用Excel这个公式,自动计算揽收到签收天数
-
批量查询快递总耗时?用Excel这个公式,自动计算揽收到签收天数在电商运营、物流对账等工作中,经常需要统计快递“揽收到签收”的耗时——比如判断某快递公司是否符合“3天内送达”的服务承...
- Excel函数公式教程(490个实例详解)
-
Excel函数公式教程(490个实例详解)管理层的财务人员为什么那么厉害?就是因为他们精通excel技能!财务人员在日常工作中,经常会用到Excel财务函数公式,比如财务报表分析、工资核算、库存管理等...
- Excel(WPS表格)Tocol函数应用技巧案例解读,建议收藏备用!
-
工作中,经常需要从多个单元格区域中提取唯一值,如体育赛事报名信息中提取唯一的参赛者信息等,此时如果复制粘贴然后去重,效率就会很低。如果能合理利用Tocol函数,将会极大地提高工作效率。一、功能及语法结...
- Excel中的SCAN函数公式,把计算过程理清,你就会了
-
Excel新版本里面,除了出现非常好用的xlookup,Filter公式之外,还更新一批自定义函数,可以像写代码一样写公式其中SCAN函数公式,也非常强大,它是一个循环函数,今天来了解这个函数公式的计...
- Excel(WPS表格)中多列去重就用Tocol+Unique组合函数,简单高效
-
在数据的分析和处理中,“去重”一直是绕不开的话题,如果单列去重,可以使用Unique函数完成,如果多列去重,如下图:从数据信息中可以看到,每位参赛者参加了多项运动,如果想知道去重后的参赛者有多少人,该...
- Excel(WPS表格)函数Groupby,聚合统计,快速提高效率!
-
在前期的内容中,我们讲了很多的统计函数,如Sum系列、Average系列、Count系列、Rank系列等等……但如果用一个函数实现类似数据透视表的功能,就必须用Groupby函数,按指定字段进行聚合汇...
- Excel新版本,IFS函数公式,太强大了!
-
我们举一个工作实例,现在需要计算业务员的奖励数据,右边是公司的奖励标准:在新版本的函数公式出来之前,我们需要使用IF函数公式来解决1、IF函数公式IF函数公式由三个参数组成,IF(判断条件,对的时候返...
- Excel不用函数公式数据透视表,1秒完成多列项目汇总统计
-
如何将这里的多组数据进行汇总统计?每组数据当中一列是不同菜品,另一列就是该菜品的销售数量。如何进行汇总统计得到所有的菜品销售数量的求和、技术、平均、最大、最小值等数据?不用函数公式和数据透视表,一秒就...
- 一周热门
- 最近发表
-
- Excel技巧:SHEETSNA函数一键提取所有工作表名称批量生产目录
- Excel HOUR函数:“小时”提取器_excel+hour函数提取器怎么用
- Filter+Search信息管理不再难|多条件|模糊查找|Excel函数应用
- FILTER函数介绍及经典用法12:FILTER+切片器的应用
- office办公应用网站推荐_office办公软件大全
- WPS/Excel职场办公最常用的60个函数大全(含卡片),效率翻倍!
- 收藏|查找神器Xlookup全集|一篇就够|Excel函数|图解教程
- 批量查询快递总耗时?用Excel这个公式,自动计算揽收到签收天数
- Excel函数公式教程(490个实例详解)
- Excel(WPS表格)Tocol函数应用技巧案例解读,建议收藏备用!
- 标签列表
-
- 外键约束 oracle (36)
- oracle的row number (32)
- 唯一索引 oracle (34)
- oracle in 表变量 (28)
- oracle导出dmp导出 (28)
- 多线程的创建方式 (29)
- 多线程 python (30)
- java多线程并发处理 (32)
- 宏程序代码一览表 (35)
- c++需要学多久 (25)
- css class选择器用法 (25)
- css样式引入 (30)
- css教程文字移动 (33)
- php简单源码 (36)
- php个人中心源码 (25)
- php小说爬取源码 (23)
- 云电脑app源码 (22)
- html画折线图 (24)
- docker好玩的应用 (28)
- linux有没有pe工具 (34)
- 可以上传视频的网站源码 (25)
- 随机函数如何生成小数点数字 (31)
- 随机函数excel公式总和不变30个数据随机 (33)
- 所有excel函数公式大全讲解 (22)
- 有动图演示excel函数公式大全讲解 (32)
