【三维】NeRF神经辐射场构建三维模型

news2024/11/14 14:36:19

 

论文地址:paper

代码地址:code

视频地址:油管

目录

0.🌈🌈摘要

1.🌈🌈nerf主要原理

2.🌈🌈网络结构

2.1📌渲染

2.2📌消融实验

3.🌈🌈NeRF网络的创新点

3.1📌位置编码

3.2📌两阶段层次化采样

4.🌈🌈结果


        NeRF的研究目的是合成同一场景不同视角下的图像。方法很简单,根据给定一个场景的若干张图片,重构出这个场景的3D表示,然后推理的时候输入不同视角就可以合成(渲染)这个视角下的图像了。

        「3D表示」有很多种形式,NeRF使用的是辐射场,然后用「体渲染」(Volume Rendering)技术,给定一个相机视角,把辐射场渲染成一张图像。选用辐射场+体渲染的原因很简单,全程可微分。这个过程很有意思,可以理解为把一个空间朝一个方向上拍扁,空间中的颜色加权求和得到平面上的颜色。

0.🌎🌎摘要

        我们提出了一种用于通过使用稀疏输入集优化底层连续体积场景函数来合成复杂场景的新颖视角方法,并达到SOTA结果。我们的算法使用全连接(非卷积)深度网络表示场景,其输入是单个连续 5D 坐标(空间位置 (x, y, z) 和观看方向 (θ, φ)),其输出是体积密度和与视图相关空间位置的发射辐射率。通过查询 5D 坐标来合成视图,沿着相机光线并使用经典的体积渲染技术进行投影,将输出颜色和密度转化为图像。 因为体积渲染是自然可微的,优化我们的表示所需的唯一输入是一组具有已知相机姿势的图像。 我们描述如何有效优化神经辐射场,呈现逼真具有复杂几何和外观的场景视图,并展示了优于神经渲染和视图先前工作的结果合成。 查看合成结果最好以视频形式查看,因此我们强烈建议读者可以观看我们的补充视频以进行令人信服的比较。


  • 这盛世如你所愿,视频地址:油管
  • 部分截图如下:

        建立 Nerf 神经辐射场的三维模型的原理是通过使用神经网络来重建三维场景。具体步骤如下:

        1. 数据采集:使用一个摄像头或者深度相机,在不同角度和位置下,对所需场景进行拍摄或采集深度图像。

        2. 数据预处理:对采集到的图像数据进行预处理,包括去除噪声、图像校正等操作。如果使用深度相机,可能还需要进行相机标定操作。

        3. 网络训练:使用现有的神经网络架构(如 NeRF),将预处理后的图像数据作为输入,经过训练来建立场景的三维模型。网络将学习如何从图像中推断出场景的几何结构和表面属性。

        4. 模型融合:在训练完成后,可以将多个角度和位置下的网络模型融合在一起,以获得更完整和精确的三维场景模型。


1.🌈🌈nerf主要原理

       Nerf(Neural Radiance Fields)即 神经辐射场,我们可以把它看做是一个函数:如果我们从一个角度向一个静态空间发射一条射线,我们可以查询到这条射线在空间中每个点的密度 ,以及该位置在射线角度下呈现出来的颜色。其中密度是用来计算权重的,对点上的颜色做加权求和就可以呈现像素颜色

       

        具体计算方式为:首先知道相机的焦点,焦点和像素的连线可以连出来一条射线,我们可以对这条射线经过空间上的每个点的密度(只和空间坐标相关)和颜色(同时依赖空间坐标和入射角)进行积分就可以得到每个像素的颜色。当每个像素的颜色都计算出来,那么这个视角下的图像就被渲染出来了。

        因为神经网络是可微分的,选取的体渲染方法是可微分;体渲染得到的图片和原图计算MSE Loss。整个过程可端到端地用梯度回传来优化非常漂亮。


2.🌈🌈网络结构

        Nerf的关键思想是使用神经网络来表示场景的辐射场(radiance field)。辐射场是指在场景中每个点上沿不同方向传播的光线的强度和颜色。具体来说,Nerf使用了一种名为"隐式表示"的方法来建模辐射场。传统方法通常使用显式的表示方法,比如点云、网格或参数化的模型,这些方法需要较高的存储和计算复杂度。而Nerf将辐射场看作一个黑盒函数,通过神经网络来对该函数进行建模。给个图理解下。

2.1📌渲染

        此部分主要讲解如何沿着射线对空间中的颜色进行积分?

         如果从焦点到一个像素上连的射线为:,其中 o 是原点,t是时间。时间起点(near bound)和时间终点(far bound)为 tn 和 tf。我们有沿着这条射线积分得到像素颜色的公式如下:

可以直观得到这个积分要满足的两个条件:

  1. 一个点的密度越高,射线通过它之后变得越弱,密度和透光度呈反比
  2. 一个点的密度越高,这点在这个射线下的颜色反应在像素上的权重越大

        实际渲染过程,我们只能把射线平均分成N个小区间,每个区间随机采样一个点,对采样得到的点的颜色进行某种加权求和: 

基于这些采样点,我们可以讲上述积分简化为求和的形式:

        Nerf的神经网络模型由一个编码器和一个解码器组成。编码器接收场景中的位置和方向信息,并将其映射到隐空间中的向量表示。解码器将隐空间中的向量表示解码为对应位置和方向上的辐射场属性,例如颜色和透射率。通过使用深度残差连接和多层感知机等技术,Nerf可以学习到复杂场景的非线性光照和几何变化。

        在训练过程中,Nerf使用多个位置和方向的图像数据来拟合神经网络模型的参数。通过最小化预测图像与真实图像之间的重建误差,模型逐渐学习到场景的几何结构和光照属性。

        当模型训练完成后,就可以使用该模型来生成新的视角下的图像。通过在体素中采样许多光线并沿其传播,Nerf可以估计每条光线在场景中的交互,从而生成高质量的合成图像。

        总而言之,Nerf通过神经网络的隐式表示来建模场景的辐射场,通过训练和采样来生成高质量的三维模型和图像。这种方法在真实感渲染、虚拟现实等领域具有广泛应用价值。

2.2📌消融实验


3.🌈🌈NeRF网络的创新点

3.1📌位置编码

        神经网络是通用的函数近似器,但是实验发现,如果直接输入微元位置和光线方向,那么模型最终渲染得到的图片比较模糊,也就是说,深度网络偏向于学习低频函数。为了提高模型对图像纹理细节的表现能力,NeRF在将5D输入传递给网络之前,使用傅里叶变换将输入映射到更高维度的空间,可以更好地拟合包含高频变化的数据。也就是额外嵌入了一层确定性的位置编码函数降低模型学习难度。类似于MLP,把坐标和视角用更高维度的表示作为网络输入,来解决渲染图像比较糊的问题:

3.2📌两阶段层次化采样

        NeRF的任务就是将一系列的采样点输入网络,计算器体密度和颜色,那么如何采样就成为一个关键的问题。采样点过多开销过大,采样点过少近似误差有太大。直观的一个想法是,最好尽可能的避免在空缺部分以及被遮挡了的部分进行过多的采样,因为这些部分对最好的颜色贡献是很少的,基于这一想法 NeRF 提出两阶段层次化采样 (Hierarchical volume sampling) 的方式,即先按照均匀随机采样进行一次粗采样,将粗采样的输出的结果转化为分布,再根据分布进行一次精采样,最后NeRF训练的损失也是粗采样和精采样结果相加的结果,这样就实现了一个自动化Coarse-To-Fine的训练过程。 


4.🌈🌈结果

整理不易,欢迎一键三连!!!


送你们一条美丽的--分割线--

🌷🌷🍀🍀🌾🌾🍓🍓🍂🍂🙋🙋🐸🐸🙋🙋💖💖🍌🍌🔔🔔🍉🍉🍭🍭🍋🍋🍇🍇🏆🏆📸📸⛵⛵⭐⭐🍎🍎👍👍🌷🌷

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

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

相关文章

链表反转问题

链表反转常用的两种方式 1.建立虚拟头结点辅助反转 Java 实现 public static ListNode reverseListByDummyNotCreate(ListNode head) {ListNode ans new ListNode(-1);ListNode cur head;while (cur ! null) {ListNode next cur.next;cur.next ans.next;ans.next cur;cur…

抖音集团都在用的画质评估工具,确定不试试吗?

导读 本文从抖音集团内部画质评估体系的建设历程着笔,主要分享了画质评测对于业务的重要性、主要应用场景和内部产品的一些典型实践案例。通过分享业务视角遇到的一些问题和我们的解决思路,希望能抛砖引玉,为遇到类似困扰的伙伴们提供有价值的…

[C++学习] 多进程通信共享内存

ref:https://blog.csdn.net/qq_35733751/article/details/82872197 多线程共享进程的地址空间,如果多个线程需要访问同一块内存,用全局变量即可。 在多进程中,每个进程的地址空间是独立的,不共享的,如果多个进程需要访…

Redis持久化、主从与哨兵架构详解

Redis持久化 RDB快照(snapshot) 在默认情况下, Redis 将内存数据库快照保存在名字为 dump.rdb 的二进制文件中。 你可以对 Redis 进行设置, 让它在“ N 秒内数据集至少有 M 个改动”这一条件被满足时, 自动保存一次数…

yolov7添加pconv模块

连接pconv 1、复制到models-common.py文件最后 2、添加模块到yolo.py 3、修改网络,建议替换3x3的卷积,后面的参数不要了 4、不能替换步长为2的卷积

CSS笔记(黑马程序员pink老师前端)浮动,清除浮动

浮动可以改变标签的默认排列方式。浮动元素常与标准流的父元素搭配使用. 网页布局第一准则:多个块级元素纵向排列找标准流,多个块级元素横向排列找浮动。 float属性用于创建浮动框,将其移动到一边,直到左边缘或右边缘触及包含块或另一个浮动框…

【算法系列篇】分治-快排

文章目录 前言什么是分冶1.颜色分类1.1 题目要求1.2 做题思路1.3 Java代码实现 2. 排序数组2.1 题目要求2.2 做题思路2.3 Java代码实现 3.数组中的第k个最大元素3.1 题目要求3.2 做题思路3.3 Java代码实现 4. 最小的k个数4.1 题目要求4.2 做题思路4.3 Java代码实现 总结 前言 …

前端面试题合集(一)

前端面试题合集 1.js异步方案2.文件上传如何限制文件类型3. 说出 与的区别4.多维数组如何降维5.如何给一个按钮绑定两个onclick事件 1.js异步方案 js异步方法分为两种,分别为defer和async,如果没有写其中一种的话代码从上到下同步执行,遇到脚本代码之后…

埋头干活不会汇报,别说 996 就算 007 也没用!

​ 见字如面,我是军哥! 经调研发现 80% 的程序员认为工作汇报就是形式主义,无聊至极,但是我要和你说,做好工作汇报非常重要,这直接关系到你在这家公司能否快速成长和晋升加薪,而且要告诉你一件扎…

vue3:18、Pinia持久化(pinia-plugin-persistedstate)

安装插件 npm i pinia-plugin-persistedstate main.js中引入 import { createApp } from vue import { createPinia } from pinia import App from ./App.vue import piniaPluginPersistedstate from pinia-plugin-persistedstate // createApp(App).use(CreatePinia()).mou…

Day58|leetcode 739. 每日温度、496.下一个更大元素 I

今天开始单调栈! leetcode 739. 每日温度 题目链接:739. 每日温度 - 力扣(LeetCode) 视频链接:单调栈,你该了解的,这里都讲了!LeetCode:739.每日温度_哔哩哔哩_bilibili 题目概述 …

Unity——脚本与导航系统

Unity内置了一个比较完善的导航系统,一般称为Nav Mesh(导航网格),用它可以满足大多数游戏中角色自动导航的需求。 一、导航系统相关组件 Unity的导航系统由以下几个部分组成: Nav Mesh。Nav Mesh与具体的场景关联&…

【postgresql 基础入门】数据库服务的管理,启动、停止、状态查看、配置加载、重启都在这里

数据库服务管理 ​专栏内容: postgresql内核源码分析手写数据库toadb并发编程 ​开源贡献: toadb开源库 个人主页:我的主页 管理社区:开源数据库 座右铭:天行健,君子以自强不息;地势坤&#xff…

【精读Uboot】反汇编分析SPL的_main函数

1、简介 典型的Uboot启动分为两个阶段,bootrom->SPL(Secondary Program Loader)->ATF->OPTEE(可选)->Uboot。其中SPL为BL2,ATF为BL31,OPTEE为BL32,Uboot为BL33。其中bootrom是固化在芯片内部的…

MySQL 8.0.34(x64)安装笔记

一、背景 从MySQL 5.6到5.7,再到8.0,版本的跳跃不可谓不大。安装、配置的差别也不可谓不大,特此备忘。 二、过程 (1)获取MySQL 8.0社区版(MySQL Community Server)   从 官网 字样 “MySQL …

3D印刷电路板在线渲染查看工具

从概念上讲,这是有道理的,因为PCB印制电路板上的走线从一个连接到下一个连接的路线基本上是平面的。 然而,我们生活在一个 3 维世界中,能够以这种方式可视化电路以及相应的组件,对于设计过程很有帮助。本文将介绍KiCad…

VsCode Ctrl+.修复无效

vscode 快速修复(quick fix) 快捷键(Ctrl .)被占用问题解决方法_vscode快速修复快捷键_追求者2016的博客-CSDN博客

Android 系统源码目录frameworks/base/packages和packages/apps下的APP区别

概要 在 Android Open Source Project (AOSP) 源代码中,frameworks/base/packages 和 packages/apps 目录都包含 Android 系统中的应用程序,但它们在性质和用途上有一些区别: 1,frameworks/base/packages frameworks/base 目录…

OMRON G9SP和NB触摸屏使用232口通讯

G9SP和NB触摸屏使用232口通讯 实验时间:2023/9/7 实验设备:G9SP-N20S、CP1W-CIF01(232串口选减板)、NB5Q-TW00B、XW2Z-200T(串口线),CP1W-20EDT1,D4GS-N4T(安全门开关&a…

alibaba国际版阿里巴巴API接入说明(阿里巴巴商品详情+关键词搜索商品列表)

API地址:https://o0b.cn/anzexi 调用示例:https://api-gw.onebound.cn/alibaba/item_get/?keytest_api_key& &num_iid60840463360&&langzh-CN&secret 参数说明 通用参数说明 url说明 https://api-gw.onebound.cn/平台/API类型/ 平台&#xf…