StyleGAN是2018年的一篇文章,目前已经被TPAMI收录,该方法能够生成高质量的图像数据并且做到了高层特征可控,v1的主要工作在于设计了一个style-based生成器,其中包括了styles mixing的策略,图像随机特征的生成方式以及自适应的实例正则化的设计。
StyleGan v1的主要工作,是对将有效的信息latent code表示直接灌给输入层的传统生成器的重新设计,如下图所示:
理解style-based生成器的设计需要从以下几个要点出发:
1 非线性映射层
不同于直接将latent code灌给输入层,style-based生成器首先将latent code通过一个8层的全连接层进行非线性映射 f : Z → W f:Z\rightarrow W f:Z→W,其中 z z z和 w w w具有相同的维数( 512 × 1 512\times 1 512×1)。这个映射网络将输入向量编码为中间向量,中间向量之后传给生成网络(18层)得到18个控制向量(每两层一个style对应两个控制变量),使得该控制向量的不同元素能够控制不同的视觉特征。映射网络的作用在于:后续得到的18个控制向量之间会存在特征纠缠的现象(比如说我们想调节 8 × 8 8\times 8 8×8分辨率上的控制向量(假设它能控制人脸生成的角度),但是我们会发现 32 × 32 32 \times 32 32×32分辨率上的控制内容(譬如肤色)也被改变了),映射网络可以为输入向量的特征解缠提供一条学习的通路。
2 自适应实例归一化-AdaIN
在将
w
w
w输入给合成网络之前,首先通过一个可学习的仿射变换
A
A
A(本质上是一个全连接层)将特征解缠后的中间向量
w
w
w变换为样式控制向量
y
=
(
y
s
,
y
b
)
y=(y_s,y_b)
y=(ys,yb),也就是缩放和偏移因子。这两个因子会与标准化之后的卷积输出做一个加权求和,就完成了一次
w
w
w影响原始输出
x
i
x_i
xi的过程。而这种影响方式能够实现样式控制,主要是因为它让
w
w
w(即变换后的
y
(
s
,
i
)
y_{(s,i)}
y(s,i)与
y
(
b
,
i
)
y_{(b,i)}
y(b,i))影响图片的全局信息,而保留生成人脸的关键信息由上采样层和卷积层来决定,因此
w
w
w只能够影响到图片的样式信息。
另外,上面提到生成器由18层网络组成,对应处理分辨率
4
2
−
102
4
2
4^2-1024^2
42−10242,也即两层一个阶段共9个生成阶段组成,而每个阶段都会受两个控制向量
y
=
(
y
s
,
y
b
)
y=(y_s,y_b)
y=(ys,yb)对其施加影响,其中一个控制向量在Upsample之后对其影响一次,另外一个控制向量在Convolution之后对其影响一次,影响的方式都采用AdaIN(自适应实例归一化)。各个层控制变量对生成图片的影响如下所示:
生成的图片,分别选取来自B的不同分辨率的style控制变量(其余选取A中的styles),可以看到选取分辨率
4
2
−
8
2
4^2-8^2
42−82的styles控制变量,影响了生成图片的姿态,发型,眼镜;选取分辨率
1
6
2
−
3
2
2
16^2-32^2
162−322的styles控制变量,影响了生成图片的眼睛开闭等;选取分辨率
6
4
2
−
102
4
2
64^2-1024^2
642−10242的styles控制变量,影响的是大致上的颜色。
其实最开始接触这个模型,是想用父母的人脸照片,来进行二者孩子长相的预测,控制选取分辨率较小的宝宝脸图像的styles与一方融合生成中间结果,再重复一步得到预测的宝宝照片,类似于 https://github.com/tg-bomze/BabyGAN,但是生成的图像感觉五官特征与父母照片特征还是不太明显。
3 常量输入
StyleGAN生成图像的特征是由 w w w和AdaIN控制的,那么生成器的初始输入可以被忽略,并用常量值替代。这样做的理由是,首先可以降低由于初始输入取值不当而生成出一些不正常的照片的概率(这在GANs中非常常见),另一个好处是它有助于减少特征纠缠,对于网络在只使用 w w w不依赖于纠缠输入向量的情况下更容易学习。
4 高斯噪音
图像中往往存在一些随机的区域,比如头发的纹理,人脸的雀斑等,为了生成的图像更加逼真,需要将这些小特征插入GAN图像,常用方法是在输入向量中添加随机噪声。为了控制噪声仅影响图片样式上细微的变化,StyleGAN采用类似于AdaIN机制的方式添加噪声,即在AdaIN模块之前向每个通道添加一个缩放过的噪声,并稍微改变其操作的分辨率级别特征的视觉表达方式。加入噪声后的生成人脸往往更加逼真与多样。【a是每一层都添加噪音,b是没有噪音,c是指在精细的 6 4 2 − 102 4 2 64^2-1024^2 642−10242添加噪音,d是只在 4 2 − 3 2 2 4^2-32^2 42−322层添加噪音。可以看到小分辨率层上的噪音使得头发波浪更大,大分辨率层上的噪音倾向于产生更细的卷和纹理,也产生了更细节的背景和更有纹理的皮肤】
在生成器结构中,高斯噪音通过一个权重
B
B
B加到了每层的像素上,紧接着就被AdaIN给归一化了,只能影响很小一部分,而在人脸生成这个task上,这一部分表现为头发、胡须、雀斑等的分布。(而经过A之后的style的影响更多是全局的)
以上~
欢迎关注 深度学习与数学 [获取免费的大数据、AI等相关的学习资源、经典和最新的深度学习相关的论文研读,算法和其他互联网技能的学习,概率论、线性代数等高等数学知识的回顾]