PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation: 用于3D分类和分割的点集深度学习
点云是一种重要的几何数据结构。由于其不规则的格式,大多数研究人员将这些数据转换为规则的三维体素网格或图像集合。然而,这会使数据变得不必要地庞大,并引发问题。在本文中,设计了一种直接消耗点云的新型神经网络,它很好地尊重了输入中点的排列不变性。网络名为PointNet,为从对象分类、部分分割到场景语义分析的应用程序提供了统一的架构。虽然简单,但PointNet非常高效。从经验上讲,它表现出与现有技术相当的强大性能。
网络输入:点云输据(point clouds);
网络输出:将输入视作一个整体的标签,或输入内每个分割部分(segment/part)的标签,即分类或者分割任务。
1)输入为一帧的全部点云数据的集合,表示为一个nx3的2d向量,其中n代表点云数量,3对应xyz坐标。
2)输入数据先通过和一个T-Net学习到的转换矩阵相乘来对齐,保证了模型的对特定空间转换的不变性。
3)通过多次mlp对各点云数据进行特征提取后,再用一个T-Net对特征进行对齐。
4)在特征的各个维度上执行maxpooling操作来得到最终的全局特征。
5)对分类任务,将全局特征通过mlp来预测最后的分类分数;对分割任务,将全局特征和之前学习到的各点云的局部特征进行串联,再通过mlp得到每个数据点的分类结果。
网络结构图
下图中,将PointNet用于图像分类以及图像分割两种功能。可以看出,输入的点云需要进行变换也就是与通过T-Net得到的矩阵相乘;得到的向量经过mlp特征提取,将特征向量在与T-Net得到的矩阵相乘;在输入到一个mlp中,最后经过maxpooling得到1024维的向量。在进行分类或者分割认任务。
分类任务:分类任务直接将1024维特征向量输入一个mlp网络,最后得到k维向量,在经过softmax得到k种分类的分数,取最高分数就是得到的类别。
分割任务:分割任务是将图片中不同物品区分,连接全局和局部特征,这里将1024维向量复制成n份(n个点云)与前面的n64维特征向量拼接,得到n1088维向量,这里实现了全局与局部连接,在输入一个mlp中,得到128维向量(点特征),将该向量输入mlp中,经过m个节点,得到n*m个向量,就是n个点云对应m类物品的分数。
1.点的无序性:点云是无序的集合,点与点之间没有严格的顺序,如将两个点交换之后仍然表示同一个点云。
2.点之间的相互作用:虽然点云的点是离散的,但是却可以共同组成物体或者环境的轮廓。这意味着点之间不是孤立的,相邻点形成一个有意义的子集。因此,模型需要从点的附近的点捕捉局部结构,以及局部结构之间的相互作用。
3.变换不变性:点云进行刚性变换(旋转平移)后,再进行输入,输出的分类或者是分割结果不变。
针对不同性质在网络中做出的操作:
transform中的T-Net是为了解决点的无序性,将不同形状的点云或者特征进行转换获得对齐的点云。第一个中的 3x3矩阵 ,对输入点云进行对齐:位姿改变,使改变后的位姿更适合分类/分割。第二次,T-Net 中的64x64矩阵 ,对64维特征进行对齐。
这里提出使用maxpooling函数就是符合点云的变换不变性以及获得点云的全局特征,即数据无论如何变换位置,经过该函数总是输出最大值。并且,如果不进行MLP神经网络进行升维直接进行池化操作提取特征,那么n个点提取的值很少,然后在进行K分类,损失特征太多了,所以在进行池化操作前要进行升维,提取点云的特征,让特征足够多。
这里参考的学习链接
https://www.cnblogs.com/fusheng-rextimmy/p/15334347.html
https://zhuanlan.zhihu.com/p/196230296
作者还引入了两个相关的定理
1、证明了PointNet的网络结构能够拟合任意的连续集合函数。
2、PointNet能够总结出表示某类物体形状的关键点,基于这些关键点PointNet能够判别物体的类别。这样的能力决定了PointNet对噪声和数据缺失的鲁棒性。如下图
NeRF加速
Point-NeRF: Point-based Neural Radiance Fields:基于点的神经辐射场 (CVPR 2022)
NeRF 的体积神经渲染方法会生成高质量的视图合成结果,但会针对每个场景进行优化,从而导致重建时间过长。另一方面,深度多视图立体方法(MVS)可以通过直接网络推理快速重建场景几何。 Point-NeRF 通过使用具有相关神经特征的神经3D 点云来模拟辐射场,从而结合了这两种方法的优点。 Point-NeRF 可以通过在基于光线行进的渲染管道中聚合场景表面附近的神经点特征来有效地渲染。此外,Point-NeRF 可以通过直接推断预训练的深度网络来初始化,以生成神经点云;这个点云可以被微调以超过 NeRF 的视觉质量,训练时间快 30 倍。Point-NeRF 可以与其他 3D 重建方法相结合,并通过一种新颖的剪枝和生长机制来处理此类方法中的错误和异常值。
Point-NeRF主要创新:通过MVSNet得到初始神经点云场景,然后利用神经点云和神经特征来构建一个基于点的辐射场渲染场景。点云已经标记了surface附近的点,这些点带来的空间信息可以大大减少渲染的压力,减少空白区域的采样。
首先定义如下点云:P=(pi ,fi ,γi)i=1,…,N,位置pi,记录点的空间坐标;点特征fi ,记录局部场景信息的神经特征向量fi;置信度γi,用以预测点在表面上的概率。
作者提出一个神经点云生成模块,使用前馈神经网络进行两次点云属性的预测。首先进行深度预测,对深度置信体进行三次线性采样获得每个点的pi和γi。然后进行特征预测,使用一个二维的卷积神经网络进行卷积计算得到驻点的fi。网络的直接推理输出了一个良好的基于点云的辐射场,并且该点云可以被微调。流程图如下图所示:
第一个网络Gp,γ ,对于每个在视点q处具有相机参数Φq的输入图像Iq,遵循MVSNet,首先通过从邻近视点弯曲二维图像特征来构建平面扫描代价体积,然后使用深度3D cnn回归深度概率体积。深度图是通过线性组合每个平面的深度值加权概率来计算的。将深度图反投影到3D空间,得到一个点云{p1,…, pNq}。深度概率描述了点在表面上的可能性,我们对深度概率体积进行三线性采样,以获得每个点pi的点置信度γi,可以有如下公式表示
第二个网络Gf,使用2D CNN 从每个图像Iq中提取神经2D图像特征图,这些特征图与Gp,γ的点(深度)预测对齐,并用于直接预测每个点的特征fi: {fi} = Gf (Iq)
从相机位置向场景发出射线,沿着该射线寻找离surface比较近的点,以该点为中心划定指定半径的球区域。该区域内的k个临近点就可以用来传递进MLP做卷积计算获得目标点的RGB值和体密度。整个过程是端到端可训练的,Point-NeRF可以根据渲染损失进行优化。下图中的公式中,x表示点位置,d表示观看方向,k个点的点云信息:位置、神经特征向量、置信度。
该网络与PointNet网络类似,由多个子MLP的神经网络来做回归,即首先对每个神经点进行处理,然后将多点信息进行聚合,得到最终的预测值。
使用MLP F来处理每个相邻的神经点,通过以下方法预测阴影位置x的新特征向量:
fi,x = F (fi, x − pi).
原始特征 fi对pi周围的局部 3D 场景内容进行编码,该 MLP 网络表示一个局部 3D 函数,该函数在 x 处输出特定的神经场景描述 fi,x ,由其局部帧中的神经点建模。
首先利用标准的逆距离加权(standard inverse distance weighting)来聚合从F中回归得到的fi,x ,以此来得到一个用来描述x处场景表示的简单特征值fx
定义第二个MLP R,用来从给定观测方向d回归r: r=R(fx,d)
逆距离加权被广泛应用于稀疏数据的插值,文章使用它来聚合神经特征,使得更近的神经点为渲染计算贡献更多。
运用逆距离加权方式和定义的第三个MLP T来计算σ :同样计算每个临近点的密度,在进行加权计算得到该点的密度σ
每个神经点直接贡献体积密度,点置信度γi与这种贡献明确相关
体渲染过程如下
下图详细介绍了计算密度和颜色的网络结构,可以看到首先F网络计算了k个点的特征,经过加权计算与编码后的观看方向联合,输入R中,得到颜色,k个点的特征输入网络T中,得到单个点的密度,在进行加权计算得到x处的密度值。
来自外部重建方法的点云(Metashape或COLMAP),通常会包含降低渲染质量的孔和异常值。在逐场景优化过程中,为了解决这个问题,直接优化现有点的位置会使训练不稳定,无法填充大洞。相反,采用了新的点修剪和生长技术,逐渐提高几何建模和渲染质量。
设计了点置信值γi,用于描述神经点是否靠近场景表面。利用这些置信值来剔除不必要的异常点。注意,点置信度与体积密度回归中的点贡献直接相关;因此,低置信度反映了一个点的局部区域的低体积密度,表明它是空的。因此,每10K迭代一次,修剪γi< 0.1的点。同时引入对点置信度的稀疏性损失:
这种剪枝技术可以去除离群点,减少相应的伪影。
提出了一种新的技术来生长新的点来覆盖原始点云中缺失的场景几何。与直接利用现有点的信息的点修剪不同,增长点需要在不存在点的空区域恢复信息。通过逐步增长点云边界附近的点,基于point-nerf表示建模的局部场景几何来实现这一点,点生长尤其有利于通过COLMAP等方法重构的不密集的点云。
下图是有无修剪以及生长技术的对比图
除了上文介绍的点置信度的稀疏性损失,还有渲染的损失函数,a取 2e−3,每10K次迭代执行点生长和修剪,以实现最终的高质量重建
Point-NeRF引入神经点云的辅助,改善了NeRF训练速度慢、泛化性弱的问题,并且点云在大场景生成中依旧有不俗的表现力。
参考链接
https://www.scholat.com/teamwork/showPostMessage.html?id=11771&teamId=1158
https://blog.csdn.net/weixin_44292547/article/details/126304131