作者:KAtja Schwarz, Axel Sauer 等 来源:NeurIPS 2022 论文题目:VoxGRAF: Fast 3D-Aware Image Synthesis with Sparse Voxel Grids 项目链接:https://katjaschwarz.github.io/voxgraf/ 论文链接:http://arxiv.org/abs/2206.07695 内容整理:王秋文
目录
对场景进行高分辨率的高保真渲染是计算机视觉和图形学领域的一个长期目标。实现这一目标的主要范式是精心设计一个场景的三维模型,再加上相应的光照模型,使用逼真的相机模型渲染输出高保真图像。生成对抗网络(GAN)已经成为一类强大的可以实现高保真高分辨率图像合成的生成模型。这种二维模型的好处之一是他们可以使用便于获得的大量图像进行训练。然而,将 GAN 扩展到三维则相对困难,因为用于监督的三维真实模型难以获得。近期,3D-aware GAN 解决了人工制作的三维模型以及缺乏三维约束的用于图像合成的 2D GAN 之间的不匹配问题。3D-aware GAN 由三维生成器、可微分渲染以及对抗训练组成,从而对新视角图像合成过程中的相机位姿以及潜在的场景的对象形状、外观等其他场景性质进行显式控制。GRAF 采用了 NeRF 中基于坐标的场景表示方法,提出了一种使用基于坐标的 MLP 和体渲染的 3D-aware GAN,将基于 3D 感知的图像合成推进到更高的图像分辨率,同时基于物理真实且无参数的渲染,保持了场景的三维一致性。然而在三维场景进行密集采样会产生巨大的消耗,同时三维的内容经常与观察视角纠缠在一起,而进行下游应用时,场景的三维表征往往需要集成到物理引擎中,因此难以直接获得场景三维内容的高分辨率表征。许多近期的方法通过将 MLP 移出场景表征从而加速了新视角合成的训练速度,通过优化稀疏体素证明了 NeRF能够获得高保真图像的原因不是由于其使用了 MLP ,而是由于体渲染和基于梯度的优化模式。
http://mpvideo.qpic.cn/0b2ei4ad4aaa5uao2ab7crrvar6dhzdqapqa.f10002.mp4?
为了避免立方内存增长所带来的限制,本文提出了一种核心是稀疏体素生成器的 3D-aware GAN,效果如上述的视频所示,称为 VoxGRAF。所提出的方法使用快速渲染和三次线性插值,保证了三维模型的一致性。同时,本文中所示的稀疏性是场景表征的一个内置特性,减少了沿相机光线通过复杂策略进行采样的必要性。
最近的 3D-aware GAN 一般由一个可学的基于坐标的 MLP 作为三维生成器,一个可能与可学的二维图像域的神经渲染器结合的确定性的体渲染步骤以及一个可学的二维鉴别器组成。设
表示可学参数为
的基于坐标的 MLP 构成的三维生成器。这一三维生成器可以预测出由颜色
和体密度
表示的辐射场。辐射场由任意的三维点
以及任意的视角方向
定义得到。为了对不同的三维场景进行建模,额外的 latent 变量
被引入生成器中,并使用固定的位置编码
来克服 MLP 的平滑度偏差并建模场景的高频内容。总的来说,有:
在本文中,作者更改了这种范式,并使用一个稀疏的 3D CNN 网络来代替基于坐标的 MLP 作为生成器。
辐射场通过数值积分逼近难以处理的体积投影积分。首先,生成器在相机光线所采的
个点上查询对应的颜色和体密度值,并在光线上根据所有三维点的颜色和体密度值使用体渲染公式计算出像素的颜色。由于体渲染被证明是一个实现高保真场景重建的有力工具。本文中所提出的 VoxGRAF 也延续了这一渲染策略,但利用稀疏的场景表征减少了计算消耗。
本文中所提出的算法如图 2 所示。如前文所述,本文中所提出的算法没有像过去的工作一样使用了基于坐标的 MLP,而是在稀疏体素上使用三维卷积网络。因此,本文的生成器只需要一次前向传输就可以生成一个三维场景。为了三维内容和背景中进行分离,本文将 3D 的前景生成器
与二维的背景生成器
进行结合。其中,
使用相机参数矩阵
、相机姿态
和 latent code
作为输入,预测每个体素的颜色和体密度值。对于非结构性的图像,可以使用已有的位姿检测器确定对应的相机矩阵和姿态。使用体渲染公式得到生成前景图像和一个透明度 mask,背景生成器将隐式编码
映射为一张背景图像,并使用透明度 mask 与前景图像进行结合。在对抗环境下,本文使用二维鉴别器对全图像进行训练。
前景生成器
本文中的前景生成器使用了常见的 StyleGan2 架构,在相机位姿
和 latent code
的输入下,映射得到一个稀疏体素格的颜色值
和体密度值
:
其中,
和
分别表示可学参数和体素的分辨率。在渲染过程中,本文通过对最近的八个角点存储的颜色值和体密度值使用三次线性插值得到查询点的结果。在具体的实现方面,为了得到的结果是三维体素而不是二维像素,作者将 StyleGAN2 生成器中的二维操作扩展为等价的三维操作。当体素的分辨率超过
时,使用稀疏卷积而不是密集卷积以提高计算效率,而在小于该分辨率时直接使用密集卷积。为了将体素表征稀疏化,作者使用了如图 3 所示的渐进的生长和剪枝策略。具体来说,作者先使用
的分辨率训练一个密集模型,在经过充足的训练之后,作者添加第一层稀疏卷积,并根据渲染后的视图舍弃低密度区域的体素。在此基础上,第二层卷积则只需要再可见的体素上进行操作,从而生成了一组稀疏的体素表征。最终,算法可以舍弃掉所有被遮挡的或具有低密度值的体素。在进行剪枝操作后,作者对仍存在的体素通过稀疏转置卷积进行上采样。当新加入的层得到充分训练了之后,作者为下一个添加阶段重复这一过程,得到的不同分辨率下的结果如图 3 中所示。
图3
考虑到在训练数据中,视角和相机位姿的变化会给场景带来很大的影响(例如眼睛总是朝向镜头看的)。因此,作者添加了两种策略以提高模型的灵活性:
在一半情况下选择渲染视角的相机姿态
,其余情况下则随机生成,也就是说
。在推理过程中,这一参数则是固定的,以保证模型的三维一致性。
背景生成器
在本文中,作者默认每个场景中只含有一个物体,并仅在该中心物体上进行建模以节省算力,并有助于后续的需要将重建后的模型整合到新场景中的下游任务。因此,作者使用 2D GAN 来生成背景。具体来说,作者 StyleGAN2 生成器:
作者为前景和背景选择了相同的 latent code
以保证两者间的建模相关性(例如光照)。需要注意的是,背景生成器不需要输入相机的位姿,因为模型期望背景能够在不同的相机位姿下保持一致,而前景需要由生成器建模出与相机视角相关的内容。
最终,总的图像可以通过基于透明度的 mask 得到:
整体的生成器可以表示为:
正则化
为了实现快速渲染,使得大部分生成的体素都有较高的不透明度或全空是重要的,从而使得算法能够尽早停止并有效的跳过空白的区域。通过对每条光线
的期望深度
进行正则化,前景生成器被鼓励生成一个唯一的尖锐的表面:
鉴别器
作者使用 StyleGAN2 中的鉴别器,并将相机的位姿作为输入。与其他方法相似,作者发现输入的条件可以指导生成器学习正确的三维先验以及规范的表示。
从数据分布
中选择图像集合
、图像对应的相机位姿(包括旋转矩阵
和平移矩阵
)以及 latent code
,作者使用目标为 R1 正则化的 GAN 训练模型:
其中,
,
用于控制 R1 正则化强度。
和
交替根据 GAN 的目标和正则化项进行梯度下降:
本文中的方法在 The synthetic Carla dataset、FFHQ、AFHQv2 Cats 数据集上进行训练和评估,使用已有的位姿检测器估计相机的位姿,并使用水平翻转以及自适应鉴别器增强进行数据集增强。在评价指标方面,计算生成图像和数据集 Fréchet Inception Distance (FID) 值。
将本文中提到的算法与 StyleNeRF 和 GRAM 进行主管感受上的比较,结构如图 4 所示。从实验结果可以发现虽然 StyleNeRF 强大的神经渲染器可以引入多视图不一致性(出现的脸、移动的头发),GRAM的 流形表示在更偏的视角下是可见的。但相比之下,本文的方法可以得到更多多视图一致的结果。
图4
将算法与其他新型的多视角合成算法对比,计算不同数据集下的 FID 指标,得到的计算结果如图 5 中的表格所示。
图5
正如预期的那样,使用带有上采样的神经渲染方法(即 StyleNeRF 和 EG3D)在图像保真度方面表现最好,因为神经渲染增加了灵活性,同时牺牲了场景的三维一致性。在没有使用神经渲染的方法中,VoxGRAF 的性能明显优于 π-GAN 和 GOF,并超过了目前最先进的 GRAM 方法。同时,作者比较了这些方法在推理时的时间性能,得到的结果如图 6 中的表格所示。
图6
根据结果可以发现,与所有 baseline 相比,VoxGRAF 只需要一次前向传递即可生成场景,然后可以从不同的视点高效渲染场景。GIRAFFE 是所有方法中最快的,因为它渲染的是低分辨率特征体积,并且其使用的神经网络相对较小。StyleNeRF 显著增加了神经渲染器的大小,以提高图像保真度,与 GIRAFFE 相比,这是以速度为代价的。StyleNeRF 是在性能最好的方法中生成单个图像的最快方法。然而,3d-aware GAN 的一个潜在应用是实时生成单个实例的新视图。基于这种背景,在
分辨率下,VoxGRAF 以 167 帧/秒的速度生成新颖的视图,而 StyleNeRF 以 20 帧/秒的速度运行。
本文中的方法在不同分辨率下的结果如图 7 所示。
图7
本文算法在连续视角下合成的视频:
http://mpvideo.qpic.cn/0bc33yac4aaaeuap2ij77brvbxwdf3paalqa.f10002.mp4?
http://mpvideo.qpic.cn/0bc3weadkaaasaaodaj7ivrvbmodgwyqania.f10002.mp4?
本文中的算法在两个不同场景下对 latent code 进行插值生成的视频:
http://mpvideo.qpic.cn/0bc36iadiaaax4aobxb7irrvb4wdgtzaanaa.f10002.mp4?