赞
踩
上一篇文章,我们详细讲解了StyleGAN的原理。这篇文章,我们就来讲解一下StyleGAN2,也就是StyleGAN的改进版。
原论文:Analyzing and Improving the Image Quality of StyleGAN
参考代码:①Pytorch版本,非官方
PS:推荐看代码②,里面对每行都进行了注释。
视频:【图像风格混合——StyleGAN2原理解析-哔哩哔哩】
在StyleGAN中,大多数的生成的图像容易产生一个类似水滴状的伪影,并且这些伪影在64 x 64 后就便存在在特征图中
针对上面的问题,作者对模型进行了修改,具体情况如下图
作者经过实验发现,AdaIN的归一化操作,是造成水滴伪影出现了根本原因,于是,作者把AdaIN层里面的归一化去掉。又经过实验,发现,将噪声B和偏置项b移动出style模块之外,取得的效果更好。经过此操作后,作者发现归一化和A映射的时候,只需要标准差就可以了(舍弃均值),如下图的图(c)
图(a)是传统StyleGAN的生成网络;图(b)是StyleGAN生成网络的细节拆分;图(c)是StyleGAN2的生成网络;
对图(c),首先随机生成一个常数特征图c,然后把它与w latent Code映射成的A进行Mod std操作。由于仅仅是对常数c进行缩放操作,所以可以把这个缩放直接写入到下一个层(Conv 3 x 3),也就是直接对Conv这参数进行缩放
w
i
,
j
,
k
′
=
s
i
∗
w
i
,
j
,
k
w'_{i,j,k} = s_i*w_{i,j,k}
wi,j,k′=si∗wi,j,k
w
、
w
′
w、w'
w、w′分别表示原始的参数跟缩放后的参数,
s
s
s表示从w latent Code映射过来的缩放权重,
i
i
i表示第几张特征图,
j
j
j表示输出特征图,
k
k
k代表卷积核
同样的,在下面的实例归一化中,作者去掉了减去均值的操作,只对输出值进行缩放而已,所以同样可以写入到卷积层的参数中
w
i
,
j
,
k
′
′
=
w
i
,
j
,
k
′
∑
i
,
k
w
′
i
,
j
,
k
2
+
ϵ
w''_{i,j,k}=\frac{w'_{i,j,k}}{\sqrt{\sum\limits_{i,k}{{w'}^2_{i,j,k}}+\epsilon}}
wi,j,k′′=i,k∑w′i,j,k2+ϵ
wi,j,k′
其中,
ϵ
\epsilon
ϵ一个很小的常数,防止分母为0
于是乎,StyleGAN2的模型图就从图(c)简化成了图(d)
除此之外,在StyleGAN中,每个分辨率都注入两次风格信息w,这些w都是一样的。在StyleGAN2中,作者提出生成不同的w,每次都注入不同的w。记为w+
所以对于StyleGAN中,w latent Code ∈ R [ b a t c h , , 512 ] \in R^{[batch,,512]} ∈R[batch,,512],w+ latent Code ∈ R [ b a t c h , 18 , 512 ] \in R^{[batch,18,512]} ∈R[batch,18,512],因为分辨率从4x4开始上采样8次,每个分辨率注入两次风格信息,再加上在4 x 4 也要注入两次,所以得到 18 x 512 维度的w+。
在StyleGAN中,判别网络,除了正常的判别损失,还加上了一个正则化项,其公式如下
R
1
=
γ
2
E
x
∼
p
d
a
t
a
[
(
∣
∣
∇
x
D
(
x
)
∣
∣
2
−
1
)
2
]
R_1=\frac{\gamma}{2}\mathbb{E}_{x \sim p_{data}}\left[\left(||\nabla_xD(x)||_{2} -1\right)^2\right]
R1=2γEx∼pdata[(∣∣∇xD(x)∣∣2−1)2]
其中,
γ
\gamma
γ是一个自己设定的超参数,
P
d
a
t
a
P_{data}
Pdata表示真实数据的分布,
∇
x
D
(
x
)
\nabla_xD(x)
∇xD(x)表示对
D
(
x
)
D(x)
D(x)关于
x
x
x求梯度
这个正则化项的做法,是为了防止梯度消失或者爆炸而提出的,将其梯度限定在1。
而在StyleGAN2中,作者发现,这个正则化项的计算频次要低于主要的损失函数,经过实验,每16个minbatchs执行一次正则化项即可,这样可以大大降低计算成本和总内存的使用。
**论文原话翻译:**我们鼓励固定大小的步长
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。