[论文复现]Unsupervised Generative Attentional Networks with Adaptive Layer-Instance Normalizatiton

前言

趁着暑假还有足够多的时间,参加了百度飞桨的论文复现营,10篇论文之中选择了这篇论文。

论文题目:U-GAT-IT: Unsupervised Generative Attentional Networks with Adaptive Layer-Instance Normalization for Image-to-Image Translation

论文链接

不得不说,有机会体验8卡的V100有点小期待,百度这次挺大气

花时间读了一下这篇论文,讲述一下其中的创新点和一些自己的理解

模型结构

网络结构

[论文复现]Unsupervised Generative Attentional Networks with Adaptive Layer-Instance Normalizatiton_第1张图片
说实在之前没有接触过cycle gan有点看不懂这个架构怎么训练,接下来应该会把这个图换成自己画的

生成器( G s → t , G t → s G_{s\rightarrow t},G_{t\rightarrow s} Gst,Gts)

G s → t G_{s\rightarrow t} Gst由一个encoder E s E_s Es,一个decoder G t G_t Gt组成,同时有一个辅助分类器 η s \eta_s ηs(也就是attention机制)

E s k ( x ) E_s^k(x) Esk(x)表示第k张经过编码之后的特征图, E s k i j ( x ) E_s^{k_{ij}}(x) Eskij(x)表示在 i , j i,j i,j位置的值, w s w_s ws表示每个特征图的加权, a s ( x ) = w s ∗ E s ( x ) a_s(x) = w_s * E_s(x) as(x)=wsEs(x)表示加权之后的特征图

[论文复现]Unsupervised Generative Attentional Networks with Adaptive Layer-Instance Normalizatiton_第2张图片

具体的操作如上图所示

将encoder得到的feature map 分别通过全局最大池化和全局平均池化,得到两个 1 × 1 × C 1\times 1 \times C 1×1×C的向量,然后将向量铺平,与一个 1 × 1 1\times1 1×1向量的组成一个全连接层,这个全连接层不使用偏置

然后全连接层的权重就是相对应特征图的权重,与对应通道的特征图加权。由全局最大池化和全局平局池化分别得到两张特征图,将之连接起来,通过
一个 1 × 1 × C 1 \times 1 \times C 1×1×C的卷积之后得到attention map

通过上面这一系列操作之后,我们的 G s → t G_{s\rightarrow t} Gst就变成了 G t ( a s ( x ) ) G_t(a_s(x)) Gt(as(x))

判别器 ( D s , D t ) (D_s,D_t) (Ds,Dt)

最近看了一下 G A N GAN GAN的几种网络,发现判别器的结构通常和生成器是对称的,猜想:G模型对称说明学习能力相近,只有学习能力相近的网络才能把GAN训练起来

D t D_t Dt为例,输入有 X t , G s → t ( X s ) X_t,G_s\rightarrow t(X_s) Xt,Gst(Xs)两种, D t D_t Dt由一个encoder E D t E_{D_t} EDt和一个Classifier C D t C_{D_t} CDt 和一个辅助分类器 η D t \eta D_t ηDt组成

判别器的网络结构和生成器高度对称。

如同生成器一致,用辅助分类器将encoder之后的特征图添加attention机制和AdaLIN归一化操作即可

AdaLIN

然后就是Adaptivequad Layer-Instance Normalization的公式

Instance Normalization: a I ^ = a − μ I σ I 2 + ϵ \hat{a_I} = \frac {a-\mu_I}{\sqrt{\sigma_I^2 + \epsilon}} aI^=σI2+ϵ aμI

IN针对的为一个通道上大小为 H × W H\times W H×W的特征图

Layer Normalization: a L ^ = a − μ L σ L 2 + ϵ \hat{a_L} = \frac{a-\mu_L}{\sqrt{\sigma^2_L + \epsilon}} aL^=σL2+ϵ aμL

LN针对的为 H × W H\times W H×W位置上相同的通道数 C C C

[论文复现]Unsupervised Generative Attentional Networks with Adaptive Layer-Instance Normalizatiton_第3张图片

然后AdaLIN把两者进行了合并: A d a L I N ( α , γ , β ) = γ ⋅ ( ρ ⋅ a I ^ + ( 1 − ρ ) ⋅ a L ^ ) + β AdaLIN(\alpha,\gamma,\beta) = \gamma \cdot(\rho\cdot\hat{a_I}+(1-\rho)\cdot\hat{a_L})+\beta AdaLIN(α,γ,β)=γ(ρaI^+(1ρ)aL^)+β

其中 γ , β \gamma,\beta γ,β从attention map 经过各自的一个全连接层计算而来

ρ ← c l i p [ 0 , 1 ] ( ρ − τ Δ ρ ) \rho \leftarrow clip_{[0,1]}(\rho-\tau\Delta\rho) ρclip[0,1](ρτΔρ)

其中 ρ \rho ρ的值在残差块之中被初始化为1,在上采样块中被初始化为0

AdaIN的前提是通道之间不相关,所以在每个通道各自做归一化,意味着被转化后的特征有更多的内容信息

而LN则没有这个假设,但有的时候LN不能很好的保持原始域的内容结构,因为LN只考虑的是全局统计信息

(这些解释我也不清楚为什么是这样,估计是实验的出来的,感觉像是最原版的风格迁移)

也就是说LN考虑的更多的是整体的风格,而IN考虑的是图片中的具体内容

损失函数

损失函数一共有四个(感觉可以换成smooth L1):

Adversarial loss: L g a n s → t = E x ∼ X t [ ( D t ( x ) ) 2 ] + E x ∼ X s [ ( 1 − D t ( G s → t ( x ) ) ) 2 ] L_{gan}^{s\rightarrow t} = E_{x\sim X_t}[(D_t(x))^2] + E_{x\sim X_s}[(1-D_t(G_{s\rightarrow t}(x)))^2] Lganst=ExXt[(Dt(x))2]+ExXs[(1Dt(Gst(x)))2]

把经典的log函数换掉了,用MSE代替,原因是log函数在两个分布没有交集的时候,不会更新,梯度为0

Cycle loss: L c y c l e s → t = E x ∼ X s [ ∣ x − G t → s ( G s → t ( x ) ) ∣ 1 ] L_{cycle}^{s \rightarrow t} = E_{x \sim X_{s}}[\left|x-G_{t \rightarrow s}\left(G_{s \rightarrow t}(x)\right)\right|_{1}] Lcyclest=ExXs[xGts(Gst(x))1]

Identity Loss: L i d e n t i t y s → t = E x ∼ X t [ ∣ x − G s → t ( x ) ∣ 1 ] L_{i d e n t i t y}^{s \rightarrow t}=E_{x \sim X_{t}}[\left|x-G_{s \rightarrow t}(x)\right|_{1}] Lidentityst=ExXt[xGst(x)1]

目的是为了保证颜色的分布不变

CAM loss:

L cam s → t = E x ∼ X s [ log ⁡ ( η s ( x ) ) + E x ∼ X t [ log ⁡ ( 1 − η s ( x ) ] L_{\text {cam}}^{s \rightarrow t}= E_{x \sim X_{s}}[\log \left(\eta_{s}(x)\right)+E_{x \sim X_{t}}[\log (1-\eta_{s}(x)] Lcamst=ExXs[log(ηs(x))+ExXt[log(1ηs(x)]

L c a m D t = E x ∼ X t [ ( η D t ( x ) ) 2 ] + E x ∼ X s [ ( 1 − η D t ( G s → t ( x ) ) ) 2 L_{c a m}^{D_{t}} =E_{x \sim X_{t}}[(\eta_{D_{t}}(x))^{2}]+E_{x \sim X_{s}}[(1-\eta_{D_{t}}(G_{s \rightarrow t}(x)))^{2} LcamDt=ExXt[(ηDt(x))2]+ExXs[(1ηDt(Gst(x)))2

η s \eta_s ηs η D t \eta_{D_{t}} ηDt,当给定 x ∈ { X s , X t } x\in \{X_s,X_t\} x{ Xs,Xt}时,让 G s → t G_{s\rightarrow t} Gst D t D_t Dt知道哪里他们需要去提升或者最大的不同在现在的两个域中

将上面的四个损失函数加权得到最终的损失函数,加权依次为 1 , , 10 , 10 , 1000 1,,10,10,1000 1,,10,10,1000

创新点

创新点总体来说有两点:

一个是为GAN引入了Attention机制(这样才fashion)

第二个是提出了一种新的归一化手段AdaLIN,类似风格迁移之中的风格损失和内容损失

一点小启发:

对于网络之中的一些超参数,似乎都可以用通过引入前面的特征图,然后通过一系列的类似全连接/卷积等操作变为一个常数

这样这个超参数就变为根据能够学习到的内容,能够适应更加复杂的结构

典型的例子如:

f r e l u ( m a x ( T ( x ) , x ) ) frelu(max(T(x),x)) frelu(max(T(x),x)),其中的 T ( x ) T(x) T(x)本质上也就是一种attention机制

具体的网络架构还需要看原作者的代码才能够清楚(之前没有写过cycle gan)

课程链接

百度飞桨的论文复现营

https://aistudio.baidu.com/aistudio/education/group/info/1340

你可能感兴趣的:(GAN,人工智能,深度学习)