PointConv解读

丶灬走出姿态 提交于 2019-12-09 22:36:00

PointConv:Deep Convolutional Networks on 3D Point Clouds

摘要

传统的卷积是作用在二维图像数据上,图像数据通常可以表示成密集的网格形式。在CNN中,每个滤波器被限制在一个小的局部区域内,例如3×3;5×5等。在每个局部区域内,不同像素之间的相对位置总是固定的,如图(a)所示。并且我们可以容易地将滤波器离散化,成为具有局部区域内的每个位置的实值权重的总和。
三维数据通常是以点云的形式表示,就是一组无序的三维点,一组点云集合可以表示为一组3D点的集合{p_i|i=1,…,n},其中每个点包含一组位置向量(x,y,z)或其它信息如颜色、表面切线等。不同于图像,点云的表示形式更灵活。在坐标系p=(x,y,z)∈R^3中,一个点的坐标不会限制在一个固定网格里,而是有可能取任意的连续值(如图(b)和(c)所示,一个点云在不同的局部区域内的顺序和相对位置都是不同的)。因此,每个局部区域中不同点的相对位置是不同的。栅格化的图像上的传统离散卷积滤波器不能直接应用于点云,因此,在点云数据上使用卷积是困难的。

在这里插入图片描述

介绍

3D CNN网络上的大多数工作都将3D点云转换为2D图像或3D体积网格,然后应用2D、3D卷积网络进行处理。最新的有将点云直接作为输入处理的工作,例如:

(1) PointNet:Deep Learning on Point Sets for 3D Classification and Segmentation

首先独立地处理每个点进行一定程度的特征提取,然后利用最大池化得到一个全局特征,但是PointNet没有利用数据局部的相关性,使用最大池化容易丢失有用的信息。

(2) PointNet++:Deep Hierarchical Feature Learning on Point Sets in a Metric Space

在PointNet基础上添加了分层抽取特征的想法,每个图层都有三个子阶段:采样层,组合层和特征提取层,不同尺度提取局部特征,通过多层网络结构得到深层特征。解决了点云密度不同的问题,但是计算量过大并且使用最大池化容易丢失有用的信息。

(3) PointCNN:Convolution On X -Transformed Points

提出了根据输入点学习一种X变换,然后将其用它来同时对点关联的输入特征进行加权和置换。但是无法实现排列不变性。

本文使用点云作为输入,通过学习一个MLP来估计权重函数,然后通过在权重上应用反转密度缩放来补偿非均匀采样造成的影响。由于PointConv是卷积的完全近似,因此由PointConv可以很方便的得到PointDeconv,使用它可以提高点云分割任务的性能。

PointConv

在3D空间中,可以把连续卷积算子的权重看作是关于一个3D参考点的局部坐标的连续函数:

在这里插入图片描述
其中W和F均为连续函数,F是以点p(x,y,z)为中心的局部区域G中点的特征。一组点云可以视为从一个连续空间R^3进行非均匀采样的结果。在每个局部区域中,(δx, δy, δz)可能是局部区域的任何可能的位置,上式可以离散化到一个离散的3D点云上:
在这里插入图片描述
S(δx, δy, δz) 是点(δx, δy, δz)处的逆密度估计,然后使用逆密度估计对学到的权重进行加权,补偿不均匀采样。

PointConv

原生PointConv:

在这里插入图片描述
(a)显示了一个局部区域,其点的坐标已从全局坐标转换为局部坐标,p是点的坐标,f是相应的特征.
(b)显示了在以一个点(p_0,f_0)为中心的一个局部区域上执行PointConv的过程。

红框部分:估计权重函数W。
篮框部分:估计反密度函数S。

原生PointConv运算步骤:
① 给定输入点p,通过K近邻得到局部区域中的k个点,输入为3D局部位置坐标信息,记为P_local ∈ R(K×3),P_local通过减去局部区域的质心的坐标来计算。
②通过核密度估计(KDE)计算反密度,然后通过MLP2进行映射等到S,对S进行复制平铺,最后得到大小为K × C_in 的反密度张量。
③把②和输入特征F_in(K × C_in)进行点乘运算,输出大小为K × C_in,再经过复制平铺,最后得到大小为K × (C_in × C_out)的中间张量(F_in)~
④把P_local的k个点坐标输入MLP1,输出大小为K × (C_in × C_out)的权重张量。
⑤把③和④进行点乘运算,输出大小为K × (C_in × C_out)的张量,最后求和得到下式(4)F_out。

在这里插入图片描述

高效PointConv:

但是,由于原生的PointConv内存消耗巨大并且效率低下,本文作者提出了一种新的重构方法,这种方法通过将原生的PointConv减少到两个标准操作来实现:矩阵乘法和2d卷积。

在这里插入图片描述

因为反密度估计函数不存在内存问题,所以下面的讨论主要集中在权重函数上。将训练阶段的mini-batch size记为B,点云中的点的个数记为N,每个点的邻域点集个数记为K,C_in为输入点的通道数,C_out为点的输出通道通道数。对一个点云而言,每部分局部区域都共享从MLP习得的相同的权重函数。但是对不同位置的不同点而言,运算得到的权重应当是不同的。由MLP生成的权重卷积核参数大小约为B × N × K × (C_in × C_out)。假设B=32,N=512,K=32,C_in=64,C_out=64,并且卷积核以单点精度进行存储。那么在这种情况下,单层网络的卷积核内存占用就达到了8GB,如此之高的内存占用情况使得网络几乎无法训练。为此,本文提出以下内存高效版PointConv:

PointConv等价于以下公式:
在这里插入图片描述

其中M ∈ R^(K ×C_mid)^是用于计算权重函数的MLP中最后一层的输入,H ∈ R(C_mid×(C_in×C_out))是同一MLP中最后一层的权重,Conv_1×1是1*1的卷积。

通常,MLP的最后一层是线性层。在某一个局部区域中,假设(F_in)~=S·F_in ∈ R(K×C_in),并且以1*1卷积的形式重写MLP,这时权重函数的输出为W=Conv_1×1(H,M) ∈ R(K×(C_in×C_out)),假设k为局部点集中,点的序列号,c_in,c_mid,c_out分别指代输入,中间层,卷积核的输出。这时W(k,c_in)∈RC_out为从函数W中得来的一个向量。而H(c_mid,c_in)∈RC_out为从函数H中得来的一个向量。由公式(4)可知,PointConv可以写成如公式(5)中的形式。

在这里插入图片描述
式(5)中的权重函数的输出可以表示为:
在这里插入图片描述
把式(6)代入式(5)可得:
在这里插入图片描述

即高效的PointConv是将卷积核分为两部分:中间结果M和卷积核H。内存大小变为:B×N×C_mid×C_in,内存开销仅为原生PointConv的C_mid/(K*C_out)倍。

PointDeconv
对于语义分割任务,需要逐点预测。为了获得所有输入点的特征,需要一种将特征从二次采样点云传播到更密集的点的方法。本文提出添加一个基于PointConv的PointDeconv层作为反卷积操作来解决这个问题,充分利用反卷积操作来捕获来自粗粒度级别的局部相关信息。

如图4所示,PointDeconv由两部分组成:插值和PointConv。首先,我们使用插值来传播前一层的粗粒度特征,通过从3个最近点来进行线性特征插值。然后,使用skip links将插值特征与来自卷积层的具有相同分辨率的特征连接起来。连接后,我们在连接的特征上应用PointConv以获得最终的反卷积输出。我们反复执行此过程,直到所有输入点的要素已传播回原始分辨率。

在这里插入图片描述

实验结果
1、ModelNet40分类任务
在这里插入图片描述
2、ShapeNet 零件分割
在这里插入图片描述
3、CIFAR-10分类结果
在这里插入图片描述
4、场景语义标注
在这里插入图片描述

结论
本文中,我们提出了一种新的方法来对3D点云进行卷积运算,称为PointConv。PointConv训练局部点坐标上的多层感知器,从而近似卷积核中的连续权重和密度函数,这种方法使得它自然地具备序列不变性和平移不变性。使用该卷积,可以直接在3D点云上构建深度卷积网络。并且提出了一种有效的实现方法,大大提高了它的可扩展性。

主要贡献:
(1)提出PointConv,一种密度函数重加权卷积,它能够在任何3D点集上完全逼近3D连续卷积。
(2)设计了一种内存高效的方法来实现PointConv,即通过求和顺序技术的变化提升性能。
(3)将PointConv扩展为反卷积(PointDeconv)版本以获得更好的分割结果。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!