(CVPR 2019) PointConv: Deep Convolutional Networks on 3D Point Clouds

Abstract

与以规则密集网格表示的图像不同,3D点云是不规则且无序的,因此对它们应用卷积可能很困难。在本文中,我们将动态滤波器扩展到一个新的卷积操作,名为PointConv。 PointConv可以应用于点云来构建深度卷积网络。我们将卷积核视为由权重和密度函数组成的 3D点的局部坐标的非线性函数。对于给定的点,权函数通过多层感知器网络和密度函数通过核密度估计来学习。这项工作最重要的贡献是提出了一种用于有效计算权重函数的新公式,它使我们能够显着扩展网络并显着提高其性能。学习到的卷积核可用于计算3D空间中任何点集上的平移不变和排列不变卷积。此外,PointConv还可以用作反卷积算子,将二次采样点云中的特征传播回其原始分辨率。在ModelNet40、ShapeNet和ScanNet上的实验表明,基于PointConv的深度卷积神经网络能够在3D点云上具有挑战性的语义分割基准上实现最先进的水平。此外,我们将CIFAR-10转换为点云的实验表明,基于PointConv构建的网络可以在类似结构的2D图像中匹配卷积网络的性能。

1. Introduction

在最近的机器人、自动驾驶和虚拟/增强现实应用中,可以直接获取3D数据的传感器越来越普遍。这包括激光扫描仪等室内传感器、Kinect、RealSense或Google Tango等飞行时间传感器、iPhoneX上的结构光传感器以及LIDAR和MEMS传感器等室外传感器。直接测量3D数据在这些应用中是非常宝贵的,因为深度信息可以消除2D图像中的大量分割模糊性,并且表面法线提供了场景几何的重要线索。

在2D图像中,卷积神经网络(CNN)通过极大地改善几乎所有视觉任务的结果,从根本上改变了计算机视觉的格局。 CNN通过利用平移不变性取得成功,因此可以将同一组卷积滤波器应用于图像中的所有位置,从而减少参数数量并提高泛化能力。我们希望将这些成功转移到对3D数据的分析中。然而,3D数据通常以点云的形式出现,它是一组无序的3D点,每个点上都有或没有附加特征(例如RGB)。点云是无序的,不符合二维图像中的规则格子网格。很难将传统的CNN应用于这种无序的输入。另一种方法是将3D空间视为体积网格,但在这种情况下,体积将是稀疏的,并且CNN在高分辨率体积上将难以计算。

在本文中,我们提出了一种新颖的方法来使用非均匀采样对3D点云进行卷积。我们注意到卷积运算可以看作是连续卷积算子的离散逼近。在3D空间中,我们可以将此卷积算子的权重视为局部3D点坐标相对于参考3D点的(Lipschitz)连续函数。该连续函数可以用多层感知器(MLP)来近似,如在[33]和[16]中完成。但是这些算法没有考虑非均匀采样。我们建议使用逆密度尺度来重新加权MLP学习到的连续函数,这对应于连续卷积的蒙特卡洛近似。我们称这样的操作为PointConv。 PointConv涉及将点云的位置作为输入并学习MLP以逼近权重函数,以及在学习的权重上应用逆密度尺度来补偿非均匀采样。

PointConv的简单实现在输出特征的通道大小非常大时内存效率低下,因此难以训练和扩展到大型网络。为了减少PointConv的内存消耗,我们引入了一种能够大大使用改变求和顺序的重新表述来提高内存效率。新结构能够在3D点云上构建多层深度卷积网络,其功能与光栅图像上的2D CNN相似。我们可以实现与2D卷积网络相同的平移不变性,以及点云中点排序的排列不变性。

在分割任务中,将信息从粗糙层逐渐传输到更精细层的能力很重要。因此,能够充分利用从粗糙层到精细层的特征的反卷积操作[24]对性能至关重要。大多数最先进的算法[26, 28]无法执行反卷积,这限制了它们在分割任务上的性能。由于我们的PointConv是卷积的完全近似,因此很自然地将PointConv扩展为PointDeconv,它可以将粗糙层中的信息完全直到传播到更精细的层。通过使用PointConv和PointDeconv,我们可以提高语义分割任务的性能。

我们工作的贡献是:

• 我们提出PointConv,一种密度重加权卷积,它能够完全逼近任何一组3D点上的3D连续卷积。

• 我们设计了一种内存有效的方法来使用求和顺序技术的变化来实现PointConv,最重要的是,它可以扩展到现代CNN级别。

• 我们将PointConv扩展到反卷积版本(PointDeconv) 以获得更好的分割结果。

实验表明,我们基于PointConv构建的深度网络与其他点云深度网络相比具有很强的竞争力,并在部分分割[2]和室内语义分割基准[5]方面取得了最先进的结果。为了证明我们的PointConv确实是一个真正的卷积操作,我们还在CIFAR-10上评估PointConv,方法是将2D图像中的所有像素转换为具有2D坐标以及每个点上的RGB特征的点云。在CIFAR-10上的实验表明,我们的PointConv的分类精度与类似结构的图像CNN相当,远远超过了点云网络之前取得的最佳结果。作为CNN处理3D数据的基本方法,我们相信PointConv可能有许多潜在的应用。

2. Related Work

3D CNN网络上的大多数工作将3D点云转换成2D图像或3D立体网格。[36,27]提出将3D点云或形状投影到多个2D图像中,然后应用2D卷积网络进行分类。尽管这些方法已经在形状分类和检索任务上取得了显著的性能,但是将它们扩展到高分辨率场景分割任务也是很重要的[5]。[43,23,27]代表了另一种方法,该方法通过量化将点云体素化为体积网格,然后应用3D卷积网络。这种方法受限于其3D体积分辨率和3D卷积的计算成本。[31]通过使用一组不平衡的八叉树显著提高了分辨率,其中每个叶节点存储一个汇集的特征表示。Kd-networks[18]以前馈自下而上的方式在具有特定大小的Kd树上计算表示。在Kd网络中,在训练和测试期间,点云中的点的输入数量需要相同,这对于许多任务来说是不成立的。SSCN[7]利用基于体积网格的卷积,通过仅在输入点上考虑CNN输出,具有新颖的速度/存储器改进。但是,如果对点云进行稀疏采样,特别是当采样速率不均匀时,对于稀疏采样的区域,可能无法在体积卷积滤波器中找到任何邻居,这可能会导致重大问题。

一些最新的工作[30,26,28,35,37,13,9,39]直接将原始点云作为输入,而没有将其转换为其他格式。[26,30]提出使用共享多层感知器和max pooling层来获取点云的特征。由于最大池化层应用于点云中的所有点,因此很难捕捉局部要素。PointNet++在PointNet [26]中通过增加一个层次结构改进了网络。层次结构类似于图像CNN中使用的结构,它从小的局部区域开始提取特征,并逐渐扩展到更大的区域。PointNet[26]和PointNet++[28]中用于聚合不同点的要素的关键结构是最大池化。然而,max-pooling层仅在局部或全局区域的特征上保持最强的激活,这可能会丢失一些对分割任务有用的详细信息。[35]提出了一种将点云的输入特征投影到高维点阵上,然后在高维点阵上应用双边卷积来聚合特征的方法,称为“SPLA TNet”。SPLA TNet[35]能够给出与PointNet++相当的结果[28]。切线卷积[37]将局部表面几何形状投影到每个点周围的切面上,这给出了一组平面可转换的切线图像。逐点卷积[13]即时查询最近的邻元素,并将点分入核单元,然后在分入的单元上应用核权重,以在点云上进行卷积。Flex-convolution[9]引入了传统卷积层的一般化以及高效的GPU实现,可应用于具有数百万个点的点云。FeaStNet[39]提出通过添加软分配矩阵将传统卷积层推广到3D点云。PointCNN[21]从输入点学习χ-transformation,然后使用它同时对与点相关的输入特征进行加权和置换。与我们的方法相比,PointCNN不能实现置换不变性,这是点云所需要的。

工作[33,16,41,12,40]和[44]提出学习连续滤波器来执行卷积。[16]提出2d卷积中的权重滤波器可被视为连续函数,其可由MLPs近似。[33]首次将这一思想引入三维图形结构。[40]将[33]中的方法扩展到分割任务,并提出了一个有效的版本,但他们的有效版本只能近似深度方向的卷积,而不是实际的卷积。动态图CNN[41]提出了一种可以动态更新图的方法。[44]提出了一个特殊的滤波器族来近似权函数,而不是使用MLPs。[12]提出了一种考虑密度的三维卷积的蒙他卡洛近似法。我们的工作在三个方面不同于那些人。最重要的是,在以前的工作中从未提出过我们的有效形式的实际卷积。此外,我们使用密度不同于[12],我们提出了一个基于PointConv的反卷积算子来执行语义分割。

3. PointConv

我们提出一种卷积运算,将传统的图像卷积扩展到称为PointConv的点云中。PointConv是对3D连续卷积运算符的蒙特卡罗近似的扩展。对于每个卷积滤波器,它使用MLP近似一个权重函数,然后应用一个密度尺度来重新加权学习的权重函数。第3.1节介绍了PointConv层的结构。第3.2节介绍了PointDeconv,使用PointConv图层对要素进行去卷积。

3.1. Convolution on 3D Point Clouds

形式上,卷积在等式(1)中被定义为d维向量x的函数 f ( x ) f(\mathbf{x}) f(x) g ( x ) g(\mathbf{x}) g(x)
( f ∗ g ) ( x ) = ∬ τ ∈ R d f ( τ ) g ( x + τ ) d τ ( 1 ) (f * g)(\mathbf{x})=\iint_{\boldsymbol{\tau} \in \mathbb{R}^d} f(\boldsymbol{\tau}) g(\mathbf{x}+\boldsymbol{\tau}) d \boldsymbol{\tau} \quad\quad\quad\quad(1) (fg)(x)=τRdf(τ)g(x+τ)dτ(1)

图像可以解释为2D离散函数,通常表示为网格状矩阵。在CNN中,每个滤波器都被限制在一个很小的局部区域,如3 × 3、5 × 5等。在每个局部区域内,不同像素之间的相对位置总是固定的,如图1(a)所示。并且对于局部区域内的每个位置,滤波器可以容易地被离散化为具有实值权重的总和。

点云被表示为一组3D点 { p i ∣ i = 1 , … , n } \left\{p_i \mid i=1, \ldots, n\right\} {pii=1,,n},其中每个点包含一个位置向量(x,y,z)及其特征,如颜色、表面法线等。与图像不同,点云具有更灵活的形状。点云中的点的坐标 p = ( x , y , z ) ∈ R 3 p=(x, y, z) \in \mathbb{R}^3 p=(x,y,z)R3不位于固定的网格上,而是可以取任意连续值。因此,不同点的相对位置在每个局部区域中是不同的。光栅图像上的传统离散卷积滤波器不能直接应用于点云。图1示出了图像中的局部区域和点云之间的差异。

(CVPR 2019) PointConv: Deep Convolutional Networks on 3D Point Clouds_第1张图片

图 1. 图像网格与点云。 (a) 显示图像中 5 × 5 的局部区域,其中点之间的距离只能达到很少的离散值; (b) 和 © 表明在点云内的不同局部区域中,顺序和相对位置可能非常不同。

(CVPR 2019) PointConv: Deep Convolutional Networks on 3D Point Clouds_第2张图片

图 2. PointConv的二维权重函数。 (a)是一个学习的连续权重函数;(b)和©是二维点云中的不同局部区域。给定二维点,我们可以获得特定位置的权重。这同样适用于3D点。常规离散二维卷积可以看作是连续卷积权重函数的离散化,如(d)中所示。

为了使卷积与点集兼容,我们提出了一种置换不变的卷积操作,称为PointConv。我们的想法是首先回到3D卷积的连续版本:

Conv ⁡ ( W , F ) x y z = ∭ ( δ x , δ y , δ z ) ∈ G W ( δ x , δ y , δ z ) F ( x + δ x , y + δ y , z + δ z ) d δ x δ y δ z ( 2 ) \operatorname{Conv}(W, F)_{x y z}=\iiint_{\left(\delta_x, \delta_y, \delta_z\right) \in G} W\left(\delta_x, \delta_y, \delta_z\right) F\left(x+\delta_x, y+\delta_y, z+\delta_z\right) d \delta_x \delta_y \delta_z \quad\quad\quad\quad(2) Conv(W,F)xyz=(δx,δy,δz)GW(δx,δy,δz)F(x+δx,y+δy,z+δz)dδxδyδz(2)
其中 F ( x + δ x , y + δ y , z + δ z ) F\left(x+\delta_x, y+\delta_y, z+\delta_z\right) F(x+δx,y+δy,z+δz)是以点 p = ( x , y , z ) p=(x, y, z) p=(x,y,z)为中心的局部区域 G G G中一个点的特征。点云可以看作是非均匀的来自连续 R 3 \mathbb{R}^3 R3空间的样本。在每个局部区域中, ( δ x , δ y , δ z ) \left(\delta_x, \delta_y, \delta_z\right) (δx,δy,δz)可以是局部区域中的任何可能位置。我们将PointConv定义如下:

PointConv ⁡ ( S , W , F ) x y z = ∑ ( δ x , δ y , δ z ) ∈ G S ( δ x , δ y , δ z ) W ( δ x , δ y , δ z ) F ( x + δ x , y + δ y , z + δ z ) ( 3 ) \operatorname{PointConv}(S, W, F)_{x y z}= \sum_{\left(\delta_x, \delta_y, \delta_z\right) \in G} S\left(\delta_x, \delta_y, \delta_z\right) W\left(\delta_x, \delta_y, \delta_z\right) F\left(x+\delta_x, y+\delta_y, z+\delta_z\right) \quad\quad\quad\quad(3) PointConv(S,W,F)xyz=(δx,δy,δz)GS(δx,δy,δz)W(δx,δy,δz)F(x+δx,y+δy,z+δz)(3)

其中 S ( δ x , δ y , δ z ) S\left(\delta_x, \delta_y, \delta_z\right) S(δx,δy,δz)是点 ( δ x , δ y , δ z ) \left(\delta_x, \delta_y, \delta_z\right) (δx,δy,δz)处的逆密度。 S ( δ x , δ y , δ z ) S\left(\delta_x, \delta_y, \delta_z\right) S(δx,δy,δz)是必需的,因为点云的采样可能非常不均匀(要看到这一点,请注意带有偏差样本的蒙特卡洛估计: ∫ f ( x ) d x = ∫ f ( x ) p ( x ) p ( x ) d x ≈ ∑ i f ( x i ) p ( x i ) \int f(x) d x=\int \frac{f(x)}{p(x)} p(x) d x \approx \sum_i \frac{f\left(x_i\right)}{p\left(x_i\right)} f(x)dx=p(x)f(x)p(x)dxip(xi)f(xi), for x i ∼ p ( x ) x_i \sim p(x) xip(x)。点云通常是有偏差的样本,因为许多传感器难以测量平面边界附近的点,因此需要重新加权)。直观地说,局部区域的点数在整个点云中是不同的,如图2(b)和(c)所示。此外,在图2(c)中,点 p 3 , p 5 , p 6 , p 7 , p 8 , p 9 , p 10 p_3, p_5, p_6, p_7, p_8, p_9, p_{10} p3,p5,p6,p7,p8,p9,p10彼此非常接近,因此每个点的贡献应该较小。

我们的主要思想是通过多层感知器从3D坐标 ( δ x , δ y , δ z ) \left(\delta_x, \delta_y, \delta_z\right) (δx,δy,δz)和逆密度 S ( δ x , δ y , δ z ) S\left(\delta_x, \delta_y, \delta_z\right) S(δx,δy,δz)通过核化密度来近似权重函数 W ( δ x , δ y , δ z ) W\left(\delta_x, \delta_y, \delta_z\right) W(δx,δy,δz)估计[38],然后是用MLP实现的非线性变换。由于权重函数高度依赖输入点云的分布,我们将整个卷积操作称为PointConv。[16, 33]考虑了权重函数的近似,但没有考虑密度尺度的近似,因此不是连续卷积算子的完全近似。我们对密度的非线性变换也不同于[12]。

PointConv中MLP的权重在所有点之间共享,以保持排列不变性。为了计算逆密度尺度 S ( δ x , δ y , δ z ) S\left(\delta_x, \delta_y, \delta_z\right) S(δx,δy,δz),我们首先使用核密度估计(KDE)离线估计点云中每个点的密度,然后将密度输入MLP以进行一维非线性变换。使用非线性变换的原因是网络自适应地决定是否使用密度估计。

图3显示了对K点局部区域的PointConv操作。令 C i n , C o u t C_{i n}, C_{o u t} Cin,Cout是输入特征和输出特征的通道数, k , c i n , c out  k, c_{i n}, c_{\text {out }} k,cin,cout 是第 k k k个邻居的索引,输入特征的第 c i n c_{i n} cin通道和输出特征的第 c o u t c_{out} cout通道的索引。输入是点 P local  ∈ R K × 3 P_{\text {local }} \in \mathbb{R}^{K \times 3} Plocal RK×3的3D局部位置,可以通过减去局部区域的质心坐标和局部区域的特征 F i n ∈ R K × C i n F_{i n} \in \mathbb{R}^{K \times C_{i n}} FinRK×Cin来计算。我们使用1×1卷积来实现MLP。权重函数的输出是 W ∈ R K × ( C in  × C out  ) W \in \mathbb{R}^{K \times\left(C_{\text {in }} \times C_{\text {out }}\right)} WRK×(Cin ×Cout )。所以, W ( k , c in  ) ∈ R C out  \mathbf{W}\left(k, c_{\text {in }}\right) \in \mathbb{R}^{C_{\text {out }}} W(k,cin )RCout 是一个向量。密度尺度为 S ∈ R K S \in \mathbb{R}^K SRK。卷积后,来自具有 K K K个相邻点的局部区域的特征 F i n F_{i n} Fin被编码为输出特征 F out  ∈ R C out  \mathbf{F}_{\text {out }} \in \mathbb{R}^{C_{\text {out }}} Fout RCout ,如公式(4)所示。

F out  = ∑ k = 1 K ∑ c i n = 1 C i n S ( k ) W ( k , c i n ) F i n ( k , c i n ) ( 4 ) \mathbf{F}_{\text {out }}=\sum_{k=1}^K \sum_{c_{i n}=1}^{C_{i n}} S(k) \mathbf{W}\left(k, c_{i n}\right) F_{i n}\left(k, c_{i n}\right) \quad\quad\quad\quad(4) Fout =k=1Kcin=1CinS(k)W(k,cin)Fin(k,cin)(4)

PointConv 学习一个网络来近似卷积的连续权重。对于每个输入点,我们可以使用其相对坐标计算 MLP 的权重。图 2(a) 显示了卷积的连续权重函数示例。将点云输入作为连续输入的离散化,可以通过图 2(b) 计算离散卷积以提取局部特征,这对于不同的点云样本(可能具有不同的近似精度)有效(图 2 (b-d)),包括规则网格(图 2(d))。请注意,在光栅图像中,局部区域中的相对位置是固定的。然后 PointConv(仅将相对位置作为权重函数的输入)将在整个图像中输出相同的权重和密度,在此处它减少到传统的离散化卷积。

为了聚合整个点集中的特征,我们使用层次结构,能够将详细的小区域特征组合成覆盖更大空间范围的抽象特征。我们使用的层次结构由几个特征编码模块组成,类似于 PointNet++ [28] 中使用的那个。每个模块大致相当于卷积CNN中的一层。每个特征编码模块中的关键层是采样层、分组层和PointConv。更多细节可以在补充材料中找到。

这种方法的缺点是每个滤波器都需要通过网络来近似,因此效率非常低。在第4节中,我们提出了一种有效的方法来实现PointConv。

3.2. Feature Propagation Using Deconvolution

对于分割任务,我们需要逐点预测。为了获得所有输入点的特征,需要一种将特征从二次采样点云传播到更密集点云的方法。 PointNet++ [28] 提出使用基于距离的插值来传播特征,由于局部区域内的局部相关性,这是合理的。然而,这并没有充分利用从粗略级别捕获传播信息的局部相关性的反卷积操作。我们建议在 PointConv 的基础上添加一个 PointDeconv 层,作为解决此问题的反卷积操作。

如图4所示,PointDeconv由两部分组成:插值和PointConv。首先,我们使用插值来传播前一层的粗略特征。在[28]之后,通过线性插值来自 3 个最近点的特征进行插值。然后,使用跳跃链接将插值特征与来自具有相同分辨率的卷积层的特征连接起来。连接后,我们对连接的特征应用PointConv以获得最终的反卷积输出,类似于图像反卷积层 [24]。我们应用这个过程,直到所有输入点的特征都传播回原始分辨率。
(CVPR 2019) PointConv: Deep Convolutional Networks on 3D Point Clouds_第3张图片

图 3.PointConv。 (a) 表示局部区域,点的坐标由全局坐标转换为局部坐标, p p p为点坐标, f f f为对应特征; (b) 显示了在以一个点 ( p 0 , f 0 ) \left(p_0, f_0\right) (p0,f0)为中心的一个局部区域上进行PointConv的过程。输入特征来自以 ( p 0 , f 0 ) \left(p_0, f_0\right) (p0,f0)为中心的K个最近邻,输出特征是位于 p 0 p_{0} p0 F out  \mathbf{F}_{\text {out }} Fout 

(CVPR 2019) PointConv: Deep Convolutional Networks on 3D Point Clouds_第4张图片

图4. 特征编码和传播。此图显示了如何在网络中对 m 类分割任务的特征进行编码和传播。 n n n是每层中的点数, c c c是特征的通道大小。最好以彩色观看。

4. Efficient PointConv

PointConv的幼稚实现是内存消耗且效率低下。与[33] 不同,我们提出了一种新的重新表述来实现PointConv,方法是将其减少到两个标准操作:矩阵乘法和2d卷积。这种新颖的技巧不仅利用了GPU的并行计算优势,而且可以使用主流深度学习框架轻松实现。由于逆密度尺度没有这样的内存问题,下面的讨论主要集中在权重函数上。

具体而言,令B为训练阶段的mini-batch大小,N为点云中的点数,K为每个局部区域的点数, C i n C_{in} Cin为输入通道数, C o u t C_{out} Cout为通道数的输出通道。对于点云,每个局部区域共享相同的权重函数,可以使用MLP学习。但是,从不同点的权重函数计算的权重是不同的。 MLP 生成的权重滤波器的大小为 B × N × K × ( C i n C_{in} Cin × C o u t C_{out} Cout)。假设 B = 32,N = 512,K = 32, C i n C_{in} Cin = 64, C o u t C_{out} Cout = 64,滤波器以单点精度存储。然后,过滤器的内存大小为8GB,仅用于一层。如此高的内存消耗将很难训练网络。 [33] 使用了非常小的网络,几乎没有过滤器,这显着降低了它的性能。为了解决这个问题,我们提出了一个基于以下引理的PointConv的内存高效版本:

Lemma 1 PointConv 等价于以下公式: F out  = Conv ⁡ 1 × 1 ( H , ( S ⋅ F in  ) T ⊗ M ) \mathbf{F}_{\text {out }}=\operatorname{Conv}_{1 \times 1}\left(\mathbf{H},\left(\mathbf{S} \cdot \mathbf{F}_{\text {in }}\right)^T \otimes \mathbf{M}\right) Fout =Conv1×1(H,(SFin )TM)其中 M ∈ R K × C m i d \mathbf{M} \in \mathbb{R}^{K \times C_{m i d}} MRK×Cmid是MLP中最后一层计算权重函数的输入, H ∈ R C m i d × ( C i n × C o u t ) \mathbf{H} \in \mathbb{R} C_{m i d} \times\left(C_{i n} \times C_{o u t}\right) HRCmid×(Cin×Cout)是同一个MLP中最后一层的权重, Conv ⁡ 1 × 1 \operatorname{Conv}_{1 \times 1} Conv1×1是1×1卷积。

Proof: 通常,MLP的最后一层是线性层。在一个局部区域,令 F ~ in  = S ⋅ F in  ∈ R K × C i n \tilde{\mathbf{F}}_{\text {in }}=\mathbf{S} \cdot \mathbf{F}_{\text {in }} \in \mathbb{R}^{K \times C_{i n}} F~in =SFin RK×Cin并将MLP重写为1×1卷积,使得权重函数的输出为 W = Conv ⁡ 1 × 1 ( H , M ) ∈ R K × ( C in  × C out  ) \mathbf{W}=\operatorname{Conv}_{1 \times 1}(H, M) \in\mathbb{R}^{K \times\left(C_{\text {in }} \times C_{\text {out }}\right)} W=Conv1×1(H,M)RK×(Cin ×Cout )。令k是局部区域中点的索引, c i n , c mid  , c o u t c_{i n}, c_{\text {mid }}, c_{o u t} cin,cmid ,cout分别是输入、中间层和滤波器输出的索引。则 W ( k , c i n ) ∈ R C out  \mathbf{W}\left(k, c_{i n}\right) \in \mathbb{R}^{C_{\text {out }}} W(k,cin)RCout 是来自 W \mathbf{W} W的向量。而 H ( c mid  , c i n ) ∈ R C out  \mathbf{H}\left(c_{\text {mid }}, c_{i n}\right) \in \mathbb{R}^{C_{\text {out }}} H(cmid ,cin)RCout 是来自 H \mathbf{H} H的向量。根据公式 (4),PointConv可以表示为公式 (5) .

F o u t = ∑ k = 0 K − 1 ∑ c i n = 0 C i n − 1 ( W ( k , c i n ) F ~ i n ( k , c i n ) ) ( 5 ) \mathbf{F}_{o u t}=\sum_{k=0}^{K-1} \sum_{c_{i n}=0}^{C_{i n}-1}\left(\mathbf{W}\left(k, c_{i n}\right) \widetilde{\mathbf{F}}_{\mathbf{i n}}\left(k, c_{i n}\right)\right) \quad\quad\quad\quad(5) Fout=k=0K1cin=0Cin1(W(k,cin)F in(k,cin))(5)
让我们以更详细的方式探讨公式(5)。权重函数的输出可以表示为:

W ( k , c i n ) = ∑ c m i d = 0 C m i d − 1 ( M ( k , c m i d ) H ( c m i d , c i n ) ) ( 6 ) \mathbf{W}\left(k, c_{i n}\right)=\sum_{c_{m i d}=0}^{C_{m i d}-1}\left(\mathbf{M}\left(k, c_{m i d}\right) \mathbf{H}\left(c_{m i d}, c_{i n}\right)\right) \quad\quad\quad\quad(6) W(k,cin)=cmid=0Cmid1(M(k,cmid)H(cmid,cin))(6)

将方程(6)代入方程(5)。

F out  = ∑ k = 0 K − 1 ∑ c i n = 0 C i n − 1 ( F ~ i n ( k , c i n ) ∑ c m i d = 0 C m i d − 1 ( M ( k , c m i d ) H ( c m i d , c i n ) ) ) = ∑ c i n = 0 C i n − 1 ∑ c m i d = 0 C m i d − 1 ( H ( c m i d , c i n ) ∑ k = 0 K − 1 ( F ~ i n ( k , c i n ) M ( k , c m i d ) ) ) = Conv ⁡ 1 × 1 ( H , F ~ i n T M ) ( 7 ) \begin{aligned} \mathbf{F}_{\text {out }} &=\sum_{k=0}^{K-1} \sum_{c_{i n}=0}^{C_{i n}-1}\left(\widetilde{\mathbf{F}}_{\mathbf{i n}}\left(k, c_{i n}\right) \sum_{c_{m i d}=0}^{C_{m i d}-1}\left(\mathbf{M}\left(k, c_{m i d}\right) \mathbf{H}\left(c_{m i d}, c_{i n}\right)\right)\right) \\ &=\sum_{c_{i n}=0}^{C_{i n}-1} \sum_{c_{m i d}=0}^{C_{m i d}-1}\left(\mathbf{H}\left(c_{m i d}, c_{i n}\right) \sum_{k=0}^{K-1}\left(\widetilde{\mathbf{F}}_{\mathbf{i n}}\left(k, c_{i n}\right) \mathbf{M}\left(k, c_{m i d}\right)\right)\right) \\ &=\operatorname{Conv}_{1 \times 1}\left(\mathbf{H}, \widetilde{\mathbf{F}}_{\mathbf{i n}}^T \mathbf{M}\right) \end{aligned} \quad\quad\quad\quad(7) Fout =k=0K1cin=0Cin1(F in(k,cin)cmid=0Cmid1(M(k,cmid)H(cmid,cin)))=cin=0Cin1cmid=0Cmid1(H(cmid,cin)k=0K1(F in(k,cin)M(k,cmid)))=Conv1×1(H,F inTM)(7)

因此,原始的PointConv可以等效地简化为矩阵乘法和1 × 1卷积。图5显示了PointConv的有效版本。
在这种方法中,我们不是将生成的过滤器存储在内存中,而是将权重过滤器分为两部分:中间结果M和卷积核H。我们可以看到,内存消耗减少到原始版本的 C mid  K × C out  \frac{\mathbf{C}_{\text {mid }}}{\mathbf{K} \times \mathbf{C}_{\text {out }}} K×Cout Cmid 。使用与图3相同的输入设置并让 C m i d = 32 C_{m i d}=32 Cmid=32,内存消耗为0.1255GB,约为原始PointConv的1/64。

(CVPR 2019) PointConv: Deep Convolutional Networks on 3D Point Clouds_第5张图片

图 5. 高效 PointConv。 PointConv 在一个具有 K 个点的局部区域上的内存高效版本。

7. Conclusion

在这项工作中,我们提出了一种在3D点云上执行卷积操作的新方法,称为 PointConv。 PointConv在局部点坐标上训练多层感知器,以逼近卷积滤波器中的连续权重和密度函数,这使其自然具有排列不变性和平移不变性。这允许直接在3D点云上构建深度卷积网络。我们提出了一种有效的实现方式,大大提高了它的可扩展性。我们展示了它在多个具有挑战性的基准测试中的强大性能以及在2D图像中匹配基于网格的卷积网络的性能的能力。在未来的工作中,我们希望使用PointConv将更多主流的图像卷积网络架构采用到点云数据中,例如ResNet和DenseNet。代码可以在这里找到:https://github.com/DylanWusee/pointconv。

(CVPR 2019) PointConv: Deep Convolutional Networks on 3D Point Clouds_第6张图片
(CVPR 2019) PointConv: Deep Convolutional Networks on 3D Point Clouds_第7张图片

你可能感兴趣的:(3D实例分割,3d,计算机视觉,深度学习)