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

news2024/11/24 3:53:37

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

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


文章目录

  • 【三维重建】【深度学习】NeuS总览
  • 前言
  • 参数设置
  • 数据加载(Dataset)
  • NeuS网络
  • 总结


前言

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


参数设置

在 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数据集和相机内外参数据等。

  • 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值
  • SDFNetwork: 训练点云中的sdf值

这个部分我会在后续画好示意图后进行补充说明。


总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/749537.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Distributed】分布式ELK日志文件分析系统(一)

文章目录 一、ELK 概述1. 为什么要使用 ELK2. 完整日志系统基本特征3. ELK 简介3.1 ElasticSearch(ES)3.2 Kiabana3.3 Logstash3.4 其它组件Filebeat缓存/消息队列Fluentd 4. ELK 的工作原理5. Linux 系统内核日志消息的优先级别 二、 部署 ELK 集群服务…

二叉树题目:合并二叉树

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 题目 标题和出处 标题:合并二叉树 出处:617. 合并二叉树 难度 3 级 题目描述 要求 给定两个二叉树 root1 \texttt{root1…

java项目之多人命题系统(ssm+mysql+jsp)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的多人命题系统。技术交流和部署相关看文章末尾! 开发环境: 后端: 开发语言:Java 框架&…

zabbix部署及应用(自定义监控内容,zabbix 自动发现与自动注册,zabbix 代理服务器,Zabbix 高可用集群)

zabbix部署及应用 一、添加 zabbix 客户端主机1、服务端和客户端都配置时间同步2、服务端和客户端都设置 hosts 解析3、设置 zabbix 的下载源,安装 zabbix-agent24、修改 agent2 配置文件5、启动 zabbix-agent26、在服务端验证 zabbix-agent2 的连通性7、常用的键值…

一、对象的概念(1)

本章概要 抽象接口服务提供封装 抽象 “我们没有意识到惯用语言的结构有多大的力量。可以毫不夸张地说,它通过语义反应机制奴役我们。语言表现出来并在无意识中给我们留下深刻印象的结构会自动投射到我们周围的世界。” – Alfred Korzybski (1930) 计算机革命的起…

分布式锁【 基于synchronized锁解决超卖问题、分布式锁解决方案、悲观锁实现的分布式锁】(二)-全面详解(学习总结---从入门到深化)

目录 分布式锁问题_演示问题 基于synchronized锁解决超卖问题 分布式锁解决方案 分布式锁实现方案 分布式锁解决方案_数据库悲观锁实现的分布式锁 项目中使用for update 分布式锁问题_演示问题 启动订单服务9090 启动订单服务9091 创建两个SpringBoot服务 启动Nginx服务 下载N…

火山引擎云搜索服务升级云原生新架构;提供数十亿级分布式向量数据库能力

从互联网发展伊始,搜索技术就绽放出了惊人的社会和经济价值。随着信息社会快速发展,数据呈爆炸式增长,搜索技术通过数据收集与处理,满足信息共享与快速检索的需求。 云搜索服务 ESCloud 是火山引擎提供的完全托管在线分布式搜索服…

OJ练习第135题——下降路径最小和

下降路径最小和 力扣链接:931. 下降路径最小和 题目描述 给你一个 n x n 的 方形 整数数组 matrix ,请你找出并返回通过 matrix 的下降路径 的 最小和 。 下降路径 可以从第一行中的任何元素开始,并从每一行中选择一个元素。在下一行选择…

永磁同步电机磁场定向控制(FOC)及Matlab/Simulink仿真分析

前言 做永磁同步电机控制绕不开FOC,本章节主要介绍FOC控制的基本原理、坐标变换以及永磁同步电机在同步旋转坐标系下的数学模型,并通过Matlab/Simulink进行永磁同步电机FOC控制算法的仿真分析。 01 FOC的基本原理 磁场定向控制(Field-Ori…

分割3-转置卷积可逆吗?

上一话 分割2——语义分割评价指标https://blog.csdn.net/XiaoyYidiaodiao/article/details/125149509?spm1001.2014.3001.5502 转置卷积不是卷积的逆操作,并且转置卷积是卷积操作! 这是因为普通卷积的操作图 1. 图1 其卷积可等效为图 2. 图2 其卷积操…

Offset Explorer2 监视kafka的利器

kafka作为一个生产者和消费者集为一体的框架,消费者必须一直保持打开的状态,并且每隔一段时间接收一次数据,才能够保持生产者放入的数据及时被处理掉,而生产者则可以每隔一段时间发送一波数据,这样消费者就能够接收到了…

Mysql搭建互为主从数据库

Mysql搭建互为主从数据库 一、搭建前期说明二、mysql文件结构以及配置说明1、mysqlA文件结构2、mysqlB文件结构3、mysqlA的配置文件my.cnf4、mysqlB的配置文件my.cnf5、启动mysqlA服务器脚本startMysqlA.sh6、启动mysqlB服务器脚本startMysqlB.sh7、查看服务启动情况 三、设置主…

【Redis】之缓存一致性

1、缓存一致性 对于使用 Redis 作为缓存来说,如何保证数据库和缓存数据一致性是个麻烦的问题。对于缓存和数据库的操作,主要有以下两种方式: 先删缓存,再更新数据库;先更新数据库,再删除缓存;…

【UE4 塔防游戏系列】02-基础设置

步骤 1. 新建一个蓝图,父类为游戏模式基础 命名为“TaFangGameMode” 2. 新建一个玩家控制器 命名为“TaFangGamePlayerController” 3. 在世界场景设置中,选择游戏覆盖模式为“TaFangGameMode” 默认Pawn类设为None,玩家控制器类选择“TaFa…

使用rest-assured框架优雅实现接口测试断言

对于接口测试来说,只判断响应状态码为200是远远不够的,我们经常必须去验证响应内容中的业务字段是否正确,本文将采用Rest-Assured框架来实现接口响应的判断。 1、接口信息的调试 当我们在做接口测试时,通常希望将接口的请求及响…

包装类(wrapper)

包装类(wrapper) 包装类和基本数据类型间的转换(Interger演示) public class WrapperType01 {public static void main(String[] args) {int a 10;// 手动封箱,Integer integer Integer.valueOf(a);System.out.println(integer);// 手动拆箱int i integer.intVa…

十五周算法训练营——岛屿问题

今天是十五周算法训练营的第十五周,主要讲岛屿问题专题。(欢迎加入十五周算法训练营,与小伙伴一起卷算法) 岛屿问题 一、题目 给你一个由 1(陆地)和 0(水)组成的的二维网格&#xff…

11. 利用Tomcat服务器配置HTTPS双向认定

文章目录 Tomcat配置HTTPS1.为服务器生成证书2.为客户端生成证书3.让服务器信任客户端证书4.将该文件导入到服务器的证书库,添加为一个信任证书使用命令如下:5.查看证书库6.让客户端信任服务器证书7.配置tomcat8.验证 Tomcat配置HTTPS 1.启动cmd控制台&…

分布式锁【分布式锁概述、业务介绍、创建SpringBoot项目】(一)-全面详解(学习总结---从入门到深化)

目录 分布式锁概述 分布式锁问题_业务介绍 分布式锁问题_创建SpringBoot项目 分布式锁概述 为什么需要分布式锁 在单机部署的系统中,使用线程锁来解决高并发的问题,多线程访问共享变量的问题达到数据一致性,如使用synchornized、 Reentran…

第一堂棒球课品牌设计·棒球1号位

需求背景 第一堂棒球课作为国内的创新体育课程,旨在为广大青少年提供一个更好的平台来接触并了解棒球这项运动。品牌的建设将影响到其在国内的认可度和知名度。在此背景下,我们的产品目标是为第一堂棒球课打造一个具有竞争力的品牌形象,满足…