【论文阅读】[NeurIPS 2019] Point-Voxel CNN for Efficient 3D Deep Learning. [det. seg. aut.]

写在前面

这篇文章重点关注计算速度和内存占用,随机访存非常耗时间,从这一点考虑是我没有想到的。

分别对基于点的网络和基于体素的网络,提出了观点:

  • 基于点的网络:
    ** 优势:占用内存小,稀疏。
    ** 劣势;导致不规则的内存访问模式,并引入动态内核计算开销,从而成为效率瓶颈。
  • 基于体素的网络:
    ** 优势:规则,有局部性(Voxel-based representation is regular and has good memory locality);
    ** 劣势:随着分辨率的增加会立方体增加GPU内存(Large Memory Footprint)

结合两者优点,提出PVConv:
在这里插入图片描述

Abstract

在这里插入图片描述

我们提出了点体素CNN(PVCNN),用于高效、快速的3D深度学习。
以前的工作使用基于体素或基于点的神经网络模型处理三维数据。然而,这两种方法的计算效率都很低。基于体素的模型的计算成本和内存占用随着输入分辨率呈立方体增长,这使得内存无法放大分辨率。对于基于点的网络,高达80%的时间浪费在构造内存局部性较差的稀疏数据上,而不是在真实的特征提取上。
在本文中,我们提出了用点表示3D输入数据的PVCNN,以减少内存消耗,同时在体素中执行卷积,以减少不规则、稀疏的数据访问并改善局部性。
我们的PVCNN模型既节省内存又节省计算。通过对语义和部分分割数据集的评估,它比基于体素的基线具有更高的精度,并且减少了10×GPU内存;它还优于最先进的基于点的模型,平均测量加速比为7倍。值得注意的是,较窄版本的PVCNN在零件和场景分割基准上比PointNet(一种极为有效的模型)实现了2倍的加速,且精度更高。我们验证了PVCNN在3D目标检测方面的总体有效性:通过使用PVConv替换Frustrum PointNet中的原语,它比Frustrum PointNet++平均提高了2.4%的mAP在具有1.5倍的测量加速比和GPU内存缩减条件下。

6 Conclusion

在这里插入图片描述

我们提出点体素CNN(PVCNN)用于快速有效的3D深度学习。我们将两个世界的优点结合在一起:体素和点,减少内存占用和不规则的内存访问。我们使用稀疏的、不规则的点表示高效地表示三维输入数据,并在密集的、规则的体素表示中高效地执行卷积。在多个任务上的大量实验一致地证明了我们提出的方法的有效性和效率。我们相信,我们的研究将打破基于体素的卷积自然低效的刻板印象,并有助于共同设计基于体素和基于点的架构,以实现快速高效的3D深度学习。

一些重要的图和表,包含实验结果,网络结构

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

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

1 Introduction

3D深度学习由于其广泛的应用而受到越来越多的关注:例如AR/VR和自动驾驶。这些应用程序需要与人实时交互,因此需要低延迟。然而,边缘设备(如手机和虚拟现实耳机)受到硬件资源和电池的严格限制。因此,为边缘的实时应用设计高效、快速的三维深度学习模型非常重要。
由激光雷达传感器收集的三维数据通常以点云的形式出现。传统上,研究人员将点云栅格化为体素网格,并使用三维体积卷积进行处理[4,33]。在低分辨率情况下,体素化过程中会丢失信息:如果多个点位于同一网格中,它们将合并在一起。因此,需要高分辨率表示来保留输入数据中的细节。然而,计算成本和内存需求都随着体素分辨率的增加而立方体增加。因此,使用高分辨率输入来训练基于体素的模型是不可行的:例如,3D UNet[51]在批处理大小为16的64×64×64输入上需要超过10 GB的GPU内存,并且巨大的内存占用使得很难扩展到该分辨率之外。
最近,另一组模型试图直接处理输入点云[17,23,30,32]。由于稀疏表示,这些基于点的模型比基于体素的模型需要更低的GPU内存。然而,他们忽略了一个事实,即随机存储器访问也是非常低效的。由于点以不规则的方式分散在整个3D空间中,因此处理它们会引入随机内存访问。大多数基于点的模型[23]模拟三维体积卷积:它们通过聚集相邻特征来提取每个点的特征。但是,邻域在点表示中不是连续存储的;因此,索引它们需要昂贵的最近邻搜索。为了以空间换取时间,以前的方法在最近邻搜索中为每个中心点复制整个点云,然后内存开销将为O( n 2 n^{2} n2),其中n是输入点的数量。动态内核计算引入了另一种开销。由于邻域的相对位置不固定,这些基于点的模型必须根据不同的偏移量动态生成卷积核。
设计高效的三维神经网络模型需要考虑硬件。与算术运算相比,内存运算特别昂贵:它们消耗的能量高出两个数量级,带宽低两个数量级(图1a)。另一个方面是内存访问模式:随机访问将引入内存库冲突并降低吞吐量(图1b)。从硬件的角度来看,传统的3D模型由于占用大量内存和随机内存访问而效率低下。本文为克服这些挑战提供了一个新的视角。我们提出了点体素CNN(PVCNN),它将3D输入数据表示为点云,以利用稀疏性来减少内存占用,并利用基于体素的卷积来获得连续的内存访问模式。在多个任务上的大量实验表明,PVCNN比基于体素的基线具有更低的内存消耗10倍。与最先进的基于点的模型相比,它还实现了平均7倍的测量加速比。
在这里插入图片描述

2 Related Work

Hardware-Efficient Deep Learning. 针对实际应用的硬件高效深度学习受到了广泛关注。例如,研究人员提出通过修剪和量化模型[7,8,9,24,39,49]或直接设计紧凑模型[11,12,14,25,34,48],来降低内存访问成本。然而,所有这些方法都是通用的,适用于任意神经网络。在本文中,我们基于一些特定于领域的属性来设计我们的高效原语:例如,三维点云是高度稀疏和空间结构的。

Voxel-Based 3D Models. 传统上,研究人员依靠体积表示来处理3D数据[45]。例如,Maturana等人[27]提出了一种普通的volumetric CNN;Qi等人[31]将二维CNN扩展到三维CNN,并系统分析了三维CNN与多视图CNN之间的关系;Wang等人[40]将八叉树合并到volumetricCNN中,以减少内存消耗。最近的研究表明,体积表示也可用于三维形状分割[21,37,44]和三维对象检测[50]。

Point-Based 3D Models. PointNet[30]利用对称函数处理3D中的无序点集。后来的研究[17,32,43]提出分层堆叠点网,以模拟邻域信息并增加模型容量。另一种方法[18、23、46]不是将点网堆叠为基本块,而是使用动态生成的卷积核或学习的邻域置换函数抽象出对称函数。其他研究,如SPLATNet[36],它自然地将2D图像SPLAT的概念扩展到3D,以及SONet[22],它使用自组织机制,并在理论上保证对点顺序的不变性,在以点云为输入的通用3D建模方面也显示出巨大的潜力。

Special-Purpose 3D Models. 还有为特定任务定制的3D模型。例如,SegCloud[38]、SGPN[42]、SPGraph[19]、ParamConv[41]、SSCN[6]和RSNet[13]专门用于3D语义/实例分割。对于三维目标检测,F-PointNet[29]基于RGB检测器和基于点的区域建议网络;PointRCNN[35]在提取RGB检测器时遵循了类似的思想;PointPillars[20]和SECOND[47]关注效率。

3 Motivation

在这里插入图片描述

3.1 Voxel-Based Models: Large Memory Footprint

基于体素的表示是规则的,具有良好的记忆局部性。但是,为了不丢失信息,它需要非常高的分辨率。当分辨率较低时,多个点被扣入同一个体素栅格,这些点将不再可区分。仅当点独占占用一个体素栅格时,才会保留该点。在图2a中,我们分析了不同分辨率下可分辨点的数量和内存消耗(在批量大小为16的训练期间)。在单个GPU(内存为12GB)上,可承受的最大分辨率为64,这将导致42%的信息丢失(即不可分辨点)。要保留90%以上的信息,我们需要将分辨率提高一倍至128,消耗7.2×GPU内存(82.6 GB),这对于部署来说是难以承受的。尽管GPU内存随着分辨率的增加而呈立方体增加,但可分辨点的数量却在减少。因此,基于体素的解决方案是不可伸缩的。

3.2 Point-Based Models: Irregular Memory Access and Dynamic Kernel Overhead

基于点的三维建模方法是内存高效的。最初的尝试,PointNet[30],也是计算效率高的,但它缺乏本地上下文建模能力。后来的研究[23,32,43,46]通过聚合点中的邻域信息来提高点网的表达能力领域。然而,这将导致不规则的内存访问模式,并引入动态内核计算开销,从而成为效率瓶颈。

Irregular Memory Access. 不同于基于体素的表示,相邻点席∈ 基于点的表示法中的N(x k _{k} k)在内存中不是连续排列的。此外,三维点分散在R3中;因此,我们需要明确地识别谁在相邻集合N(xk)中,而不是通过直接索引。基于点的方法通常将N(xk)定义为坐标空间[23,46]或特征空间[43]中的最近邻。两者都需要显式且昂贵的KNN计算。KNN后,收集所有的邻居席in N(XK)需要大量的随机内存访问,这不是缓存友好。结合邻居索引和数据移动的成本,我们在图2b中总结,基于点的模型在构建不规则数据和随机内存访问上花费了总运行时间的36%[23]、52%[43]和57%[46]。
在这里插入图片描述

Dynamic Kernel Computation.
在这里插入图片描述
在这里插入图片描述

4 Point-Voxel Convolution

在这里插入图片描述

基于我们对瓶颈的分析,我们介绍了一种用于3D深度学习的硬件高效原语:点体素卷积(PVConv),它结合了基于点的方法(即较小的内存占用)和基于体素的方法(即良好的数据局部性和规则性)的优点。
我们的PVConv将细粒度特征转换和粗粒度邻居聚合分离开来,以便有效地实现每个分支。如图3所示,上部基于体素的分支首先将点转换为低分辨率体素网格,然后通过基于体素的卷积聚集相邻点,然后进行去像素化以将其转换回点。体素化或去像素化都需要对所有点进行一次扫描,从而降低内存成本。基于较低点的分支提取每个单独点的特征。由于它不聚合邻居的信息,因此能够提供非常高的分辨率。
在这里插入图片描述

4.1 Voxel-Based Feature Aggregation

卷积的一个关键组成部分是聚集相邻信息以提取局部特征。由于其规则性,我们选择在体积域中执行此特征聚合。

Normalization. 不同点云的规模可能会有显著差异。因此,在将点云转换为体积域之前,我们将坐标{pk}标准化。首先,我们将所有点转换为以重心为原点的局部坐标系。然后,通过将所有坐标除以max|| p k p_{k} pk ∣ ∣ 2 ||_{2} 2,将点标准化为单位球体,然后将点缩放并转换为[0,1]。请注意,点特征{fk}在规范化过程中保持不变。我们将归一化坐标表示为{pˆk}。

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

Feature Aggregation. 在这里插入图片描述Devoxelization. 由于我们需要将信息与基于点的特征变换分支融合,因此我们将基于体素的特征变换回点云域。体素到点映射的直接实现是最近邻插值(即,将栅格的特征指定给落入栅格的所有点)。但是,这将使相同体素栅格中的点始终共享相同的特征。因此,我们转而利用三线性插值将体素网格转换为点,以确保映射到每个点的特征是不同的。

由于我们的体素化和去体素化都是可微的,因此可以以端到端的方式优化整个基于体素的特征聚合分支。

4.2 Point-Based Feature Transformation

基于体素的特征聚合分支以粗粒度融合邻域信息。然而,为了对更细粒度的单个点特征建模,仅基于低分辨率体素的方法可能是不够的。为此,我们直接对每个点进行操作,以使用MLP提取单个点特征。尽管简单,MLP为每个点输出不同且有区别的特征。这种高分辨率的单点信息对于补充基于粗粒度体素的信息非常关键。

4.3 Feature Fusion

利用单个点特征和聚集的邻域信息,我们可以通过添加有效地融合两个分支,因为它们提供互补信息。

4.4 Discussions

Efficiency: Better Data Locality and Regularity
在这里插入图片描述在这里插入图片描述

Effectiveness: Keeping Points in High Resolution.
在这里插入图片描述

5 Experiments

猜你喜欢

转载自blog.csdn.net/weixin_43154149/article/details/121132493