【三维重建】【深度学习】NeuS总览

NeuS是一种新的神经表面重建方法,利用有符号距离函数(SDF)和创新的体绘制技术,从2D图像中实现精确的3D重建,尤其适用于复杂结构和自遮挡的场景。文章介绍了NeuS的基本架构,包括数据管理、参数设置和NeuS网络的各个模块,如SDFNetwork和RenderingNetwork,并强调其在无掩模监督下的表现优势。
摘要由CSDN通过智能技术生成

【三维重建】【深度学习】NeuS总览

论文提出了一种新颖的神经表面重建方法,称为NeuS,用于从2D图像输入以高保真度重建对象和场景。在NeuS中建议将曲面表示为有符号距离函数(SDF)的零级集,并开发一种新的体绘制方法来训练神经SDF表示,因此即使没有掩模监督,也可以实现更准确的表面重建。NeuS在高质量的表面重建方面的性能优于现有技术,特别是对于具有复杂结构和自遮挡的对象和场景。本篇博文将neus的各功能模块做个总览。



前言

在详细解析NeuS网络之前,首要任务是搭建NeuS【win10下参考教程】所需的运行环境,并完成模型的训练和测试,展开后续工作才有意义。
本博文是对NeuS工程进行总体的预览,暂时不涉及具体的功能模块代码,后续的博文将会陆续讲解。

博主将各功能模块的代码在不同的博文中进行了详细的解析,点击【win10下参考教程】,博文的目录链接放在前言部分。


参数设置

在 exp_runner.py的main函数下,定义了运行neus所需要的参数。

parser = argparse.ArgumentParser()
# 选择读取的配置文件
parser.add_argument('--conf', type=str, default='./confs/base.conf')
# 选择代码运行的模式(训练、精化或者渲染)
parser.add_argument('--mode', type=str, default='train')
# 设置marching_cubes的阈值
parser.add_argument('--mcube_threshold', type=float, default=0.0)
# 是否在已有的最新模型基础上进行下一步操作
parser.add_argument('--is_continue', default=False, action="store_true")
# 设置gpu的序号
parser.add_argument('--gpu', type=int, default=0)
# 设置要处理数据的文件名(相对路径)
parser.add_argument('--case', type=str, default='')
args = parser.parse_args()

配置neus(模型)算法的核心参数都放置在了confs目录下的配置文件中,其他次要参数都是通过命令行输入的形式进行传递的,具体参数的用途,等到讲解具体代码时会说明。

所谓核心参数就是定义和构建neus模型的结构的参数:组成neus的多个神经网络的配置、数据集处理的相关参数等;
次要参数则是与neus无关的一些辅助性操作:模型权重存储位置、分配gpu等。


数据管理(Dataset)

在models/dataset.py文件内定义的一个数据管理类,用于加载图像数据集以及其对应的mask数据集和相机投影矩阵等,并能够根据NeuS具体的任务需求产生射线rays,用于后续进行采样。

  • gen_random_rays_at: 网格面 ( H , W ) \left( {H,W} \right) (H,W)上任意选择 b b b个网格 ( u i , v j ) \left( {{u_i},{v_j}} \right) (ui,vj),并根据相机内参、外参等计算出对应的 b b b个射线ray在世界坐标系下的向量 ( x i , y i , z i ) \left( {{x_i},{y_i},{z_i}} \right) (xi,yi,zi)这个过程发生在训练过程中。

网格面 ( H , W ) \left( {H,W} \right) (H,W)和图像数据集的分辨率 ( H , W ) \left( {H,W} \right) (H,W)大小一致,上述图中蓝色小网格是代表被随机抽中的网格并产生射线ray。

  • gen_rays_at: 网格面 ( H , W ) \left( {H,W} \right) (H,W)上所有网格 ( u i , v j ) \left( {{u_i},{v_j}} \right) (ui,vj),根据相机内参、外参等计算出对应的射线ray在世界坐标系下的向量 ( x i , y i , z i ) \left( {{x_i},{y_i},{z_i}} \right) (xi,yi,zi)这个过程发生在训练阶段的周期性测试中。

目的是简单测试下渲染效果,用某个相机位姿对应的原始图片与neus在该相机位姿下渲染的图片做对比。

  • gen_rays_between: 通过俩个相机 i d x 0 idx0 idx0 i d x 1 idx1 idx1的位姿生成介于俩相机之间的相机 i d x r idxr idxr的新位姿,网格面 ( H , W ) \left( {H,W} \right) (H,W)上所有网格 ( u i , v j ) \left( {{u_i},{v_j}} \right) (ui,vj),根据相机 i d x r idxr idxr内参、外参等计算出对应的射线ray在世界坐标系下的向量 ( x i , y i , z i ) \left( {{x_i},{y_i},{z_i}} \right) (xi,yi,zi)这个过程发生在应用阶段。

idx0和idx1是真实的相机位姿,idxr并不真实存在,而是计算而来的。其实这个目的是为了检验neus在新的相机位姿下的效果,个人觉得新的相机位姿也可以人工设定,并不一定是采用这种方式。

NeuS网络

  • NeRF: 训练物体以外背景的颜色在这里插入图片描述
  • SDFNetwork: 训练目标物体的sdf值
  • RenderingNetwork: 训练目标物体的RGB值
    在这里插入图片描述
    详细网络结构解析博主会在后续的博文中进行说明。

总结

尽可能简单、详细的介绍NeuS工程的总体预览。后续会根据自己学到的知识结合个人理解讲解NeuS的原理和代码。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值