本文和上一篇show,Attend一样,都是基于attention机制的图像转换。两篇文章的工作大体是相似的,但是这篇文章的代码开源了。
这篇文章和上篇文章一样都是做图像域转换,并且在转换时都想要只关注图像中的前景,达到前景转换而背景不变的效果。
在上一篇blog中已经介绍过了图像域转换,所以这里就直接开始讲作者提出的模型了。
Model
Fs->t表示从S域到T域的转换。
作者定义了两个Attention network As:S->Sa At:T->Ta Sa和Ta为attention map。Sa和Ta和图像的纬度相同,取值范围是[0-1]。
pipeline如下:
- S域的图像s通过As得到attention map Sa,Sa和s按位乘,得到s的前景(attention 部分)Sf。
- Sf 通过Fs->t 转换到T域,再和Sa 按位乘,得到转换到T域图像的前景。
- s和(1-Sa)按位乘得到s的背景(非 attention部分)Sb
- Sb和转换到T域图像的前景相加得到最终的结果s'
Attention-guided generator
上面已经介绍了整个pipeline,这里就再来看他们的生成器。
最终的s'由两部分组成,转换到T域的前景和原图s的背景。
Attention network在公式1中起到了非常重要的作用,如果Attention map Sa为全1,相当于Attention 了整个图像,那么整个工作就和CycleGAN一样了,如果Sa为全0那么所有生成的图像都会一样,那判别器就永远不会被欺骗,如果Sa Attention的部分没有一个可以转换的Object(没有Attention到前景)那么s’就会保持原有的域,起不到转换的效果。
所以为了能在Fs->t,As,Dt中找到一个平衡,As只能去Attention判别器认为最能区分该图像所属域的部分。
Loss Function
loss和其他工作还是差不多的
首先是对抗loss
就是常规GAN的对抗loss
接下来是cycle loss
其中s''是 s'从T域再转换回S域的结果。
所以整个loss如下
Attention-guided discrimination
之前的attention的工作很少会说到判别器,这个工作非常详细的讲了他们的判别器,这也是笔者觉得本文比较重要的部分。
在生成图像时,生成器只关注了图像中attended的部分,那如果判别器依然考虑整个图像会怎么样?
在训练中,随着attention network越来越精确,生成器只转换图像中attened的部分,判别器如果任然看全图,那么改图的前景来自一个数据分布,背景来自另一个数据分布,就会有问题。
举个例子,在马->斑马的转换中,判别器从前景上来看,识别出来是斑马,但是结合背景过后,发现这不是斑马所处的环境(即不存在这样的数据分布),所以可能会识别成fake。
这样会导致两个问题
- 生成器直接将背景预测成attended regions
- attent map包含越来越多的背景,最终收敛成全1
为了解决这个问题,判别器也需要只关注attended的区域,但如果简单的将Sa和s按位乘也会有问题。
当real的图像送到判别器,此时的Sa是初始状态(没有经过训练),如果GAN中的network是同时训练的模型将会坍塌。
所以训练时,作者先使用整张图像训练判别器30个epoch,当attention network得到提升后在用attened 区域来训练。
另外还有一个问题,因为attention map的值是连续的,在训练初期,attention map的值可能会接近0,判别器可能会认为灰度图是real的,因为当real图像被送到判别器时,Sa为接近0的值,mask过后就得到了一张灰度图。所以,作者为判别器的attention map设置了一个阈值,并且设置成0.1。
所以对抗loss就更新为
Learning rates
训练30个epoch过后,判别器中加入了attention map,如果此时训练不是很完美模型依然可能会坍塌。
例如,attention map总是全0,生成器就会生成总是'real'的图像,t-new就会变成all black。为了避免这个问题,作者将As,At的学习率调得比判别器的低。
Results
最后
之前觉得这篇文章看得还挺懂了,今天将之前的笔记整理了一下写出来过后,发现在判别器部分还是有一点迷糊,还需要进一步消化。
网友评论