CVPR 2019 《Image Generation from Layout》
Demo:
本文主要完成的任务在中间过程中使用布局(Layout)来帮助生成具有多个实体的复杂布局的图像。Layout2Im的基本原理是:给定一个粗粒度的布局信息,主要包括边界框(bounding box)和类别(categories),模型就可以在指定的位置生成指定类别的图像,并且在一定程度上保证生成图像的质量。而对于每一个实体来说,它被分解为两部分
- 确定的部分:实体的类别
- 不确定的部分:实体的外观
类别信息使用编码器将其转换为word embedding的形式;外观信息由从正态分布中采样得到的随机噪声向量表示。然后使用convolutional LSTM将其组合到一起生成完整的布局,最后经过解码器生成最终对应的图像。作者在MS-COCO数据集上进行实验,将Inception Score从24.66%提高到28.57%,达到了state-of-the-art。
Image Generation from Layout
模型整体的架构如下所示:
I I I表示带有布局 L L L的真实图像,其中 L = ( x i , y i , h i , w i ) L=(x_{i},y_{i},h_{i},w_{i}) L=(xi,yi,hi,wi), ( x i , y i ) (x_{i},y_{i}) (xi,yi)表示每个实体边界框左上角的坐标, h i h_{i} hi和 w i w_{i} wi分别表示边界框的高和宽。对于 I I I中的每个实体 O i O_{i} Oi来说,首先从中采样得到两个latent code,记为 Z r i Z_{ri} Zri和 Z s i Z_{si} Zsi。 Z r i Z_{ri} Zri是根据后验概率 Q ( Z r ∣ O i ) Q(Z_{r}|O_{i}) Q(Zr∣Oi)所得,目的是从完整的图像中根据对应的布局 L i L_{i} Li裁剪出对应的实体; Z s i Z_{si} Zsi是从 N ( z s ) \mathcal{N}\left(\mathbf{z}_{s}\right) N(zs)中采样所得。另外每个 O i O_{i} Oi具有它类别信息 y i y_{i} yi的嵌入向量 w i w_{i} wi。然后将 Z i 、 w i 、 L i Z_{i}、w_{i}、L_{i} Zi、wi、Li输入到Object Composer中生成多实体特征图 F i F_{i} Fi,接着将其送到Object Encoder中生成融合特征图 H H H,它包含了所有实体的信息;最后将 H H H送到Image Decoder中生成最终的图像 X ^ \hat{X} X^,此外还有从 Z s Z_{s} Zs中生成的图像 I ′ I' I′。为了保持生成图像中 O ′ O' O′和 Z s i Z_{si} Zsi的一致性,这里使用Object Estimator进行评估。
此外有两个判别器,分别在实体层级和图像层级对生成的图像进行判别真假。模型训练结束后,就可以从正态先验分布 N ( z s ) \mathcal{N}\left(\mathbf{z}_{s}\right) N(zs)中采样latent code,最后根据布局中生成新的图像。
Z s i Z_{si} Zsi根据 z r i ∼ Q ( z r i ∣ O i ) = N ( μ ( O i ) , σ ( O i ) ) \mathbf{z}_{r i} \sim Q\left(\mathbf{z}_{r i} | \mathbf{O}_{i}\right)=\mathcal{N}\left(\mu\left(\mathbf{O}_{i}\right), \sigma\left(\mathbf{O}_{i}\right)\right) zri∼Q(zri∣Oi)=N(μ(Oi),σ(Oi))所得,它的采样过程如下所示
基本原理是:在前一阶段得到 O i O_{i} Oi后,使用双线性插值将 O i O_{i} Oi的尺寸变为Object Estimator输入对应的尺寸;然后经过Object Estimator得到每个 O i O_{i} Oi后验分布的均值和方差,最后从后验分布中采样得到 Z r i Z_{ri} Zri。
上一阶段得到 Z i Z_{i} Zi和 y i y_{i} yi、 L i L_{i} Li一起经过Object Composer生成特征图 F i F_{i} Fi,基本过程如下所示
首先 y i y_{i} yi经过词嵌入模块得到嵌入向量 w i w_{i} wi,然后将它和 z i z_{i} zi拼接到一起。其中 w i w_{i} wi包含了实体的类别形式, z i z_{i} zi包含了实体的外观信息,使用它们拼接的结果足够重构对应的实体。此外还使用了 L i L_{i} Li构成三元组 < y i , z i , L i > <y_{i}, \mathbf{z}_{i}, \mathbf{L}_{i}> <yi,zi,Li>,每个三元组都会生成对应的特征图 F i F_{i} Fi,不同的 F i F_{i} Fi经过cLSTM下采样后融合为 H H H。最后使用Image Decoder生成最终的图像 I ^ \hat{I} I^和 I ′ I' I′。
判别器部分包含 D o b j D_{obj} Dobj和 D i m g D_{img} Dimg,分别从两个层级来判断图像的真假。 D i m g D_{img} Dimg用来判断 I 、 I ^ 、 I ′ I、\hat{I}、I' I、I^、I′的真假, D o b j D_{obj} Dobj同时对真实对象 O O O、重建对象 O ^ \hat{O} O^和采样对象 O ′ O' O′的质量和类别进行评估。目标函数为: L G A N = E x ∼ p r e a l log D ( x ) + E y ∼ p f a k e log ( 1 − D ( y ) ) \mathcal{L}_{\mathrm{GAN}}=\underset{x \sim p_{\mathrm{real}}}{\mathbb{E}} \log D(x)+\underset{y \sim p_{\mathrm{fake}}}{\mathbb{E}} \log (1-D(y)) LGAN=x∼prealElogD(x)+y∼pfakeElog(1−D(y))其中 x x x代表真实图像, y y y代表生成的假图像。
模型最终的损失函数为 L = λ 1 L K L + λ 2 L 1 i m g + λ 3 L 1 latent + λ 4 L adv i m g + λ 5 L adv o b j + λ 6 L A C o b j \begin{aligned} \mathcal{L}=& \lambda_{1} \mathcal{L}_{\mathrm{KL}}+\lambda_{2} \mathcal{L}_{1}^{\mathrm{img}}+\lambda_{3} \mathcal{L}_{1}^{\text { latent }}+\\ & \lambda_{4} \mathcal{L}_{\text { adv }}^{\mathrm{img}}+\lambda_{5} \mathcal{L}_{\text { adv }}^{\mathrm{obj}}+\lambda_{6} \mathcal{L}_{\mathrm{AC}}^{\mathrm{obj}} \end{aligned} L=λ1LKL+λ2L1img+λ3L1 latent +λ4L adv img+λ5L adv obj+λ6LACobj
其中
- L K L = ∑ i = 1 o E [ D K L ( Q ( z r i ∣ O i ) ∥ N ( z r ) ) ] \mathcal{L}_{\mathrm{KL}}=\sum_{i=1}^{o} \mathbb{E}\left[\mathcal{D}_{\mathrm{KL}}\left(Q\left(\mathbf{z}_{r i} | \mathbf{O}_{i}\right) \| \mathcal{N}\left(\mathbf{z}_{r}\right)\right)\right] LKL=∑i=1oE[DKL(Q(zri∣Oi)∥N(zr))]
- L 1 i m g = ∥ I − I ^ ∥ 1 \mathcal{L}_{1}^{\mathrm{img}}=\|\mathbf{I}-\hat{\mathbf{I}}\|_{1} L1img=∥I−I^∥1
- L 1 latent = ∑ i = 1 o ∥ Z s i − z ′ s i ∥ 1 \mathcal{L}_{1}^{\text { latent }}=\sum_{i=1}^{o}\left\|\mathbf{Z}_{s i}-\mathbf{z}^{\prime} s i\right\|_{1} L1 latent =∑i=1o∥Zsi−z′si∥1
- 后三个损失项是分别使用不同部分来替换 x x x和 y y y而得,具体可见文章的3.7部分
损失项的说明
- KL 散度用来衡量两个概率分布之间的相似性,目的是为了让Object Estimator将给定patch的样式很好地映
射到先验分布N上;其本身预测的结果是一个后验分布,我们的目的是为了拉近其与先验分布的距离但不需要绝对
相等,可能存在某种偏移或旋转,如此,在测试阶段中,我们才可以对从正态分布N随机采样,是采得到的样本向
量可以对应到某种外观表现。 - 作用于zs的L1正则化:理由很简单,就是用于指导给定类别wi(词向量)或者yi(类别)与Layout的外观特
征向量z_si,其合成的Object再次经过Object Estimator得到的外观特征z_si’应该是不变的。这样能够直接引
导Object Estimator将外观特征正确编码;同时有了这个“回去核查”的机制,避免了Object Estimator将不同
的外观映射到同一个编码的情形。 - 作用于输入图像I与重构图像I’的L1正则:是为了引导后边的编码器(Object Encoder)、融合器(Object Fuser)、
解码器(Image Decoder)能够合成真实的图像。 - 对图像的对抗损失:当然就是为了让模型合成真实的图像
- 对objects的对抗损失:让模型合成对应类别的真实图像
- 辅助的分类误差:模型合成的objects足够真实,分类效果能更好(但这是不一定的,因为计算机对图像的理解是更加抽象的。)
实验
数据集:COCO-Stuff、Visual Genome
使用不同的方法从COCO-Stuff和Visual Genome的复杂布局中生成图像的例子
由相同布局生成的不同图像
定量评估
消蚀实验