GIRAFFE:Representing Scenes as Compositional Generative Neural Feature Fields

article:http://arxiv.org/abs/2011.12100( CVPR 2021 (oral))
code:https://github.com/giraffe-fsharp/Giraffe
writer:Michael Niemeyer,Andreas Geiger

1 摘要

深度生成模型可以在高分辨率下进行逼真的图像合成。但对于许多应用来说,这还不够:内容创作还需要做到可控。GRAF加入了形状编码和外观编码,实现对场景中物体的编辑。GiRAFFE的关键假设是,**将组合式三维场景表示纳入生成模型,可以使图像合成更加可控。**将场景表示为生成性神经特征场,使得能够从背景中分离出一个或多个物体,以及单个物体的形状和外观,同时无需任何额外的监督就能从非结构化和非posed的图像集中学习。将这种场景表示与神经渲染管道结合起来,可以产生一个快速而真实的图像合成模型。实验证明,GIRAFFE能够分解单个物体,并允许在场景中平移和旋转它们,以及改变摄像机的姿势。

2 模型框架

2.1 Overview

image.png
overview. 首先在高斯分布上采样不同的物体以及背景的形状和外观的信息,在不同模型上生成不同的目标车辆和背景,然后通过目标姿态信息变换目标的姿态(仿射变换),然后根据相机姿态和体渲染,生成隐式的三维场景,再通过2D的CNN网络解码成2D图片。

2.2 与2D-based 方法对比

image.png
通过上图可明显看出,基于2D的方法在对球体进行移动时,两个球体的形状都发生了改变,而GIRAFFE可以很好地完成移动物体的操作。同时,GIRAFFE还能完成更复杂的任务,比如循环平移以及往场景中添加物体。

2.3 整体框架

image.png
首先,将单个对象建模为神经特征场,然后,利用来自多个不同物体的特征场的附加属性来合成场景,对于渲染部分,GIRAFFE研究了如何将体积渲染和神经渲染有效组合起来。其中橙色表示可学习,蓝色表示不可学习的操作。C是composition operator(组合算子)
输入

  • 相机pose(外参矩阵 ξ ∼ p ξ \xi \sim p_{\xi} ξpξ, p ξ p_{\xi} pξ p T p_T pT是依赖于数据集的相机仰角和有效对象变换的均匀分布,做出这种选择的理由是,在大多数现实世界场景中,对象是任意旋转的,但不会因重力而倾斜,相比之下,相机保持位置不变时可以自由改变其仰角);
  • 形状和外观代码( z s , z a ∼ N ( 0 , 1 ) z_s,z_a \sim N(0,1) zs,zaN(0,1)服从标准正太分布)
  • 仿射变换 T i T_i Ti( T = { s , t , R } T = \{s, t, R\} T={ s,t,R} , s , t s,t s,t表示缩放和平移参数, R R R是旋转矩阵,使用这种表示,将对象中的点转换到场景空间)

算法流程:
1)根据相机的pose生成光线,对光线进行采样,获取方向 d j d_j dj和位置 x i , j x_{i,j} xi,j,分别进行高频编码,得到对应的表示;
2) 而后与 N N N个形状和外观代码,以及 T i T_i Ti一起( N N N是场景中所有物体的数量,一般设前 N − 1 N-1 N1为单个物体,第 N N N个为背景),送入不同的生成神经特征场,输出时把原来GRAF输出的三维rgb颜色值换成更通用的特征 f f f,得到对应的 ( σ i , j i , f i , j i ) (\sigma^i_{i,j},f^i_{i,j}) (σi,ji,fi,ji),再经过组合算子得到某一点的整体密度和特征值(密度是各个密度相加,特征是使用密度的加权平均值,image.png)。
3) 对于给定的相机pose ξ \xi ξ,令 { x j } j = 1 N s \{x_j\}^{N_s}_{j=1} { xj}j=1Ns是给定像素沿相机光线 d d d上的采样点,把组合算 C C C输出的密度值和场的特征向量 ( σ i , f i ) (\sigma_i, f_i) (σi,fi)映射到像素的最终特征向量 f j f_j fjimage.png,具体计算公式为:
image.png
其中 τ j τ_j τj是透射率, α j α_j αj x j x_j xj的 alpha 值,而 δ j = ∣ ∣ x j + 1 − x j ∣ ∣ 2 δ_j = ||x_{j+1} − x_j ||^2 δj=∣∣xj+1xj2 是相邻采样点之间的距离。整个特征图像是通过评估每个像素的 π v o l π_{vol} πvol获得的。
4) 获得 f j f_j fj后,再送入神经渲染算子 π θ n e u r a l \pi_{\theta}^{neural} πθneural(image.png),根据权重 θ \theta θ将特征图像映射到最终合成图像,将 π θ n e u r a l \pi_{\theta}^{neural} πθneural参数化为具有leaky ReLU激活函数的2D卷积神经网络(CNN)。
image.png
5) 最后把渲染得到的图像 I ^ \hat{I} I^和从真实图像采样得到的 I I I送入判别器 D ϕ D_{\phi} Dϕ进行训练,优化整个网络。
公式表示:
整个算法生成器部分的流程用公式表示为:
image.png
其中, N N N是场景中所有物体的数量, N s N_s Ns是沿每条射线的采样点数量, d k d_k dk 是第 k k k 个像素的射线, x j k x_{jk} xjk 是第 k k k个像素/射线的第 j j j个采样点。
判别器 D ϕ D_\phi Dϕ采用的是非饱和GAN损失函数:
image.png

3 实验

1、对场景进行分离,从上至下分别是单独的背景、物体对象、对象颜色的alpha值、最终的合成图像
image.png
2、旋转、平移对象,改变对象的属性、循环平移对象
image.png
3、超出训练数据的泛化,比如增加物体、生成不同景深、水平移动相机位置的图像,同时和其他方法进行对比
image.png

猜你喜欢

转载自blog.csdn.net/KeepLearning1/article/details/130253508
今日推荐