理解AttnGAN: Text-to-Image convertor

论文在此:https://arxiv.org/pdf/1711.10485.pdf

论文的贡献可以分为如下两个部分:


一:多阶段的图片精细化


AttnGAN的输入是一个粗糙的低像素的图片,随着多个阶段的促进,最终会得到一张像素值很高的图片(这也是和之前一篇生成高像素的图片的想法一

致:多个阶段的生成促进像素的提升)

1.初始阶段

类似与其他文字生成图片的方法一样,AttnGAN的输入就是 随机的噪声图和标注的词向量

h(0) = F(0)(z, E)


这里 z 表示噪声的输入, E表示独立的词向量的总和。h(0)表示为隐藏的上下文。基于h(o)我们可以生成第一个阶段的图片x(o)

x(0) = G(0)(h(0))


(G(0)也就是生成器)

第一个阶段的生成图例:


2.后续阶段

这里有一个问题:如果只是从一个句子的词向量来生成图片,那样我

们就会损失大量的隐藏在独立的词中详细的细节。

举例来说:当你结合这样的信息(green+crown+white+belly 到词库中去的时候,你很可能分不清crown或者belly 的颜色到底是哪一个,从而

导致生成的图片很模糊,并不会很确定具体的 颜色。

作者为了解决这个问题,就提出了在每一个阶段结合注意力和GAN,去迭代的给图片增加细节。

h(i) = F(i)(h(i-1), Attn([e], h(i-1)))
x(i) = G(i)(h(i))

和初始的公式进行比较:

  • z 被替代为了 h(i-1)
  • [e]是指句子中所有的词向量,然后计算[e] ( Attn([e], h(i-1)) )的权重平均,去强调那些词是需要更多的细节。

举例来说:

h(1)bird, this, has, belly, white(这个阶段最需要关注的是鸟)

h(2)black, green, white, this, bird (这个阶段最需要关注的是鸟身上具体的颜色)


一:多模式的损失函数


1.判别器

思考一下究竟为什么我们需要x,但是x(0)并没有出现在h(1)或者x(1)中?

原因就是训练。在学习阶段判别器D训练采用的是缩小尺寸的原始标注图片。这样将会使得生成器G更好的从h的输入生成x。由BP的规则,这将是的F函数更好的生成隐藏的上下文,这样就保证了每一个阶段的生成都能产生一些有意义的结果。(说白了就是我们判别器判别的时候会有原始的模糊到清晰像素图去监督整个训练的过程)

2.深层注意多模态相似性模型(DAMSM)

虽然有多个判别器去让这个系统更加优化,但是我们还是不能有个客观的概念:是否标注中的每一个词都被正确的表示在生成的图片中?


为了高效的解决这个问题,作者预先训练了一个被他们称为“专家”的打分网络-DAMSM。这个模型的输入是图片和图片对应的标注词向量。输出就是这两个之间的相似性。

具体细节如下:

  • 采用标准的卷积神经网络,图片被转换为了一系列特征图,每一个特征图表示一些概念或者图上的子区间。
  • 特征图的维度也就和词向量的维度一样,这样方便于计算相似度。
  • 根据标题中的每个标记,将注意力放在特征图上,以计算它们的加权平均值。这个注意力向量实际上代表了图像对标记的抽象。
  • 最后,DAMSM被训练来最小化上述注意向量(单词的可视化描述)和单词嵌入(单词的文本含义)之间的区别。基本上是想让图像的绿色部分尽可能的“绿色”
一旦DAMSM在数据集上得到了足够的训练,它就可以与步进的鉴别器一起使用,为AttnGAN提供一个丰富的目标来优化

参考:
https://codeburst.io/understanding-r-net-microsofts-superhuman-reading-ai-23ff7ededd96



  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis-Plus 是一个 MyBatis 的增强工具,提供了许多方便使用的功能。其中之一就是 MyBatis-Plus Generator,它可以根据数据库表结构自动生成基础的 Mapper、Model、Service、Controller 层代码,省去了很多重复的工作。 不过,MyBatis-Plus Generator 生成的代码可能不太符合我们的需求,比如不支持生成 DTO、VO、Convertor 等类。这时候我们就需要自定义模板来生成这些类。下面我来介绍一下如何自定义模板生成 DTO、VO、Convertor。 1. 新建模板文件 在 MyBatis-Plus Generator 的资源目录下,找到模板文件所在的目录。一般是在 `templates/entity` 目录下。在这个目录下新建三个文件: - dto.java.vm - vo.java.vm - convertor.java.vm 这三个文件分别对应生成 DTO、VO、Convertor 的模板。 2. 编写模板文件 以 `dto.java.vm` 为例,下面是一个简单的模板代码: ``` package ${package}.dto; import lombok.Data; @Data public class ${className}Dto { #foreach($column in $table.columns) /** * ${column.columnComment} */ private ${column.javaType} ${column.propertyName}; #end } ``` 这个模板会生成一个名为 `${className}Dto` 的 DTO 类,其中 `${className}` 是表对应的类名。模板通过 `#foreach` 循环遍历表的所有列,生成对应的属性。 `vo.java.vm` 和 `convertor.java.vm` 的模板代码类似,这里就不再赘述了。 3. 修改配置文件 在 MyBatis-Plus Generator 的配置文件 `generatorConfig.xml` 中,找到 `table` 标签下的 `property` 标签。在这个标签下添加三个属性: ``` <property name="dtoTargetPackage" value="com.example.dto"/> <property name="voTargetPackage" value="com.example.vo"/> <property name="convertorTargetPackage" value="com.example.convertor"/> ``` 这三个属性分别指定生成的 DTO、VO、Convertor 类所在的包名。 接着,在 `table` 标签下的 `generatedKey` 标签后面添加以下代码: ``` <property name="dtoTemplate" value="templates/entity/dto.java.vm"/> <property name="voTemplate" value="templates/entity/vo.java.vm"/> <property name="convertorTemplate" value="templates/entity/convertor.java.vm"/> ``` 这些代码分别指定生成 DTO、VO、Convertor 的模板文件路径。 4. 运行 MyBatis-Plus Generator 最后,运行 MyBatis-Plus Generator,它会自动根据模板文件生成 DTO、VO、Convertor 等类。生成的类会放在指定的包中,可以随时使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值