今天读的是一篇发表在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) I≈Iˆ=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)=∣∣I−Iˆ∣∣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∣∣Ii′−I^i∣∣2
如果被 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
总结了创新点。