【论文精读】Pose-Free Neural Radiance Fields via Implicit Pose Regularization

今天读的是一篇发表在ICCV 2023上的文章,作者来自NTU。
文章地址:点击前往

文章目录

  • Abstract
  • 1 Intro
  • 2 Related Work
  • 3 Preliminary
  • 4 Proposed Method
    • 4.1 Overall Framework
    • 4.2 Scene Codebook Construction
    • 4.3 Pose-Guided View Reconstruction
    • 4.4 Training Process
    • 5 Experiment
    • 5.1 Datasets and Implementation Details
    • 5.2 Comparisons with SOTA
    • 5.3 Ablation Studies
    • 5.4 Visualization
    • 5.5 Parameters Investigation
  • 6 Limitation
  • 7 Conclusion

Abstract

Pose-free的NeRF最近很火,近期的工作大部分先是使用渲染的图片训练一个粗略的姿态估计器,再对NeRF和姿态进行联合优化。然而,训练期间只使用了rendered image,姿态估计经常偏移或不准确,因为渲染图与真实图片之间本来就有domain gap。这导致了很差的robustness,并且在联合优化中会陷入局部最优。我们设计了IR-NeRF,使用implicit pose regularization来细化pose estimator。该框架创建了scene codebook来存储scene features并且获取scene- specific pose distribution implicity作为先验。

1 Intro

在这里插入图片描述
简介,主要贡献有:

  • 提出了IR-NeRF来通过unposed images来训练
  • 建立了scene codebook来编码场景特征,并隐式地获取相机姿态分布来作为先验
  • 设计了一个pose-guided重建范式来使用场景先验来使用unposed images细化pose estimator,提升了其robustness。

2 Related Work

介绍了NeRF、Pose- Free NeRF和Visual Codebook的相关工作。

3 Preliminary

介绍了一些基础知识,比如相机姿态估计和NeRF的形式。
这一章很短,我个人认为直接并入2就可以了。

4 Proposed Method

4.1 Overall Framework

给一个随机采样的相机pose序列,先使用adversarial loss学一个coarse NeRF,然后render出相机pose的图片。pose estimator P是通过两步训练来预测相机姿态的。首先,它被训练regress 初始的pose,使用了渲染出来的图片。然后,使用一个implicit pose regularization 来refine 这个 P P P,使用unposed real images。这个implicit pose regularization呢可以提升鲁棒性,因为只用这个渲染出来的图片来训练是不准确的。

这个implicit pose regularization的要点其实是scene codebook construction和pose-guided view reconstruction with view consistency loss。这个codebook C C C首先通过重建真实图片来获得。然后,给定一个real image,pose-guided view reconstruction使得 P P P来估算该图片的相机姿态,进一步使用该姿态来指导 C C C里面的linear combination of feature embeddings,来重建对应的图片。implicit pose regularization可以通过计算视觉一致性loss来实现。我们同样联合refine了学习得到的粗略NeRF和预测的相机姿态。

4.2 Scene Codebook Construction

在这里插入图片描述

我们没有单纯地把输入图片编码到representations里面去,这样会导致难以获得整体的pose分布。我们设计了新的scene codebook construction,使用linear combination,这可以作为implicit distribution prior来达到健壮的姿态估计性能。

这个scene codebook construction由三个部分组成:image-weight learner E I E_{I} EI ,一个scene codebook C = { c n } n = 1 N C=\{c_{n}\}_{n=1}^{N} C={cn}n=1N,和一个decoder G G G。这个codebook通过重建unposed real images来学习。这个image-weight learner被使用来得到一个权重组合 X = { x n } n = 1 N X=\{x_{n}\}_{n=1}^{N} X={xn}n=1N基于真实图片 I I I

X = S o f t m a x ( E I ( I ) ) X = Softmax(E_{I}(I)) X=Softmax(EI(I))

feature embedding f f f of the real image I I I 在之后被创建,通过codebook里面的这个线性权重组合,可以表达为:

f = Σ n = 1 N c n x n f = \Sigma_{n=1}^{N}c_{n}x_{n} f=Σn=1Ncnxn

有了 f f f之后,真实图片 I I I可以通过decoder G G G来重建:

I ≈ I ˆ = G ( f ) I \approx \^I =G(f) IIˆ=G(f)

其中 I ˆ \^I Iˆ代表的是reconstructed image。配备了image reconstruction loss L r e c L_{rec} Lrec后,scene codebook可以被学习:

L r e c ( E I , C , G ) = ∣ ∣ I − I ˆ ∣ ∣ 2 L_{rec}(E_{I}, C, G) = || I-\^I||^{2} Lrec(EI,C,G)=∣∣IIˆ2

为了降低联合训练它们的难度,提升训练稳定性,我们采用了预训练的VGG19来初始化scene codebook C C C,通过编码一系列真实图片:

C i n i = V G G ( [ I 0 , I 1 , . . . , I T ] ) C_{ini}=VGG([I_{0}, I_{1}, ..., I_{T}]) Cini=VGG([I0,I1,...,IT])

后续这个 C i n i C_{ini} Cini会被image reconstruct loss L r e c L_rec Lrec来优化的。

4.3 Pose-Guided View Reconstruction

在有了 C C C G G G之后,可以保证只有姿态在场景姿态分布内的图片会被重建,在这个条件下,我们设计了pose引导的view reconstruction with view consistency loss来使用unposed images对姿态估计进行refine。基于针对真实图片 I I I估算出来的相机姿态 ϕ ′ \phi' ϕ,与 ϕ ′ \phi' ϕ对应的图片 I ′ I' I被通过codebook里面的feature embeddings的线性组合来重建。更具体而言,一个pose-weight learner E P E_{P} EP被首先使用来产生一系列权重,基于估计的相机姿态 ϕ ′ \phi' ϕ

X ′ = S o f t m a x ( E P ( ϕ ′ ) ) X' = Softmax(E_{P}(\phi')) X=Softmax(EP(ϕ))

对于和 ϕ ′ \phi' ϕ对应的feature embedding f ′ f' f的重建,可以被表达为 f ′ = Σ n = 1 N c n x n ′ f' = \Sigma_{n=1}^{N} c_{n}x_{n}' f=Σn=1Ncnxn,其中 c n c_{n} cn x n ′ x_{n}' xn代表第n个feature1 embedding和第n个权重。最后,图片 I ′ I' I可以被通过被frozen的decoder G G G来重建,它注重于解码codebook里面特征的线性组合。

通过使用这个被decoder重建出来的图片 I ^ \hat I I^作为pseudo GT,一个视觉一致性loss L c L_{c} Lc计算了重建的图片和伪真值之间的关系:

L c ( P , E P ) = 1 i Σ i = 1 N ∣ ∣ I i ′ − I ^ i ∣ ∣ 2 L_{c}(P, E_{P}) = \frac{1}{i} \Sigma_{i=1}^{N}||I_{i}'-\hat I_{i}||^{2} Lc(P,EP)=i1Σi=1N∣∣IiI^i2

如果被 P P P估算出来的相机姿态 ϕ ′ \phi' ϕ 偏移了姿态分布,那么对应的由C和G重建出来的视角 I ′ I' I就不会和伪GT对齐。这样,分布之外的姿态就会被抑制住。

4.4 Training Process

训练过程包括粗略NeRF训练、相机姿态估计、联合优化NeRF与相机姿态。对于粗略NeRF训练,我们使用了adversarial loss,并用随机初始化的姿态,因为缺乏已知的pose。

对于相机姿态估计,我们首先使用MSE loss和渲染出来的图片来优化粗略的 P P P,然后使用implicit pose regularization来refine。codebook在使用unposed real images来发挥功能,在 L r e c L_{rec} Lrec的监督之下。在有了codebook和decoder之后,pose estimator可以被优化,来预测真实图片的相机姿态,被视觉一致性loss L c L_{c} Lc驱动。在此之外,还用了光度一致性loss来联合优化。注意,NeRF在相机姿态估计期间被frozen,但在联合优化期间是可以被训的。

5 Experiment

5.1 Datasets and Implementation Details

使用了NeRF- Synthetic数据集和DTU数据集来分别代表合成数据与现实世界场景。对于NeRF-Synthetic数据集,训练时,每个场景使用100张图片并且resize到了400400像素,测试时,随机从test set里面选8张图片;对于DTU数据集,训练时,每个场景使用43张图片并且resize到了500400,测试时,使用剩下的6张。

介绍了一些实现细节和参数。

5.2 Comparisons with SOTA

只和GNeRF做了对比,在视觉合成与相机姿态估计两个维度进行了比较。

5.3 Ablation Studies

针对implicit pose regularization、codebook和view consistency loss做了消融实验。

5.4 Visualization

画了个图统计,说在分布之外的离谱的姿态少了很多。

5.5 Parameters Investigation

探讨了codebook的大小参数 N N N的变化对性能的影响。更大的数意味着存储更多的场景特征,可以提升合成图片的质量,但是也意味着模型训练时的计算开销和显存消耗变大。在本文中,N被设置为了1024。

6 Limitation

最大的缺点是,NeRF训练、姿态估计、联合优化,这三个阶段加在一起,训练的时间太长。

7 Conclusion

总结了创新点。

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

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

相关文章

spring中的DI

【知识要点】 控制反转(IOC)将对象的创建权限交给第三方模块完成,第三方模块需要将创建好的对象,以某种合适的方式交给引用对象去使用,这个过程称为依赖注入(DI)。如:A对象如果需要…

golang 上传图片 --chatGPT

问:makeImgUpload(path string) 实现发送发送图片, 发送类型为 multipart/form-data gpt: 下面是一个简单的 makeImgUpload 函数的实现,用于发送图片并以 multipart/form-data 格式进行上传。请注意,此代码假设图片文件路径是正确…

分类预测 | Matlab实现PSO-LSTM-Attention粒子群算法优化长短期记忆神经网络融合注意力机制多特征分类预测

分类预测 | Matlab实现PSO-LSTM-Attention粒子群算法优化长短期记忆神经网络融合注意力机制多特征分类预测 目录 分类预测 | Matlab实现PSO-LSTM-Attention粒子群算法优化长短期记忆神经网络融合注意力机制多特征分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1…

Spring 的面向切面编程(AOP)的使用场景有哪些?

Spring 的面向切面编程(AOP)的使用场景有哪些? 文章目录 Spring 的面向切面编程(AOP)的使用场景有哪些?一、日志记录1、说明2、代码示例 二、事务管理1、说明2、代码示例 三、性能监控1、说明2、代码示例 四…

leetcode做题笔记2760. 最长奇偶子数组

给你一个下标从 0 开始的整数数组 nums 和一个整数 threshold 。 请你从 nums 的子数组中找出以下标 l 开头、下标 r 结尾 (0 < l < r < nums.length) 且满足以下条件的 最长子数组 &#xff1a; nums[l] % 2 0对于范围 [l, r - 1] 内的所有下标 i &#xff0c;num…

贪心 455.分发饼干

455.分发饼干 题目&#xff1a; 小朋友胃口值数组g[i]&#xff0c;饼干尺寸数组 s[j]&#xff0c;当饼干尺寸s[j]大于等于g[i]的时候&#xff0c;对应小朋友被满足&#xff0c;小朋友每一个最多一块饼干 &#xff0c;求给定条件下最多被满足的小朋友数量。 思路&#xff1a;…

智慧农业新篇章:拓世法宝AI智能直播一体机助力乡村振兴与农业可持续发展

随着乡村振兴战略的深入推进&#xff0c;农业发展日益成为国家关注的焦点。在这一大背景下&#xff0c;助农项目的兴起成为支持乡村振兴的一项重要举措。 乡村振兴战略的实施&#xff0c;得益于《关于推动文化产业赋能乡村振兴的意见》、《关于全面推进乡村振兴加快农业农村现…

Docker 安装 Jenkins 2.375【图文教程】

文章目录 Jenkins镜像简介Jenkins 安装及配置第 1 步: 安装Jenkins创建jenkins容器初始化Jenkins解锁jenkins自定义jenkins第 2 步:必读内容Jenkins使用root用户操作修改 Debian 镜像为阿里云镜像第 3 步: 配置Jenkins安装Locale插件:修改为中文全局工具配置JDK安装Git安装…

0x80070002错误代码要怎么解决?修复0x80070002的方法

0x80070002错误代码&#xff0c;这个系统更新相关的错误&#xff0c;经常在进行系统备份或更新时出现&#xff0c;打乱了我们的步调。为了帮助大家解决问题&#xff0c;本文将探讨该错误0x80070002产生的原因&#xff0c;提供详细的解决步骤&#xff0c;并分享预防措施。 一.0x…

Hive入门--学习笔记

1&#xff0c;Apache Hive概述 定义&#xff1a; Hive是由Facebook开源用于解决海量结构化日志的数据统计&#xff0c;它是基于大数据生态圈Hadoop的一个数据仓库工具。 作用&#xff1a; Hive可以用于将结构化的数据文件【映射】为一张表&#xff0c;并提供类SQL查询功能。 H…

leetcode每日一题-周复盘

前言 该系列文章用于我对一周中leetcode每日一题or其他不会的题的复盘总结。 一方面用于自己加深印象&#xff0c;另一方面也希望能对读者的算法能力有所帮助&#xff0c; 同时也希望能帮助同样坚持刷题的同学加深印象~ 该复盘对我来说比较容易的题我会复盘的比较粗糙&#…

clip4clip:an empirical study of clip for end to end video clip retrieval

广告深度学习计算&#xff1a;阿里妈妈智能创意服务优化使用CPU/GPU分离的多进程架构&#xff0c;加速阿里妈妈智能创意服务。https://mp.weixin.qq.com/s/_pjhXrUZVzFRtiwG2LhnkwCLIP4Clip: CLIP 再下一城&#xff0c;利用CLIP实现视频检索 - 知乎前言&#xff1a; OpenAI 的论…

ios 对话框UIAlertController放 tableview

//强弱引用 #define kWeakSelf(type)__weak typeof(type)weak##type type; -(void) showUIAlertTable {kWeakSelf(self)UIAlertController *alert [UIAlertController alertControllerWithTitle:NSLocalizedString("select_stu", nil) message:nil prefer…

Docker 和 Kubernetes:技术相同和不同之处

Docker和Kubernetes是当今最流行的容器化技术解决方案。本文将探讨Docker和Kubernetes的技术相似之处和不同之处&#xff0c;以帮助读者更好地理解这两种技术。 Docker和Kubernetes&#xff1a;当今最流行的容器化技术解决方案 在当今的IT领域&#xff0c;Docker和Kubernetes无…

python實現圖片下載

import pandas as pd import requests data pd.read_excel("demo4\撈取數據的execl.xlsx") url data.iloc[:,9] import os for index, row in data.iterrows():# 获取URL列数据image_url row[PATH]print(image_url)response requests.get(image_url)#文件名拼接s…

ef core code first pgsql

在使用efcode来操作pgsql的时候&#xff0c;总有些基础配置流程项目建立完之后后面就很少用&#xff0c;总是忘掉&#xff0c;写个文档记忆一下吧。基于net 6.0。 1.创建一个mvc项目和一个EF类库 2.在类库里面安装依赖dll Microsoft.EntityFrameworkCore.Design 需要添加的…

C/C++调用python

python环境 通过如下的命令&#xff0c;可以获取到当前python环境下对应的路径。比如程序编译需要指定对应的头文件、库文件路径&#xff0c;链接阶段需要指定需要链接哪些库。 # 说明python3-config支持哪些选项 $ python3-config Usage: /home/yangye/miniconda3/bin/pyth…

ESP32 Arduino实战基础篇-使用中断和定时器

本教程介绍如何使用 PIR 运动传感器通过 ESP32 检测运动。在此示例中,当检测到运动(触发中断)时,ESP32 会启动计时器并打开 LED 并持续预定义的秒数。当计时器倒计时结束时,LED 自动关闭。 通过这个例子,我们还将探讨两个重要的概念:中断和定时器。 中断介绍 要使用 P…

【MySQL】表的增删改查(基础)

一、新增&#xff08;Create&#xff09; 先创建一张表&#xff1a; create table student (id int,sn int comment 学号,name varchar(20),email varchar(20));1.1 单行数据 全列插入 插入两条记录&#xff0c;value_list 数量必须和定义表的列的数量及顺序一致 insert i…

BeanUtils中的copyProperties方法使用

一、Beanutils中的copyProperties是我们在日常开发中常用的一个方法。 作用&#xff1a; 将a实体类中的属性赋值到b实体类中相对于的字段上 1.我们前端传参的时候我们后端通常会用vo实体类来接收&#xff0c;但是更新数据库的时候需要用do去操作 2.我们将vo的属性copy到do中可…