Unsupervised generative attentional networks with adaptive layer-instance normalization for image-to-image translation
论文目的
图像之间的风格迁移一直是图像研究领域的热门话题,但作者发现现有的一些网络模型,当图像之间的差异较大时(形状和纹理等等),转换后的图片效果不是很好,作者试图研究一种新的方法去解决这个问题,该论文提出了一种基于attentional模块和自适应的归一化层的深度GAN网络,能够使得图像效果大大提升。
论文主要思想
- 利用新的归一化模块和新的归一化函数AdLIN组合成一种新的图像到图像的转换方法
- 运用attentional模块通过基于辅助分类器获得的注意力图来区分源域和目标域,从而帮助模型知道在哪里进行集中转换。
- 自适应的AdaLIN函数可帮助我们的注意力导向模型灵活地控制形状和纹理的变化量,而无需修改模型架构或超参数。
论文网络结构
作者设计的网络结构是基于cycleGAN网络结构,主要就是在此基础上添加了attentional模块,然后归一化层不再使用instance normalization,而是使用layer normalization与instance normalization的加权进行归一化。我们先从基础慢慢来了解这个网络结构
GAN(生成对抗网络)
生成对抗网络(GAN)具有两个网络,生成器网络和鉴别器网络。这两个网络可以是神经网络,从卷积神经网络,递归神经网络到自动编码器。在这种情况下,这两个网络进行竞争,也可以说成博弈,直到这两个网络达到一种平衡,从算法角度上理解,就是经过数千次迭代后,如果达到平衡状态时,生成器网络可以完美生成逼真的虚假图像,并且鉴别器网络可以很好地判断的图像是真实的还是虚假的。换句话说,生成器网络将来自潜在空间的随机噪声矢量(不是来自潜在空间的所有GAN样本)变换为真实数据集的样本。GAN的网络结构为
cycleGAN
cycleGAN的提出主要是为了解决图片转换问题,此前已经有比较成功的网络pix2pix,但是cycleGAN跟pix2pix的不同之处在于
1.pix2pix网络要求提供image pairs,即要提供x和y一对数据,整个思路为:从噪声z,根据条件x,生成和真实图片y相近的y’。条件x和图像y是具有一定关联性的
2.而cycleGAN不要求提供pairs,这时X和Y不要求有什么较好的关联性,可以是毫不相干的两幅图像。
核心思想为:
从X生成Y,再从Y生成回X,如此循环往复,故名为cycleGAN

从图上可以看出,这里有两个生成器网络G,F,两个判别器网络DX,DY,所以Adversarial Loss有两部分:
LGAN(G,DY,X,Y)=Ey∼pdata(y)[logDY(y)]+Ex∼pdata(x)[log(1−DY(G(X))]LGAN(F,DX,Y,X)=Ex∼pdata(x)[logDX(x)]+Ey∼pdata(y)[log(1−DX(F(Y))]
另外还有一个Cycle Consistency Loss,以确保F(G(X))=X,反之亦然。一般采用L1损失函数
Lcyc(G,F)=Ex∼pdata(x)[∣∣F(G(X))−x∣∣1]+Ey∼pdata(y)[∣∣G(F(Y))−y∣∣1]
故总的损失函数为
L(G,F,DX,DY)=LGAN(G,DY,X,Y)+LGAN(F,DX,Y,X)+λLcyc(G,F)
此外,值得注意的是,作者在代码里还添加了一个identity loss。具体来说,就是本来我要从X经过G生成fake,但如果我把Y输入进G呢?它还是应该生成fake,我们可以称为fake2;也就是说,本来生成器G是用来生成Y这种风格的图像的,如果输入本身就是Y,那么就更应该生成Y这个图像了,这就是要让这个生成器G能够做到identity mapping,所以可以计算fake2和输入Y的L1-loss,称之为identity-loss;同样,identity loss也有两部分,分别为生成器G和F
论文网络结构
我们先来看下论文中的网络结构图

生成器
设x∈{Xs,Xt}表示来自源域和目标域的样本。我们的翻译模型Gs→t包含一个编码器Es,一个解码器Gt和一个辅助分类器ηs,其中ηs(x)表示x来自Xs的概率。令Esk(x)为编码器的第k个**图,而Eskij(x)为在(i,j)处的值。训练了辅助分类器时,以使用全局平均池和全局最大池来学习源域第k个特征图的权重wsk,即ηs(x)=σ(∑kwsk∑ijEskij(x))。通过利用wsk,我们可以计算一组领域特定的attentional特征图as(x)=ws∗Es(x)={wsk∗Esk(x)∣1≤k≤n},其中n是已编码特征图的数量。然后,我们的转换模型Gs→t等于Gt(as(x))。然后,我们为残差块配备AdaLIN,其参数γ和β为完全连接的图层从attentional图中动态计算得出。
AdaLIN(a,γ,β)=γ⋅(ρ⋅aI^+(1−ρ)⋅aL^)+βaI^=σI2+ϵa−μI,aL^=σL2+ϵa−μLρ←clip[0,1](ρ−τΔρ)
其中μI,μL和σI,σL分别是通道,层的均值和标准偏差,其中γ和β是由全连接层生成的参数,τ是学习率,而Δρ表示
由优化器确定的参数更新向量(例如梯度)。 作者通过在参数更新步骤中施加边界,即可将ρ的值限制在[0,1]的范围内。生成器会调整该值,在归一化时,当instance normalization更重要时使ρ的值接近1,而在LN很重要时使ρ的值接近0。ρ的值在解码器的残差块中初始化为1,在解码器的上采样块中初始化为0。
判别器
令x∈{Xt,Gs→t(Xs)}表示来自目标域和翻译后的源域的样本。与其他转换模型相似,鉴别器Dt是多尺度模型,由编码器EDt,分类器CDt和辅助分类器ηDt组成。 与其他转换模型不同,ηDt(x)和Dt(x)都经过训练以区分x是来自Xt还是Gs→t(Xs)。 给定样本x,Dt(x)利用attentional特征图aDt(x)=wDt∗EDt(x),使用编码特征图ED上的
wDt,由ηDt(x)训练的。然后,我们的鉴别器Dt(x)等于CDt(aDt(x))。
损失函数
该论文的模型包括四个损失函数,并且使用最小二乘GAN来稳定训练
Adversarial loss
Llsgans→t=Ex∼Xt[(Dt(x))2]+Ex∼Xs[(1−Dt(Gs→t(x)))2]
Cycle loss
Lcycles→t=Ex∼Xs[∣x−Gs→t(Gs→t(x))∣1]
Identity loss
Lidentitys→t=Ex∼Xt[∣x−Gs→t(x)∣1]
CAM loss
Lcams→t=−Ex∼Xs[log(ηs(x))]−Ex∼Xt[log(1−ηs(x))]LcamDt=Ex∼Xt[(ηDt(x))2]+Ex∼Xs[(1−ηDt(Gs→t(x)))2]
Full objective
Gs→t,Gt→s,ηs,ηtminDs,Dt,ηDs,ηDtmaxλ1Llsgan+λ2Lcycle+λ3Lidentity+λ4Lcam
其中λ1=1,λ2=10,λ3=10,λ4=1000。需要注意的是Llsgan=Llsgans→t+Llsgant→s,其他的损失也是一样计算。
论文代码
原作者的pytorch代码
https://github.com/znxlwm/UGATIT-pytorch
paddle 复现论文代码
后面,我会根据pytorch代码,用百度的paddle框架将这篇文章的代码复现,尽情期待。