Layout2Im

123 阅读7分钟

CVPR 2019 《Image Generation from Layout》

gitHub


在这里插入图片描述

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​构成三元组 &lt; y i , z i , L i &gt; &lt;y_{i}, \mathbf{z}_{i}, \mathbf{L}_{i}&gt; <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&#x27; 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&#x27; I、I^、I′的真假, D o b j D_{obj} Dobj​同时对真实对象 O O O、重建对象 O ^ \hat{O} O^和采样对象 O ′ O&#x27; 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∼preal​E​logD(x)+y∼pfake​E​log(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}=&amp; \lambda_{1} \mathcal{L}_{\mathrm{KL}}+\lambda_{2} \mathcal{L}_{1}^{\mathrm{img}}+\lambda_{3} \mathcal{L}_{1}^{\text { latent }}+\\ &amp; \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=​λ1​LKL​+λ2​L1img​+λ3​L1 latent ​+λ4​L adv img​+λ5​L adv obj​+λ6​LACobj​​
其中

  • 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=1o​E[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部分

损失项的说明

  1. KL 散度用来衡量两个概率分布之间的相似性,目的是为了让Object Estimator将给定patch的样式很好地映
    射到先验分布N上;其本身预测的结果是一个后验分布,我们的目的是为了拉近其与先验分布的距离但不需要绝对
    相等,可能存在某种偏移或旋转,如此,在测试阶段中,我们才可以对从正态分布N随机采样,是采得到的样本向
    量可以对应到某种外观表现。
  2. 作用于zs的L1正则化:理由很简单,就是用于指导给定类别wi(词向量)或者yi(类别)与Layout的外观特
    征向量z_si,其合成的Object再次经过Object Estimator得到的外观特征z_si’应该是不变的。这样能够直接引
    导Object Estimator将外观特征正确编码;同时有了这个“回去核查”的机制,避免了Object Estimator将不同
    的外观映射到同一个编码的情形。
  3. 作用于输入图像I与重构图像I’的L1正则:是为了引导后边的编码器(Object Encoder)、融合器(Object Fuser)、
    解码器(Image Decoder)能够合成真实的图像。
  4. 对图像的对抗损失:当然就是为了让模型合成真实的图像
  5. 对objects的对抗损失:让模型合成对应类别的真实图像
  6. 辅助的分类误差:模型合成的objects足够真实,分类效果能更好(但这是不一定的,因为计算机对图像的理解是更加抽象的。)

blog.csdn.net/WinerChopin…

实验

数据集:COCO-Stuff、Visual Genome

使用不同的方法从COCO-Stuff和Visual Genome的复杂布局中生成图像的例子


在这里插入图片描述

由相同布局生成的不同图像


在这里插入图片描述

定量评估


在这里插入图片描述

消蚀实验


在这里插入图片描述