【论文笔记 - NeRFs - CVPR2021】GIRAFFE:Representing Scene as Compositional Generative Neural Feature Field

本文是基于GRAF而产生的,建议先理解前文。

对于生成模型而言,内容最好是可控的,先前的大多数方法没有考虑场景的组成性质,而且是在图像域中进行运算,忽略了真实世界是三维的这一事实。因此一些工作开始将三维场景融入到生成模型中,如Graf,但是它局限于单个对象场景,对于更高的分辨率和更复杂、更逼真的图像无法保证一致性(例如,对象不在中心或背景混乱的场景)。

因此,本文提出了GIRAFFE方法,以可控的、具有高保真度的方式生成场景,并且是在原始非结构化的图像数据集(raw data)中训练的。主要贡献:

  • 将组合3D场景表征直接结合到生成模型中,实现更可控的图像合成。
  • 与神经渲染相结合,获得更快的推理速度和更逼真的图像。

在Graf中,通过控制形状编码和外观编码得到不同的条件辐射场,表征多样化的对象。如上图所示,本文将多个GRAF进行组合,生成比原始图像中更多对象的场景,例如,数据集中都是一辆车的图片,可以通过GIRAFFE得到多辆车的图片。简单介绍一下每个模块之间的关系和作用,

  • 首先,采用了 Generative Neural Feature Fields 来表示三维场景中的对象。Graf中的条件辐射场输入为位置、视角、形状编码、外观编码,输出为颜色RGB和不透明度 σ \sigma σ。为了提高渲染效率,GIRAFFE 输出特征和不透明度,得到上图中的特征场(采用颜色进行可视化,实际为特征)。本文将场景中的不同对象分开,分别控制位姿、形状和外观,对于组合场景中的每个对象,都有一个单独描述它的特征场,

    h θ : R L x × R L d × R M s × R M a → R + × R M f ( γ ( x ) , γ ( d ) , z s , z a ) ↦ ( σ , f ) \begin{aligned} h_{\theta}: \mathbb{R}^{L_{\mathbf{x}}} \times \mathbb{R}^{L_{\mathbf{d}}} \times \mathbb{R}^{M_{s}} \times \mathbb{R}^{M_{a}} & \rightarrow \mathbb{R}^{+} \times \mathbb{R}^{M_{f}} \\ \left(\gamma(\mathbf{x}), \gamma(\mathbf{d}), \mathbf{z}_{s}, \mathbf{z}_{a}\right) & \mapsto(\sigma, \mathbf{f}) \end{aligned} hθ:RLx×RLd×RMs×RMa(γ(x),γ(d),zs,za)R+×RMf(σ,f)

  • 此时每个对象是在自己的坐标系下,需要用到Object Representation,通过仿射变换,也就是上图中的Pose(旋转、平移、缩放)将不同对象的特征场统一到场景中,即将每个对象的局部坐标变换到世界坐标,可以用下式表示,

    k ( x ) = R ⋅ [ s 1 s 2 s 3 ] ⋅ x + t k(\mathbf{x})=\mathbf{R} \cdot\left[\begin{array}{lll} s_{1} & & \\ & s_{2} & \\ & & s_{3} \end{array}\right] \cdot \mathbf{x}+\mathbf{t} k(x)=R s1s2s3 x+t

    实际上,GIRAFFE是在最终合成的场景空间中进行体渲染,所以输入为场景坐标系下的方向和坐标点。但被渲染的场景是由对象组成的,输出对象坐标系下的不透明度和颜色,并且要对对象特征场进行更新优化。因此,在正向过程中,就需要 k − 1 k^{-1} k1 将世界坐标变换到局部坐标,

    ( σ , f ) = h θ ( γ ( k − 1 ( x ) ) , γ ( k − 1 ( d ) ) , z s , z a ) (\sigma, \mathbf{f})=h_{\theta}\left(\gamma\left(k^{-1}(\mathbf{x})\right), \gamma\left(k^{-1}(\mathbf{d})\right), \mathbf{z}_{s}, \mathbf{z}_{a}\right) (σ,f)=hθ(γ(k1(x)),γ(k1(d)),zs,za)

  • 对于所有的对象后,由没有参数的Composition Operator来叠加。本文处理的是多对象的场景,因此全局坐标下的同一个采样点,对应多个不同的对象。为了组合成一个场景,相同采样点处的不透明度相互叠加作为最终的不透明度,然后对颜色进行加权和作为最终的颜色。

    C ( x , d ) = ( σ , 1 σ ∑ n = 1 N σ n f n ) ,  where σ = ∑ n = 1 N σ n C(\mathbf{x}, \mathbf{d})=\left(\sigma, \frac{1}{\sigma} \sum_{n=1}^{N} \sigma_{n} \mathbf{f}_{n}\right), \text { where} \quad \sigma=\sum_{n=1}^{N} \sigma_{n} C(x,d)=(σ,σ1n=1Nσnfn), whereσ=n=1Nσn

  • 这样就可以得到场景中每个空间位置的不透明度 σ \sigma σ 和特征 f \mathbf{f} f,采用 Scene Rendering 进行渲染。首先,进行特征层面的体渲染,得到分辨率相对较低的2D特征图,这样做会有效率上的提升,

    π v o l : ( R + × R M f ) N s → R M f , { σ j , f j } j = 1 N s ↦ f \pi_{\mathrm{vol}}:\left(\mathbb{R}^{+} \times \mathbb{R}^{M_{f}}\right)^{N_{s}} \rightarrow \mathbb{R}^{M_{f}}, \quad\left\{\sigma_{j}, \mathbf{f}_{j}\right\}_{j=1}^{N_{s}} \mapsto \mathbf{f}{\scriptsize } πvol:(R+×RMf)NsRMf,{σj,fj}j=1Nsf

    最后再由2D神经渲染器处理特征图像得到最终的渲染结果,

    π θ neural  : R H V × W V × M f → R H × W × 3 \pi_{\theta}^{\text {neural }}: \mathbb{R}^{H_{V} \times W_{V} \times M_{f}} \rightarrow \mathbb{R}^{H \times W \times 3} πθneural :RHV×WV×MfRH×W×3

了解了前面那些,生成器就可以用如下公式表示,

G θ ( { z s n , z a n , T n } n = 1 N , ξ ) = π θ neural  ( I V ) G_{\theta}\left(\left\{\mathbf{z}_{s}^{n}, \mathbf{z}_{a}^{n}, \mathbf{T}_{n}\right\}_{n=1}^{N}, \boldsymbol{\xi}\right)=\pi_{\theta}^{\text {neural }}\left(\mathbf{I}_{V}\right) Gθ({zsn,zan,Tn}n=1N,ξ)=πθneural (IV)

w h e r e   I V = { π v o l ( { C ( x i j , d j ) } i = 1 N s ) } j = 1 H V × W V where\ \mathbf{I}_{V}=\left\{\pi_{\mathrm{vol}}\left(\left\{C\left(\mathbf{x}_{i j}, \mathbf{d}_{j}\right)\right\}_{i=1}^{N_{s}}\right)\right\}_{j=1}^{H_{V} \times W_{V}} where IV={πvol({C(xij,dj)}i=1Ns)}j=1HV×WV

结合下图,梳理一下公式的含义,

具体来说,

a. 首先,需要确定场景中各个对象的表征。在分布中采样 N N N 组形状和外观的潜编码 { z s n , z a n } n = 1 N \left\{\mathbf{z}_{s}^{n}, \mathbf{z}_{a}^{n}\right\}_{n=1}^{N} {zsn,zan}n=1N 作为场景中的各个对象的特征场的条件,以及相应的仿射变换 T n \mathbf{T}_{n} Tn 将对象转换到场景中;

b. 确定场景后,采样一个相机姿态 ξ \xi ξ

c. 任取一点 j j j,并从视点出发经过点 j j j 的射线 d j d_j dj 上采样 N s N_s Ns 个点;

d. 对于第 i i i 个采样点,经过逆仿射变换 T n − 1 \mathbf{T}_{n}^{-1} Tn1 对应到不同对象空间,预测该点在对象空间中的不透明度和特征 ( x i j , d j ) \left(\mathbf{x}_{i j}, \mathbf{d}_{j}\right) (xij,dj),再由组合算子 C C C 来得到该点在场景空间中的不透明度和特征 C ( x i j , d j ) C\left(\mathbf{x}_{i j}, \mathbf{d}_{j}\right) C(xij,dj)

e. 重复步骤d,待预测好所有采样点 { C ( x i j , d j ) } i = 1 N s \left\{C\left(\mathbf{x}_{i j}, \mathbf{d}_{j}\right)\right\}_{i=1}^{N_{s}} {C(xij,dj)}i=1Ns 之后,由体渲染 π v o l \pi_{\mathrm{vol}} πvol 得到 j j j 处的特征;

f. 重复步骤cde,得到 H V × W V H_V \times W_V HV×WV 大小的特征图 I V I_V IV,通过2D神经渲染器 π θ neural  \pi_{\theta}^{\text {neural }} πθneural 解码得到最终图像;

h. 在训练时,由判别器判断图片的真实性,并计算损失。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值