【研究生工作周报】(stylegan)
StyleGAN提出的背景
ProGAN:
NVIDIA在2017年提出的ProGAN解决了生成高分辨率图像(如1024×1024)的问题。ProGAN的关键创新之处在于渐进式训练——从训练分辨率非常低的图像(如4×4)的生成器和判别器开始,每次都增加一个更高的分辨率层。
缺陷:与多数GAN一样,ProGAN控制生成图像的特定特征的能力非常有限。这些属性相互纠缠,即使略微调整输入,会同时影响生成图像的多个属性。所以如何将ProGAN改为条件生成模型,或者增强其微调单个属性的能力,是一个可以研究的方向。
解决方法:StyleGAN是NVIDIA继ProGAN之后提出的新的生成网络,其主要通过分别修改每一层级的输入,在不影响其他层级的情况下,来控制该层级所表示的视觉特征。这些特征可以是粗的特征(如姿势、脸型等),也可以是一些细节特征(如瞳色、发色等)
文章目录
- StyleGAN提出的背景
- 前言
- 一、ProGAN框架
- 二、StyleGAN框架
- 1. Mapping network
- 2. AdaIN
- 3. 添加随机噪声
- 4. 混合正则化
- 三、量化隐空间(latent space)耦合度的方法
- 感知路径长度
- 线性可分性(linear separability)
- 四、总结
前言
一、ProGAN框架
ProGAN首先通过学习即使在低分辨率图像中也可以显示的基本特征,来创建图像的基本部分,并且随着分辨率的提高和时间的推移,学习越来越多的细节。低分辨率图像的训练不仅简单、快速,而且有助于更高级别的训练,因此,整体的训练也就更快。
Generator 在训练过程中网络的结构是在动态变化的。那种依次连接不同分辨率空间的网络模型叫做 StackGAN,但是 StackGAN 不适合用来做超清图片生成,因为会特别慢。
2x,0.5x利用最近邻卷积和平均池化分别对图片分辨率加倍和折半。
对真实样本也做了类似(b)的平滑过渡,训练过程中某个batch真实样本可以表示为
X = X 16 p × ( 1 − α ) + X 32 p × α X = X_{16p} \times(1-\alpha) + X_{32p} \times \alpha X=X16p×(1−α)+X32p×α
由于 ProGAN 是逐级直接生成图片,我们没有对其增添控制,我们也就无法获知它在每一级上学到的特征是什么,这就导致了它控制所生成图像的特定特征的能力非常有限,在此基础上进行改进提出StyleGAN:映射网络 f f f能让我们控制住输出的图片是长什么样的,也就是在生成图片过程中每一级的特征,要能够特定决定生成图片某些方面的表象,并且相互间的影响尽可能小。
二、StyleGAN框架
StyleGAN 用风格(style)来影响人脸的姿态、身份特征等,用噪声 ( noise ) 来影响头发丝、皱纹、肤色等细节部分。stylegan的生成器主要由两部分组成:Mapping network, Synthesis network。
1. Mapping network
作用分析:对隐藏空间(latent space)进行解耦
为了更好的对数据进行分类或生成,需要对数据的特征进行表示,但是数据有很多特征,这些特征之间相互关联,耦合性较高,导致模型很难弄清楚它们之间的关联,使得学习效率低下,因此需要寻找到这些表面特征之下隐藏的深层次的关系,将这些关系进行解耦,得到的隐藏特征,即latent code。由 latent code组成的空间就是 latent space。
添加 Mapping Network 的目标是将输入向量 z z z 编码转为中间向量 w w w,并且中间向量 w w w 后续会传给生成网络得到 18 个控制向量,使得该控制向量的不同元素能够控制不同的视觉特征。
2.为何要加 Mapping Network 呢?因为如果不加这个 Mapping Network 的话,后续得到的 18个控制向量之间会存在特征纠缠的现象——比如说我们想调节 8 ∗ 8 8*8 8∗8 分辨率上的控制向量(假设它能控制人脸生成的角度),但是 32 ∗ 32 32 * 32 32∗32分辨率上的控制内容(譬如肤色)也被改变了,这个就叫做特征纠缠。所以 Mapping Network 的作用就是为输入向量的特征解耦提供可行性。
3.为何 Mapping Network 能够学习到特征解耦呢?如果仅使用输入向量来控制视觉特征,能力是非常有限的,因此它必须遵循训练数据的概率密度。例如,如果黑头发 的人的图像在数据集中更常见,那么更多的输入值将会被映射到该特征上。因此,该模型无法将部分输入(向量中的元素)映射到特征上,这就会造成特征纠缠。然而,通过使用另一个神经网络,该模型可以生成一个不必遵循训练数据分布的向量,并且可以减少特征之间的相关性。
2. AdaIN
stylegan的第二个idea是将特征解缠后的中间向量W′变换为样式控制向量,从而参与影响生成器的生成过程。
生成器由于从 4 ∗ 4 → 8 ∗ 8 → . . . . . . . → 1024 ∗ 1024 4*4 \rightarrow 8*8 \rightarrow .......\rightarrow1024*1024 4∗4→8∗8→.......→1024∗1024的过程中,每个阶段都会受两个控制向量 A A A 施加的影响,(一次上采样之后,一次卷积之后),都采用 AdaIN(自适应实例归一化)。因此,中间向量W′总共被变换成 18 个控制向量 A A A 传给生成器。
其中 AdaIN 的具体实现过程如上右图所示:将W′通过一个可学习的仿射变换 A A A 扩变为放缩因子 y s y_s ys与偏差因子 y b y_b yb,这两个因子会与标准化之后的卷积输出做一个加权求和,抹去了对图片局部信息的可见性,就完成了一次 W ′ W′ W′ 影响原始输出 x i x_i xi 的过程。而这种影响方式能够实现样式控制,主要是因为它让变换后的 W ′ W′ W′ 影响图片的全局信息,而保留生成人脸的关键信息由上采样层和卷积层来决定,因此 W ′ W′ W′ 只能够影响到图片的样式信息。
- 采用常量张量作为生成器输入的原因分析
可以降低由于初始输入取值不当而生成出 一些不正常的照片的概率,另一个好处是它有助于减少特征纠缠, 对于网络在只使用【研究生工作周报】(stylegan)相关推荐
- 【研究生工作周报】(GAN最新论文调研)
GAN系列最新论文调研 文章目录 GAN系列最新论文调研 前言 一.EditGAN:High-Precision Semantic Image Editing 二.TransductGAN: a Tr ...
- 【研究生工作周报第十四周】
学习目标: 例如: CycleGAN论文以及源码 学习内容: CycleGAN网络模型 CycleGAN损失函数 模型优化方法Instance Normalization 学习时间: 8.7~8.13 ...
- 【研究生工作周报】(第十周)
学习目标: <Reusing Discriminators for Encoding: Towards Unsupervised Image-to-Image Translation> N ...
- 研究生工作周报(第十三周)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 NICE-GAN性能评估 前言 一.怎么写深度学习代码? 二.生成器效率评估 前言 这周的话主要就是看论文源码,有思考一些问题,带着疑 ...
- 实习生的工作周报大纲
实习生的工作周报大纲 2019-06-07 在研究生期间,95%的时候,我都能在办公室找到导师.我做了什么,做到什么程度,导师都很清楚.所以,在每周汇报工作时,我都比较随意,没有养成适当的汇报工作的习 ...
- 开发人员工作周报_如何增加找到开发人员工作的机会
开发人员工作周报 In a recent job as a senior developer, I helped interview and hire many of my employer's de ...
- 软件项目周报模板_一份高质量的职场工作周报,要这样写
周报是会呼吸的痛,它会在每个周五来回滚动. 几乎每个职场人都会为周报所折腰,因为周报看起来是小事,但又不仅仅是小事. 周报,是职场人士对一周工作的总结和记录,是展示自己工作状态和成果的重要载体,是领导 ...
- 写工作周报的目的有两个
写工作周报的目的有两个:①找到自己工作中存在的问题,②和领导进行一次重要沟通. 本周工作内容 下周工作计划 需要哪些帮助 ===================================== 要 ...
- 浅谈工作周报的目的及意义
一.针对员工 很多销售人员做工作的能力和潜力都是不错的,也非常擅长于沟通,但是自己设想的进步要求却怎么也实现不了,这是为什么呢?对于这个问题,经过多年的观察,我发现但凡能够在工作上取得进步的销售人员是 ...
最新文章
- java round指令_Java PApplet.round方法代码示例
- Zookeeper运维问题集锦
- Domino Web开发规则之一:Notes命名规范
- Docker安装Nacos教程
- 关于js中replace()只能替换字符串中第一个对象的问题
- C# 索引器的简单例子
- python自学看什么书-自学Python一年,看了几十本书,我发现了这些捷径!
- 详细解读二叉树基本操作
- python中不同类型的数据不能相互运算_python语法入门(数据类型、运算)
- 在ubuntu 20.04 上 安装 onnxruntime CUDA
- Go爬虫colly官方示例三【cryptocoinmarketcap】- 爬取加密数字货币最新市值
- 安卓改机技术揭秘(一) 工具篇
- lateX 编译中文_受够了 Word 的排版?让专业的 Latex 帮你打造精美文档
- 硬盘属于计算机主机的一部分,计算机的硬件组成部分分别是什么?
- php c语言扩展名,c语言源程序的扩展名是什么
- Python数据处理DataFrame小记
- 用DEVC++写射击游戏
- Linux系统之热插拨事件uevent
- YOLO算法是干嘛的?
- 原生JS实现简易模板
热门文章
- 【研究生工作周报】(GAN最新论文调研)