STGAN: A Unified Selective Transfer Network for Arbitrary Image Attribute Editing 阅读笔记和pytorch代码解读
何莫道 人气:0一.论文采用的新方法
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.模型总优化目标
四.代码解析
加载全部内容