HALO-利用低频NeRF实现少样本的视角合成

本文利用低频NeRF所提供的geometry prior对稀疏视角输入时的高频NeRF进行约束,解决稀疏视角时欠约束而导致高频NeRF的geometry出现噪点/局外点的情况,具体是通过两个loss,其中一个是empty space loss。另外,将LFN(Light Field Network)引入作为中间模型,对Hi-NeRF的refinement过程加速,具体看本文的分析部分(我给出了较为详细的比较)。

本周阅读的papers:

  • Monte-Carlo Sure: A Black-Box Optimization of Regularization Parameters for General Denoising Algorithms:一个对受到高白噪声信号的去噪,仅知道有噪信号和预测值的情况下。
  • Progressively Optimized Local Radiance Fields for Robust View Synthesis:时间上的滑动窗,用多个localRF表征视频序列,约束使用了深度和光流(用其它算法的结果作为真值,都是2D平面上的,所以会有2D、3D之间相互投影的操作)。
  • F2-NeRF: Fast Neural Radiance Field Training with Free Camera Trajectories:对NDC、inverse-sphere的contraction方式改进,使之能够重建unbounded scenes,即透视warping,主要考虑了透视带来的不良影响;同时也使用了多分辨率哈希编码,但和Instant-ngp有所不同。
  • Harnessing Low-Frequency Neural Fields for Few-Shot View Synthesis:下面重点分析这篇论文。

Harnessing Low-Frequency Neural Fields for Few-Shot View Synthesis这篇文章要解决的问题是:Few-Shot→少样本学习/稀疏视角

提出问题

先回顾PE,L越大,则频率信息越丰富。

γ(x)=[sin(πx),cos(πx),...,sin(2L1πx),cos(2L1πx)]\Large \gamma(x) = [\sin({\pi}x), \cos({\pi}x), ..., \sin(2^{L-1}{\pi}x),\cos(2^{L-1}{\pi}x)]

  • 仅低频:细节不行
  • 同时高低频:几何有较多噪点(few-shot的情况下)
  • 由低频控制的高频:都不错

Q1:为什么增加PE的L在NeRF中对细节和几何都有作用,在此处对几何反而起到了负作用?

A1:上图是针对few-shot views,即输入是欠约束,会有不合理的结果(输入是欠约束,增加L又增加了学习能力,导致模型会过分推理,出现噪点/局外点)。

解决思路

解决什么?就是few-shot+(low&high)时,由于欠约束而导致的噪点/局外点。所以,利用low frequency所得到的geometry进行约束,防止出现噪点。

具体实现

低频的标准是多少/Lo-NeRF中的L取多少?

Q2:首先,低频和高频的标准是什么?

δ=1NiF(Iia)F(Iib)\Large \delta = \frac{1}{N}\sum_i\|\mathscr{F}(I_i^a)-\mathscr{F}(I_i^b)\|

A2:设定δ=25\delta=25时,PE的L即为低频,记为Lo-NeRF。

如何进行约束?

Q3:如何约束Hi-NeRF,保证不会出现噪点/局外点?

A3:Lo-NeRF的geometry没有噪点,使Hi-NeRF的geometry与Lo-NeRF的一致即可,定义empty space loss:

Lempty={r:accLo(r)<τ}accHi(r)\Large L_{empty}=\sum_{\{r:acc_{Lo(r)}<\tau\}}acc_{Hi}(r)

使用LFN加速Hi-NeRF的refine过程⭐

从前面可以知道有两个模型,一个Lo-NeRF用于获得大致几何、一个Hi-NeRF用于恢复细节而不出现噪点。但论文还增加了一个中间模型ray-based field,记为Ray-NeRF。为什么增加这个呢?直接用Lo-NeRF的geometry约束Hi-NeRF不就可以了吗?

首先,需要搞明白具体是怎么约束的(没看代码实现,仅进行合理的猜测和推理)。预测某个pixel时,Hi-NeRF的Depth和Lo-NeRF的Depth应该相等。但是:

  1. 由于Lo/Hi-NeRF都是point-based的模型,即渲染某个pixel的color和depth时,会在对应ray上采样数以百计个点,通过volume rendering计算得到color和depth;
  2. 其次,Hi-NeRF模型会比Lo-NeRF运行的次数更多,Lo-NeRF只需得到大致几何,所以很快就能得到结果。Hi-NeRF模型refinement的次数很多,导致Lo-NeRF也会运行同样次数;

记Lo-NeRF运行一次的时间为tLot_{Lo},得到大致几何所需运行的次数为NLoN_{Lo},同理tRay,NRay,tHi,NHit_{Ray},N_{Ray},t_{Hi},N_{Hi},下面分别表示二步法和三步法所需要的时间:

T2:NLo×tLo+NHi×(tHi+tLo)T3:NLo×tLo+NRay×(tLo+tRay)+NHi×(tRay+tHi)NHi>>NLoNRaytRay<<tLo<tHi\Large T_2: N_{Lo}{\times}t_{Lo}+N_{Hi}{\times}(t_{Hi}+t_{Lo}) \\ \Large T_3:N_{Lo}{\times}t_{Lo}+N_{Ray}{\times}(t_{Lo}+t_{Ray})+N_{Hi}{\times}(t_{Ray}+t_{Hi}) \\ \Large N_{Hi} >> N_{Lo}{\approx}N_{Ray} \\ \Large t_{Ray} << t_{Lo} < t_{Hi}

NHi>>NLoNRayN_{Hi} >> N_{Lo}{\approx}N_{Ray}的原因:Lo-NeRF只需学习大致几何,所以迭代次数比较少,而Hi-NeRF要恢复细节,迭代次数会很大。

tRay<<tLo<tHit_{Ray} << t_{Lo} < t_{Hi}**的原因:**Ray-NeRF不用采样数以百计的点,而是直接学习映射(u,v,x,y)(δ)(u,v,x,y){\rightarrow}(\delta),第二个小于是因为Lo-NeRF只需学习深度,即δ\delta,所以模型相比Hi-NeRF要小,执行时间也更少。

结果分析

合成数据集:

Stanford LF和LLFF数据集:

论文附录

此外,在附录中推导了将NeRF模型扩展到LF data上,总结:光线r(u,v,x,y)r(u,v,x,y)上的N个采样点为{(u,v,x,y,θi)}i=0N\{(u,v,x,y,\theta_i)\}_{i=0}^{N},此表示方法是冗余的,因为空间点只有3个自由度,而此表达有5个自由度。

(u,v)(u^*,v^*)是固定值,将各个空间点都对齐到(u,v)(u^*,v^*),根据EPI的结构可知,Δu=ΔsD=Δsarctanθ{\Delta}u={\Delta}s{\cdot}D={\Delta}s{\cdot}\arctan{\theta},所以可得{s,t,θ}\{s',t',\theta\},其中s=s+(uu)/arctanθs'=s+(u-u^*)/\arctan{\theta}tt'同理。

赞赏