趁着暑假还有足够多的时间,参加了百度飞桨的论文复现营,10篇论文之中选择了这篇论文。
论文题目:U-GAT-IT: Unsupervised Generative Attentional Networks with Adaptive Layer-Instance Normalization for Image-to-Image Translation
论文链接
不得不说,有机会体验8卡的V100有点小期待,百度这次挺大气
花时间读了一下这篇论文,讲述一下其中的创新点和一些自己的理解
说实在之前没有接触过cycle gan有点看不懂这个架构怎么训练,接下来应该会把这个图换成自己画的
G s → t G_{s\rightarrow t} Gs→t由一个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)=ws∗Es(x)表示加权之后的特征图
具体的操作如上图所示
将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} Gs→t就变成了 G t ( a s ( x ) ) G_t(a_s(x)) Gt(as(x))
最近看了一下 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,Gs→t(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归一化操作即可
然后就是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
然后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] Lgans→t=Ex∼Xt[(Dt(x))2]+Ex∼Xs[(1−Dt(Gs→t(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}] Lcycles→t=Ex∼Xs[∣x−Gt→s(Gs→t(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}] Lidentitys→t=Ex∼Xt[∣x−Gs→t(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)] Lcams→t=Ex∼Xs[log(ηs(x))+Ex∼Xt[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=Ex∼Xt[(ηDt(x))2]+Ex∼Xs[(1−ηDt(Gs→t(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} Gs→t和 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