【万字详解】三维重建(二)——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 的背景与开…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...

DBLP数据库是什么?
DBLP(Digital Bibliography & Library Project)Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高,数据库文献更新速度很快,很好地反映了国际计算机科学学术研…...
字符串哈希+KMP
P10468 兔子与兔子 #include<bits/stdc.h> using namespace std; typedef unsigned long long ull; const int N 1000010; ull a[N], pw[N]; int n; ull gethash(int l, int r){return a[r] - a[l - 1] * pw[r - l 1]; } signed main(){ios::sync_with_stdio(false), …...

深入解析光敏传感技术:嵌入式仿真平台如何重塑电子工程教学
一、光敏传感技术的物理本质与系统级实现挑战 光敏电阻作为经典的光电传感器件,其工作原理根植于半导体材料的光电导效应。当入射光子能量超过材料带隙宽度时,价带电子受激发跃迁至导带,形成电子-空穴对,导致材料电导率显著提升。…...

【1】跨越技术栈鸿沟:字节跳动开源TRAE AI编程IDE的实战体验
2024年初,人工智能编程工具领域发生了一次静默的变革。当字节跳动宣布退出其TRAE项目(一款融合大型语言模型能力的云端AI编程IDE)时,技术社区曾短暂叹息。然而这一退场并非终点——通过开源社区的接力,TRAE在WayToAGI等…...