Deep SDF 、NeuS学习

2023-05-16

DeepSDF: Learning Continuous Signed Distance Functions for Shape Representation:学习用于形状表示的连续有符号距离函数
NeuS: Learning Neural Implicit Surfaces by Volume Rendering for Multi-view Reconstruction:通过体绘制学习神经隐式曲面用于多视图重建

1、Deep SDF

1、介绍

传统的‎表面重建‎技术中,SDF是基于离散化体素对物体或者场景表面的一种表达,而现实中表面是连续的,本文提出了一种名为DeepSDF的方法,在SDF函数能够表示物体的基础上,用神经网络来拟合这个SDF函数,从而实现用神经网络隐式的表示这个物体,并且由于神经网络的万能拟合性质,原则上来说能够表示任意连续的、任意复杂形状的物体,可以表示一整类形状。
通过连续的体积场表示形状的表面:场中的点的大小表示到表面边界的距离,符号表示该区域是在形状的内部(-)还是外部(+)
下图是传统sdf的公式,X是物体,p为空间中某点,当p点在物体表面内部,距离为负,在表面外面,距离为正。
在这里插入图片描述
论文给出的公式
在这里插入图片描述
s > 0是外部,s < 0是内部,s = 0是物体表面。

2、训练

用神经网络当做SDF函数的拟合器,训练完(或者说拟合完)之后,输入大量自定义的三维空间采样点,再提取出所有值为0的点组成面,就能够重建整个三维物体了

1、直接训练

为给定目标形状训练单个深度网络,如图所示。给定目标形状,我们准备一组由3D点样本及SDF值组成的对X在这里插入图片描述
网络结构,需要让网络输出的y,更加接近实际的SDF公式给出的值s。
在这里插入图片描述
损失函数在这里插入图片描述
损失函数实际就是计算预测得到的SDF值与真实SDF之间的一个距离,多出来的参数 δ 用于将注意力集中在表面附近。clamp(x, δ) := min(δ, max(−δ, x))
实验中使用 δ = 0. 1和一个由8个全连接层组成的前馈网络,每个层都应用了dropouts。所有内层均为512维,具有ReLU非线性,输出非线性回归SDF值为tanh,使用Adam优化器。

2、学习形状的潜在空间

用上述的方法,并不是数据驱动的,而更像是一种数学的方法,每次进行重建的时候都得重新训练一个神经网络得到表示这个物体的专属SDF。只能对单一形状进行重建,因为模型没有包含任何shape的信息。
下面将shape用latent vector的方式作为网络的第二个输入,以此适应多种形状,每一种形状都有一个对应的code
在这里插入图片描述
论文中使用自动解码器来学习形状嵌入,而无需编码器。与潜在代码由编码器产生的自动编码器不同,自动解码器直接接受潜在向量作为输入。在训练开始时,将随机初始化的潜在向量分配给每个数据点,并且通过标准反向传播将潜在向量与解码器权重一起优化。 在推理过程中,解码器权重是固定的,并估计最佳潜在向量。 在概念上,将这个潜在向量映射到一个连续的SDF表示的3D形状
在这里插入图片描述
上式的X也变成了编码zi ,i表示索引,第几个形状
在这里插入图片描述
该公式允许使用单个神经网络对多个SDF进行建模。给定解码模型fθ,与潜在向量z相关联的连续表面类似地用fθ(z,x)的决策边界表示,并且形状可以再次通过例如光线投射或行进立方体来离散化以进行可视化。

论文中开发了一种用于训练和测试自动解码器的概率公式,该公式自然地引入了潜在空间正则化以改进泛化。 基于概率对DeepSDF模型进行建模
1、对于一个由N个shapes构成的数据集合,每个shape都有对应的SDF的ground-truth SDFi,一组由K个样本点以及SDF值
在这里插入图片描述
由于没有编码器,每个潜在代码zi都与训练形状Xi配对。给定形状SDF样本Xi的后超形状代码zi可通过后验概率计算为为:
假设码p(zi)上的先验分布是具有球面协方差σ2I的零均值多变量高斯分布在这里插入图片描述
并假设给定zi和xj的情况下有如下概率成立: L(fθ(zi,xj),sj)表示损失函数,
在这里插入图片描述
得到解码器训练阶段的优化目标方程
在这里插入图片描述
编码zi 有以下方程计算得到
在这里插入图片描述
概率公式化这里参考博客

参考链接1

1、NeuS

论文中提出了一种新的神经表面重建方法,称为NeuS,用于从2D图像输入中高保真地重建对象和场景,将曲面表示为带符号距离函数(SDF)的零值集。
NeRF仅学习体积密度场,作为新视角合成,但是难以从中提取高质量的表面,对于形状的重建也不是很好
所以将NerF中的体密度改为SDF值,将体积渲染方法应用于学习隐式SDF表示,改变体渲染计算公式中的权重值,更好的应用于表面和形状重建。
输入:一组3D对象的姿势图像{Ik},输出:重建表面S。

1、场景表示

如下图:
在这里插入图片描述

这里引入概率密度函数 S-density: ϕ ( f ( x ) ) logistic density distribution, ϕ (x)是Sigmoid函数的倒数,关于y轴对称,也在y轴上(x=0)取得最大值,这种形式对后面体渲染计算比较合适。
f(x)表示的是SDF函数,可以看出,当SDF为零的时候(也就是物体表面),ϕ (x)取得最大值,在最高峰处。

在这里插入图片描述

2、渲染

颜色计算公式如下,c(p(t),v)和NerF中相同,指的是不同方向看过去某点处的rgb颜色值,但是w(t)替换了原式中的T(t)σ(t),作为新的权重。
在这里插入图片描述
这里的权重必须满足以下条件
1、Unbiased无偏性,权重需要在相机光线与物体表面相交点 p ( t )(即SDF值为0的时候)达到局部最大值。即表面附近的点对最终结果的贡献最大
2、Occlusion-aware感知遮挡,当两个点具有相同的SDF值时,更靠近视点的点对最终输出颜色的贡献应大于其他点。也就是说,空间中出现遮挡的情况,前面的点吸收光线更多,剩下一部分光线供给后面的点吸收,所以前面的权重更大。
最初公式中,直接将s密度代替体密度与T(t)相乘作为权重,虽然满足感知遮挡,但是NerF中的权重不满足第一点,在表面权重不是局部最大值。
下图是和NerF的修改的权重的对比图
在这里插入图片描述
修改结果
下图是修改的权重,首先定义了不透明密度函数ρ(t),它是标准体积渲染中体积密度σ的对应物。然后通过以下公式计算新的权重函数w(t)
在这里插入图片描述
这是单平面相交情况下不透明密度ρ(t)的公式
在这里插入图片描述
下图是沿光线p(t)有多个曲面相交的一般情况,当光线在两个面之间时会变成负,把它拓展到多曲面的情况需要在这时将之设为0,
在这里插入图片描述
下图是经过多曲面时,SDF与权重变化图
在这里插入图片描述

3、离散化

类似 NeRF,定义采样点 n个在这里插入图片描述

4、损失函数

总的损失函数,color Loss为渲染图与gt图差异,regLoss是对所有采样点正则化(regularize),形式有些类似规范化,不过是对SDF的梯度。最后是如果有mask监督,则加入mask Loss
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
BCE是二进制交叉熵损失

5、复现效果

这里代码复现了训练到十万次和三十万次得到的渲染图
在这里插入图片描述
Loss
在这里插入图片描述
在这里插入图片描述
渲染
在这里插入图片描述
NeuS的网络结构与这篇论文 Multiview neural surface reconstruction by disentangling geometry and appearance. 使用的网络结构类似,使用了两个MLP。第一个MLP输入是位置(x,y,z),计算SDF值,将SDF、生成的256维特征向量、位置p、观察方向v输入到第二个MLP中,输出得到RGB颜色值。网络结构如下图
在这里插入图片描述

参考链接

https://zhuanlan.zhihu.com/p/496752239
https://blog.csdn.net/m0_46094914/article/details/124324284
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Deep SDF 、NeuS学习 的相关文章

随机推荐

  • 【2024海南大学835软件工程考研笔记】

  • python中的装饰器(基础装饰器)

    文章目录 一 前置知识 高阶函数 xff0c 闭包1 高阶函数2 闭包 二 函数装饰器1 什么是装饰器 xff08 原理 xff09 xff1f 2 装饰器的实现3 何时执行装饰器4 wraps方法 三 类装饰器 一 前置知识 高阶函数 x
  • python中的装饰器二(带参数的装饰器)

    文章目录 前言 一 被装饰函数带参数二 被装饰函数有返回值三 装饰器带参数四 多个装饰器 前言 看大佬们写的代码看的我是眼花缭乱 xff0c 不知所云啊 真是感叹 xff0c 自己还看都看不懂 xff0c 人家就能写出来了 xff0c 人与
  • STlink、Jlink驱动一直安装失败的解决办法

    STlink Jlink驱动一直安装失败的解决办法 STlink驱动安装失败问题详情 Jlink驱动安装的问题也类似 xff0c 总是有一项安装失败 xff01 xff01 xff01 在经过各种尝试完毕之后 xff0c 怀疑是系统的问题
  • 数据可视化--实验四:地理数据可视化

    声明 xff1a 本文CSDN作者原创投稿文章 xff0c 未经许可禁止任何形式的转载 xff0c 原文链接 文章目录 概要实验过程Pyecharts实验结果 概要 学院 xff1a 计算机科学与技术学院实验日期 xff1a 2020 10
  • 课设-基于51单片机的智能小车(循迹+避障+APP控制)

    51单片机课设 智能小车 一 课设任务二 硬件设计及相关传感器模块1 车模2 51单片机3 红外循迹模块4 电机及驱动5 蓝牙模块6 硬件搭建 三 程序代码1 main c文件2 motor c文件 四 我的大学 造车 史 注 xff1a
  • 课设-基于51单片机+超声波模块的避障小车(源码+原理图+Protel仿真)

    基于51单片机 43 超声波模块的避障小车 xff08 源码 43 原理图 43 Protel仿真 xff09 一 功能二 模块2 1 电机驱动模块2 2 超声波模块 三 程序代码四 PCB原理图 一 功能 设计一辆利用超声波传感器来实现避
  • 路径规划(一):使用Matlab快速绘制栅格地图

    目录 一 Matlab快速绘制栅格地图1 几种常用的地图形式 xff1a 1 1 尺度地图 xff1a 1 2 拓扑地图 xff1a 1 3 语义地图 xff1a 2 栅格地图用于路径规划的优势 xff1a 3 matlab绘制栅格地图的核
  • 2、无人驾驶--路径规划算法:Dijkstra

    目录 2 Dijkstra2 1 算法简介2 2 算法思路具体流程 xff1a 2 3 算法具体实现2 3 1 程序详解 2 Dijkstra 声明 xff1a 本文是学习古月居 基于栅格地图的机器人路径规划算法指南 黎万洪 后写的笔记 x
  • 毕设--基于51单片机的温度报警器设计

    目录 1 简介2 设计要求与方案论证2 1 设计要求2 2 系统基本方案选择和论证2 2 1 单片机芯片的选择方案和论证2 2 2 温度传感器设计方案论证 2 3 电路设计最终方案决定 3 硬件设计介绍3 1 STC89C51介绍3 1 1
  • 基于51单片机的篮球比赛计时器

    目录 基于51单片机的篮球比赛计时器1 PCB原理图2 仿真图3 毕设要求 xff1a 4 总体方案设计5 程序源码6 资源下载 基于51单片机的篮球比赛计时器 注 xff1a 本毕设资源可在微信公众号 xff1a Kevin的学习站 中获
  • 毕设--基于51单片机数字电压表的设计

    目录 基于51单片机数字电压表的设计1 PCB原理图2 Proteus 仿真图3 设计目标3 1 基本功能3 2 主要技术参数 4 总设计框图5 硬件设计分析5 1 电源的设计5 2 单片机最小系统5 3 模数转换 6 软件设计的组成7 元
  • 基于51单片机的智能温控风扇(程序+仿真+原理图)

    目录 基于51单片机的智能温控风扇1 主要功能2 实验结果3 仿真工程4 原理图5 程序源码6 资源获取 基于51单片机的智能温控风扇 1 主要功能 基于51单片机的智能温控风扇 xff0c 通过DS180温度传感器采集温度 xff0c 并
  • 基于51单片机的八路竞赛抢答器设计

    目录 基于51单片机的八路抢答器设计1 主要功能2 仿真图3 测试图4 程序源码5 资源获取 基于51单片机的八路抢答器设计 1 主要功能 利用STC89C52单片机及外围接口实现的抢答系统 xff1b 在抢答过程中 xff0c 只有启动抢
  • 赛灵思-Zynq UltraScale+ MPSoC学习笔记汇总

    Zynq UltraScale 43 MPSoC学习目录 xff1a 1 赛灵思 Zynq UltraScale 43 MPSoCs xff1a 产品简介 2 赛灵思 Zynq UltraScale 43 MPSoC学习笔记 xff1a P
  • 数据可视化--实验五:高维非空间数据可视化

    声明 xff1a 本文CSDN作者原创投稿文章 xff0c 未经许可禁止任何形式的转载 xff0c 原文链接 文章目录 概要实验过程Pyecharts实验结果平行坐标系room1 6房间人员时长饼图 概要 学院 xff1a 计算机科学与技术
  • 7、AUTOSAR MCAL入门-实战:I/O驱动组

    7 AUTOSAR MCAL入门 实战 xff1a I O驱动组 在第三节中有介绍AUTOSAR 把MCAL 抽象分为4个驱动组 xff0c 分别为 xff1a 微控制器驱动组 xff0c 存储器驱动组 xff0c 通信驱动组 输入 输出驱
  • FreeRTOS学习笔记:FreeRTOS启动方式及流程

    FreeRTOS启动方式及流程 FreeRTOS有两种比较流行的启动方式 1 方式一 xff1a 在main函数中创建所有任务 具体说明 xff1a 在main函数中将硬件初始化 RTOS系统初始化 xff0c 创建所有的任务 xff0c
  • 树莓派4B与Android之缘——树莓派下LineageOS(Android 9)系统开机联网与远程控制

    一 树莓派连接屏幕 1 找到树莓派的micro hdmi口 xff0c 是视频图像的输出口 xff0c 见下图中的MICRO HDMI PORTS 2 连接屏幕 xff08 1 xff09 如果显示屏输入端口是HDMI xff0c 就用mi
  • Deep SDF 、NeuS学习

    DeepSDF Learning Continuous Signed Distance Functions for Shape Representation xff1a 学习用于形状表示的连续有符号距离函数 NeuS Learning Ne