【万字详解】三维重建(二)——NeRF、NeuS、MeshUDF、NeuralUDF、3DGS、GShell
文章目录
- 一、NeRF:Representing Scenes as Neural Radiance Fields for View Synthesis(推荐读)
- 1.1 式1 神经网络的输入和输出
- 1.2 式2 体素渲染算法
- 1.3 式3 损失函数
- 1.4 位置编码
- 1.5 基本原理
- 二、经典的重建流程
- 2.1 传统的三维重建pipeline
- 2.2 神经网络回归
- 2.3 可微渲染最优化
- 三、NeuS:Learning Neural Implicit Surfaces by Volume Rendering for Multi-view Reconstruction(推荐读)
- 四、MeshUDF:Fast and Differentiable Meshing of Unsigned Distance Field Networks
- 五、NeuralUDF:Learning Unsigned Distance Fields for Multi-view Reconstruction of Surfaces with Arbitrary Topologies(推荐读)
- 六、3DGS:3D Gaussian Splatting for Real-Time Radiance Field Rendering
- 介于六和七之间:显隐式结合
- 七、GShell(推荐读)
- 八、陌生词汇整理
- 8.1 光栅化渲染(√)
- 8.2 IDR——隐式可微渲染器(√)
- 8.3 DVR渲染occupancy的(√)
- 8.4 stable normal(√)
- 8.5 instant ngp(√)
- 8.6 torch ngp(√)
- 8.7 marching cube(√)
- 8.8 神经网络是可微的,如果不可微,那么就会引入一个很大的误差——?(√)
- 8.9 正则项(√)
- 8.10 如果不加激活函数,那么多层感知机,其实就是一层——理论推理(√)
- 8.11 在NeRF里面有个不透明度的概念,这个概念转换到NeuS里面,网络表示SDF,把SDF到不透明度又加上了一个网络。这里是用了一个策略,把SDF转到不透明度再做积分——对于这句话的理解(√——按照NeRF理解就行)
- 8.12 什么是光追?——光线追踪?(√)
- 8.12 SDF和Occupancy什么区别?(√)
- 8.13 SDF——NeuS渲染、UDF——MeshUDF提取、Occupancy——DVR渲染(√)
- 8.13.1 什么是渲染,什么是提取(√)
- 8.13.2 SDF怎么提取、UDF用什么渲染、Occupancy怎么提取(√)
- 8.14 nvdiffrast和nvdiffrecmc(√)
- 8.14.1 nvdiffrast(√)
- 8.14.2 nvdiffrecmc(√)
- 8.15 什么几何任务,什么是渲染任务(√)
- 8.16 因为一定要有渲染到2D,才能做端到端的优化——?(√)
- 8.17 DMTet和neural defer shading(√)
- 8.17.1 DMTet(√)
- 8.17.2 neural defer shading(√)
- 8.18 artifacts-伪影(√)
- 8.19 3d的体和球面的流形——GShell是把mSDF定义在了体中,而不是球面上(√)
- 九、感悟
- 9.1 对于marching cube
一、NeRF:Representing Scenes as Neural Radiance Fields for View Synthesis(推荐读)
1.1 式1 神经网络的输入和输出
输入是5个参数,(x,y,z)的坐标的位置,其他两个是对于仰角和方位角,通过神经网络得出RGB和体素密度
体素密度只和空间位置有关,而颜色则与空间位置以及观察的视角有关
1.2 式2 体素渲染算法
r(t)就是射线:起点开始,以时间为改变量的距离,两者相加,将一条射线的原点标记为o,射线方向(即相机视角)标记为d,则可将射线表示为r(t)=o+td
所以c就是表示RGB,这个就是体素密度
T(t)表示的是射线从tn到t这一段的累计透明度,即,该射线从tn到t都没有因击中任何粒子而被停下的概率
1.3 式3 损失函数
对于损失函数的定义,其中C就是上文中提到的体素渲染算法
分层抽样(Stratified Sampling)的方法对数据进行离散处理
1.4 位置编码
所以就是一个线性变换之后,相邻之间的差距拉大
1.5 基本原理
所描述的2D图像表示,我们只需要明确像素位置,即可找到对应的颜色值。但对于3D场景表示,我们在某个确定视点看到的2D视图就很难被单一表示出来。因为,确定视点下看到的2D图像是一组图像的加权叠加,而这组图像是你观测视角射线上依次采样出来的,准确来说,2D视图上每一个像素颜色值都是3D场景上在该观测方向的射线上一组采样点的加权叠加。了解到这里,我们可以回头看图(2),先看子图(a),其中黑色的小圆点就是射线上的采样点,每个小圆点就能获得一组9D的训练样本( x , y , z , θ , ϕ ; r , g , b , σ ) {(x,y,z,\theta,\phi;r,g,b,\sigma)}(x,y,z,θ,ϕ;r,g,b,σ),可直接用来训练MLP。在推理阶段,我们也需要在观测射线进行采样。
所以,NeRF是用MLP来隐式表达一个场景,它是点对点的表示方式。我们如果想要获得一个新视角的试图,我们则需要获得这个视角下,观测射线上所有采样点的( r , g , b , σ ) (r,g,b,\sigma)(r,g,b,σ),假设我们视图的分辨率是224x224的,每个点回引出一条射线(如图r所示),假设每条射线上采样16个点,那我们NeRF中的MLP需要进行224x224x16次推理,得到的结果可以用来进行体渲染。理解这一段相当于懂了NeRF的基本原理。
二、经典的重建流程
2.1 传统的三维重建pipeline
就是直接用深度相机采集到的深度数据进行输入,转成点云,再生成网格,增加纹理,比如“光栅化”进行渲染
2.2 神经网络回归
神经网络:A到B的映射
输入图像(不是深度),进行映射,重建出几何。所以只要不断输入数据对。比较卷的赛道。
怎么找数据对: 输入的图像和几何需要配对,数据需要有准确的几何。没法从图像得到准确的几何,所以需要数据反过来(首先要有带纹理的几何数据,渲染到2D),给个虚拟相机,渲染图像(对一类的数据的重建-但是工作量大)
2.3 可微渲染最优化
主要是做的这个,这个时间周期短,只是对单一的场景做重建。
首先有个神经隐式函数(不一定式隐式),总体就是可微3D表示,再做一个可微3D渲染。渲染结果图像和真实结果做一个loss,再返回。
三、NeuS:Learning Neural Implicit Surfaces by Volume Rendering for Multi-view Reconstruction(推荐读)
基于神经网络下的可微渲染:第一种:NeRF在整条线上做采点;第二种:直接去找这个表面(类似于光追这种思路),从相机出发去找那个表面,然后直接对表面进行渲染(本质上就是找到一种不透明表面的位置)
NeuS是基于SDF的渲染/和NeRF说不清谁好谁坏,但是NeuS用起来更方便。
(可微渲染当作工具来用,用NeuS来做渲染工作)
在NeRF里面有个不透明度的概念,这个概念转换到NeuS里面,网络表示SDF,把SDF到不透明度又加上了一个网络。这里是用了一个策略,把SDF转到不透明度再做积分。
需要重建几何的渲染,本质上是找到不透明表面的位置
这个是NeuS,这个就当作工具来用,如果是使用SDF做的,那么就用NeuS来做渲染工具.如果用的Occupancy,那就用DVR渲染
如果用隐式表示来做的话,用NeuS来做
四、MeshUDF:Fast and Differentiable Meshing of Unsigned Distance Field Networks
如果用了UDF那么就用这篇文章去提取
UDF:(小众),赛道没有SDF那么卷。
SDF是水密的,给几何分内外;可以找到一条封闭等值面;因为水面所以很受局限;如果是有开口之类的,(如下图,那么就是对于衣服的袖口的处理)就会不太好处理。所以就有了UDF
SDF:可以看成一个过一三象限的一次函数(有正有负,有小有大)
UDF:就像一个|x|的x的绝对值的函数。所以只有一个等值面,不存在正负号,就是说数值就是表示距离等值面的距离。
理论上通过神经网络,UDF可以把世界上的东西都可以表示出来
缺点就是在这个零点处,不可微;第一个问题,神经网络是可微的,如果不可微,那么就会引入一个很大的误差;而这个位置,又是我们想要的,所以这个位置不是很准;第二个就是:传统的marching cube,设定好了一些基元(小正方体),进行切割;但是只能是流形,如果是非流形表面,没办法去处理,下面这张图如果是褶皱的,那么神经网络没法去处理。就算用神经网络去表示,也只是一个函数,但是网格没法提取出来(那种尖角的),或者说,提取出来是错误的。
所以UDF只能表示开口的(但还是流形的,只不过不是水密的)——下面这张图,但是不能表示下下面那种图,就是有个额外的东西在内部
上面都是传统的Marching cube的,下面就是讲这篇文章的创新点——可微的提取表面
UDF中不存在正负,但是存在梯度的方向。0的两端导数不一样,所以梯度也就不一样,梯度就是法向。UDF的距离场,因为梯度是最快下降方向,所以也就是法相方向
优点:可以可微的提取表面(传统Marching Cube从隐式表示提取表面是不可微的)
缺点:虽然隐式表达能力很强,但是使用的是Marching Cube基元,无法提取非流形表面(Non-manifold)
五、NeuralUDF:Learning Unsigned Distance Fields for Multi-view Reconstruction of Surfaces with Arbitrary Topologies(推荐读)
这篇文章对应的就是NeuS,对应可微渲染;也就是UDF的渲染
GT网格是通过扫面得到的(比如扫描仪
相关文章:
【万字详解】三维重建(二)——NeRF、NeuS、MeshUDF、NeuralUDF、3DGS、GShell
文章目录 一、NeRF:Representing Scenes as Neural Radiance Fields for View Synthesis(推荐读)1.1 式1 神经网络的输入和输出1.2 式2 体素渲染算法1.3 式3 损失函数1.4 位置编码1.5 基本原理二、经典的重建流程2.1 传统的三维重建pipeline2.2 神经网络回归2.3 可微渲染最优…...
【RK3588 Linux 5.x 内核编程】-内核线程与Seqlock
内核线程与Seqlock 文章目录 内核线程与Seqlock1、Seqlock介绍2、Seqlock相关API2.1 初始化2.2 写操作2.3 读操作3、驱动实现4、驱动验证在前面的文章中,我们介绍了 Mutex、Spinlock、Read/Write Spinlock 的使用及其实现。 它们都用于保护共享资源不被两个或多个进程同时修改…...
访问者模式的理解和实践
在软件开发过程中,设计模式为我们提供了解决常见问题的最佳实践。访问者模式(Visitor Pattern)是行为设计模式之一,它将数据操作与数据结构分离,使得在不修改数据结构的前提下,能够定义作用于这些元素的新的…...
在Scala中对Map函数的使用
package pp28{object cscc {def main(args: Array[String]): Unit {val m1 Map("马云 — 阿里巴巴" -> 1964,"马化腾 — 腾讯" -> 1971,"李彦宏 - 百度" -> 1968,"雷军 - 小米" -> 1969,"丁磊 - 网易" -> …...
PyTorch基本使用-张量的索引操作
在操作张量时,经常要去获取某些元素进行处理或者修改操作,在这里需要了解torch中的索引操作。 准备数据: data torch.randint(0,10,[4,5]) print(data--->,data)输出结果: data---> tensor([[3, 9, 4, 0, 5],[7, 5, 9, …...
OpenCV实验:图片加水印
第二篇:图片添加水印(加 logo) 1. 实验原理 水印原理: 图片添加水印是图像叠加的一种应用,分为透明水印和不透明水印。水印的实现通常依赖于像素值操作,将水印图片融合到目标图片中,常用的方法…...
sql server log文件
确定 SQL Server 实例中具有大量 VDF 的数据库 SELECT [name], COUNT(l.database_id) AS vlf_count FROM sys.databases AS s CROSS APPLY sys.dm_db_log_info(s.database_id) AS l GROUP BY [name] HAVING COUNT(l.database_id) > 100; 在收缩日志文件之前确定事务日志中…...
Elasticsearch 集群部署
Elasticsearch 是一个分布式的搜索和分析引擎,广泛应用于日志分析、全文搜索、实时数据分析等场景。它以其高性能、高可用性和易用性而著称。本文档将引导您完成一个基本的 Elasticsearch 集群配置,包括节点间的通信、客户端访问、安全设置等关键步骤。我…...
微信小程序5-图片实现点击动作和动态加载同类数据
搜索 微信小程序 “动物觅踪” 观看效果 感谢阅读,初学小白,有错指正。 一、功能描述 a. 原本想通过按钮加载背景图片,来实现一个可以点击的搜索button,但是遇到两个难点,一是按钮大小调整不方便(网上搜索…...
策略梯度定理公式的详细推导
策略梯度定理公式的详细推导 以下是策略梯度定理公式从基础概率公式到最终形式的完整推导,帮助更清晰地理解推导过程中的每一个步骤。 1. 策略梯度的目标 我们希望最大化期望累积奖励 ( J ( θ ) J(\theta) J(θ) ),其定义为: J ( θ ) E…...
力扣-图论-10【算法学习day.60】
前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向和记录学习过程(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非…...
《Python WEB安全 库全解析》
《Python WEB安全 库全解析》 一、Python WEB安全 库概述二、常见的 Python WEB安全 库介绍1. Jiasule2. Awesome Python Security3. Flask-Security4. Flask-SeaSurf 三、Python WEB 安全库的优缺点1. 优点2. 缺点 四、Python WEB 安全库的使用场景1. 开发 Web 应用2. 处理敏感…...
Linux yum-config-manager命令异常
错误信息 使用 yum-config-manager命令时错误信息如下 sudo yum-config-manager \ > --add-repo \ > https://download.docker.com/linux/centos/docker-ce.repo sudo: yum-config-manager: command not found 解决办法 第一步: sudo yum -y install yum-u…...
ios 开发配置蓝牙
如果使用了蓝牙功能, 又没有配置, 会出现以下错误: This app has crashed because it attempted to access privacy-sensitive data without a usage description. The apps Info.plist must contain an NSBluetoothAlwaysUsageDescription key with a string value explaini…...
geoserver(1) 发布sql 图层 支持自定义参数
前提使用postgis 数据库支持关联 join 支持 in,not in,like,及其他sql原生函数 新增sql图层 编写自定义sql 编辑sql语句必须输出带有geom数据 正则表达式去除 设置id以及坐标参考系 预览sql图层效果 拼接sql参数 http://xxx.com/geoserver/weather/wms?SERVICEWMS&VERSI…...
Linux:network:添加ip的时候自动添加一个本地路由
文章目录 问题问题 最近在看一个路由的问题,顺便看内核代码,发现在添加IP的时候,内核会自动添加一个local route。 net/ipv4/devinet.c inet_rtm_newaddr->__inet_insert_ifa /* Send message first, then call notifier.Notifier will trigger FIB update, so thatlis…...
go 集成nacos注册中心、配置中心
使用限制 Go>v1.15 Nacos>2.x 安装 使用go get安装SDK: go get -u github.com/nacos-group/nacos-sdk-go/v2 快速使用 初始化客户端配置ClientConfig constant.ClientConfig{TimeoutMs uint64 // 请求Nacos服务端的超时时间,默…...
ssd202d-badblock-坏块检测
这边文章讲述的是坏快检测功能 思路: 1.第一次烧录固件会实现跳坏块,但是后续使用会导致坏块的产生; 于是我在uboot环境变量添加了两个变量来控制坏快 lb_badnum //坏块个数 lb_badoff //坏块所在位置 2.第一次开机会根据lb_badnum是否…...
MySQL-练习-数据介绍
文章目录 一. 数据介绍1. 数据结构2. 创建数据库,数据表3. 员工表(employees)练习1 4. 顾客表(customers)练习2 5. 商品(products)和商品类别(categories)表练习3 6. 供应商表(suppliers)练习4 7. 订单和订单明细表练习5 二. 数据汇总三. 使用CASE WHEN …...
React框架:解锁现代化Web开发的新维度
在当今前端开发领域,React 无疑是一颗璀璨的明星。React 是由 Facebook 开发的用于构建用户界面的 JavaScript 库,它在前端开发中占据着重要的地位,为开发者提供了一种高效、灵活且可维护的方式来构建复杂的用户界面。 一、React 的背景与开…...
电阻功率,限流,等效电阻
1 电阻额定功率 2 电阻限流作用 3 电阻并联等效电阻...
Qt | 开发工具(top1)
Qt Creator 跨平台、完整的集成开发环境(IDE),供应用程序开发者创建用于多个桌面、嵌入式和移动设备平台的应用程序。 Qt Linguist 一套将Qt C和Qt Quick应用程序翻译成本地语言的工具。 qmake Qt自动化构建工具,简化了不同平台的构建过程。…...
Node.js express
1. express 介绍 express 是一个基于 Node.js 平台的极简、灵活的 WEB 应用开发框架,官方网址:https://www.expressjs.com.cn/简单来说,express 是一个封装好的工具包,封装了很多功能,便于我们开发 WEB 应用ÿ…...
ios h5中在fixed元素中的input被focus时,键盘遮挡input (van-popup、van-feild)
问题描述: 前提:我使用的是vant组件库,其中一个页面中有一个van-popup组件,van-popup组件中又嵌套了一个van-field组件预期结果:当点击van-feild输入框时,键盘弹起,输入框显示在键盘上方实际结…...
springboot整合lua脚本在Redis实现商品库存扣减
1、目的 使用lua脚本,可以保证多条命令的操作原子性;同时可以减少操作IO(比如说判断redis对应数据是否小于0,小于0就重置为100,这个场景一般是取出来再判断,再存放进行,就至少存在2次IO,用lua脚…...
MySQL ON DUPLICATE KEY UPDATE影响行数
目录 分析为什么Updates返回7 总结 数据库更新日志如下 insertOrUpdateList|> Preparing: INSERT INTO clue_user_tag (vuid, tag_id, tag_type, content) VALUES (?, ?, ?, ?) , (?, ?, ?, ?) , (?, ?, ?, ?) , (?, ?, ?, ?) ON DUPLICATE KEY UPDATE …...
uniapp小程序 slot中无法传递外部参数的解决方案
最近在封装一个List组件,外部传给我数据,我循环后将每个Item部分slot到外部,由调用者自己去写item布局,类似ElementUI、iView的Tabe列表。 List: <view v-if"list.length > 0" class"list-scroll__item&quo…...
umi实现动态获取菜单权限
文章目录 前景登录组件编写登录逻辑菜单的时机动态路由页面刷新手动修改地址 前景 不同用户拥有不同的菜单权限,现在我们实现登录动态获取权限菜单。 登录组件编写 //当我们需要使用dva的dispatch函数时,除了通过connect函数包裹组件还可以使用这种方…...
Pytest-Bdd-Playwright 系列教程(14):Docstring 参数
Pytest-Bdd-Playwright 系列教程(14):Docstring 参数 前言一、什么是docstring?二、基本语法三、主要特点四、实际例子五、注意事项六、使用建议总结 前言 在自动化测试的过程中,我们经常需要处理复杂的测试数据或需要输入多行文…...
交互开发---测量工具(适用VTK或OpenGL开发的应用程序)
简介: 经常使用RadiAnt DICOM Viewer来查看DICOM数据,该软件中的测量工具比较好用,就想着仿照其交互方式自己实现下。后采用VTK开发应用程序时,经常需要开发各种各样的测量工具,如果沿用VTK的widgets的思路,…...
教育网站开发用例图/seo诊断方法步骤
jna jni我最近偶然发现了一个不错的框架,如果您不得不使用本机代码的话,您会喜欢的。 在此框架之前,如果需要调用本机代码,则可以使用JNI 。 JNI使用了一个经过验证的但复杂且容易出错的过程。 首先,您像往常一样编写J…...
自己做网站怎么加定位/日本网站源码
一、并发控制 当程序中可能出现并发]的情况时,就需要保证在并发情况下数据的准确性,以此确保当前用户和其他用户一起操作时,所得到的结果和他单独操作时的结果是一样的。这种手段就叫做并发控制。并发控制的目的是保证一个用户的工作不会对另…...
深圳大公司/百度热搜关键词排名优化
倒数60秒价格走势 可是然而但是,别人家都是怎么拍中的?答:不按套路出牌这次你就中了。 那么即使是这样,还有没有“套路”可循?答:肯定有的。 相信很多人都读过国拍官网的《网上投标拍卖操作流程》ÿ…...
有免费做理化试验的网站吗/百度推广视频
为什么80%的码农都做不了架构师?>>> 关于UITableView的contentInset属性 1.关于滚动视图contentSize、contentOffset、contentInset 的整理 contentSize 是scrollview可以滚动的区域,比如frame (0 ,0 ,320 ,480) contentSize (320 ,960)&…...
工信部查网站备案/app下载推广
取(m堆)石子游戏 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1263 Accepted Submission(s): 754 Problem Descriptionm 堆石子,两人轮流取.只能在1堆中取.取完者胜.先取者负输出No.先取者胜输出Yes,然后输出…...
百度推广图片/福州360手机端seo
一:CvMat* cvInitMatHeader( CvMat* mat, int rows, int cols, int type,void* dataNULL, int stepCV_AUTOSTEP ); mat 指针指向要被初始化的矩阵头. rows 矩阵的行数. cols 矩阵的列数. type 矩阵元素类型. data 可选的,将指向数据指针分配给矩阵头. …...