2019年CVPR的一篇文章,原文见:Image Generation from Layout,代码见:Codes & Demo。
为了节省时间,小编这里仅放PPT的插图。完整ppt可以私我哈!
1)要解决的问题
2)任务的难点
3) 关键技术:将具体对象的表示方式解耦,分为确定性的表征基本类别的部分与不确定性的表征具体外观表现的部分。
4)合成流程(测试阶段)
5)模型框架
### 训练机制说明
"""
在每个iteration中,对每张图像:
① crop,得到如干个object的patch,与对应的坐标Li
② 对每个patch进行resize到同样大小,输入Obj Estimator(由卷积+FC组成)得到m维潜向量,希望这个向量表征的是某一种“外观表现规则”,其是独立于类别的,不过对于不同的类别会有不同的作用法则
③ 用这个潜向量预测样式的后验分布的μ与∑,构造正态分布后从中采样(但个人认为是用这个latent vector预测系数后,直接用这个vector前馈)
④ 我们在一个已知μ与∑的先验正态分布上也随机采样得到一个表征样式的潜向量
⑤ 对两组潜向量分别前馈,先经过Obj encoder,结合类别信息、外观信息、位置信息构造特征图谱Fi,将若干个Fi经过cLSTM得到目标图像的编码,对其进行解码得到图像
⑥ 前者用于重构原图像得到I帽,后者用于新合成图像I'
⑦ 对I'同样基于GT的layout作crop得到若干个patch,输入OE得到新的外观向量;理论上,z_si'与z_si应该是一样的!
** 其中,layout信息Li与类别yi或者词向量wi是公共的;这在训练过程实现了将确定性类别与大小、位置信息,和不确定性的外观特征解耦
"""
1)Object Estimator的结构
2)Object Composer的结构
3) Objects Fuser的选择:需要满足一下三个条件
6)Loss函数
### 我们分别说明每个loss的作用
"""
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足够真实,分类效果能更好(但这是不一定的,因为计算机对图像的理解是更加抽象的。)
"""
7)结果