NeRF从入门到放弃3: EmerNeRF

2024-06-23 02:28
文章标签 入门 放弃 nerf emernerf

本文主要是介绍NeRF从入门到放弃3: EmerNeRF,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

https://github.com/NVlabs/EmerNeRF
该方法是Nvidia提出的,其亮点是不需要额外的2D、3Dbox先验,可以自动解耦动静field。
核心思想:
1. 动、静filed都用hash grid编码,动态filed比静态多了时间t,静态的hash编码输入是(x,y,z),动态是(x,y,z,t)。
2. 使用flow融合多帧的特征,预测当前时刻的点的前向和后向的flow,最后的动态Feature是0.25pre+0.5+0.25next
3. 用3个head分别预测正常物体、天空和阴影。

3.1 SCENE REPRESENTATIONS

1 Scene decomposition

为了实现高效的场景解耦,把4D场景分解为静态场和动态场,两者都分别由可学习的hash grid(instant NGP) Hs和hd表示。(注,下标s和d分别表示static和dynamic,下文所有表示都是此含义)
这种解耦为与时间无关的特征 hs = Hs(x) 和时变特征 hd = Hd(x, t) 提供了一种灵活紧凑的 4D 场景表示,其中 x = (x, y, z) 是查询点的 3D 位置,t 表示其时间步长。这些特征通过轻量级 MLP进一步转换为动态和静态的feature(gs和gd),和用于预测每个点的密度 (σs 和 σd)。
在这里插入图片描述
在这里插入图片描述

所以这一步得到每个3D点的feature和密度。

2 Multi-head prediction

用三个head分别预测 color sky 和shadow,动态和静态共享共一个color mlp。
该color head以 (gs, d) 和 (gd, d) 作为输入,并为每个点都输出一个静态和动态的颜色;由于天空的深度定义不明确,所以单独加一个head预测天空的深度;添加一个影子的head去表述动态物体的阴影,输出动态对象0-1的标量,调整静态场预测的颜色强度。

由此图可看出,MLP_color的输入分别是动态feature和朝向,shadow head的输入是动态feature,sky head的输入只是朝向(为什么要这么做,因为没有深度信息,不知道采样多少个点)。

在这里插入图片描述

3.2 EMERGENT SCENE FLOW

1 场景流估计(Scene flow estimation)

用flow的head对当前时刻的query点,预测前向和后向的流。最后的动态Feature是0.25pre+0.5+0.25next**

该特征聚合模块实现了三个目标:1)它将流场与场景重建损失(例如 RGB 损失)连接起来进行监督,2)它巩固特征、去噪时间属性以进行准确预测,以及 3)每个点通过其时间链接特征的共享梯度来丰富,通过共享知识提高单个点的质量

Hv和Hd应该是一样的。
在这里插入图片描述

flow部分代码:MLP的最后一层的输出是6维,前3维表示forward flow,后3维表示backwark flow。注意,最后一层mlp是没有激活函数的,以为要预测前后项的flow值,理论上有正负的,所以不能加激活函数。

# ======== Flow Field ======== #
self.flow_xyz_encoder = None
if self.cfg.enable_flow_branch:self.flow_xyz_encoder = HashEncoder(self.cfg.flow_xyz_encoder)self.flow_mlp = nn.Sequential(nn.Linear(self.flow_xyz_encoder.n_output_dims,self.cfg.base_mlp_layer_width,),nn.ReLU(),nn.Linear(self.cfg.base_mlp_layer_width, self.cfg.base_mlp_layer_width),nn.ReLU(),nn.Linear(self.cfg.base_mlp_layer_width, 6),  # 3 for forward, 3 for backward# no activation function for flow)

2 特征聚合模块(Multi-frame feature integration)

预测出forward 和backwark flow后,加到原本的位置,即得到上一阵和下一帧的位置,把上一阵和下一帧的位置都送到动态的mlp网络中。
在这里插入图片描述
上图公式中,gd是动态的mlp,Hd是hash编码,也就是说当前帧点的坐标加上前后相的光流偏移量(Δx,Δy,Δz)后,和上一帧的时间t,再次进行hash编码,然后都送到动态的mlp网络中得到上一帧和下一帧的动态feature,再和当前帧的feature加权平均。

把flow和场景重建的loss损失结合起来进行监督;增强了动态部分的特征,去噪时间属性以进行准确的预测;每个点通过其时间链接特征的共享梯度来丰富,通过共享知识提高单个点的质量。

没有用显式的监督,这种能力来自于时间聚合步骤,同时优化场景重建损失。我们的假设是,只有时间一致的特征受益于多帧特征集成,这种集成间接地将场景流场驱动到最优解——预测所有点的正确流。

3 消融实验

消融研究证实了这一点:当禁用时间聚合或停止这些附近特征的梯度时,flow无法学习有意义的结果,加入flow, psnr+1

实验细节

只用了3个相机,图片resize成640x960。25K迭代,8196。静态场景把flow和dynamic分支去掉。静态场景不加feature,加feature40分钟,动态场景不加feature2小时,加feature2.25小时。

这篇关于NeRF从入门到放弃3: EmerNeRF的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Spring Boot 与微服务入门实战详细总结

《SpringBoot与微服务入门实战详细总结》本文讲解SpringBoot框架的核心特性如快速构建、自动配置、零XML与微服务架构的定义、演进及优缺点,涵盖开发环境准备和HelloWorld实战... 目录一、Spring Boot 核心概述二、微服务架构详解1. 微服务的定义与演进2. 微服务的优缺点三

从入门到精通详解LangChain加载HTML内容的全攻略

《从入门到精通详解LangChain加载HTML内容的全攻略》这篇文章主要为大家详细介绍了如何用LangChain优雅地处理HTML内容,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录引言:当大语言模型遇见html一、HTML加载器为什么需要专门的HTML加载器核心加载器对比表二

从入门到进阶讲解Python自动化Playwright实战指南

《从入门到进阶讲解Python自动化Playwright实战指南》Playwright是针对Python语言的纯自动化工具,它可以通过单个API自动执行Chromium,Firefox和WebKit... 目录Playwright 简介核心优势安装步骤观点与案例结合Playwright 核心功能从零开始学习

从入门到精通MySQL联合查询

《从入门到精通MySQL联合查询》:本文主要介绍从入门到精通MySQL联合查询,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下... 目录摘要1. 多表联合查询时mysql内部原理2. 内连接3. 外连接4. 自连接5. 子查询6. 合并查询7. 插入查询结果摘要前面我们学习了数据库设计时要满

从入门到精通C++11 <chrono> 库特性

《从入门到精通C++11<chrono>库特性》chrono库是C++11中一个非常强大和实用的库,它为时间处理提供了丰富的功能和类型安全的接口,通过本文的介绍,我们了解了chrono库的基本概念... 目录一、引言1.1 为什么需要<chrono>库1.2<chrono>库的基本概念二、时间段(Durat

解析C++11 static_assert及与Boost库的关联从入门到精通

《解析C++11static_assert及与Boost库的关联从入门到精通》static_assert是C++中强大的编译时验证工具,它能够在编译阶段拦截不符合预期的类型或值,增强代码的健壮性,通... 目录一、背景知识:传统断言方法的局限性1.1 assert宏1.2 #error指令1.3 第三方解决

从入门到精通MySQL 数据库索引(实战案例)

《从入门到精通MySQL数据库索引(实战案例)》索引是数据库的目录,提升查询速度,主要类型包括BTree、Hash、全文、空间索引,需根据场景选择,建议用于高频查询、关联字段、排序等,避免重复率高或... 目录一、索引是什么?能干嘛?核心作用:二、索引的 4 种主要类型(附通俗例子)1. BTree 索引(

Redis 配置文件使用建议redis.conf 从入门到实战

《Redis配置文件使用建议redis.conf从入门到实战》Redis配置方式包括配置文件、命令行参数、运行时CONFIG命令,支持动态修改参数及持久化,常用项涉及端口、绑定、内存策略等,版本8... 目录一、Redis.conf 是什么?二、命令行方式传参(适用于测试)三、运行时动态修改配置(不重启服务

MySQL DQL从入门到精通

《MySQLDQL从入门到精通》通过DQL,我们可以从数据库中检索出所需的数据,进行各种复杂的数据分析和处理,本文将深入探讨MySQLDQL的各个方面,帮助你全面掌握这一重要技能,感兴趣的朋友跟随小... 目录一、DQL 基础:SELECT 语句入门二、数据过滤:WHERE 子句的使用三、结果排序:ORDE

Python中OpenCV与Matplotlib的图像操作入门指南

《Python中OpenCV与Matplotlib的图像操作入门指南》:本文主要介绍Python中OpenCV与Matplotlib的图像操作指南,本文通过实例代码给大家介绍的非常详细,对大家的学... 目录一、环境准备二、图像的基本操作1. 图像读取、显示与保存 使用OpenCV操作2. 像素级操作3.