【三维重建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.对战模块 把两个匹配到的玩家放到同一个游戏房间中, 双方通…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...
Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...
uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)
UniApp 集成腾讯云 IM 富媒体消息全攻略(地理位置/文件) 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型,核心实现方式: 标准消息类型:直接使用 SDK 内置类型(文件、图片等)自…...
LLaMA-Factory 微调 Qwen2-VL 进行人脸情感识别(二)
在上一篇文章中,我们详细介绍了如何使用LLaMA-Factory框架对Qwen2-VL大模型进行微调,以实现人脸情感识别的功能。本篇文章将聚焦于微调完成后,如何调用这个模型进行人脸情感识别的具体代码实现,包括详细的步骤和注释。 模型调用步骤 环境准备:确保安装了必要的Python库。…...
聚六亚甲基单胍盐酸盐市场深度解析:现状、挑战与机遇
根据 QYResearch 发布的市场报告显示,全球市场规模预计在 2031 年达到 9848 万美元,2025 - 2031 年期间年复合增长率(CAGR)为 3.7%。在竞争格局上,市场集中度较高,2024 年全球前十强厂商占据约 74.0% 的市场…...
验证redis数据结构
一、功能验证 1.验证redis的数据结构(如字符串、列表、哈希、集合、有序集合等)是否按照预期工作。 2、常见的数据结构验证方法: ①字符串(string) 测试基本操作 set、get、incr、decr 验证字符串的长度和内容是否正…...
用js实现常见排序算法
以下是几种常见排序算法的 JS实现,包括选择排序、冒泡排序、插入排序、快速排序和归并排序,以及每种算法的特点和复杂度分析 1. 选择排序(Selection Sort) 核心思想:每次从未排序部分选择最小元素,与未排…...
Linux实现线程同步的方式有哪些?
什么是线程同步? 想象一下超市收银台:如果所有顾客(线程)同时挤向同一个收银台(共享资源),场面会一片混乱。线程同步就是给顾客们发"排队号码牌",确保: 有序访…...
