2 研究背景

NVIDIA在2017年提出的ProGAN解决了生成高分辨率图像(如1024×1024)的问题。ProGAN的关键创新之处在于渐进式训练——从训练分辨率非常低的图像(如4×4)的生成器和判别器开始,每次都增加一个更高的分辨率层。

存在的问题:与多数GAN一样,ProGAN控制生成图像的特定特征的能力非常有限。这些属性相互纠缠,即使略微调整输入,会同时影响生成图像的多个属性。所以如何将ProGAN改为条件生成模型,或者增强其微调单个属性的能力,是一个可以研究的方向。

解决方法:StyleGAN是NVIDIA继ProGAN之后提出的新的生成网络,其主要通过分别修改每一层级的输入,在不影响其他层级的情况下,来控制该层级所表示的视觉特征。这些特征可以是粗的特征(如姿势、脸型等),也可以是一些细节特征(如瞳色、发色等)。

3 本文的工作及贡献

①借鉴风格迁移,提出基于样式的生成器(style-based generator)。

  • 实现了无监督地分离高级属性(人脸姿势、身份)和随机变化(例如雀斑,头发)
  • 实现对生成图像中特定尺度的属性的控制。
  • 生成器从一个可学习的常量输入开始,隐码在每个卷积层调整图像的“样式”,从而直接控制不同尺度下图像特征的强度。

②实现了对隐空间(latent space)较好的解耦

  • 生成器将输入的隐码z嵌入一个中间的隐空间。因为输入的隐空间Z必须服从训练数据的概率密度,这在一定程度上导致了不可避免的纠缠,而嵌入的中间的隐空间W不受这个限制,因此可以被解耦。

③提出了两个新的量化隐空间解耦程度的方法

  • 感知路径长度和线性可分性。与传统的生成器体系结构相比,新的生成器允许更线性、更解耦地表示不同的变化因素。

④提出了新的高质量的人脸数据集(FFHQ,7万张1024×1024的人脸图片)

4 模型和方法

4.1 基于样式的生成器结构

生成器结构

基于样式的生成器b)有18层,每个分辨率有两个卷积层(4,8,16...1024)。

  • ①移除了传统的输入(remove traditional input)
  • ②映射网络(Mapping Network)
  • ③样式模块(style modules,AdaIN,自适应实例归一化)
  • ④随机变化(Stohastic variation,通过加入噪声为生成器生成随机细节)

移除传统的输入

传统的生成器a)使用latent code(随机输入)作为生成器的初始输入;StyleGAN抛弃了这种设计,将一个可学习的常数作为生成器的初始输入。一个假设是它减少了特征纠缠——对于网络来说,只使用w而不依赖于纠缠的输入向量更容易学习。

映射网络(Mapping Network)

映射网络由8个全连接层组成,其输出w与输入z大小相同(512×1)。映射网络的目标是将输入向量编码为中间向量,中间向量W的不同元素控制不同的视觉特征

使用输入向量z控制视觉特征的能力是有限的,它必须遵循训练数据的概率密度。例如,如果黑色头发的人的图像在数据集中更常见,那么更多的输入值将映射到该特性。因此该模型无法将输入向量z的一部分(向量中的元素)映射到特征,这种现象称为特征纠缠。(如果特征发生了纠缠,改变一个特征,另一个被纠缠的也会发生改变,因此不能做到具体控制单一特征的目的。

但是通过映射网络,该模型可以生成一个不需要跟随训练数据分布的向量w,并且可以减少特征之间的相关性(解耦,特征分离)。

样式模块(AdaIN)

W通过每个卷积层的AdaIN输入到生成器的每一层中。图中的A代表一个可学习的仿射变换。

计算方法:

  • ①首先每个特征图xi(feature map)独立进行归一化  。特征图中的每个值减去该特征图的均值然后除以方差
  • ②一个可学习的仿射变换A(全连接层)将w转化为style中AdaIN的平移和缩放因子y =(ys,i,yb,i),
  • ③然后对每个特征图分别使用style中学习到的的平移和缩放因子进行尺度和平移变换。

使用style来形容y,是因为类似结构已在风格迁移中使用(batch Normalization也有类似的结构),但是不同之处在于这里的缩放和平移因子是用隐码w计算得到,而不是用一个图像计算得到的。

随机变化(通过引入噪声为生成器生成随机细节)

人的脸有很多可以看作是随机的,比如头发的精确位置,使图像更真实,增加了输出的多样性。将这些小特征插入GAN图像的常用方法是向输入向量添加随机噪声,然后通过输入层输入生成器。然而,在很多情况下,控制噪声效果是很棘手的,因为特征纠缠现象,略微改变噪声会导致图像的其他特征受到影响

该架构通过在合成网络的每个分辨率级上增加尺度化的噪声来回避这些问题。噪声是由高斯噪声组成的单通道图像,将一个噪声图像提供给合成网络的一个特征图。在卷积之后、AdaIN之前将高斯噪声加入生成器网络中。B使用可学习的缩放参数对输入的高斯噪声进行变换,然后将噪声图像广播到所有的特征图中(分别加到每个特征图上,每个特征图对应一个可学习的scale参数)。

4.2 正则化-混合正则化(mixing regularization)

为了进一步鼓励styles的局部化(减小不同层之间样式的相关性),本文对生成器使用混合正则化

方法:对给定比例的训练样本(随机选取)使用样式混合的方式生成图像。在训练过程中,使用两个随机隐码z(latent code)而不是一个,生成图像时,在合成网络中随机选择一个点(某层),从一个隐码切换到另一个隐码(称之为样式混合)。具体来说,通过映射网络运行两个潜码z1、z2,并让对应的w1、w2控制样式,使w1在交点前应用,w2在交点后应用。

这种正则化技术防止网络假设相邻样式是相关的,随机切换确保网络不会学习和依赖于级别之间的相关性。

4.3 两种新的量化隐空间(latent space)耦合度的方法

  • 解耦的目标是使隐空间(latent space)由线性子空间组成,即每个子空间(每个维度)控制一个变异因子(特征)。
  • 但是隐空间Z中的各个因子组合的采样概率需要与训练数据中响应的密度匹配,就会产生纠缠。而中间隐藏空间W不需要根据任何固定分布进行采样;它的采样密度是由可学习的映射网络f(z)得到的,使变化的因素变得更加线性。
  • 本文假设,生成器基于解耦的表示比基于纠缠的表示应该更容易产生真实的图像(若在FID变小的同时,隐空间耦合度变小,则可以得证)。因此,我们期望训练在无监督的情况下(即,当不预先知道变异的因素时)产生较少纠缠的W
  • 最近提出的用于量化解耦的指标需要一个将输入图像映射到隐码的编码器网络。但不适合本文,因为baseline GAN缺乏这样的编码器。
  • 所以本文提出了两种新的量化解耦的方法,它们都不需要编码器,所以对于任何数据集和生成器都是可计算的。
    • 感知路径长度(Perceptual path length)
    • 线性可分性(linear separability)

感知路径长度

为什么这种量化纠缠的方法是可行的?

  • 对隐空间向量进行插值会在图像中产生非线性变化。比如,在所有端点中缺失的特征可能会出现在线性插值路径的中间。这表明隐空间是耦合的,变化因子没有被恰当的分开。所以通过测量当在两个隐空间之间进行插值时图像的剧烈变化程度,可以反映隐空间的纠缠程度(特征分离程度)。

感知路径长度计算,使用10000个样本计算

将两个隐空间之间的插值路径细分为小段,感知总长度定义为每段感知差异的总和。感知路径长度的定义是这个和在无限细的细分下的极限,实际上用一个小的细分 来近似它。隐空间Z中所有可能端点(在路径中的位置)的平均感知路径长度,计算如下

其中t服从0.1均匀分布,slerp表示球面插值操作,这是在归一化的输入隐空间中最合适的插值方式。

G是生成器,d计算得到生成图像之间的感知距离。因为d是二次的,所以除以而不是  来消除对细分粒度的依赖。

  • d的具体计算方式:使用基于感知的成对图像距离,测量连续图像之间的差异(两个VGG16 embeddings之间的差异,利用VGG16提取出图像的特征,在特征层面上计算距离)

计算隐空间W的感知路径长度与z的唯一不同是采用lerp线性插值,因为w向量没有进行归一化

线性可分性(linear separability)

为什么这种量化纠缠的方法是可行的

如果一个隐空间是充分解耦的,应该能够找到与每个变化因子对应的方向向量。我们提出了另一种度量方法来量化这种效果,测量通过线性超平面将隐空间点分割成两个不同的集合的程度,使每个集合对应于图像的特定的二元属性(比如男、女)。

计算方法:

  • 训练40个辅助分类器,分别对40个二元属性进行区分(每个分类器区分一个属性,比如区分女性男性)。分类器与StyleGAN判别器结构相同,使用CelebA-HQ数据集训练得到(保留原始CelebA的40个属性,150000个训练样本),学习率10-3,批次大小8,Adam优化器。
  • 使用生成器生成200,000个图像,并使用辅助分类器进行分类,根据分类器的置信度对样本进行排序,去掉置信度最低的一半,得到100,000个已知类别的隐空间向量(latent code)
  • ③对于每个属性,拟合一个线性SVM来预测标签-基于传统的隐空间点或基于样式的隐空间点w-并且根据这个超平面对这些隐空间点(512维,10000个点)进行分类
  • ④用条件熵H(Y |X)度量超平面将点划分为正确类别的能力,X是SVM预测的类别,Y是预先训练好的辅助分类器确定的类(作为真实类别);因此,根据SVM确定样本在超平面的哪一边,条件熵告诉我们需要多少额外的信息来确定样本的真实类别。直觉上,如果隐空间中的变化因子是耦合的(非线性的),那么用超平面来分离样本点将会更加困难(需要更多的额外信息),产生高的条件熵。较低的值表示易于分离(可分性好),因此解耦程度更大

可分性计算公式    ,其中i列举了40个属性。取幂是为了将值从对数域变换为线性域,便于进行比较

基于样式的生成器生成的图像

显示了使用生成器F从FFHQ数据集中生成的图片平均的质量很高,帽子、眼睛等配饰也成功合成了。图中生成人脸时,对中间隐空间W采取了截断trick(0.7),该trick只在网络的低分辨率(4-32)使用(该trick只在这里使用,在计算FID时没有使用过),生成的图片的分辨率为1024。

训练细节和超参数

  • StyleGAN使用8个Tesla V100 gpu对CelebA-HQ和FFHQ数据集进行为期一周的训练。在TensorFlow中实现。
  • B-F在两个数据集使用不同的损失函数
    • CELEBA-HQ数据集使用WGAN-GP;
    • FFHQ数据集,非线性饱和损失,WGAN-GP+R1正则化(γ=10),使用该损失的FID值比WGAN-GP减小的时间更长,所以使用更长的训练时间
  • 基于样式的生成器使用leak ReLU,α=0.2,所有卷积层使用相同学习率;特征图(卷积核)数量与ProGAN相同;
  • 映射网络的学习率每两层降低一次λ = 0.01λ(映射网络深度变大时,训练不稳定)。
  • 权重使用高斯(0,1)随机初始化;除了样式计算ys的偏置初始化1,其余偏置和噪声的尺度因子初始化为0.
  • 没有使用batch normalization、dropout

5.2 随机变化(Stochastic variation)效果

b使用相同latent code,不同噪声作为输入;整体特征是相似的,比如面部等,细节比如头发的形状有较大的不同;c是100个不同的随机噪声输入产生的图像的标准差,较亮部分是标准差较大的部分(受不同的噪声输入影响较大的部分,头发等部分),而面部姿势等高级特征不受随机变化的影响。显示了在相同底层图像输入不同的噪声实现的随机变化。噪声只影响随机方面,而保留了整体结构和身份、面部等高级特征。

上图说明了将随机变化应用于不同的层的效果(将噪声输入不同层)。a噪声加入了所有层;b没有噪声;c在精细层(fine layers,64-1024)加入噪声;d在粗糙层(coarse layer,4-32)加入噪声。粗糙的噪声导致头发大规模卷曲,背景特征更大,而细小的噪声则使头发卷曲更细,背景细节更细,皮肤毛孔更细。

5.3 混合正则化(样式混合)

  • 用FFHQ数据集训练网络,对不同比例的训练样本使用混合正则化,得到FID值。
  • 0-100%表示训练过程中混合正则化应用的样本的比例。
  • 在训练过程中,通过随机化1-4个latent code和它们之间的交点对网络进行压力测试。
  • 使用相同数目的隐码latent code,随着混合正则化应用的样本的比例的增加(同一列从上到下),得到的图像的质量得到了提高,FID值降低

5.4 不同层级样式对图像特征的控制

上图,可视化生成器中样式的效果—(使用训练好的生成器)在生成图像时用一个隐码(source)产生的样式覆盖另一个隐码(destination)产生的样式的子集。显示在3个不同的尺度下混合两个隐码得到的合成图像。结果表明样式的子集控制了图像的高级属性,不同尺度的样式控制了图像不同的高级属性的生成。

  • 粗糙分辨率(4-8)用source的样式覆盖目标的的样式,产生的图像的高级特征(姿势、头发样式、脸的形状和眼镜)从source图像中复制,而目标图像的颜色(眼睛、头发、光线)和更精细的面部特征被保留下来。说明该尺度的样式控制了生成图像的高级特征
  • 中间层(16-32)用source的样式覆盖目标的样式,合成的图像将会从source中继承较小尺度的面部特征(头发的样式、眼睛的闭合),而目标图像的姿势、脸的形状、眼镜等被保留。说明该尺度的样式控制了生成图像的较小尺度的面部特征
  • 精细分辨率(642 - 1024)用source的样式覆盖目标的样式,主要复制了source中的颜色。说明该尺度的样式控制了生成图像的更低尺度的特征-颜色

5.5 对隐空间的解耦效果(特征分离)

表3

表4

  • 表3说明对于噪声输入的基于样式的生成器E/F(使用FFHQ数据集训练好的),感知路径长度比传统生成器短,这表明中间隐空间W比隐空间Z更线性,即W是Z的解耦映射(一定程度上)
  • 表3和表4显示,中间隐空间W始终比输入隐空间Z更易于分离(Separability更小),这表明纠缠的表示更少。
  • 此外,表4显示增加映射网络的深度可以同时提高W生成图像的质量(FID)和可分性,这与综合网络喜欢解耦输入表示的假设(可分性提高,生成图像质量提高)是一致的。

6 结论

  • 基于样式的生成器,能生成更高质量的高分辨率图像。
  • 实现了无监督地分离高级属性(人脸姿势、身份)和随机变化(例如雀斑,头发),实现对生成图像中特定尺度的属性的控制。通过style控制高级属性,通过不同层的style实现对不同尺度的特征的控制;通过噪声控制随机变化
  • 降低了隐空间的耦合性。通过映射网络生成中间隐空间(intermediate latent space),中间隐空间降低了输入隐空间的纠缠
  • 提出两种新的量化隐空间耦合性的指标-感知路径长度和线性可分性
  • 对高级属性与随机效应的分离以及中间隐空间的线性的研究,提高了对GAN合成的理解和可控性

原文:StyleGAN-基于样式的生成对抗网络(论文阅读总结) - 知乎

StyleGAN-基于样式的生成对抗网络(论文阅读总结)(精)相关推荐

  1. GAN 生成对抗网络论文阅读路线图

    路线图按照下面四个准则构建而成:  ●  从提纲到细节  ●  从经典到前沿  ●  从通用领域到特定领域  ●  专注于最先进的技术 Generative Adversarial Networks ...

  2. PSGAN——姿态稳健型可感知空间式生成对抗网络论文详细解读与整理

    PSGAN--姿态稳健型可感知空间式生成对抗网络论文详细解读与整理 1.摘要 2.什么是PSGAN? 3.主要贡献 4.整体模块 5.目标函数 6.实验结果--部分化妆和插值化妆 7.定量比较 8.参 ...

  3. 学习笔记:Controllable Artistic Text Style Transfer via Shape-Matching GAN 基于形状匹配生成对抗网络的可控艺术文本风格迁移

    [ICCV-2019] Controllable Artistic Text Style Transfer via Shape-Matching GAN 基于形状匹配生成对抗网络的可控艺术文本风格迁移 ...

  4. 基于能量的生成对抗网络

    我们在这里介绍「基于能量的生成对抗网络(Energy-based Generative Adversarial Network,简称 EBGAN)」模型,该网络将 GAN 框架中的鉴别器(discri ...

  5. 基于Keras的生成对抗网络(1)——利用Keras搭建简单GAN生成手写体数字

    目录 0.前言 一.GAN结构 二.函数代码 2.1 生成器Generator 2.2 判别器Discriminator 2.3 train函数 三.结果演示 四.完整代码 五.常见问题汇总 0.前言 ...

  6. 基于PyTorch的生成对抗网络入门(3)——利用PyTorch搭建生成对抗网络(GAN)生成彩色图像超详解

    目录 一.案例描述 二.代码详解 2.1 获取数据 2.2 数据集类 2.3 构建判别器 2.3.1 构造函数 2.3.2 测试判别器 2.4 构建生成器 2.4.1 构造函数 2.4.2 测试生成器 ...

  7. GAN生成对抗网络论文翻译(一)

    给自己一个动力去看英语论文,每天翻译一节,纯属自己翻译,小白一只,如果您能提出建议或者翻译修改,将非常感谢,首先谢谢! How Generative Adversarial Networks and ...

  8. GAN生成对抗网络论文翻译(二)

    英语论文,每天翻译一节(在家自学控制力还是太差),纯属自己翻译,小白一只,如果您能提出建议或者翻译修改,将非常感谢,首先谢谢! 2 Generative Adversarial Networks As ...

  9. CartoonGAN_CVPR_2018为照片卡通化而生的对抗网络论文阅读笔记

    CartoonGAN_CVPR_2018 好了 进入正题 话不多说 快上车 CartoonGAN: Generative Adversarial Networks for Photo Cartooni ...

最新文章

  1. Vue 子父组件通信小问题
  2. Asp.Net_Mvc_IgnoreRoute
  3. Python 实现有道翻译命令行版
  4. Session一致性的解决方案
  5. JAVA开发者大会-Spring Cloud网关分享
  6. gcc-5.4.0 static dwarf2 compile
  7. oracle客户端安装后,oracle客户端安装
  8. 【操作系统复习】进程的状态与转换
  9. C语言程序设计基础之联合
  10. WINDOWS访问虚拟机RedHat搭配的Apache2服务器
  11. Kickstarter 开源其 Android 和 iOS 应用
  12. PyTorch中的梯度微分机制
  13. Linux内核提供了三种不同形式的中断底半部实现机制:软中断、tasklet和工作队列。...
  14. 两个栈实现一个队列(图解),一看就懂
  15. centos7 安装sogou输入法
  16. 三星a5000刷Android原生,三星 A5000中文Recovery刷机教程
  17. 苹果系统无法更新无法连接网络连接服务器,iTunes无法联系iphone软件更新服务器 不可连接解决方法...
  18. 百度热点排行榜 ---JS
  19. 单链表实现增删改查(含头结点)
  20. 5G工业路由器的工厂自动化应用

热门文章

  1. 微服务架构案例(03):数据库选型简介,业务数据规划设计
  2. 快速构建网站或移动端页面:关于Bootstrap的学习笔记
  3. WinDbg 命令三部曲:(二)WinDbg SOS 扩展命令手
  4. Mac022-brew安装tool
  5. 基于lfslivecd-x86-6.3-r2145安装vnc和qemu
  6. Java多线程——重入锁ReentrantLock源码阅读
  7. 27、简述redis的有哪几种持久化策略及比较?
  8. sed的高级命令和软件包管理器rpm
  9. 《Raspberry Pi用户指南》——2.3 Debian简介
  10. 有趣 IOS 开展 - block 使用具体解释