Nerf基础学习记录

2024-05-16 07:04
文章标签 基础 学习 记录 nerf

本文主要是介绍Nerf基础学习记录,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

笔记

  • 什么是nerf
  • 一些值得注意的理论点

什么是nerf

Nerf 是可以理解成是一种隐式的3D表达方式。 隐式表达可以理解成是用一个条件或者方程来表示一个3D几何,没有实实在在的几何形状。相反,显式表达就诸如mesh, 点云,体素这类的,能够实实在在看到的。Nerf的网络结构非常简单,也就是一个mlp。Nerf主要的目的,就是从给到的大量照片中学习,从而可以渲染任意视角下的RGB图像。它的输入数据是(x,y,z, ϕ \phi ϕ, θ \theta θ), ϕ \phi ϕ, θ \theta θ可以理解成相机位姿,分别代表的是当前相机对世界坐标系的旋转和平移。(x,y,z)表示的是跟着从当前视角发出的光线经常采样得到的离散的点。因为不知道3D物体的边界在哪里,所以要在3D空间种进行离散采样。 它的应用, 包括新视点合成,输入稀疏的视点输出连续的RGB信息,360重建,大场景重建,人体重建,3D 风格迁移。镜面反射场景重建。(镜子和透明场景是很难用传统的方式重建的。)

Nerf的一些问题:

  • 需要足够多的图像
  • 光照条件要一致,不能差距太大。
  • 没有泛化能力。
  • 渲染速度慢
  • 对输入图像要求很高,不能模糊或者有畸变
  • 位姿必须要准

一些值得注意的理论点

Nerf输出的东西是density和RGB颜色。所谓的density就是表示了有没有光线或者有多少光线和3D边界相交了,可以理解成density表示了nerf学到的3D信息,所以一些学术论文会称nerf学到3Dshape为soft shape。Nerf 的步骤可以分成以下几步

  • 层级采样 hierarchical sampling
  • 位置编码 positional encoding
  • MLP 学习
  • volume rendering

首先为什么是层级采样。这个就是一个coarse-to-fine的过程,也通常是3D任务当中很常见的处理方式。因为Nerf如果使用大量的均匀采样点,第一会导致计算资源不够,第二呢就是也许有很多点都没有意义,因为离3D物体的边界很远。所以先使用稀疏采样,然后计算光到这个点的不透明度来作为权重,来判断这个点离物体边界远不远。这个很好理解,就是如果一个点离目标边界很远的话,光穿过它,不透明度是没有影响的。选择权重最大的那个点,在它周围进行稠密采样,这样采到的点,就大部分是在目标周围的了。
在这里插入图片描述

就这样直接让MLP学习的话,他是学习不到一些高频信息的。也就是说学习不到细节,输出的结果都是只有大致的形状,细节都很模糊。通过这样一个位置编码,它可以将这样低纬度的信息映射到更高纬度上去,从而使用高频函数将颜色和几何形状映射到高维空间拟合包含高频变化的数据。这个就是为什么要使用位置编码的原因。

MLP学习的过程是很简单,但是这里的本质其实是在过拟合这个MLP。让训练的这个MLP完全记住输入中的所有信息。当给到任意视角,就相当于在查询 MLP拟合的参数中表达的信息。所以这也是为什么最早的nerf是没有泛化性可言的原因。

最后volume rendering 目的就是将输出的每一个离散点的density和颜色做一个积分得到当前 ray的颜色,然后对每一条ray都这么做,就可以得到图像了。
在这里插入图片描述
nerf的损失函数也就是两个L2 loss 相加。
在这里插入图片描述
表达的是coarse 和 fine 两个阶段的渲染图像和GT之间的差值。

最后简单记一下metrics
PSNR (Peak signal-to-Noise Ratio) , 信噪比越大,差异就越小。
SSIM(structural similarity index) 越大差异越小 。
LPIPS (learned Perceptual image patch similarity)

这篇关于Nerf基础学习记录的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/994208

相关文章

Python基础文件操作方法超详细讲解(详解版)

《Python基础文件操作方法超详细讲解(详解版)》文件就是操作系统为用户或应用程序提供的一个读写硬盘的虚拟单位,文件的核心操作就是读和写,:本文主要介绍Python基础文件操作方法超详细讲解的相... 目录一、文件操作1. 文件打开与关闭1.1 打开文件1.2 关闭文件2. 访问模式及说明二、文件读写1.

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

Spring Boot 配置文件之类型、加载顺序与最佳实践记录

《SpringBoot配置文件之类型、加载顺序与最佳实践记录》SpringBoot的配置文件是灵活且强大的工具,通过合理的配置管理,可以让应用开发和部署更加高效,无论是简单的属性配置,还是复杂... 目录Spring Boot 配置文件详解一、Spring Boot 配置文件类型1.1 applicatio

MySQL INSERT语句实现当记录不存在时插入的几种方法

《MySQLINSERT语句实现当记录不存在时插入的几种方法》MySQL的INSERT语句是用于向数据库表中插入新记录的关键命令,下面:本文主要介绍MySQLINSERT语句实现当记录不存在时... 目录使用 INSERT IGNORE使用 ON DUPLICATE KEY UPDATE使用 REPLACE

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

C#基础之委托详解(Delegate)

《C#基础之委托详解(Delegate)》:本文主要介绍C#基础之委托(Delegate),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 委托定义2. 委托实例化3. 多播委托(Multicast Delegates)4. 委托的用途事件处理回调函数LINQ

Spring Boot中定时任务Cron表达式的终极指南最佳实践记录

《SpringBoot中定时任务Cron表达式的终极指南最佳实践记录》本文详细介绍了SpringBoot中定时任务的实现方法,特别是Cron表达式的使用技巧和高级用法,从基础语法到复杂场景,从快速启... 目录一、Cron表达式基础1.1 Cron表达式结构1.2 核心语法规则二、Spring Boot中定

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

国内环境搭建私有知识问答库踩坑记录(ollama+deepseek+ragflow)

《国内环境搭建私有知识问答库踩坑记录(ollama+deepseek+ragflow)》本文给大家利用deepseek模型搭建私有知识问答库的详细步骤和遇到的问题及解决办法,感兴趣的朋友一起看看吧... 目录1. 第1步大家在安装完ollama后,需要到系统环境变量中添加两个变量2. 第3步 “在cmd中