当前位置:   article > 正文

【深度学习】图像风格混合——StyleGAN2原理解析

【深度学习】图像风格混合——StyleGAN2原理解析

1、前言

上一篇文章,我们详细讲解了StyleGAN的原理。这篇文章,我们就来讲解一下StyleGAN2,也就是StyleGAN的改进版。

原论文:Analyzing and Improving the Image Quality of StyleGAN

参考代码:①Pytorch版本,非官方

②StyleGan 2 (labml.ai)

​ PS:推荐看代码②,里面对每行都进行了注释。

视频:【图像风格混合——StyleGAN2原理解析-哔哩哔哩】

2、StyleGAN存在的问题

在StyleGAN中,大多数的生成的图像容易产生一个类似水滴状的伪影,并且这些伪影在64 x 64 后就便存在在特征图中

在这里插入图片描述

3、StyleGAN2的改进点

3.1、模型图改进

针对上面的问题,作者对模型进行了修改,具体情况如下图

作者经过实验发现,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=siwi,j,k
w 、 w ′ w、w' ww分别表示原始的参数跟缩放后的参数, 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,kwi,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+。

3.2、损失函数改进

3.2.1、Lazy regularization(惰性正则化)

在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γExpdata[(∣∣xD(x)21)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执行一次正则化项即可,这样可以大大降低计算成本和总内存的使用。

3.2.2、Path length regularization(路径长度正则化)

**论文原话翻译:**我们鼓励固定大小的步长

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/424933
推荐阅读
相关标签