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

相关文章

从入门到精通详解Python虚拟环境完全指南

《从入门到精通详解Python虚拟环境完全指南》Python虚拟环境是一个独立的Python运行环境,它允许你为不同的项目创建隔离的Python环境,下面小编就来和大家详细介绍一下吧... 目录什么是python虚拟环境一、使用venv创建和管理虚拟环境1.1 创建虚拟环境1.2 激活虚拟环境1.3 验证虚

Java List 使用举例(从入门到精通)

《JavaList使用举例(从入门到精通)》本文系统讲解JavaList,涵盖基础概念、核心特性、常用实现(如ArrayList、LinkedList)及性能对比,介绍创建、操作、遍历方法,结合实... 目录一、List 基础概念1.1 什么是 List?1.2 List 的核心特性1.3 List 家族成

c++日志库log4cplus快速入门小结

《c++日志库log4cplus快速入门小结》文章浏览阅读1.1w次,点赞9次,收藏44次。本文介绍Log4cplus,一种适用于C++的线程安全日志记录API,提供灵活的日志管理和配置控制。文章涵盖... 目录简介日志等级配置文件使用关于初始化使用示例总结参考资料简介log4j 用于Java,log4c

史上最全MybatisPlus从入门到精通

《史上最全MybatisPlus从入门到精通》MyBatis-Plus是MyBatis增强工具,简化开发并提升效率,支持自动映射表名/字段与实体类,提供条件构造器、多种查询方式(等值/范围/模糊/分页... 目录1.简介2.基础篇2.1.通用mapper接口操作2.2.通用service接口操作3.进阶篇3

Python自定义异常的全面指南(入门到实践)

《Python自定义异常的全面指南(入门到实践)》想象你正在开发一个银行系统,用户转账时余额不足,如果直接抛出ValueError,调用方很难区分是金额格式错误还是余额不足,这正是Python自定义异... 目录引言:为什么需要自定义异常一、异常基础:先搞懂python的异常体系1.1 异常是什么?1.2

Python实现Word转PDF全攻略(从入门到实战)

《Python实现Word转PDF全攻略(从入门到实战)》在数字化办公场景中,Word文档的跨平台兼容性始终是个难题,而PDF格式凭借所见即所得的特性,已成为文档分发和归档的标准格式,下面小编就来和大... 目录一、为什么需要python处理Word转PDF?二、主流转换方案对比三、五套实战方案详解方案1:

Spring WebClient从入门到精通

《SpringWebClient从入门到精通》本文详解SpringWebClient非阻塞响应式特性及优势,涵盖核心API、实战应用与性能优化,对比RestTemplate,为微服务通信提供高效解决... 目录一、WebClient 概述1.1 为什么选择 WebClient?1.2 WebClient 与

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 核心功能从零开始学习