AttnGAN是GAN的一种变体,要知道AttnGAN是什么,首先我们要知道什么是GAN!
Gan(生成式对抗网络)
生成式对抗网络(GAN, Generative Adversarial Networks )是一种深度学习模型,是近年来复杂分布上无监督学习最具前景的方法之一。
在该模型中,有两个模块:生成模型(Generative Model)和判别模型(Discriminative Model)的互相博弈学习产生相当好的输出
举个简单的例子:
- 判别模型:给定一张图,判断这张图里的动物是猫还是狗D(是一个判别网络,判别一张图片是不是“真实的”。它的输入参数是x,x代表一张图片,输出D(x)代表x为真实图片的概率,如果为1,就代表100%是真实的图片,而输出为0,就代表不可能是真实的图片)
- 生成模型:给一系列猫的图片,生成一张新的猫咪(不在数据集里)G(是一个生成图片的网络,它接收一个随机的噪声z,通过这个噪声生成图片,记做G(z))
在训练过程中,生成网络G的目标就是尽量生成真实的图片去欺骗判别网络D。
而D的目标就是尽量把G生成的图片和真实的图片分别开来。
这样,G和D构成了一个动态的“博弈过程”。
最后博弈的结果是什么?在最理想的状态下,G可以生成足以“以假乱真”的图片G(z)。对于D来说,它难以判定G生成的图片究竟是不是真实的,因此D(G(z)) = 0.5。
这样我们的目的就达成了:我们得到了一个生成式的模型G,它可以用来生成图片。
定义GAN的目标函数为V(G,D),在博弈过程中,G希望减少V的值让自己生成的分布无法识别,而D希望增大V的值让自己可以高效的判别出数据的真假类别,则V(G,D)的表达式为
既然GAN已经有所了解了,那么AttnGAN又是什么呢?
AttnGAN(注意生成对抗网络)
上文已经说到,他是GAN的一种变体,他可以根据写下的文字生成图像,在以往的常规做法是将整个句子编码为condition向量,与随机采样的高斯噪音$z$进行拼接,经过卷积神经网络(GAN,变分自编码等)来上采样生成图像。而仅通过编码整个句子去生成图像会忽略掉一些细粒度的信息,而这些细粒度的信息是由单词层面来决定的(例如颜色、形状等)。
所以AttnGAN就是解决他的好办法,在生成过程中引入对单词的注意力机制,这种注意力机制需要把相关的单词与对应的图像区域匹配起来。
其中的模型有两个部分组成:
Attentional Generative Network
该部分使用了注意力机制来生成图像中的子区域,并且在生成每个子区域时还考虑了文本中与该子区域最相关的词。
DAMSM
该部分用来计算生成的图像与文本的匹配程度。用来训练生成器。
Pipeline
- 输入的文本通过一个Text Encoder 得到 sentence feature 和word features
- 用sentence feature 生成一个低分辨率的图像I0
- 基于I0 加入 word features 和setence feature 生成更高分辨率细粒度的图像
引用资料:
【1】https://segmentfault.com/a/1190000021743424?utm_medium=referral&utm_source=tuicool
【2】https://www.cnblogs.com/zzycv/p/11704771.html
【3】https://github.com/taoxugit/AttnGAN
【4】https://openaccess.thecvf.com/content_cvpr_2018/papers/Xu_AttnGAN_Fine-Grained_Text_CVPR_2018_paper.pdf
【5】https://blog.csdn.net/zlrai5895/article/details/81366834
【6】https://blog.csdn.net/appearance_/article/details/79185644
5 comments
文章真不错
哇,我看不懂,但我大受震撼(ノ°ο°)ノ
蛙 希望有帮到你!
Typecho 做出来的博客,就是干净快捷
确实~我昨天试了一下WordPress 小机子还真的要优化很多地方才能做到勉强不卡www