PointConv: Deep Convolutional Networks on 3D Point Clouds
- Abstract
- (一)Introduction
- (二)Related Work
- (三)PointConv
- 3.1. Convolution on 3D Point Clouds
- 3.2. Feature Propagation Using Deconvolution
- (四)Efficient PointConv
- (五)Experiments
- 5.1. Classification on ModelNet40
- 5.2. ShapeNet Part Segmentation
- 5.3. Semantic Scene Labeling
- 5.4. Classification on CIFAR-10
- (六)Ablation Experiments and Visualizations
- 6.1. The Structure of MLP
- 6.2. Inverse Density Scale
- (七)Conclusion
论文:https://arxiv.org/pdf/1811.07246.pdf
源码:https://github.com/DylanWusee/pointconv
Abstract
- 将动态滤波器扩展到一个新的卷积运算,PointConv。
- PointConv可以应用于点云以构建深度卷积网络。将卷积核视为由权重和密度函数组成的3D点局部坐标的非线性函数。
- 提出了一个公式,可以有效地计算权重函数,从而能够大幅扩展网络并显着改善其性能。
- 学习的卷积核可用于计算3D空间中任何点集上的平移不变和置换不变卷积。
- PointConv可用作反卷积运算符,以将特征从子采样点云传播回其原始分辨率。
- 在ModelNet40,ShapeNet和ScanNet上进行的实验表明,基于PointConv构建的深度卷积神经网络能够在3D点云上具有挑战性的语义分割基准上达到最新水平。
- 将CIFAR-10转换为点云,在PointConv上构建的网络的性能可以与2D卷积网络相当。
(一)Introduction
直接获取3D数据的传感器:
- 室内传感器(例如激光扫描仪)
- 飞行时间传感器(例如Kinect,RealSense或Google Tango)
- 结构光传感器(例如iPhoneX上的传感器)
- 室外传感器(例如LIDAR和MEMS传感器)
优点:
- 深度信息可以消除2D图像中的许多分割模糊性,并且表面法线提供了场景几何的重要线索。
idea来源:
- 2D图像中,卷积神经网络(CNN)从根本上改变了计算机视觉的格局。
- CNN通过利用平移不变性获得成功,因此可以将同一组卷积滤波器应用于图像中的所有位置,从而减少参数数量并提高泛化能力。
- 希望将这种成功转移到3D数据分析中。
遇到困难:
- 3D数据通常以点云的形式出现,这是一组无序的3D点,每个点上有或没有附加功能(例如RGB)。
- 点云是无序的,并且不符合2D图像中的规则晶格网格。
- 在这种无序输入上很难应用常规的CNN。
现有解决办法:
现有解决办法的不足:
本文提出的初始思路:
- PointConv:使用inverse density scale 来对MLP学习的连续函数进行加权,该函数对应于连续卷积的Monte Carlo approximation。
- PointConv将点云的位置作为输入并学习MLP以近似权重函数,并对学习的权重应用反密度标度以补偿非均匀采样。
初始思路不足:
- 当输出功能的通道大小非常大时,简单实现的PointConv会导致内存效率低下,因此很难训练并扩展到大型网络。
初始思路改进:
- 为减少PointConv的内存消耗,通过使用更改求和顺序的重新构造来提高存储效率。
- 这种新结构能够在3D点云上构建多层深度卷积网络,该网络具有与栅格图像上2D CNN相似的功能。
- 可以实现与2D卷积网络中相同的平移不变性,以及点云中点的排列顺序的不变性。
发现:
- 大多数最先进的算法pointnet,pointnet++无法执行反卷积,这限制了它们在分割任务上的性能。
- PointConv是卷积的完全近似,因此可以很自然地将PointConv扩展到PointDeconv,它可以完全利用粗层信息并传播到较细的层。
- 通过使用PointConv和PointDeconv,可以提高语义分割任务的性能。
论文贡献:
- 提出了PointConv,这是一种密度重新加权的卷积,能够完全近似任何一组3D点上的3D连续卷积。
- 设计了一种内存有效的方法,以更改求和顺序技术来实现PointConv,最重要的是,可以扩展到当前CNN级别。
- 将PointConv扩展到反卷积版本(PointDeconv),获得更好的分割结果。
证明: PointConv是真正的卷积运算。
- 将2D图像中的所有像素转换为具有2D坐标以及每个点具有RGB特征的点云来评估CIFAR-10上的PointConv。
- 在CIFAR-10上的实验表明,PointConv的分类准确度可与类似结构的图像CNN相比,远胜过以前通过点云网络获得的最佳结果。
(二)Related Work
看论文吧~~
(三)PointConv
3.1. Convolution on 3D Point Clouds
对于 d d d维向量 x x x的函数 f ( x ) f(x) f(x)和 g ( x ) g(x) g(x),定义卷积如下:
( f ∗ g ) ( x ) = ∬ τ ∈ R d f ( τ ) g ( x + τ ) d τ − − − − − − − − − − ( 1 ) (f*g)(x)=\iint_{\tau \in R^{d}}^{}f(\tau )g(x+\tau)d\tau----------(1) (f∗g)(x)=∬τ∈Rdf(τ)g(x+τ)dτ−−−−−−−−−−(1)
2D基础:
- 图像可以解释为2D离散函数,通常表示为网格状矩阵。
- 在CNN中,每个滤波器都限于一个小的局部区域,例如3×3,5×5等。
- 在每个局部区域内,不同像素之间的相对位置始终是固定的,如图1(a)所示。
- 而且,对于局部区域内的每个位置,可以轻松地将滤波器离散化为具有实值权重的总和。
3D延伸:
- 点云表示为一组3D点 { p i ∣ i = 1 , . . . , n } \left \{p_{i}|i=1,...,n\right \} {pi∣i=1,...,n},其中每个点都包含位置向量 ( x , y , z ) (x,y,z) (x,y,z)及其特征(例如颜色,表面法线等) 。
- 点云中某个点的坐标 p = ( x , y , z ) ∈ R 3 p=(x,y,z)\in R^{3} p=(x,y,z)∈R3不在固定网格上,而是可以取任意连续值。
- 每个局部区域中不同点的相对位置是不同的。常规的栅格图像中离散卷积滤波器不能直接应用于点云。
图释:
- 图1显示了局部区域中图像与点云之间的差异。
- (a)显示图像中的5×5局部区域,其中点之间的距离只能获得很少的离散值。
- (b)和(c)表明,在点云内的不同局部区域中,顺序和相对位置可能会非常不同。
PointConv理论基础来源:
3D卷积的连续版本:
C o n v ( W , F ) x y z = ∭ ( δ x , δ y , δ z ) W ( δ x , δ y , δ z ) F ( x + δ x , y + δ y , z + δ z ) d δ z δ y δ x − − − − − ( 2 ) Conv\left ( W,F\right)_{xyz}=\iiint_{\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 )d\delta z\delta y\delta x----- (2) Conv(W,F)xyz=∭(δx,δy,δz)W(δx,δy,δz)F(x+δx,y+δy,z+δz)dδzδyδx−−−−−(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)是局部区域 G G G中以点 p = ( x , y , z ) p=(x,y,z) p=(x,y,z)为中心的点的特征。
- 点云可以看作是来自连续 R 3 R^3 R3空间的非均匀样本。
- 在每个局部区域中, ( δ x , δ y , δ z ) ( \delta x,\delta y,\delta z ) (δx,δy,δz)可以是局部区域中的任何可能位置。
PointConv定义:
P o i n t C o n v ( S , W , F ) x y z = ∭ ( δ x , δ y , δ z ) S ( δ x , δ y , δ z ) W ( δ x , δ y , δ z ) F ( x + δ x , y + δ y , z + δ z ) PointConv\left ( S,W,F\right)_{xyz}=\iiint_{\left ( \delta x,\delta y,\delta z\right )}^{}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 ) PointConv(S,W,F)xyz=∭(δx,δy,δz)S(δx,δy,δz)W(δx,δy,δz)F(x+δx,y+δy,z+δz)
其中 S ( δ x , δ y , δ z ) S\left (\delta x,\delta y,\delta z\right ) S(δx,δy,δz)是点 ( δ x , δ y , δ z ) (\delta x,\delta y,\delta z) (δ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 ) , x i ∼ p ( x ) \int f(x)dx=\int \frac{f(x)}{p(x)}p(x)dx\approx \sum_{i}^{}\frac{f(x_i)}{p(x_i)}, x_i\sim p(x) ∫f(x)dx=∫p(x)f(x)p(x)dx≈∑ip(xi)f(xi),xi∼p(x)。点云通常是有偏差的样本,因为许多传感器很难测量平面边界附近的点,因此需要重新加权。
图释:
- PointConv的2D权重函数。
- (a)是学习的连续权重函数; 将点云输入作为连续输入的离散化。
- (b)和(c)是2d点云中的不同局部区域。局部区域中点的数量在整个点云中变化。给定2d点,我们可以获得特定位置的权重。图2(b)计算离散卷积以提取局部特征,该局部特征将适用于不同的点云样本( 图2(b-d))
- 在图2(c)中,点p3,p5,p6,p7,p8,p9,p10彼此非常接近,因此每个点的贡献会更小。
- 正则离散2D卷积可以视为连续卷积权函数的离散化,如(d)所示。
注:
- 权重函数高度依赖于输入点云的分布
- PointConv中MLP的权重在所有点之间共享,以保持排列不变性。
- 计算反密度 S ( δ x , δ y , δ z ) S\left (\delta x,\delta y,\delta z\right ) S(δx,δy,δz):首先使用核密度估计(KDE)估计点云中每个点的密度,然后将密度输入 M L P MLP MLP以进行一维非线性变换。
- 使用非线性变换的原因是网络可以自适应地决定是否使用密度估计。
图释:
- 显示了在 K K K-point局部区域上的PointConv操作。
- C i n C_{in} Cin, C o u t C_{out} Cout为输入特征和输出特征的通道数
- k k k, c i n c_{in} cin, c o u t c_{out} cout为第 k k k个邻居的索引,为输入特征的第 c i n c_{in} cin通道和为输出特征的第 c o u t c_{out} cout通道的索引。
- 输入是点的3D局部位置 P l o c a l ∈ R K × 3 P_{local}∈R^{K×3} Plocal∈RK×3,可以通过减去局部区域的质心坐标和局部区域的特征 F i n ∈ R K × C i n F_{in}∈R^{K×C_{in}} Fin∈RK×Cin来计算。
- 使用 1 × 1 1×1 1×1卷积来实现 M L P MLP MLP。
- 权重函数的输出为 W ∈ R K × ( C i n × C o u t ) W∈R^{K×(C_{in}×C_{out})} W∈RK×(Cin×Cout), W ( k , c i n ) ∈ R C o u t W(k,c_{in})∈R^{C_{out}} W(k,cin)∈RCout是一个向量。
- 密度标度为 S ∈ R K S∈R^K S∈RK。
- 卷积后,将具有 K K K个相邻点的局部区域的特征 F i n F_{in} Fin编码为输出特征 F o u t ∈ R C o u t F_{out}∈R^{C_{out}} Fout∈RCout,如式(4)所示。
F o u t = ∑ 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 ) F_{out}=\sum_{k=1}^{K}\sum_{c_{in}=1}^{C^{in}}S(k)W(k,c_{in})F_{in}(k,c_{in})-------(4) Fout=k=1∑Kcin=1∑CinS(k)W(k,cin)Fin(k,cin)−−−−−−−(4)
注:
- 在光栅图像中,局部区域中的相对位置是固定的。然后,PointConv(仅将相对位置作为权重函数的输入)将在整个图像上输出相同的权重和密度,从而变成传统的离散卷积。
初版本PointConv:
- 学习一个网络来估计卷积的连续权重。
- 对于每个输入点,使用它的相对坐标从MLP计算权重。
- 为了聚合整个点集中的特征,使用了一种层次结构,该结构能够将详细的小区域特征组合为覆盖较大空间范围的抽象特征。
- 层次结构由几个特征编码模块组成,类似于PointNet ++ 。每个模块大致相当于卷积CNN中的一层。每个功能编码模块中的关键层是采样层,分组层和PointConv。
缺点:
每个滤波器都需要由网络来近似,因此效率很低。
3.2. Feature Propagation Using Deconvolution
发现问题:
- 分割任务,需要逐点预测。
- 为了获得所有输入点的特征,需要一种将特征从子采样点云传播到更密集的点云的方法。
- PointNet ++ 提议使用基于距离的插值来传播特征,由于局部区域内的局部相关性,这是合理的。但是,这并没有充分利用反卷积运算的作用,反卷积运算从粗糙级别捕获传播信息的局部相关性。
提出改进:
- 建议在PointConv的基础上添加一个PointDeconv层,作为反卷积操作来解决此问题。
图释:
- 显示了如何针对 m m m类分割任务在网络中对特征进行编码和传播。
- n n n是每一层中的点数, c c c是特征的通道大小。
- PointDeconv由两部分组成:插值和PointConv。
- 首先,采用插值法传播来自上一层的粗略特征。通过最近的3个点线性插值特征来进行插值。
- 然后,使用跳跃连接将内插特征与具有相同分辨率的卷积图层中的特征连接在一起。
- 连接后,将PointConv应用于连接的特征以获得最终的反卷积输出,类似于图像反卷积层。
- 应用此过程,直到所有输入点的特征都传播回原始分辨率为止。
(四)Efficient PointConv
初版本不足:
- PointConv的简单实现非常消耗内存并且效率低下。
由于逆密度标度不存在此类存储问题,因此以下讨论主要集中在权重函数上。
讨论:
- 令 B B B为训练阶段的 m i n i − b a t c h mini-batch mini−batch大小, N N N为点云中的点数, K K K为每个局部区域中的点数, C i n C_{in} Cin为输入通道数, C o u t C_{out} Cout为输出通道数。
- 对于点云,每个局部区域共享相同的权重函数,可以使用 M L P MLP MLP进行学习。
- 但是,根据权重函数在不同点计算出的权重是不同的。
- M L P MLP MLP生成的权重滤波器的大小为 B × N × K × ( C i n × C o u t ) B×N×K×(C_{in}×C_{out}) B×N×K×(Cin×Cout)。假设 B = 32 , N = 512 , K = 32 , C i n = 64 , C o u t = 64 B = 32,N = 512,K = 32,C_{in} = 64,C_{out} = 64 B=32,N=512,K=32,Cin=64,Cout=64,并且滤波器以单点精度存储。一层滤波器的内存大小就为8GB。如此高的内存消耗,网络将很难训练。
改进:
- 提出了一种新颖的重构方法,可以将PointConv简化为两个标准运算:矩阵乘法和2d卷积。
- 这个新颖的技巧不仅可以利用GPU的并行计算,而且还可以使用主流深度学习框架轻松实现。
引理:
- PointConv等效于以下公式: F o u t = C o n v 1 × 1 ( H , ( S ⋅ F i n ) T ⊗ M ) F_{out} = Conv_{1×1}(H,(S·F_{in})^T⊗M) Fout=Conv1×1(H,(S⋅Fin)T⊗M)
- 其中 M ∈ R K × C m i d M∈R^{K×C_{mid}} M∈RK×Cmid是 M L P MLP MLP中用于计算权重函数的最后一层的输入
- H ∈ R C m i d × ( C i n × C o u t ) H∈ R^{C_{mid}×(C_{in}×C_{out})} H∈RCmid×(Cin×Cout)是同一 M L P MLP MLP中最后一层的权重
- C o n v 1 × 1 Conv_{1×1} Conv1×1是 1 × 1 1×1 1×1卷积
证明:
- 通常, M L P MLP MLP的最后一层是线性层。在一个局部区域中,使 F ~ i n = S ⋅ F i n ∈ R k × C i n \tilde{F}_{in}=S\cdot F_{in}\in R^{k\times C_{in}} F~in=S⋅Fin∈Rk×Cin并将MLP重写为1×1卷积,这样权函数的输出为 W = C o n v 1 × 1 ( H , M ) ∈ R C m i d × ( C i n × C o u t ) W=Conv_{1\times1} (H,M)\in R^{C_{mid}×(C_{in}×C_{out})} W=Conv1×1(H,M)∈RCmid×(Cin×Cout) 。
- 令 k k k是局部区域中点的索引,而 c i n c_{in} cin, c m i d c_{mid} cmid和 c o u t c_{out} cout分别是输入层,中间层和滤波器输出的索引。
- W ( k , c i n ) ∈ R C o u t W(k,c_{in})∈R^{C_{out}} W(k,cin)∈RCout是 W W W的向量,而 H ( c m i d , c i n ) ∈ R C o u t H(c_{mid},c_{in})∈R_{C_{out}} H(cmid,cin)∈RCout是 H 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 ) F_{out}=\sum_{k=0}^{K-1}\sum_{c_{in}=0}^{C_{in}-1}\left ( W(k,c_{in})\tilde{F}_{in}(k,c_{in})\right )---------------(5) Fout=k=0∑K−1cin=0∑Cin−1(W(k,cin)F~in(k,cin))−−−−−−−−−−−−−−−(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 ) W(k,c_{in})=\sum_{c_{mid}=0}^{C_{mid}-1}\left ( M(k,c_{mid})H(c_{mid},c_{in})\right )-------------(6) W(k,cin)=cmid=0∑Cmid−1(M(k,cmid)H(cmid,cin))−−−−−−−−−−−−−(6)
将式(6)代入式(5):
F o u t = ∑ k = 0 K − 1 ∑ c i n = 0 C i n − 1 ( ∑ c m i d = 0 C m i d − 1 ( M ( k , c m i d ) H ( c m i d , c i n ) ) F ~ i n ( k , c i n ) ) F_{out}=\sum_{k=0}^{K-1}\sum_{c_{in}=0}^{C_{in}-1}\left ( \sum_{c_{mid}=0}^{C_{mid}-1}\left ( M(k,c_{mid})H(c_{mid},c_{in})\right )\tilde{F}_{in}(k,c_{in})\right ) Fout=k=0∑K−1cin=0∑Cin−1(cmid=0∑Cmid−1(M(k,cmid)H(cmid,cin))F~in(k,cin)) = ∑ 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 ) ) ) =\sum_{c_{in}=0}^{C_{in}-1}\sum_{c_{mid}=0}^{C_{mid}-1}\left ( H(c_{mid},c_{in})\sum_{k=0}^{K-1}\left ( \tilde{F}_{in}(k,c_{in})M(k,c_{mid})\right )\right ) =cin=0∑Cin−1cmid=0∑Cmid−1(H(cmid,cin)k=0∑K−1(F~in(k,cin)M(k,cmid))) = C o n v 1 × 1 ( H , F ˉ i n T M ) − − − − − − − − − − − − − − ( 7 ) =Conv_{1\times1}(H,\bar{F}_{in}^{T}M)--------------(7) =Conv1×1(H,FˉinTM)−−−−−−−−−−−−−−(7)
因此,原始PointConv可以等效地简化为矩阵乘法和 1 × 1 1×1 1×1卷积。下图显示了PointConv的高效版本。
图释:
- 在这种方法中,不是将生成的滤波器存储在内存中,而是将权重过滤器分为两部分:中间结果 M M M和卷积核 H H H。
- 内存消耗减少到原始版本的 C m i d K × C o u t \frac{C_{mid}}{K\times C_{out}} K×CoutCmid。使用与初版本相同的输入设置,并让 C m i d = 32 C_{mid} = 32 Cmid=32,则内存消耗为0.1255GB,约为原始PointConv的1/64。
(五)Experiments
三维数据集:
- ModelNet40,ShapeNet,ScanNet
二维数据集:
5.1. Classification on ModelNet40
实验设置:
- 使用PointNet的源代码对1,024个点进行均匀采样,并根据网格模型计算法向矢量。
- 采用与PointNet相同的数据增强策略,即沿z轴随机旋转点云,并通过均值为零且标准偏差为0.02的高斯噪声使每个点抖动。
实验结果:
图释:
- PointConv在基于3D输入的方法中获得了最好的性能。
5.2. ShapeNet Part Segmentation
实验设置:
- 将每个点的法线方向计算为输入特征,以更好地描述基础形状。
实验结果:
图释:
- 左边的是ground truth,右边的是PointConv预测结果。
5.3. Semantic Scene Labeling
实验设置:
- 从室内房间随机采样3m×1.5m×1.5m立方体来生成训练样本,并在整个扫描过程中使用滑动窗口进行评估。
实验结果:
5.4. Classification on CIFAR-10
实验设置:
- 将CIFAR-10中的每个像素视为具有xy坐标和RGB特征的2D点。
- 训练和测试前将点云缩放到单元球。
实验结果:
表释:
- 对于5层网络,使用PointConv的网络能够达到89.13%,这与使用图像卷积的网络相似。
- 具有VGG19 结构的PointConv与VGG19相比,也可以达到同等精度。
(六)Ablation Experiments and Visualizations
6.1. The Structure of MLP
实验:
- 遍历PointConv中 C m i d C_{mid} Cmid的选择和 M L P MLP MLP的层数。
结论:
- 较大的 C m i d C_{mid} Cmid不一定会提供更好的分类结果。而且, M L P MLP MLP中不同的层数不会给分类结果带来太大差异。
- 由于 C m i d C_{mid} Cmid与每个PointConv层的内存消耗呈线性关系,因此可以选择一个较小的 C m i d C_{mid} Cmid以提高内存效率。
6.2. Inverse Density Scale
表释:
- 具有反密度标度的PointConv的性能比不具有反密度标度的PointConv的性能好大约1%,这证明了反密度标度的有效性。
- 反密度标度在靠近输入的层中往往更有效。在较深的层中, M L P MLP MLP倾向于减小密度标度的影响。一个可能的原因是,使用最远的点采样算法作为子采样算法,更深层的点云倾向于更均匀地分布。
- 较小的步幅可以改善分割结果,而RGB信息似乎并不能显着改善分割结果。
(七)Conclusion
- 提出了一种在3D点云上执行卷积运算的方法,PointConv。
- PointConv在局部点坐标上训练多层感知器,以近似在卷积滤波器中的连续权重和密度函数,这使其排列不变和平移不变。
- 具有与2D图像中基于网格的卷积网络性能相匹配的能力。
大佬推荐讨论的论文,不过由于某些原因一直没时间看,有点抱歉,随缘刷到吧。