STGAN: A Unified Selective Transfer Network for Arbitrary Image Attribute Editing 阅读笔记和pytorch代码解读
一.论文采用的新方法
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代码解读的更多相关文章
- 《Macro-Micro Adversarial Network for Human Parsing》论文阅读笔记
<Macro-Micro Adversarial Network for Human Parsing> 摘要:在人体语义分割中,像素级别的分类损失在其低级局部不一致性和高级语义不一致性方面 ...
- Deep Transfer Network: Unsupervised Domain Adaptation
转自:http://blog.csdn.net/mao_xiao_feng/article/details/54426101 一.Domain adaptation 在开始介绍之前,首先我们需要知道D ...
- “Triplet network”三元组网络阅读笔记
记录<DEEP METRIC LEARNING USING TRIPLET NETWORK>阅读笔记 文章总体内容: 作者在前人提出的多个特征提取方法的基础上提出Triplet netwo ...
- 论文阅读笔记(二十一)【CVPR2017】:Deep Spatial-Temporal Fusion Network for Video-Based Person Re-Identification
Introduction (1)Motivation: 当前CNN无法提取图像序列的关系特征:RNN较为忽视视频序列前期的帧信息,也缺乏对于步态等具体信息的提取:Siamese损失和Triplet损失 ...
- [论文阅读笔记] Fast Network Embedding Enhancement via High Order Proximity Approximati
[论文阅读笔记] Fast Network Embedding Enhancement via High Order Proximity Approximation 本文结构 解决问题 主要贡献 主要 ...
- [论文阅读笔记] Community aware random walk for network embedding
[论文阅读笔记] Community aware random walk for network embedding 本文结构 解决问题 主要贡献 算法原理 参考文献 (1) 解决问题 先前许多算法都 ...
- [论文阅读笔记] LouvainNE Hierarchical Louvain Method for High Quality and Scalable Network Embedding
[论文阅读笔记] LouvainNE: Hierarchical Louvain Method for High Quality and Scalable Network Embedding 本文结构 ...
- [论文阅读笔记] Structural Deep Network Embedding
[论文阅读笔记] Structural Deep Network Embedding 本文结构 解决问题 主要贡献 算法原理 参考文献 (1) 解决问题 现有的表示学习方法大多采用浅层模型,这可能不能 ...
- [论文阅读笔记] Unsupervised Attributed Network Embedding via Cross Fusion
[论文阅读笔记] Unsupervised Attributed Network Embedding via Cross Fusion 本文结构 解决问题 主要贡献 算法原理 实验结果 参考文献 (1 ...
随机推荐
- 精尽Spring MVC源码分析 - HandlerAdapter 组件(二)之 ServletInvocableHandlerMethod
该系列文档是本人在学习 Spring MVC 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释 Spring MVC 源码分析 GitHub 地址 进行阅读 Spring 版本:5.2. ...
- xss未看完的文章
https://blog.csdn.net/fen0707/article/details/8596888 XSS介绍与攻击 http://xss.fbisb.com/w ...
- (第一篇)记一次python分布式web开发(利用docker)
作者:落阳 日期:2020-12-23 在一次项目开发中,决定使用docker+nginx+flask+mysql的技术栈来开发,用此系列文章记录开发的过程. 系列文章,当前为第一篇,记录一次pyth ...
- 纯Python绘制艺术感满满的山脊地图,创意满分
1 简介 下面的这幅图是英国摇滚乐队 Joy Division 在1979年发行的其第一张录音室专辑 Unknown Pleasures 的封面,由艺术家 Peter Saville 基于射电脉冲星信 ...
- 30G 上亿数据的超大文件,如何快速导入生产环境?
Hello,大家好,我是楼下小黑哥~ 如果给你一个包含一亿行数据的超大文件,让你在一周之内将数据转化导入生产数据库,你会如何操作? 上面的问题其实是小黑哥前段时间接到一个真实的业务需求,将一个老系统历 ...
- (十一)、head--查看文件前若干部分,tail--查看文件后若干部分
一.命令描述与格式 head用于查看文件前面部分,tail用于查看文件的末尾部分 格式:head/tail [-选项] 文件 head选项: -c:处理文件若干字节数,加b.k.m -n:前 ...
- Java 从匿名内部类到Lambda表达式
匿名内部类和Lambda表达式有很多类似之处,首先都是在使用的时候才对接口进行实现,只是Lambda接口中只能由一个需要被实现的方法. 所有的Lambda表达式都可以 由匿名内部类改写: interf ...
- Hive基于UDF进行文本分词
本文大纲 UDF 简介 Hive作为一个sql查询引擎,自带了一些基本的函数,比如count(计数),sum(求和),有时候这些基本函数满足不了我们的需求,这时候就要写hive hdf(user de ...
- Java学习日报9.30
********************************** double类型精度问题 ********************************** 1 package test; 2 ...
- ReentrantLock显示锁
public class AttemptLocking { /* * public AttemptLocking() { * * System.out.println("构造器初始化...& ...
