赞
踩
参考的论文是这篇:
PointNet:
https://arxiv.org/abs/1706.02413
PointNet++:
https://arxiv.org/abs/1612.00593
官方的源码pytorch版本:
官方源码中语义分割sempseg的部分改了很多次依然没跑起来,后找b站一位博主改良的PointNet框架代码顺利运行,有需要的可以参考一下这个,个人觉得比较清晰:
【完整版】3D点云(3D point cloud)实战解析,PointNet、PointNet++、GCN算法解读!_哔哩哔哩_bilibili
图像处理比起点云处理来说,有什么不同:对一个二位图像来说,除开RGB的维度,一般都是拆分分成三个维度各自处理,颜色维度上测度为255(默认颜色是连续的);在location中XY的维度上测度为0,是一个有限的二维点集,不可导不可积,即在X和Y的维度上,相邻的元素两两从整体上没有紧密的联系,映射到欧几里得空间时为一个点,在转换时不需要考虑描述过程;所以对图像处理的根本就是对一个”有序“的一维向量点集做处理(可以思考为什么是有序,而对于到点云是”无序“的),在经典神经网络框架中表示在输入为有限的常量。CNN引入了卷积的概念,下面说法中以3×3的卷积为例,在同在一个卷积核内,使得每一个点与周围(包括斜距上相邻)的点产生联系。
点云是三维数据,由大量的点组成。每个点都包含位置信息和可能的其他属性(如法线、颜色等)。在点云中,点的位置不仅限于二维平面,而是可以在三维空间中任意位置,location中XYZ都是可密的,且具有连续性(具体见最下方的连续性假设):因为点云中的点表示了物体表面或场景的采样,相邻的点会紧密地排列在一起,形成连续的曲面。没有明确的排序规则,即无序性,这是因为点云的采集是基于扫描或传感器获取的,而不是像素网格化,且采样时是非均匀的,与图像像素网格采样不同的是在点云中,采样点的密度可以在不同区域变化,取决于物体表面的形状和曲率。
连续性假设告诉了点云处理已经自带了与临近点的关系,更关注于点云中的局部结构和特征来拟合与周围点的特征。与图像处理中的卷积操作类似的是,点云处理更倾向于利用点云中的某局部区间内信息进行特征提取和分析。例如,利用点云中每个点周围的邻域信息来计算法线、描述局部几何等。点云深度学习框架PointNet和PointNet++(下用PointNet代指这两种框架)沿用了传统CNN的架构模式,但在处理点云数据时进行了一些改良,与传统CNN将输入视为二维图像,输入为单维度常量值不同,PointNet输入为点云数据视为一组三维向量的集合。
首先,PointNet引入了一个称为"局部特征变换"的模块来代替原卷积的概念。该模块可以将点云数据中的局部特征转换到球领域卷积模式下。PointNet依然使用多层感知机(MLP)来对每个点的局部特征进行处理和聚合;这些MLP层的输出会被用来更新当前点的特征表示,并反映其周围点的信息;通过逐层堆叠,PointNet可以将局部特征逐渐聚合为高层的全局特征。在每一层,上一层的特征会被用来更新当前层点的特征表示,并反映其周围点的信息;通过迭代高层特征聚合的过程,PointNet可以逐渐聚合全局信息,并将其编码为点的特征表示。
延着以上的处理思路,看一下PointNet具体是怎么做的。
区别一下常用的欧式距离,是距离的一种高纬度表示;定义:对于一个度量空间(X,d),其中 X 是集合,d 是定义在 X 上的函数 d: X × X → R,满足以下性质:
非负性:对于任意的 x, y ∈ X,有 d(x, y) ≥ 0,并且当且仅当 x = y 时,有 d(x, y) = 0。
同一性:对于任意的 x, y ∈ X,有 d(x, y) = 0 当且仅当 x = y。
对称性:对于任意的 x, y ∈ X,有 d(x, y) = d(y, x)。
三角不等式:对于任意的 x, y, z ∈ X,有 d(x, z) ≤ d(x, y) + d(y, z)。
便可以称d是X上的一种度量表示。
X是一个非空集合,d(x,y)是R上的二元函数,d满足X的度量函数定义,则称d(x,y)为两点x,y之间的距离,X按距离d成为度量空间或距离空间,记为(X,d);
设X为任一非空集合,定义映射d:X×X→R如下
⑴对于X中任意元素x,d(x,x)=0;
⑵如果x,y是X中两个不同元素,则d(x,y)=1.
则这样定义的d是集合X的一个度量。这样的度量称为离散度量。
简单点,距离被二分化了,只有0和1,这样度量空间中收敛序列的极限就是唯一的了,这意味着在离散度量空间中,不存在元素之间的中间点或连续的路径。
离散度量空间上的拓扑结构是离散拓扑,空间中的每个单点都可以看作是一个开集,所以任意子集都可以表示为开集的并集。
由所有的 n元实数组(x1,x2,…,xn)构成集合Rn,Rn中元素x=(x1,x2,…,xn)与y=(y1,y2,…,yn)之间的距离定义为d(x,y) =√Σ(x-y)²,就是我们常说的欧式距离。
满足度量定义,在度量空间中PointNet都可以使用。
类比图像处理中的特征向量函数,我们将它映射到三维空间中来。
假设X=(M,d)是一个离散的度量空间,其中的度量继承自欧几里德空间Rn,这里M⊆Rn是点集,d是距离度量。此外,欧几里得空间中的M地密度可能并非处于均匀状态。目的是找到学习集合函数f,它将X作为输入(和每个点的附加特征),并且生成我们感兴趣的语义信息。这样的f可以使将整体X分配标签的分类函数(目标识别),也可以是对其中每个点进行分类的分割函数(语义分割)。
即怎样划分点集的分区,每个分区被定义为欧式空间的一个邻域的球,他的参数包含球心和半径。为了均匀的覆盖整个集合,通过最远点采样算法在输入点集中选择质心。以与固定步幅扫描空间的体积体素CNN相比,感受野也依赖于输入数据和度量,因此更高效。仍然存在的一个问题是如何生成点集的重叠分区。
由于特征尺度的纠缠性和输入点集的非均匀性,确定合适的局部邻域球的尺度大小常常意味主观性和分监督性。由于输入点集可能在不同的区域有不同的密度,因此,输入点集和CNN的输入是很不相同的,CNN输入被视为在均匀恒定密度的规则网格上定义的数据。在CNN中,使用较小的kernel是一件很好的事情,但是在这里,由于采样的不足,小的邻域由更少的点组成,由于点云的不均匀可能会导致,Feature extractor容易收到稀疏点云不稳定的影响。
从输入开始,我们上面已经强调过了许多次点的无序性,那怎样保证一个相同的点云由于点的无序性产生的不同样本对神经网络产生相同的影响?需要模型具有一定的置换不变性,即:
x为点向量,f(x)为学习函数,Rn为度量空间;
例如f(x) = max(x)、f(x) = sum(x)的就理所当然地具有置换不变性,但那样损失的特征就太多了,也没有重点关注到局部操作;
先扩充特征再做置换不变性,先升维再做max操作:
给定一个无序的点集{x1,x2,…,xn},可以定义一个集合函数f:X→R,他将一组点映射到一个向量:
此处的gamma和h一般用的都是MLP;
不懂请看图:
上述操作分装一下就是我们熟悉的经典神经网络中的隐层操作;
问题来了,h(x)难以选择,怎样把3维的特征扩张到n维呢,显然一个点是信息有限的,上述我们也提到过,并不会过多关注一个点的特征,更关注的是局部的特征,所以这里的h(x)选择就是卷积操作(经典神经网络中为全连接操作),所以我们可以扩充一下上面这张图:
Input Transform:这是PointNet的第一个层级,它负责将n*3(此例以n*3的点云数据样本为例)点云数据转换为规范化的形式。具体来说,它会对每个点进行坐标变换和规范化,以便后续的神经网络模型更好地处理点云数据。
MLP:特征升维特征感知机(64*64的矩阵)。该层级负责从点云数据中扩充抽象特征,以便更好地区分不同类别的点云。MLP层级的输出变换每个点的特征向量64*n,它们被送入下一个层级。
Feature Transform:它与Input Transform非常相似,但它是在特征空间中进行的。Feature Transform层级负责学习一个变换矩阵,该矩阵可以将每个点的特征向量转换为另一个特征空间中的表示,从而更好地捕捉点云数据的局部特征。
MLP:特征升维特征感知机(64*128*1024的矩阵)。该层级负责从点云数据中提取特征。
Max Pool:负责将整个点云的特征向量汇总为一个全局特征向量。具体来说,它会对每个点的特征向量进行最大池化操作,得到整个点云的汇总特征,以便进行整体分类或分割等任务。
后续通过global feature特征归一化:
映射到point feature通过全连接层得到output;
总体来说,除预处理和卷积操作的不同外,整体网络架构和CNN来说还是具有很大相似性的,就是将CNN中升维,将平面引入到空间,由距离引入到度量。
PointNet++比起PointNet来说,基于半径选择了一些局部区域(类似得到很多类的簇---非监督算法中的聚类任务),针对得到的每个区域进行特征提取,比起PointNet更加关注于局部特征(++选取的就是法向量信息,局部拟合加上法向量对目标的形状做出分类的效果明显);
Sampling layer: 给输入点集{x1,x2,…,xn},我们使用最远点采样算法来选择一个子集,采样策略以依赖数据的方式生成感受野:
Grouping layer.:该层的输入是一个大小为N×(d+C)的点集,和一组大小为N′×d。输出是大小为N′×K×(d+C),其中每一个分组N′对应一个局部区域,K是中心点相邻点的个数。
在卷积神经网络当中,像素的局部邻域有带由索引的像素数组组成,其大小为曼达顿距离(kernel size)。从度量空间采样的点集中,点的邻域由度量距离定义(也就是欧氏距离);
和kNN相比,ballquery查询保证了局部领域的固定大小,从而使局部区域特征在空间上更具有通用性,这是局部模式识别任务的首选。
PointNet layer:在这一层中,输入为N′个local regions,大小为N′×K×(d+C)。输出中的每个局部区域有中心和对中心邻域进行编码提取特征。输出数据大小为N′×(d+C′)。局部区域中的点的坐标,首先以中心点转化为局部坐标,
其中的i=1,2,…,K和j=1,2,…,d其中的x^是中心点坐标。通过使用相对坐标和点特征,我们可以捕获局部区域中点和点之间的关系。
持续更新中...
连续性假设:实际的点云结构是不满足的连续性的,但在理想情况下,即默认点数越多,越接近于实际表面物体,所以在点密度β足够大时,对于任意一点x,可以保证对于任意小的σ,都存在足够大的密度β和点x0,使得|x-x0| < σ。当然这个假设实际在数学分析中只是稠密的概念,但由于点云本来也不关注某一个点的性质,更关注于某一个区间的性质,所以这里将有理数的稠密和连续在点云中也假设成同一概念了。连续性假设是一个很重要的假设,它能保证在3维中的卷积核在神经网络中的特征提取等价于二维中的卷积核的特征提取。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。