RefSR-NeRF: Towards High Fidelity and Super Resolution View Synthesis

RefSR-NeRF:迈向高保真度和超分辨率的视图合成

论文链接:https://arxiv.org/abs/2112.01759

出处: CVPR 2023

1. 摘要

论文提出了一种参考引导的超分神经辐射场 (RefSR-NeRF),它将 NeRF 扩展到超分辨率和逼真的新颖视图合成。NeRF 在高分辨率渲染中存在模糊问题,因为其固有的多层感知器难以学习高频细节,并且随着分辨率的增加而导致计算爆炸。因此论文提出了 RefSR-NeRF,这是一个端到端框架,首先学习低分辨率 NeRF 表示,然后借助高分辨率参考图像重建高频细节。作者观察到由于退化模型的分歧,简单地引入文献中的预训练模型往往会产生不满意的工件。为此,作者又设计了一种新颖的轻量级 RefSR 模型来学习从 NeRF 渲染到目标 HR 渲染的逆退化过程

实验方面,作者对多个基准的大量实验表明,论文方法在渲染质量、速度和内存使用之间的表现比较均衡,优于或与 NeRF 及其变体相当,同时在少量额外内存使用的情况下实现 52 倍加速。

2. Intro

2.1 论文贡献点

  • 提出了一种新颖的端到端RefSR-NeRF 框架,将NeRF 扩展到高分辨率和逼真的新颖视图合成。
  • RefSR-NeRF 可以作为一种新颖的 NeRF 加速范例,可以显着缓解 NeRF 计算和缓存随着分辨率提高而爆炸的问题。
  • 大量实验表明,RefSR-NeRF 在定性和定量上均大幅优于基线工作,同时速度提高了 52 倍。

2.2 方向内相关工作

尽管 NeRF 可以通过空间插值在任何分辨率下呈现新颖的视图,但它会丢失细节和大量的计算开销。 NeRF-SR [43] 与本论文的有点相似,它使用超级采样直接渲染 HR 图像,并引入参考图像来进一步微调结果。然而,本质上,超级采样不能节省任何计算资源,因此 NeRF-SR 对于资源有限的移动设备来说不可行。作者观察到,很少有研究致力于从分辨率压缩的角度加速 NeRF。在本节中简要地回顾效率改进基于参考的超分辨率领域的进展。

2.2.1 效率改进

渲染新颖的视图图像所需的漫长训练和推理时间已成为 NeRF 社区长期存在的问题。

为了利用这一缺陷,KiloNeRF [33] 将一个大 MLP 分成大约一千个微小 MLP,每个微小 MLP 独立编码一个分区的小区域。 NeX [48]提出了一种深度预言网络,可以预测每个观察光线的光线样本位置,以减少样本数量。

另一种通用方法是使用离散体积表示来离线存储几何特征或属性,并在渲染阶段重新加载它们[37,22,49,58]。 DIVeR [49] 使用基于体素的特征场来表示整个场景,并利用体渲染积分的确定性而不是随机估计。 NSVF [22]定义了一组以稀疏体素八叉树组织的体素边界隐式字段,以指导和减少采样。 FastNeRF [11] 通过将 NeRF 缓存到密集体素网格中来取代多层感知器。 PlenOctrees [58] 利用基于稀疏体素的八叉树,其中每个节点存储密度和外观值来对点处的辐射率进行建模。 Efficient-NeRF [15]进一步将 3D 场景预先制成密集和稀疏体素,以加速 NeRF 渲染。除了不透明度和颜色信息之外,SNeRG [13]还将依赖于视图的学习特征向量存储到稀疏体素网格中。通过预先计算属性(即密度、球谐系数 [58, 10] 或学习的特征)并将其缓存到特定的数据结构中,可以显着加快渲染速度,但这种方法会产生大量的内存开销,并且容易产生次优的几何形状解决方案[37]。

相比之下,我们的方法实现了几个数量级的加速并保持了 NeRF 的简单性。

2.2.2 基于参考的图片超分辨

基于参考的图像超分辨率(RefSR)旨在通过传输参考帧的高频细节来利用辅助参考(Ref)图像来超分辨率低分辨率(LR)图像。

 CrossNet [63] 估计 Ref 和 LR 之间的光流 (OF),并通过跨尺度扭曲将它们对齐到相同的分辨率。 TTSR [55]将LR和参考图像视为变压器中的查询和键,并提出了纹理传输和合成的硬关注和软关注。 C2Matching [17] 提出了一个对比对应网络来学习 LR 和参考图像之间的关系,然后利用师生相关性蒸馏和残差特征聚合来合成 HR 图像。为了匹配 LR 和具有显着差异的参考图像之间的对应关系,Cao 等人 [3] 提出了一个可变形的注意力 Transformer 来聚合特征和相关纹理。 NeRF与RefSR结合,可以加速低分辨率渲染,并在参考帧的帮助下恢复高频信息。

但是,现成的SR方法适用于特定的下采样退化模型,不适用于退化模型不确定的NeRF。为此,我们提出了一个聚合模块来准确地适应 NeRF 中的下采样。

3. 方法

作者在普通 NeRF 上构建 RefSR-NeRF 实现 [26]。一般来说,NeRF及其变体采用随机批量射线采样对每个场景进行训练,这与后面的RefSR模型训练不兼容。相反,作者通过使用补丁射线采样策略来构建这个端到端管道,以便为 RefSR 模型提供空间上下文信息,从而使端到端训练成为可能。另一个障碍是 NeRF 渲染过程呈现出新的退化模型,因此引入现成的 RefSR 模型很容易产生伪像,并且 NeRF 中的场景优化范例的场景参数过多。

3.1 Nerf预备知识

NeRF 通过使用 MLP 网络来近似连续 5D 场景表示,具体而言,将 3D 位置 x = (x, y, z) 和 2D 视角方向 d = (θ, φ) 作为输入,输出为发射的颜色 c = (r, g, b) 和体积密度 σ 。简而言之,这个映射过程可以写成:F_\Theta :(\bold{x},\bold{d})x \mapsto (\bold{c}, \sigma )。结合光线追踪方法,NeRF 将相机的每个像素渲染如下:从相机的中心投影点 o 沿着方向 d 发射光线 \bold{r}(t) = \bold{o}+t\bold{d},使其穿过像素。采取采样策略(大多数情况下是蒙特卡罗)来确定相机预定义的近平面和远平面 t_nt_f 之间的排序距离 \bold{t} 的向量(t是位置编码向量)。在普通 NeRF中,MLP 由两个子MLP:MLP_{pos} 表示位置相关的成分密度 σ,MLP_{dir} 表示位置和视图相关的 RGB 颜色 c:

\forall t_k\in \bold{t}, [\sigma_k, \bold{f}_k] = MLP_{pos}(\gamma^{L_x}(\bold{x}(t_k)); \Theta_{pos})(1)

\bold{c}_k = MLP_{dir}(\gamma^{L_d}([\bold{d}(t_k), \bold{f}_k]);\Theta_{dir})(2)

其中 \Theta_{pos}\Theta_{dir} 分别表示这两个 子MLP 的权重。 \bold{f}_k 是由位置 \Theta_{pos} 生成的位置相关特征向量,并作为方向 \Theta_{dir} 的输入。 \gamma^L 表示将在下一节中讨论的位置编码。尽管神经网络是通用函数逼近器,Ben.Mildenhall 等人发现 MLP 在从均匀采样和低维 5D 坐标回归高频细节方面表现不佳,而使用傅里叶变换原理的简单但不平凡的位置编码操作将极大地利用神经网络中这种固有的低频偏差。坦西克等人进一步分析并证明了这一点。具体来说,vanilla NeRF中使用的位置编码可以写为:

\gamma(p) = [sin(2^0{\pi}p), cos(2^0{\pi}p), ..,..,sin(2^{L-1}{\pi}p), cos(2^{L-1}{\pi}p)](3)

请注意,\gamma(\cdot )应用于 3D 位置 x 和 d 的每个维度,从 0 到 2^{L-1} 按 2 的幂缩放,其中 L 是确定插值内核带宽的超参数(更多详细信息可以在Tancik 等人[39])。根据经验,在位置 x 和视图方向 d 被标准化为位于 [-1, 1] 范围内的情况下,论文[29] 中 \gamma(x) 的 L 设置为 10,\gamma(\bold{d}) 的 L 设置为 4。

在Nerf中,位置编码主要用于光线方向编码阶段。当光线从相机位置向场景中的不同方向发射时,Nerf需要将每个方向编码成一个固定长度的向量表示。为了引入空间位置信息,通常会使用一些位置编码技巧,例如将三维位置信息编码成向量并与方向编码向量相结合。

具体来说,Nerf中的位置编码可能以不同方式应用,但其目标是将每个光线的方向信息与场景中的位置信息相结合,以更好地捕捉场景的几何形状和深度信息。这种结合可以帮助Nerf更有效地学习场景的复杂几何结构,从而提高渲染质量和准确性。

一旦我们获得了沿着射线的估计密度和颜色,我们就可以根据 Max [25] 使用数值求积来进行体积渲染积分

\bold{C}(\bold{r};\Theta;\bold{t}) = \sum_{k}T_k(1-exp(\sigma_k(t_{k+1}-t_k)))\bold{c}_k(4)

T_k=exp(-\sum_{k^{'}<k}\sigma_{k^{'}}(t_{k^{'}+1}-t_{k^{'}}))(5)

其中 C(r; θ; t) 是像素的最终渲染颜色。 NeRF 的完整实现通过将积分权重 w_i=T_i(1-exp(\sigma_k(t_{k+1}-t_k))) 视为概率分布,利用沿每条射线对 t_k 进行从粗到细的采样,以便更好地将样本集中在高密度区域。

3.2 基于patch的Nerf训练

NeRF根据相机位姿对每个像素对应的光线进行采样,并通过MLP和体渲染积分渲染特定的颜色信息。然而,MLP的固有性质和随机采样的训练策略导致NeRF在高频场景下表现不佳。

主要原因在于:

  1. 空间分辨率限制: MLP在空间中具有有限的分辨率,它们可能无法捕获到高频场景中的细微结构和细节。高频场景中存在快速变化的细节,例如细小的纹理、细节和锐利的边缘,这些细微的变化对于MLP来说可能难以建模。

  2. 随机采样带来的问题: 在训练NeRF时,通常使用随机采样的策略来选择光线进行渲染,这意味着在训练过程中不同方向和位置的光线被选择的概率是相等的。然而,在高频场景中,某些方向或位置可能对整体场景的重建更为重要,而随机采样可能无法充分覆盖这些关键的方向和位置,导致重建质量下降。

  3. 数据分布偏差: MLP在训练过程中对数据的分布敏感。如果训练数据中高频场景的样本数量不足,或者训练数据中对高频细节的覆盖不足,MLP可能会在高频场景下表现不佳。

相反,RefSR提取参考图像中连续像素的特征来重建LR的高频信息。当我们将隐式表示学习与连续特征表示相结合时,这就成为一个问题,具体来说,将单个光线(由 NeRF 随机采样)渲染为特定颜色,然后超分辨率缩放区域是没有意义的。这些采样策略之间存在差异。

因此,论文提出了一种基于patch的 NeRF,在训练阶段将 NeRF 连接到 SR 模块,如图 1 所示

图1注:RefSR-NeRF 框架概述。 RefSR-NeRF 首先学习低分辨率场景表示,然后借助预先确定的高分辨率参考图像重建高频细节。与普通 NeRF [29] 或其在训练过程中随机采样光线的变体不同,RefSR-NeRF 一次采样一个图像块,以与以下 RefSR 模型的端到端训练兼容。 

首先从连续区域而不是随机选择中获取射线。然后通过 MLP 和体积积分获得最终的光线颜色。最后,渲染区域被发送到后续网络来训练SR模块。该公式可以描述为:

\forall \bold{r} \in \bold{R}, \emph{HR}=\bold{RefSR(C(r;\Theta;t))}

其中 R 表示来自训练图像的采样批处理射线,θ 表示 MLP 的权重,t 是沿每条射线的采样间隔。作者凭经验发现,将指示图像空间中固定区域的固定顺序批处理射线馈送到 MLP 会导致训练过程中出现湍流并陷入次优解。因此,作者在每个时期之后对整个训练图像进行批量shuffle。

3.3 Nerf降级的RefSR模型

基于参考的超分辨率 (RefSR) 方法旨在借助参考图像从 LR 图像中超分辨 HR 图像。与 RefSR 相结合,NeRF 能够实现相当大的渲染加速并从参考图像中恢复高频信息 [23, 55]。然而,RefSR 社区最近的工作主要集中在对特定下采样退化过程进行建模,例如 JEPG 压缩、双三次或双线性插值,这些工作都没有探索 NeRF 渲染中由 MLP 引起的这种新兴但复杂的退化过程pipeline。

因此,如图 2 所示,我们提出了一个基于参考的 SR 模块,利用参考图像对 NeRF 模型生成的 LR 图像进行超分辨。我们方法的主要考虑因素是如何对 HR 和 NeRF LR 视图之间的下采样退化过程进行建模,以及如何将高频细节从内容一致但未对齐的参考图像传输到最终的 HR 图像。

图2注:基于参考的 SR 模型概述,该模型由两分支主干和融合模块组成。主干网分别从退化主导信息(LRRef 和新颖视图 LR)和细节主导信息(HR Ref 和新颖视图 LR)中提取特征图。然后,两个特征图被融合模块融合并进一步细化。 

具体来说,作者设计了一个双分支网络,充分利用来自各自分支的细节主导(DeT)退化主导(DeG)信息,并有效地融合这两个输出。论文在两个分支中构建两个编码器-解码器网络来执行下采样退化预测和高频率细节恢复

细节主导分支旨在传输来自 Ref 输入的高频细节。为了提高有效性,还发送 NeRF 输出的上采样 (\emph{​{LR}}^{up}) 以协助细节恢复。在当前分支中,输入通过空间转换为深度层(S2D),并通过一系列卷积层和两个基本残差块(ResBlocks [12])提取深层特征。第一个 ResBlock 的输出是 \emph{F}_{LR}^{up}\emph{F}_{Ref},第二个 ResBlock 的输出是 {\emph{F}}_{LR}^{'up}\emph{F}_{Ref}^{'} ,其中

\emph{F}_{LR}^{up},\emph{F}_{Ref}=ResBlk(Conv(S2D({LR}^{up}, Ref)))

\emph{F}_{LR}^{'up},\emph{F}_{Ref}^{'} = ResBlk1(\emph{F}_{LR}^{up}, \emph{F}_{Ref})(7)

然后,通过将 \emph{F}_{Ref}^{'}\emph{F}_{LR}^{up} 输入 ResBlock 来初步融合细节。最后,解码器层将融合的细节特征和 \emph{F}_{LR}^{'up} 上采样到目标尺度,从而生成细节主导分支的输出,其中

Out_{detail}=Decoder(\emph{F}_{LR}^{'up}, ResBlk2(\emph{F}_{Ref}^{'}, \emph{F}_{LR}^{up}))(8)

对于退化主导分支,作者利用注意力辅助特征块(AAFBlk)[45]作为中心特征提取器,因为它具有出色的自适应特征对齐能力。退化分支将低分辨率下的 LR 和 Ref 作为输入。 Ref 的 LR 视图是由 MLP 以 Ref 相机姿态作为输入合成的。通过卷积层和像素洗牌层添加跳跃连接作为输入,输出直接添加到主要特征提取器的结果中。当生成两个输出时,通过融合模块将它们融合。请注意,在训练和推理过程中选择训练集中的中间帧(固定)作为参考图像。所以只有少量的额外磁盘存储空间。

 3.4 损失函数

实验中的总损失函数主要由两部分组成,NeRF 的 LR 渲染与 LR 地面实况图像之间的渲染损失以及超分辨率 HR 图像与 HR 地面实况之间的重建损失 \mathcal{L}_{Rec}。该公式可以表示为:

\mathcal{L}_{Ren}=\left \| I_{LR}-(\bar{I}_{LR}) \right \|_1(9)

其中\mathcal{L}_{Ren}表示LR渲染损失。为了保持空间结构信息,同时提高解析的 HR 质量,我们使用 Charbonier 损失函数来更好地处理异常值。

\mathcal{L}_{Rec}=\sqrt{\left \| I_{HR}-(\bar{I}_{HR}) \right \|^2+\epsilon^2}(10)

其中\mathcal{L}_{Rec}表示HR重建损失,\epsilon是一个超参数,默认设置为1e-12。

\mathcal{L}_{total}=\lambda _1\cdot\mathcal{L}_{Ren}+\lambda_2\cdot \mathcal{L}_{Rec}

3.5 实现细节

论文基于 vanilla NeRF 构建了 LR NeRF,并使用 Pytorch 实现了 RefSR 模型,并在具有 32GB 内存的 V100 NVIDIA GPU 上对其进行训练。在训练过程中,选用Adam 作为优化器。在训练集中的图像上采样的光线批量大小设置为 1024,这意味着 LR NeRF 在每次迭代中渲染 32×32 图像块,并将其发送到下面的 RefSR 模型以进行超分辨率 HR 渲染。论文模型的损失只是渲染损失(渲染的 LR 图像和地面实况 LR 图像之间的均方误差)和重建损失(解析的 HR 图像和地面实况 HR 图像之间的均方误差)之和。

4. 实验

4.1 实验结果

 

4.2 消融实验

 

  • 18
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
nerf-simple是基于PyTorch框架实现的NERF(神经辐射场)模型的简单版本。NERF是一种用于生成高质量逼真图像的深度学习模型,它通过对场景中各个点的辐射值进行建模,从而实现精确的三维重建和渲染。 在NERF模型中,神经辐射场是核心概念之一。它是一个由多个隐藏层组成的神经网络,用于估计场景中每个点的辐射值。这里的辐射值通常表示像素的RGB颜色值或光强度。 nerf-simple通过使用PyTorch框架的张量操作和自动微分功能来实现NERF模型。首先,我们需要定义一个神经网络模型,包括隐藏层的数量和大小。这个模型可以基于现有的PyTorch模块,如nn.Linear和nn.ReLU,以便构建非线性变换和特征提取。 然后,我们需要定义训练过程,实现数据加载、优化器设置和损失函数计算等步骤。训练数据通常包括一系列场景中的图像及其对应的相机和深度信息。 在模型训练完成后,我们可以使用训练好的神经网络来生成逼真的图像。通过对场景中每个像素点的辐射值进行预测,我们可以还原出场景的三维形状和纹理信息,并最终渲染出高质量的图像。 总结来说,nerf-simple是一个使用PyTorch实现的简单版本NERF模型,它通过神经辐射场来估计场景中每个像素点的辐射值,从而实现精确的三维重建和渲染。通过定义神经网络模型、训练过程和图像生成过程,我们可以利用这个模型生成逼真的图像。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值