一、简介
问题
Controllable Image Generation 可控的图像生成。
目前工作不足
- 大多数工作研究2D空间,而真实世界是3D的
- 很少有工作考虑到很多物体的组合场景
本文贡献
本文提出了一种新的场景表示方式:组合式三维场景表示。结合生成模型,可以进行更可控的图像生成。
优势:将物体和背景解耦,不需要额外的监督即可从无结构无姿势的图像中学习。在实验中,本文提出的模型可以做到解耦单个物体,进行平移,旋转,改变相机位姿。
二、背景
GANs是一类十分强大的生成模型,可以合成分辨率≥1024像素的非常真实的图像。
有许多工作研究如何分离物体,但一般只关注了其中一些属性,比如物体形状、大小或者位姿。大多数只在2D空间中操作,这导致了物体之间的关联性,比如改变一个物体的位置,另一个物体的属性也会受到影响。
结合3D表达的其他研究大多局限于单个物体的场景,对于高分辨率的、更复杂和真实的成像一致性比较差。
- 体素 voxels
- 原语 primitives
- 辐射场 radiance fields
贡献:将组合的3D场景表达结合进生成模型从而进行更可控的图像合成,将显式的3D表达结合神经渲染pipeline从而更快地生成更真实的图像。
先用体渲染得到相对低分辨率的特征图像,然后用神经渲染处理特征图像,得到最终的渲染结果。
三、相关工作
基于GANs的图像合成
改变训练对象或网络结构,或者探究well-engineered和预训练的生成模型的潜在空间。
但是,都没有对组合性的场景进行建模。- controlled at object-level
隐式函数
基于学习的3D重建,扩展到场景级别的重建。为了避免3D监督学习,许多工作提出了可微渲染技术,如NeRFs,将隐式神经模型结合体渲染用以合成复杂场景的新视角。需要多视角的图像,以相机位姿作为监督,对每个场景训练一个网络,不能生成新的场景。
本文提出的是NeRFs的生成模型变体。
3D图像合成
本文更关注不需要额外监督的方法,直接在原始图像上训练。
Henzler et al. 基于体素的表达:3D controllable,但是三次的内存增长导致体素分辨率有限。
Phuoc et al. 体素化的特征网格表示:通过重塑操作渲染到2D,但是训练不太稳定,结果对于高分辨率的图像一致性较差。
Liao et al. 结合原语和可微分渲染的抽象特征:可以应对多物体的场景,但是需要额外的监督(纯的背景图,很难从现实世界中获得)。
Schwarz et al. 生成神经辐射场GRAF:限制在单个物体的场景,在更复杂的真实世界图像上结果会变差。
四、方法
1. 为每个对象建立模型
Neural Radiance Fields:
其中$L_x,L_d$是位置编码的输出维度。
位置编码:
其中 $t$ 是一个标量,可以是 $x$ 或 $d$ 的某个方向分量;$L$ 是频率倍频程的数量。在生成模型中,位置编码体现了额外的优势,因为它很自然地产生了一个能学习3D形状表示的bias。
GRAF:在NeRFs基础上,加上了正态分布的形状和外观编码 $z_s,z_a$
其中$M_s,M_a$是潜在编码的维度。
Generative Neural Feature Fields:在GRAF基础上,将3维的颜色 $c$ 替换成更通用的 $M_f$ 维特征 $f$,将物体表示成Generative Neural Feature Fields
如何表示一个对象:
特征场:共享参数 (shared weights).
仿射变换矩阵$T=\{s,t,R\}$, 其中 $s,t,R$ 分别表示 scale, translation, rotation matrix.
将物体上的点映射到到场景空间:
2. 组合场景
将背景也看做一个对象,但是固定了scale和translation参数,中心固定在空间原点。假设组合场景中有 $N$ 个实体,前 $N-1$ 个是场景中的物体,第 $N$ 个是背景。数据集有两种可能的情况:
数据集中 $N$ 恒定不变;
数据集中 $N$ 会变化。
使用组合操作符,将多个对象组合成场景。从方向 $d$ 看某一点 $x$,体密度为所有物体的体密度之和,特征向量是每个物体的特征的加权平均(体密度作为每个物体特征的权重):
其中$\sigma=\sum^N_{i=1}\sigma_i$. 这样做不仅简单直观,而且确保梯度流向所有体密度大于0的实体。
3. 场景渲染
使用体渲染和神经渲染结合的方法,可以快速地合成高质量图像。为了提高效率,先用体渲染得到分辨率较低的特征图,然后用2D神经渲染进行上采样,得到高分辨率的最终输出图像。
3D体渲染
对于某个像素点,沿着相机发出的光线 $d$ 进行采样,记采样点为 $\{x_j\}^{N_s}_{j=1}$,对应的密度和特征向量为 $(\sigma_j,f_j)=C(x_j,d)$.
体渲染可以表示为 $\pi_{vol}:(\Bbb{R}^+\times \Bbb{R}^{M_f})^{N_s}\to\Bbb{R}^{M_f},\ \{\sigma_j,f_j\}^{N_s}_{j=1}\mapsto f$
2D神经渲染
神经渲染可以表示为 $\pi_\theta^{neural}:\Bbb{R}^{H_v\times W_v\times M_f}\to\Bbb{R}^{H\times W \times 3}$
参数化方式:2D CNN (with leaky ReLU activation,最近邻上采样,$3 \times 3$ 卷积核).
小的卷积核、没有中间层:空间中小范围的精炼,防止全局场景的耦合。
神经渲染$\pi_\theta^{neural}$如上图所示,其中灰色表示输出,橙色表示可学习,蓝色表示不可学习。特征图$I_V$通过$n$个【最近邻上采样+$3\times 3$-Conv + LRelu】的block,在每个block中,我们使用$3\times 3$-Conv将特征图映射到RGB图像,并用双线性插值上采样,然后和前面的输出进行相加。最后用sigmoid激活函数,得到最终图像$\hat{I}$。
4. 训练模型
训练过程如下图所示:
其中,橙色代表可学习的,蓝色代表不可学习的。采样场景中的$N\sim p_N$个实体,潜在编码$z^i_s,z^i_a\sim N(0,I)$,以及相机位姿$\xi\sim p_{\xi}$,物体的转移矩阵$T_i\sim p_T$。实际操作中,定义$p_{\xi},p_T$分别是在依赖数据集的相机仰角和有效的物体移动范围内的均匀分布,因为在现实世界中,物体可以任意地旋转,但由于重力作用不会倾斜;对于观察者(也就是相机)来说,仰角是可以相对场景自由变化的。
Generator
其中 $I_V=\{\pi_{vol}(\{C(x_{jk},d_k)\}^{N_s}_{j=1})\}^{H_V \times W_V}_{k=1}$,$N$ 是场景中实体的数量,$N_S$ 是沿着每根光线采样的点的数量,$d_k$ 是第k个像素,$x_{jk}$ 是第k个像素上的第j个采样点
Discriminator
辨别器的结构是 CNN with leaky ReLU activation,计算生成的图像 $\hat{I}$ 和真实图像 $I$ 之间的对抗损失。
其中$f(t) = − log(1 + exp(−t)), \lambda = 10$。
5. 实现细节
所有物体的特征场$\{h_{\theta_i}^i\}^{N-1}_{i=1}$ share weights,用MLPs + ReLU activation进行参数化。
RMSprop optimizer
五、结果分析
数据集
单个物体、白色背景数据集(Chairs [68], Cats [95], CelebA [52], and CelebA-HQ),单个物体、真实世界数据集(CompCars, LSUN Churches, FFHQ),包含不同数量、多个物体的场景(Clevr-2345)。
解耦
Fig5: 不需要纯背景的图像或其他任何监督,就可以产生解耦。模型在包含固定或可变数量物体的多物体场景上进行训练时,能够正确地解耦出各个物体。
Fig6: 训练过程中,不同iteration输出的图像,证明解耦在训练的相当早期就发生了。
Fig7: 可控的场景生成,展示可控生成物体旋转,深度/水平/圆周移动,改变外观,改变相机仰角。
Fig8: 训练数据集之外的泛化。增加物体数量,加大平移尺度。
对比
- Baselines
- voxel-based: Platonic-GAN, BlockGAN, HoloGAN (w/o 3D Conv)
- radiance field-based: GRAF
- ResNet-based 2D GAN
- Metrics: Frechet Inception Distance (FID) score
消融研究
table 4: 去除某个组成成分造成FID在CompCars上的变化,包括
- RGB skip connections
- final activation
- 上采样选择最近邻/双线性
神经渲染器:quantitative(FID score) & qualitative(Fig 9 360°旋转效果图)comparison,更换背景(Fig 10)
位置编码:使用坐标轴对齐的位置编码