目录
这是IROS2021的一篇文章,一作是MIT的Lin Yen-Chen,也就是nerf-pytorch的作者。
论文地址:arxiv
项目代码:Github
Abstract
提出了 iNeRF,这是一个通过“反转”NeRF来执行姿态估计的框架,并且这个过程不需要mesh。 我们研究是否可以通过 NeRF 应用综合分析进行无mesh、仅 RGB 的 6DoF 姿态估计,也就是,给定图像,找到相机相对于 3D 对象或场景的平移和旋转。我们的方法假设在训练或测试期间是无法得到mesh的。从初始姿态估计开始,我们使用梯度下降来最小化从 NeRF 渲染的像素和观察图像中的像素之间的残差。在我们的实验中,我们首先研究 1)如何在 iNeRF 的姿势细化过程中对光线进行采样以收集信息梯度,以及 2)不同批次大小的光线如何影响合成数据集上的 iNeRF。然后,我们展示了对于来自 LLFF 数据集的复杂现实世界场景,iNeRF 可以通过估计新图像的相机位姿并将这些图像用作 NeRF 的额外训练数据来改进 NeRF。最后,我们展示了 iNeRF 可以通过反转从单个视图推断的 NeRF 模型,使用 RGB 图像执行类别级别的对象姿态估计,包括训练期间未看到的对象实例。
Introduction
6DoF姿态估计应用很广泛,最近在可微渲染方面的进步激发了学界通过合成数据来求解姿态估计问题的兴趣。但是渲染需要三维模型,而想要得到这个模型又并不容易。NeRF提供了不需要mesh模型也能得到渲染图片的方法,这样在姿态估计问题中就不需要mesh了。
提出的iNeRF需要三个输入,一个观察的图片,一个初始的pose估计,和一个该场景的NeRF模型表示。我们计算由NeRF渲染出的图像和观察的图像在pixel之间的差异,然后通过 NeRF 模型反向传播来自这些残差的梯度,以产生估计姿态的梯度。这个过程持续直到两张图对齐。
虽然听上去很不错,但为了姿态估计而使用NeRF面临如下几个挑战。首先,NeRF 渲染图像中的每个像素,方法是通过该像素发射一条射线并重复查询 3D 辐射场,同时沿着该射线行进以产生体积密度和颜色的估计值,然后将其 alpha 合成为一个像素颜色。 这种渲染过程是昂贵的,这给通过analysis-by-synthesis的方法带来了问题,因为它应该需要渲染完整的图像并反向传播所有像素贡献的损失。对于 iNeRF,我们利用 NeRF 的光线行进结构允许单独渲染光线和像素这一事实来解决这个问题,并且我们提出了一种基于兴趣点的采样方法,使我们能够确定应该对哪些光线进行采样以最好地表示物体的姿势。 这种采样策略允许准确的姿态估计,同时使用比全图像采样少两个数量级(two orders of magnitude fewer)的像素。 此外,我们证明 iNeRF 可以通过注释没有姿势标签的图像并将它们添加到训练集中来提高 NeRF 的重建质量。 我们表明,此过程可以在保持重建质量的同时将所需标记图像的数量减少 25%。
最后,我们展示了 iNeRF 可以执行类别级别的对象姿态估计,包括在训练期间未看到的对象实例,通过反转由 pixelNeRF推断的 NeRF 模型给定对象的单个视图。 我们知道的唯一先前的工作是类似地提供仅 RGB 类别级别的姿势估计是 Chen 等人最近的工作(Category level object pose estimation via neural analysis-by-synthesis)。 我们比较了和我们的工作之间的差异,这些差异主要来自连续的、隐式的 NeRF 参数化所带来的机遇和挑战。
本文主要贡献如下:(i) 我们表明 iNeRF 可以使用 NeRF 模型来估计具有复杂几何形状的场景和对象的
6
D
o
F
6 DoF
6DoF 姿势,而无需使用 3D 网格模型或深度传感。 (ii) 我们对射线采样和梯度优化的批量大小进行了彻底的调查,以表征 iNeRF 的鲁棒性和局限性。 (iii) 我们证明 iNeRF 可以通过预测额外图像的相机姿势来改进 NeRF,然后可以将其添加到 NeRF 的训练集中。 (iv) 我们展示了类别级别的姿势估计结果,对于看不见的物体,并包括真实世界的演示。
Related Works
介绍了Neural 3D shape representations相关内容。
介绍了通过RGB图片进行姿态估计的相关工作。
Background
详细介绍了一下NeRF。
iNeRF Formulation
定义iNeRF要解决的问题,现在有一个已经训练好的场景的NeRF模型
Θ
Θ
Θ,相机内参已知,但是图片I对应的相机外参
T
T
T未知,我们相当于求解NeRF的逆问题:
为了求解这个优化问题,我们使用和NeRF一样的loss函数,但是是优化外参T,过程如图2所示。这个loss函数在6DoF的SE(3)空间中是非凸的,对整个图片使用NeRF渲染又计算开销很大,尤其是迭代优化这种情况。我们将讨论基于梯度的
S
E
(
3
)
SE(3)
SE(3)优化过程,光线采样策略,以及如何用iNeRF预测的来pose来提升NeRF的表现。
Gradient-Based SE(3) Optimization
Θ
Θ
Θ作为特定场景的NeRF的参数,
T
i
T_{i}
Ti是在第i步估算的相机pose,
I
I
I是观察的图像,
L
L
L作为loss函数来训练。我们使用梯度下降法来求解等式1里的
T
T
T。为了保证
T
T
T在基于梯度的优化过程中一直在
S
E
(
3
)
SE(3)
SE(3)空间,我们使用exponential coordinates来参数化。给定一个
T
0
T_{0}
T0,
其中
S
=
[
ω
,
ν
]
T
S = [ω, ν] ^{T}
S=[ω,ν]T表示screw axis,
θ
θ
θ是magnitude,
[
w
]
[w]
[w]是
w
w
w的skew-symmetric的
3
×
3
3×3
3×3矩阵,而
在这个参数化方法下,我们的目标是初求解初始估计姿势
T
0
T_{0}
T0的最佳相对变换:
我们通过 MLP 对损失函数进行迭代微分得到梯度,用来更新相对位姿变换。使用Adam优化器并让学习率指数下降。对每个观察的图片,我们初始化一个接近0的
S
θ
Sθ
Sθ,其中每个元素都是从零均值正态分布
N
(
0
,
σ
=
1
0
−
6
)
N(0, \sigma=10^{-6})
N(0,σ=10−6)中随机抽取的。在实践中,我们参数化
e
[
S
]
θ
T
0
e^{[S]θ}T_{0}
e[S]θT0而非
T
0
e
[
S
]
θ
T_{0}e^{[S]θ}
T0e[S]θ,导致了初始估计中心的中心旋转,这减轻了优化期间旋转和平移之间的耦合。
Sampling Rays
对图片的每个像素都采样渲染开销很大,所以设计策略来只采样部分像素来反向传播。
随机采样。一种方法是在成像平面上随机选择M个像素来计算对应的ray,实际上NeRF本身也是这么干来优化自己的参数的。我们发现batch size小的时候,这个策略是不充分的,很多时候都采集到了欠纹理的区域,这对算位姿提供不了多少信息。
使用兴趣点采样。先使用兴趣点检测来获得一些候选点,不够的话再随机采样补充。虽然这个策略引入了更少的随机,使得收敛更快,但是我们发现它容易出现局部最小值,因为它只考虑观察图像上的兴趣点,而不是观察图像和渲染图像的兴趣点。但是从渲染图像获得兴趣点又太昂贵了,计算复杂度是
O
(
H
W
n
)
O(HWn)
O(HWn)。
使用兴趣区域采样。这是一种放宽兴趣点采样的策略,并从以兴趣点为中心的扩张mask中采样。在获得兴趣点之后,我们使用I次
5
×
5
5×5
5×5扩展采样区域。我们发现这种采样方式加速了优化即使rays的batch size很小。值得注意的是,如果I设得很大的话,这又演化成了随机采样。
Self-Supervising NeRF with iNeRF
除了iNeRF能提供位姿估计,我们也探索了使用其结果来训练NeRF。我们训练了一个NeRF,然后使用iNeRF来得到额外的图片pose,然后把这些当作数据集再加到训练当中。这相当于,NeRF可以被半监督地训练。
Results
先在NeRF的合成数据集和真实场景的LLFF数据集来验证iNeRF的姿态估计。特别地,我们研究了batch size和采样策略如何影响iNeRF的表现。我们然后展示了iNeRF通过添加数据集来提升NeRF性能。最后,我们展示看iNeRF在tandem中和pixelNeRF合作很好,能够通过单张RGB图片来预测NeRF模型。
Limitations and Future Work
光照和遮挡会严重影响iNeRF。一个潜在的解决方案是使用transient latent codes建模appearance variation,就像NeRF-W当中训练NeRF时候做的那样,并且在iNeRF当中对这些外观编码和相机位姿一起进行联合优化。并且,现在iNeRF使用大概20秒来运行 100 100 100次迭代优化,还不能实时,可以结合新的NeRF来做提升。
Conclusion
复读了一下贡献。