一.论文采用的新方法

1.AttGan中skip connect的局限性

  由于encoder中对特征的下采样实际上可能损失部分特征,我们在decoder中进行上采样和转置卷积也无法恢复所有特征,因此AttGan考虑采用了skip connect,这种跳跃连接最初是resnet中为了解决网络层数过深带来的梯度爆炸和梯度消失无法训练的问题,笔者认为在人脸属性编辑这里并非是这一用途,而是为了保持最初人脸的特征。但是这一做法仍然具有其局限性,根据实验,重建图像的质量明显上升,但是控制图像属性的能力却有所下降。

  为了解决这一问题,在这篇论文中,提出了采用selective transfer units来自适应的选择encoder属性的办法解决这一问题。

  (对上面这一点的理解,我咨询了师兄,得到了解释。即encoder的结果有一些是不需要改变的,因为有的属性并不需要更改,这个时候把它skip过去就会有利于这部分区域的重建,但如果是需要改变的区域,encoder这块区域的特征直接skip过去的话,decoder就会倾向于利用这块的特征,因为还有GAN Loss和重建Loss在,所以就会导致修改效果很差。所以加上STU,就是让他自适应的选择不需要改的区域传到decoder,而让需要改的区域用的decoder改之后的feature来做生成)

2.采用差分属性向量作为输入

  在AttGan和StarGan中,都是采用源图像和目标属性完整向量作为generator的输入的,但是这样操作可能会改变一些我们无需改变的属性,为了解决这一问题,我们将差分向量作为generator的输入

  这么做的好处不仅能使该向量简化,因为目标向量和源向量往往只有细微的不同,从而简化训练过程。而且可以提高生成图像的质量,并且差分向量在实际中更好提供(笔者对这一点持怀疑态度)。

3.选择性转换单元(Selective Transfer Units)

  上面我们已经讲过了采用STU的原因,STU的结构是在GRU的基础上修改而成的。

  首先我们采用转置卷积对连接的l+1层的隐状态和差分向量做处理,改变其size。  

  然后我们用STU自适应的改变隐状态和transformed encoder feature。

  重置门r和更新门z的引入使得能自适应的改变encoder feature。

STU                                                       GRU

  上面给出了STU和GRU的结构图,STU和后者的不同是STU同时输出了sl和flt,而后者只输出了flt,而后者只输出了flt。至于这么做的原因,在后面介绍网络结构的时候就可一目了然

二.论文网络架构

  本网络主要由generator和discriminator两部分组成,上面展示了generator的主要结构,左边是encoder,右边是decoder。encoder由5个卷积层组成,decoder由5个反卷积层组成。STU用在除了第五个卷积层后。而discriminator有两部分att和adv两部分,adv用来判断图像的真假,att和adv共享卷积参数,并用全连接层用来预测生成图的属性。

  

  针对STU,其作用表示如下:

  除了第五个encoder的结果,其余的encoder feature都通过了STU的处理,部署在不同层的STU不共享参数。

  我们将encoder看成是一个整体,那么其功能可以写作

   

  对于整个generator,其功能为

三.损失函数

1.Reconstruction loss

  当target图像和source图像的属性完全相同时,reconstruction loss显然为0。根据这一基准,论文定义rec loss为

2.Adversarial loss

  这里采用了WGAN-GP的方法定义adv loss。

3.Attribute manipulation loss

  这部分为属性编辑误差,采用了交叉熵损失函数。

4.模型总优化目标

四.代码解析

STGAN: A Unified Selective Transfer Network for Arbitrary Image Attribute Editing 阅读笔记和pytorch代码解读的更多相关文章

  1. 《Macro-Micro Adversarial Network for Human Parsing》论文阅读笔记

    <Macro-Micro Adversarial Network for Human Parsing> 摘要:在人体语义分割中,像素级别的分类损失在其低级局部不一致性和高级语义不一致性方面 ...

  2. Deep Transfer Network: Unsupervised Domain Adaptation

    转自:http://blog.csdn.net/mao_xiao_feng/article/details/54426101 一.Domain adaptation 在开始介绍之前,首先我们需要知道D ...

  3. “Triplet network”三元组网络阅读笔记

    记录<DEEP METRIC LEARNING USING TRIPLET NETWORK>阅读笔记 文章总体内容: 作者在前人提出的多个特征提取方法的基础上提出Triplet netwo ...

  4. 论文阅读笔记(二十一)【CVPR2017】:Deep Spatial-Temporal Fusion Network for Video-Based Person Re-Identification

    Introduction (1)Motivation: 当前CNN无法提取图像序列的关系特征:RNN较为忽视视频序列前期的帧信息,也缺乏对于步态等具体信息的提取:Siamese损失和Triplet损失 ...

  5. [论文阅读笔记] Fast Network Embedding Enhancement via High Order Proximity Approximati

    [论文阅读笔记] Fast Network Embedding Enhancement via High Order Proximity Approximation 本文结构 解决问题 主要贡献 主要 ...

  6. [论文阅读笔记] Community aware random walk for network embedding

    [论文阅读笔记] Community aware random walk for network embedding 本文结构 解决问题 主要贡献 算法原理 参考文献 (1) 解决问题 先前许多算法都 ...

  7. [论文阅读笔记] LouvainNE Hierarchical Louvain Method for High Quality and Scalable Network Embedding

    [论文阅读笔记] LouvainNE: Hierarchical Louvain Method for High Quality and Scalable Network Embedding 本文结构 ...

  8. [论文阅读笔记] Structural Deep Network Embedding

    [论文阅读笔记] Structural Deep Network Embedding 本文结构 解决问题 主要贡献 算法原理 参考文献 (1) 解决问题 现有的表示学习方法大多采用浅层模型,这可能不能 ...

  9. [论文阅读笔记] Unsupervised Attributed Network Embedding via Cross Fusion

    [论文阅读笔记] Unsupervised Attributed Network Embedding via Cross Fusion 本文结构 解决问题 主要贡献 算法原理 实验结果 参考文献 (1 ...

随机推荐

  1. vue第六单元(vue的实例和组件-vue实例的相关属性和方法-解释vue的原理-创建vue的组件)

    第六单元(vue的实例和组件-vue实例的相关属性和方法-解释vue的原理-创建vue的组件) #课程目标 掌握vue实例的相关属性和方法的含义和使用 了解vue的数据响应原理 熟悉创建组件,了解全局 ...

  2. CDH6.3.0下Apache Atlas2.1.0安装与配置

    CDH6.3.0下Apache Atlas2.1.0安装与配置 0. 说明 文中的${ATLAS_HOME}, ${HIVE_HOME} 环境变更需要根据实际环境进行替换. 1. 依赖 A. 软件依赖 ...

  3. Offer经验分享 - 蚂蚁金服、字节跳动、PDD、百度、华为、Paypal - Java社招面经

    年中的时候因为换工作的缘故,陆续参加了华为.蚂蚁.字节跳动.PDD.百度.Paypal的社招面试,除了字节跳动流程较长,我主动结束面试以外,其他的都顺利拿到了Offer. 最近时间稍微宽裕点了,写个面 ...

  4. 8. 老板 不加薪,我用了 这篇 加了 3K

    在K8S中,容器本身是非持久化的,当容器崩溃后,kubelet将以镜像的初始状态重新启动容器,但是此时之前容器的数据已经丢失,我们该如何保护好容器的数据呢? 在同一Pod中的容器往往需要共享一些数据, ...

  5. Python 进阶——如何正确使用 yield?

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理 在 Python 开发中, yield 关键字的使用其实较为频繁,例如大集合的生成,简化代码结构.协 ...

  6. 30G 上亿数据的超大文件,如何快速导入生产环境?

    Hello,大家好,我是楼下小黑哥~ 如果给你一个包含一亿行数据的超大文件,让你在一周之内将数据转化导入生产数据库,你会如何操作? 上面的问题其实是小黑哥前段时间接到一个真实的业务需求,将一个老系统历 ...

  7. 6. 抹平差异,统一类型转换服务ConversionService

    目录 ✍前言 版本约定 ✍正文 ConverterRegistry ConversionService ConfigurableConversionService GenericConversionS ...

  8. 解决UE4缓存使C盘膨胀的问题

    使用UE4的时候会发现C盘越来越小了,那是因为UE4引擎的缓存文件默认保存在C盘的缘故. 概述 一.出现的问题:UE4的缓存文件会导致C盘膨胀. 二.解决的方式:请严格按照下列步骤来执行.1. 更改U ...

  9. h5问题总结

    一.下拉刷新上拉加载 主要依赖一款插件mescroll.js  http://www.mescroll.com/ 简单好用.以前同事的用法是初始化执行执行上拉会调,页数从0开始,下拉重新加载当前地址走 ...

  10. rtmp向IR601移植过程(无功能步骤,只有移植步骤)

    1.main.c中添加头文件: #include "rtmp_sys.h" #include "log.h" #include "rtmp.h&quo ...