GRAF论文解读

标题:GRAF: Generative Radiance Fields for 3D-Aware Image Synthesis

代码:https://github.com/autonomousvision/graf

文章:https://arxiv.org/pdf/2007.02442

回顾NeRF:

  • 我们学过NeRF后知道,需要准备多张从不同角度拍摄的同场景静态2D图像,还需要各个像素点的位置(x,y,z)和方位视角(θ,φ)作为输入进行重建。
  • 但是这些数据需要采用传统方法COLMAP进行参数估计。通过COLMAP可以得到场景的稀疏重建结果,其输出文件包括相机内参相机外参3D点的信息。然后进一步利用LLFF开源代码中的imgs2poses文件将内外参整合到一个文件poses_boudns.npy中,该文件记录了相机的内参:包括图片分辨率(图片高与宽度)、焦距,共3个维度、外参:包括相机坐标到世界坐标转换的平移矩阵t与旋转矩阵r,其中旋转矩阵为 3x3 的矩阵,共9个维度,平移矩阵为 3x1 的矩阵,3个维度,因此该文件中的数据维度为 N x 17 另有两个维度为光线的始发深度与终止深度,通过COLMAP输出的3D点位置计算得到),其中N为图片样本数。
  • 经过上述数据准备,我们得到图片、相机内外参、旋转矩阵和平移矩阵
  • 然后将上述参数与2d的图像信息结合,将2d坐标转换为3d坐标(像素坐标–>相机坐标–>世界坐标)四个坐标系介绍以及之间的转换。也就是这样一来我们便通过相机的内外参数成功地将像素坐标转换为了统一的世界坐标下的光线始发点与方向向量即将 (X,Y,Z)与 (θ,φ) 编码成了光线的方向作为MLP的输入,**所以从形式上来讲MLP的输入并不是真正的点的三维坐标(X,Y,Z),而是由像素坐标经过相机外参变换得到的光线始发点与方向向量以及不同的深度值构成的,而方位的输入也并不是 (θ,φ),而是经过标准化的光线方向。**不过从本质上来讲,在一个视角下,给定光线始发点o ,特定的光线方向 d 以及不同的深度值 t ,通过文章中的公式 ray = o + td 便可以得到该光线上所有的3D点的表示 ,然后扩展到不同的光线方向便可以得到相机视锥中所有3D点的表示,再进一步扩展到不同的相机拍摄机位,理论上便可以得到该场景所有3D点的表示。

而GRAF这是一篇改进NeRF的文章,主要是引入了GAN,从而避免了NeRF对于相机参数标签的需求。

  • 从它的结构图中可以非常直观的看出,就是一个标准的conditional GAN, 然后NeRF的部分就放在了生成器里面。我们的目标是通过对未摆姿势的图像进行训练来学习合成新场景的模型。更具体地说,我们利用对抗性框架来训练辐射场 (GRAF) 的生成模型。
    GRAF论文解读_第1张图片
  • 首先,生成器的输入就是相机的各种参数,包括了位置,方向,焦点,远近等等信息,这些参数都是完全随机的从一个均匀分布中取出来的。
  • 然后输入光线采样器(ray sampling)来确定光线的落点和光线的数量。
  • 之后就分了两路输入条件辐射场。
    GRAF论文解读_第2张图片

它的网络结构:
GRAF论文解读_第3张图片
1.沿着光线进行采样,确定需要采样点的位置。然后将位置信息和随机采样的形状信息结合输入神经网络,学出一个形状表示。形状表示就可以用于预测目标点的密度

2.将光线落点信息结合上面的形状表示,再结合随机采样的纹理信息,一同预测出目标点的颜色

目标点的密度和颜色都有了后用体渲染就可以渲染出最终结果了,也即生成器生成的结果。

然后我们还会从真实的图像中采样一些结果,和生成的结果一起输入判别器,从而让判别器学习真实图像的分布。
GRAF论文解读_第4张图片
GRAF使用的3D generator,关键之处在于把物体用NeRF表示,而非之前基于 voxel 的方法(voxel会造成内存立方式增长,如HoloGAN,PlatonicGAN),后面就用虚拟相机结合 volume rendering 渲染。

注意点:

1.文中为了加速训练,生成和采样均只合成了图像中的部分像素,并没有一次性生成整个图像。

2.其实刚开始读这个文章的时候有些难以理解,为什么不需要对相机位置做任何约束就可以学出来平滑的视角过渡?我个人认为是辐射场的效果,因为辐射场是隐式的建立了一个无限分辨率的3D物体,而最简单的建立出一个合理的3D物体的方式就是按照现实世界的3D结构来建立,因此可以保证视角过渡是平滑的。但如果作为参考的图像数量过少,或者物体结构过于简单,我认为是会出现一些奇奇怪怪的问题的。

你可能感兴趣的:(NeRF,GRAF,论文阅读,机器学习,计算机视觉,图形渲染,blender)