FightingCV

V1

2022/12/12阅读:205主题:默认主题

CVPR 2022 Oral | Nerf模型训练太慢了,那就试试更快的Point-NeRF吧

CVPR 2022 Oral | Nerf模型训练太慢了,那就试试更快的Point-NeRF吧

1. 论文和代码地址

论文题目:Point-NeRF: Point-based Neural Radiance Fields

论文地址:https://arxiv.org/abs/2201.08845[1]

代码地址:https://github.com/Xharlie/pointnerf[2]

2. 动机

NeRF这样的体积神经渲染方法可以生成高质量的视图合成结果,但是它需要对每个场景进行优化,导致重构时间过长。

另一方面,多视角立体方法(MVS)可以通过直接的网络推理快速重建场景几何形状。

Point- NeRF结合了这两种方法的优点,使用神经三维点云和相关的神经特征来建模辐射场,可以比避免在空的透明空间上浪费大量时间来重构,从而提高效率,与NeRF相比有几十倍的提速。此外,Point-NeRF也可以基于其他点云重建技术的生成辐射场,具有一定的泛化性。

3. 方法

如图所示,与传统NeRF模型不同,Point-NeRF并非直接利用图像输入,而是先利用点云生成模块生成点云数据(如图a所示),再以点云作为NeRF模型的输入生成辐射场(如图b所示)。

3.1点云生成模块(Neural Point Generation)

将图像分别输入 中,其中 为3D CNN模块。论文利用深度MVS方法与3D CNN来生成3D点位置,具体而言,首先输入图片 以及相机参数 ( 是视角),利用3D CNN通过平面扫描算法(plane-sweep)构建成本量(cost volume),从而得到深度图和每个点相对应的深度概率,将深度图进行反投影(unproject)便可获得点云数据 ,再对深度概率量进行三线性采样,以获得每个点 处的点置信度 (该点属于物体表面的概率),具体公式如下所示,其中 ...是在MVS重建中使用的附加相邻视图,在大多数情况下使用两个附加视图来进行重建:

为2D CNN模块,论文采用VGG作为它的网络架构来直接对图像进行卷积,从而获得不同尺度下的图像特征,公式入下所示:

然后将点云投影到输入图片的特征图上,将投影点对应的特征向量(不同尺度下特征的聚合)作为点云的特征向量 ,至此,我们获得了每幅图像的点云位置 ,点置信度 以及对于特征向量

3.2基于点云的体渲染模块

整体体渲染模块的推理流程如下图10所示:

当体渲染部分的输入已知。 为若干个点云, 代表其空间位置, 为特征向量,其编码了点云局部场景信息, 为置信度,取值范围为 [0,1] ,表示这个点位于物体表面上的可能性。

传统的NeRF模型直接利用MLP对光线上的采样点查询其辐射值(radiance)和体密度(volume density),而Point-NeRF对每个采样点,查询其在给定半径 (论文中未提及如何取值)中的 个点云,如下公式2所示,以采样点位置 ,光线方向 以及 个点云作为输入,输出其辐射值和体密度。这样做的好处是不用计算没有点云的空间,从而极大地提高了体渲染的效率。

该公式可以继续细化。

首先是公式3,因为点云对于每个采样点的意义都是不一样的,因此,该公式是用于计算点云 相对于采样点 的特征向量。其中 是点云特征向量, 是采样点位置, 代表点云pi到采样点 的相对位置(利用相对位置,实现在点云平移的情况下网络的输出不变性),将特征向量和采样点相对位置输入MLP ,输出点云 对于采样点位置 的特征向量 (注意区分 ,前者只与点云有关,后者还与采样点位置有关)。

接着是公式4,该公式是计算采样点 对应的向量特征 的。在计算出点云 相对于特定采样点 的特征向量后,利用每个点云的置信度 以及点云到采样点 的标准反转距离作为权重 ,对每个点云相对于采样点 的特征进行加权求和,最终得到采样点 对应的特征向量 。具体公式如下所示:

之后,再将得到的采样点 的特征向量 与光线方向 一起输入MLP 中,得到该点的辐射值 。公式如下所示:

最后是体密度 的计算。与辐射值的计算不同,体密度的计算先通过MLP 获得每个点云相对于采样点 的密度,如公式6所示。然后再利用每个点云的置信度 以及点云到采样点 的标准反转距离作为权重 ,对每个点云相对于采样点 的密度进行加权求和,如下公式7所示:

至此,我们已经获得了每个采样点的辐射值r与体密度的σ,利用传统的体渲染公式1便可计算光线对应的像素点颜色。

Point-NeRF的训练过程

如上图3所示是Point-NeRF训练的一个基本流程。论文使用渲染损失,端到端地训练生成网络和表示网络,通过优化神经点云的点特征和点置信度以及MLP,来提高神经辐射场的质量。

初始的点云往往有空洞或离群点,这会影响到渲染质量。在对场景的优化中,文章发现直接优化现存点的位置会让训练不稳定并且并不能填补空洞,于是,文章使用了point pruning和point growing两种优化技巧来逐步提升几何模型和渲染的质量。

1. Point pruning

点置信度 描述了神经点是否离表面很近,论文通过置信度来修剪掉不必要的离群点。注意到点置信度与每个点对特定采样点的体密度的贡献直接相关,因此,低置信度反映了一个采样点局部区域的低体素密度,很有可能这里就是空的。因此,每10000 次迭代就删去置信度小于0.1的点。文章在这里也引入了一个loss,具体如下公式10所示,通过优化这个loss能强制 尽量趋近于0或者尽量趋近于1,从而方便裁剪:

具体效果如下图4所示:

2. Point growing

论文还提出了一种新的技术来生成出新的点来覆盖原始点云中缺失的场景几何。

文章利用在光线行进中采样的每条光线的着色位置 来识别新的候选点。具体来说,确定沿光线不透明度最高的着色位置

如果不透明度超过阈值,并且 和最近邻神经元点的距离超过阈值,就在 这个点生成一个神经元点。这意味着该位置靠近表面,但远离其他神经点。通过重复这个增长策略,神经辐射场就可以扩展到覆盖最初点云中缺失的区域。点增长尤其有利于通过COLMAP等方法重建的不密集的点云(见图4)。

实验表明,即使在只有1000个初始点的极端情况下,也能够逐步增长新的点,并合理覆盖物体表面(见图5)。

3.Implementation details

Network details

里的三个层级多尺度特征提取时,向量是56x(8+16+32)个通道。最终的每个点的神经特征是59通道的向量。

Training and optimization details:

整个pipeline在DTU数据集上训练。先预训练MVSNet深度生成网络,然后训练整个渲染的网络,使用L2 rendering loss。文章声称前向传播只需要0.2 s就由3个视图能生成点云。 在对每个场景优化的阶段,loss函数如下:

4.实验

表1显示了所有方法在PSNR、SSIM和LPIPS三个指标上的定量结果

定性渲染结果如图6所示

表2显示了在 NeRF 合成数据集上不同方法的定量结果

图7显示了在NeRF数据集上不同方法具体的效果

Ablation Studies on Point Features Initialization

点特征初始化的消融研究如下表5所示:

5. 总结

Point-NeRF成功地结合了经典点云表示和神经辐射场表示的优点,为高效和真实感的实际场景重建解决方案迈出了重要的一步。

参考资料:

[1]https://blog.csdn.net/zp\_jlu/article/details/124093995[3]

[2]https://arxiv.org/abs/2201.08845[4]

[3]https://blog.csdn.net/YuhsiHu/article/details/123939121[5]

参考资料

[1]

https://arxiv.org/abs/2201.08845: https://arxiv.org/abs/2201.08845

[2]

https://github.com/Xharlie/pointnerf: https://github.com/Xharlie/pointnerf

[3]

https://blog.csdn.net/zp_jlu/article/details/124093995: https://blog.csdn.net/zp_jlu/article/details/124093995

[4]

https://arxiv.org/abs/2201.08845: https://arxiv.org/abs/2201.08845

[5]

https://blog.csdn.net/YuhsiHu/article/details/123939121: https://blog.csdn.net/YuhsiHu/article/details/123939121

分类:

人工智能

标签:

人工智能

作者介绍

FightingCV
V1

公众号 FightingCV