【三维重建NeRF(三)】Mip-NeRF论文解读
本文结合深蓝学院课程学习和本人的理解,欢迎交流指正
文章目录
- Mip-NeRF流程简述
- 混叠问题与MipMap
- Mip-NeRF提出的解决办法
- 圆锥台近似计算与集成位置编码(IPE)
Mip-NeRF流程简述
Mip-NeRF的大体流程和NeRF基本是一样的,NeRF介绍
创新的部分就是针对NeRF出现的混叠问题,提出了用圆锥体来取代光线,NeRF一条射线对应Mip-NeRF一个圆锥体,NeRF一个采样点对应Mip-NeRF一个圆锥截台。利用三维高斯逼近圆锥截台(后面简称截台),得到高斯球内所有三维点位置编码的期望值,叫做集成位置编码(IPE)。然后将集成位置编码输入MLP,根据MLP的输出结果进行体渲染,后面的流程和NeRF没有大的区别。另外,Mip-NeRF简化了网络,不同于NeRF有一个粗网络和一个细网络,Mip-NERF只需要一个网络完成重建。
混叠问题与MipMap
奈奎斯特准则
要了解混叠问题首先需要知道奈奎斯特准则:在采样的过程中如果要让原始信号不丢失,那采样频率f必须大于2B,B是信号的最大频率。当f < 2B的时候,原本的高频信号会被混叠成低频信号,跟原有的低频信号产生了混合,导致产生锯齿、伪影等现象。由f > 2B有B < f / 2,所以产生混叠现象的一种解决方案就是在采样之前使用低通滤波器去除高于采样频率一半的频率分量。
低通滤波器
低通滤波器去噪的基本思想就是把噪声和周围的像素加权求和,达到一种平滑的效果。高斯滤波器就是一种常用的低通滤波器。

上面5*5的权重值,叫做滤波核,权重值是将滤波核坐标(x,y)和σ值带入上面公式计算得出的。σ的值越大,像素去除噪声能力越强,也越容易对有效信号产生干扰。图像上处于滤波核中间位置的值就是根据周围像素颜色乘权值的和得来的。
但图像越大滤波的时间越长,如果每次采样之前都要先进行滤波会降低系统性能,所以提出了一种策略叫做MipMap。
MipMap
MipMap(也称为金字塔纹理或多级渐进纹理)。它由一系列逐渐降低分辨率的纹理图像组成,每个级别都是上一个级别的一半大小。基本思想是:随着观察角度的增大,物体表面的细节应该相应减少,这样可以提高渲染效率并减少视觉伪影。
就是指根据一张大图平滑采样生成一系列小图,摄像机拉到某一个尺度,就用对应尺度分辨率的图片采样。预先计算各种分辨率的图像,这样在拉动摄像机的时候,就可以直接找到对应分辨率的图像进行细微的处理,减少计算量。
Mip-NeRF提出的解决办法
对于原始NeRF中已经训练好的模型,当摄像机往远离物体方向移动时,渲染结果就会存在混叠问题,因为NeRF是在固定尺度下进行训练的,当图片分辨率变化时没有自适应性。
那么在训练数据中增加摄像机远离物体方向的样本,可以解决这个问题吗?答案是不能。
在神经网络不变的情况下,对于同一个物体,摄像机往远离物体方向移动后体渲染得到的像素颜色C‘和原来体渲染得到的C是不同的。这样在训练的过程中,由于摄像机远近的不同,对于同一个图像我们希望神经网络输出的值是C’或C,是不统一的,在这种情况下,神经网络就会输出介于C’和C之间的值,导致增加远离物体的样本以后,模型在两种情况上的效果都不理想,可以参考下图(b)的效果。
出现混叠的原因主要是采样频率过低,那么用超采样可以解决问题吗?可以抗混叠,但计算量太大,因此这种方法也不理想。
所以mip-NeRF提出的就是用低通滤波器来解决问题,用圆锥体取代光线。
把每个圆锥截台里所有的像素做加权平均,这样考虑了邻域的像素,结果会更加平滑,再进行体渲染,就可以去除混叠。
但是如果计算神经网络中输出的截台上每一个像素点的σ和C值,再求平均,那计算量就太大了。
所以我们首先计算每个圆锥截台上所有点位置编码的平均值,然后送入神经网络,得到输出σ和C值。这样对于每一个圆锥截台,都会得到一个平滑后的σ和C值,再根据这些σ和C值实现体渲染,因此说NeRF的一个采样点对应Mip-NeRF一个圆锥截台。
圆锥台近似计算与集成位置编码(IPE)
首先我们要判断哪些点位于圆锥截台内,给出了一个公式,如果把三维点代入F(x,▪)=1的话,点x就是圆锥截台内的点。F(x,▪)是一个指示函数,通常表示为 1{⋅},具体来说,如果括号中的条件为真,则函数值为1;如果条件为假,则函数值为0。
关于期望的计算,F()可以理解为截台内点的个数,乘以每个点的位置编码γ(x),再除以点的个数得到位置编码,这个位置编码也叫集成位置编码。
该公式括号内包含的两个条件需要同时满足,它们意义分别是:
- 点x处于t_0和t_1的中间。
- 点x处于图示圆锥体夹角范围内。
这两条就确定了点x的位置是处于截台内的。
但是截台位置编码期望的计算是比较困难的,因此我们要利用3D高斯逼近圆台,3D高斯是一个球,使x服从μ和σ的一个分布。为了找到这个合适的高斯球,定义了t_μ和t_σ,r是一个固定的值,这是根据圆半径计算公式得到的。
将其转换到世界坐标系下,这样我们就能得到高斯球内位置坐标x的期望,但我们需要的是位置编码γ(x)的期望值。
为了便于表达,我们将位置编码写成矩阵的形式,很多网络中会将π直接去掉,这不会对性能产生很大的影响。
要计算γ(x)的期望值,可以先计算sin( p)和cos( p)的期望,p服从是高斯分布,计算公式如上图。
得到了sin§和cos§的计算公式,那我们要求的E(γ(x))就是要求得[Esin(px), Ecos(px)]。
X ~ (μ , Σ)的均值分布,那么Px服从的分布如下图公式,继而可以得到集成位置编码的期望计算公式。
这样我们就可以得到最终的集成位置编码计算公式,将其输入神经网络得到对应的颜色和体密度,再进行渲染。
mip-nerf采用集成位置编码,摄像机距离物体较近时,就会学习到高频信息。当摄像机距离变远时,高频位置信息就会被平滑,避免出现伪影,这样就实现了自适应。
NeRF有两套网络。一个均匀采样的粗网络和一个在均匀采样的基础上在体密度分布较多的地方多采样的细网络。Mip-NeRF由于圆锥截台的存在,所有的领域信息都会被考虑上,因此只需要一个网络。
相关文章:
【三维重建NeRF(三)】Mip-NeRF论文解读
本文结合深蓝学院课程学习和本人的理解,欢迎交流指正 文章目录 Mip-NeRF流程简述混叠问题与MipMapMip-NeRF提出的解决办法圆锥台近似计算与集成位置编码(IPE) Mip-NeRF流程简述 Mip-NeRF的大体流程和NeRF基本是一样的,NeRF介绍 创新的部分就是针对NeRF…...
安卓SystemServer进程详解
目录 一、概述二、源码分析2.1 SystemServer fork流程分析2.1.1 [ZygoteInit.java] main()2.1.2 [ZygoteInit.java] forkSystemServer()2.1.3 [Zygote.java] forkSystemServer()2.1.4 [com_android_internal_os_Zygote.cpp]2.1.5 [com_android_internal_os_Zygote.cpp] ForkCom…...
Android studio 连接 adb传输文件到电脑
前提是已经连接到adb window R: 打开控制台adb devices:可以查看已经连接的设备adb pull /storage/emulated/0/Download/aa.png C:\Users\Administrator\Desktop:拉取连接设备的文件 aa.png 到电脑桌面上 (在电脑控制台进行拉取操作) 如果…...
Web学习篇(二)
命令执行漏洞 一、常用的函数 1、eval() 例: eval(string $code) 把字符串code作为PHP代码执行 2、assert() assert( mixed $assertion [, string $description ]) 检查一个断言是否为 FALSE,如果 assertion 是字符串,它将会被 assert()当做 PHP 代码来执行。 3、p…...
在Linux/Ubuntu/Debian系统中使用 `tar` 压缩文件
在Linux/Ubuntu/Debian系统中使用 tar 压缩文件 tar 命令是用于在类 Unix 操作系统中创建文件和目录存档的强大实用程序。 基本存档创建 要创建文件夹的简单存档,请使用以下命令: tar -cf ./my-archive.tar ./my-folder/此命令将创建一个名为 my-arc…...
Idea-Linux远程开发部署
第一步:File->Remote Development 第二步: 第三步: 第四步:在Host位置填写Linux虚拟机的IP地址,在Username、Password填写对应的账号密码后点击Test Connection测试连接。 第五步: 第六步:在…...
智能硬件会是下一个风口行业吗?
“风口行业”一直是人们热捧的择业目标,曾经红极一时房地产行业,此时已成沉舟侧畔之势,也意味着一个又一个行业时代的更迭。 随着5G时代的到来,“智能化”成了人们热议的话题,因为大家都懂:顺势而为才是王…...
mysql like 查询优化
1.如果我们查询的时候用like 模糊查询%a%,数据量大了会查询全局,效率很低 SELECT * FROM Customers WHERE CustomerName LIKE %a%; 优化: 不会破坏索引 -步骤-:创建适合Like查询的索引ALTER TABLE users ADD INDEX idx_username (usernam…...
3389连接器,3389连接器如何进行安全设置
在计算机网络领域,3389端口作为Windows系统默认的远程桌面协议(RDP)端口,在远程办公、技术支持等场景中发挥着重要作用。然而,由于其广泛的使用和直接暴露在互联网上的特性,3389端口也极易成为黑客攻击的目…...
代码随想录训练营Day56:Leetcode647、516
Leetcode647: 问题描述: 给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。 回文字符串 是正着读和倒过来读一样的字符串。 子字符串 是字符串中的由连续字符组成的一个序列。 示例 1: 输入:s &q…...
LLM主要类别架构
LLM主要类别架构介绍 LLM主要类别 LLM本身基于transformer架构。自2017年,attention is all you need诞生起,transformer模型为不同领域的模型提供了灵感和启发。基于原始的Transformer框架,衍生出了一系列模型,一些模型仅仅使用e…...
试比较GD32E230系列与L233/235芯片在IIC上使用温度传感器SHT40的异同
不说废话,上代码,不同之处直接用宏 展开 1. 首先是i2c 时钟配置 函数有些出入 void sensirion_i2c_attribute_config(){#ifdef GD32E230/* I2C clock configure */i2c_clock_config(I2C1, 100000, I2C_DTCY_2);/* I2C address configure */i2c_mode_a…...
超强算力 Orange Pi Kunpeng Pro 开发板基础测评与体验
目录 开箱体验资源简介系统启动连接网络登录系统通过桌面登录通过串口登录通过 SSH 登录配置散热风扇 算力测试MNIST示例MBNET示例 体验总结 大家好,我是 Hello 阿尔法,有幸接到 CSDN 的邀请参与 Orange Pi Kunpeng Pro 开发板的测评活动,本文…...
vs - ms官方查看pdb文件内容的例子工程
文章目录 vs - ms官方查看pdb文件内容的例子工程概述笔记END vs - ms官方查看pdb文件内容的例子工程 概述 不管哪个版本的VS,生成debug版工程时,除了工程自己的.pdb还会有vc*.pdb. e.g. vc.pdb, vc70.pdb, vc90.pdb, vc120.pdb, vc140.pdb, vc142.pdb,…...
【excel】设置二级可变联动菜单
文章目录 【需求】在一级菜单选定后,二级菜单联动显示一级菜单下的可选项【步骤】step1 制作辅助列1.列转行2.在辅助列中匹配班级成员 step2 名称管理器step3 制作二级下拉菜单step4 消除二级菜单中的空白 【总结】 之前做完了 【excel】设置可变下拉菜单ÿ…...
8月1-3日西安国际储能产业博览会
同期举办:2024西部国际氢能源及燃料电池产业博览会 2024年12月5-7日 西安国际会展中心 一、展会概况: 在能源转型和“双碳”目标的推动下,风电、太阳能、氢能等能源产业得到快速的发展,新型储能日益成为我国建设新型能源体…...
MySQL事务处理:ACID属性基础与实现概览
前言 本文核心思想就是介绍一下 Mysql ACID 的实现,至于事务、锁、redo 的底层结构及实现原理,后面会单独出文章介绍。之所以这样是不希望一篇文章过长,在闲暇时间就可轻易掌握一个知识点。 ACID 介绍 ACID 是数据库管理系统&#x…...
PostgreSQL 修改表结构卡住不动
目录 1 问题2 实现 1 问题 今天遇到的一个问题记录一下,因为系统上的一个改动需要同步脚本至测试库上,具体的脚本内容也很简单,就是修改了某张表的一个字段。但是无论怎么操作都是一直卡住,表的数据量很小就十几条数据所以初步怀疑是表被锁了…...
wvp-gb28181-pro搭建流媒体服务器,内存占用过高问题
直接给出解决办法,端口暴露的太多了,暴露了500个端口导致从3g---->11g 遇到的问题,直接使用镜像《648540858/wvp_pro:latest》在宿主机上运行,如我下面的博客 https://blog.csdn.net/weixin_41012767/article/details/137112338?spm=1001.2014.3001.5502 docker run …...
项目-双人五子棋对战: websocket的讲解与使用 (1)
项目介绍 接下来, 我们将制作一个关于双人五子棋的项目, 话不多说先来理清一下需求. 1.用户模块 用户的注册和登录 管理用户的天梯分数, 比赛场数, 获胜场数等信息. 2.匹配模块 依据用户的天梯积分, 实现匹配机制. 3.对战模块 把两个匹配到的玩家放到同一个游戏房间中, 双方通…...
大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...
vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...
汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案
JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停 1. 安全点(Safepoint)阻塞 现象:JVM暂停但无GC日志,日志显示No GCs detected。原因:JVM等待所有线程进入安全点(如…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...
C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...
Ubuntu系统复制(U盘-电脑硬盘)
所需环境 电脑自带硬盘:1块 (1T) U盘1:Ubuntu系统引导盘(用于“U盘2”复制到“电脑自带硬盘”) U盘2:Ubuntu系统盘(1T,用于被复制) !!!建议“电脑…...
DAY 26 函数专题1
函数定义与参数知识点回顾:1. 函数的定义2. 变量作用域:局部变量和全局变量3. 函数的参数类型:位置参数、默认参数、不定参数4. 传递参数的手段:关键词参数5 题目1:计算圆的面积 任务: 编写一…...
