这是一篇CVPR 2019的一篇文章,思想简单,但是实验结果是真的简单,服!服!服!!!(但是我为什么想不到呢?我太菜)。文章中介绍了很多模块,也介绍了文章idea的来源,为此我还看了相关的Memory Networks及各种变形(对理解本篇DM-GAN其实用处不大,但是这些论文挺好的,推荐一看。)
论文: https://arxiv.org/abs/1904.01310?context=cs.
GitHub代码: https://github.com/MinfengZhu/DM-GAN.
大家都知道,text-to-image的研究的显存的两个主要问题:
1.显存方法极大的依赖最初合成的图像,然后在这个合成的图像上去提炼和匹配文本描述,如果这个初始图像质量很差,那最终的生成图像质量肯定不好。
2.文本描述中的每个单词对图片的内容的作用都不一样,重要性也不一样,怎样将单词与要生成的图像的不同内容很好的关联,也就是attention提出的主要原因。
这篇论文的主要创新点是提出一个动态记忆模型(a dynamic memory module)去提炼图像,这个模型主要包括以下几个模块:
1.Memory Writing Gate:计算上一层的feature map与单词嵌入向量之间的attention
2.Key-Value Memories:通过Key来检索最相关的Value,并以权重总和的形式输出
3.Responese Gate:将权重和 与 feature map融合输出一个新的image feature
整个网络结构为:
上图的第一个子图没什么需要介绍的的,它与之前的StackGAN、AttnGAN等结构相似。上图中:
其中T是单词的数量,是单词单词特征的维数,N是图像像素的数量,是图像像素特征的维数。
这个网络也是以堆叠(stack)的形式构成的,通过多阶段提炼生成高分辨率图片。我们需要看看Dynamic Memory based Image Refinement的工作流程:
1.Memory Writing Gate
我们需要将重要的文本信息提炼出来,从而在初始图像的基础上生成高分辨高质量的图像。这里用到一个Memory Writing Gate 去融合上一阶段的image features 和单词特征举证 ,从而计算某个单词的重要性:
是 sigmoid 函数,是 的矩阵,是 的矩阵。则 memory slot 被下面的公式计算得到:
和表示1 x 1的卷积操作,并将图像和单词特征转换到维的特征空间。
2.Key Addressing
在这一步,本文使用key memory去检索相关的memories。在这里我们计算每一个memory slot()的权重作为相似性概率:
在实施中是1 x 1的卷积。
3.Value Reading
输出的memory()被定义为value memory的权重总和:
实施中也是一个1 x 1的卷积。
4.Responese Gate
论文中利用适应性门机制去动态的控制信息流向以及image feature 的更新:
和是参数矩阵和偏置值。
目标函数
其中是条件增强损失
其中和分别是句子特征的均值和对角协方差矩阵。
另外论文还用了attnGAN的DAMSM损失。
Experiments
还有一些其它的实验验证及定量的展示,具体可看原文。