10 分钟解释 StyleGAN

一、说明

        G在过去的几年里,生成对抗网络一直是生成内容的首选机器学习技术。看似神奇地将随机输入转换为高度详细的输出,它们已在生成图像、生成音乐甚至生成药物方面找到了应用。

StyleGAN是一种真正推动 GAN 最先进技术向前发展的 GAN 类型。当Karras 等人的论文        介绍 StyleGAN 时,“一种基于样式的生成对抗网络生成器架构”。(2018)出现后,GAN 需要大量的正则化,并且无法产生今天所熟知的令人惊叹的结果。其他人都建立在 StyleGAN1 成功的基础上,我们现在已经达到了 StyleGAN3,并进行了进一步的细化和改进。

        在本文中,我们将深入探讨 StyleGAN 架构。然后,我们将查看每个单独的 StyleGAN 组件并详细讨论它。通过这种方式,您还将了解高级细节之外的内容,并了解每个单独组件的影响。

        你准备好了吗?我们走吧!

二、StyleGAN,高级概述

        下图展示了 StyleGAN 的高级架构,如 Karras 等人所述。(2018)。

涉及两个垂直块:

  • 映射网络(称为 f)在左侧可见。它将一个(归一化的)潜在向量z ε Z 映射到中间潜在空间中的另一个向量w ,称为 W。该映射网络是一组简单的全连接前馈层。
  • 合成网络称为 g(在右侧可见),它使用w生成控制图像合成过程的“样式”。它以一个常量、4 *4 * 512 维向量开始。生成缩放噪声样本 (B) 并将其添加到该常量张量中。随后,通过自适应实例归一化 (AdaIN) 操作添加样式 (A),然后应用卷积运算。接下来是另一个噪声添加和基于 AdaIN 的造型操作。然后我们得到一个 4x4 像素分辨率的图像。在下一个块中,对图像进行上采样,并再次执行相同的操作,达到 8x8 像素分辨率。重复此操作,直到图像达到 1024x1024 像素。

        显然,我们已经可以看到经典 GAN 和 StyleGAN 之间的巨大差异。潜在向量z不再直接用于图像合成过程。有趣的是,甚至让 StyleGAN 论文的作者感到惊讶的是,从恒定张量开始是可能的,甚至产生了良好的结果。

        z现在不再是图像合成过程的基础,而是用于生成控制合成过程的样式。

如果您不理解上面所写的所有内容,请不要担心。这是一个极端的总结,只强调了高层次上发生的事情。如果您想深入了解 StyleGAN,现在让我们花一些时间查看细节。但是,如果您无法理解基本的 GAN 概念(例如潜在空间潜在向量),那么最好先阅读我关于 GAN 的文章。

StyleGAN 架构:来源 Kerras at al.,2018

2.1 StyleGAN 的更多细节

        现在,我们将更详细地研究映射和合成网络及其各个组件。这可以让您详细了解 StyleGAN 的工作原理。

2.1.1 映射网络f

我们从映射网络开始,也称为 f。它采用从原始潜在分布中采样的潜在向量z并执行到中间潜在向量w的学习映射。这种映射是通过神经网络中的一堆全连接层来执行的。

潜在向量 z 采样

        在任何前向传递之前(无论是在训练还是推理期间),潜在向量z都是从原始潜在分布中采样的

标准正态分布用于映射 StyleGAN 中的潜在向量z。这是 GAN 中常见的采样分布。根据论文,其潜在空间是 512 维(Karras et al., 2018)。

潜在向量归一化

当输入没有标准化或者更好的是标准化时,神经网络会因表现不佳而臭名昭著。通过标准化 步骤,向量可以准备好输入。最小-最大归一化是选项之一。标准化也是如此。

如果您在 StyleGAN 实现中使用标准 正态分布,则是否需要此标准化步骤是值得怀疑的 - 因为您的输入已经具有零均值和单位方差。不过,保留它并没有什么坏处。

用于生成中间潜在向量 w 的全连接前馈层堆栈

您的(可能标准化的)采样潜在向量z现在已准备好输入。它被馈送到实际的映射网络,该网络是一个具有 8 个可训练的全连接(或密集)层的神经网络,也称为多层感知器或 MLP。它产生另一个向量,一个中间潜在向量w。这是合成网络将用于生成输出图像的潜在向量。

该映射是非线性的,这意味着每个全连接层都有一个激活函数,通常是 ReLU 或 LeakyReLU 函数。

中间潜在向量 w 也是 512 维(Karras 等人,2018)。

现在,您可能会问的问题是:为什么我们首先需要这样的映射?

为此,我们必须了解一个称为纠缠的概念(与量子力学中的纠缠无关)。当某物纠缠在一起时,它“已被扭曲在一起或被卡住”。

如果潜在空间被解开,它将包含线性子空间(Karras 等人,2018)。在普通英语中,这意味着潜在空间的某些维度控制着图像的某些方面。

例如,如果我们的 512 维潜在空间 Z 完全解开并成为在面部上训练的 GAN 的一部分,则维度 1 将控制眼镜,维度 2 控制头发,维度 3 面部形状等。通过简单地在一个维度上移动,人们就可以完全控制一小部分,并且生成选择的图像将非常容易。

不幸的是,GAN 通常没有解开的空间。我们之前就看到过——经典的 GAN 无法让机器学习工程师对其潜在空间进行控制。这是潜在空间纠缠的一种更简单的写法。

作者提出,让映射网络将最初采样的潜在向量z从学习到的中间潜在分布 W 转换为中间向量w,确保合成过程的采样不是从固定分布完成的——例如标准正态分布它的所有特征和特质。相反,它是根据学习的分布执行的。这种学习到的分布是通过尽可能解开的方式学习的,这源于来自生成器的压力,因为这样做会产生更好的结果(Karras 等人,2018)。

事实上,与真实图像的数据分布相比,拥有这样的网络可以改善描述分布纠缠的所有指标以及根据学习的潜在分布执行的最终合成。由于映射网络中的 8 层产生了最佳结果,因此选择 8 层(Karras 等人,2018)。

所以,换句话说:

  • 潜在向量z是从选定的分布(通常是标准正态分布)中采样的,并且是 512 维的。
  • 它通过 8 层非线性 MLP 馈送,产生 512 维中间潜在向量w,合成网络将使用该向量来控制所生成图像的样式。
  • 非线性学习映射对于减少合成网络(生成器)使用的潜在空间的纠缠是必要的。这使得 StyleGAN 能够显着提高对潜在空间的控制并产生更好的结果。

2.1.2 合成网络g

现在我们了解了映射网络为何产生中间潜在向量以及它是如何做到的,现在是时候看看它如何用于生成输出图像了。换句话说,我们来看看合成网络。该网络也称为 g。

综合网络第一部分的高级概述,高达并包括 8x8 分辨率

2.1.3 合成块

        在上图中,您可以看到 StyleGAN 的合成网络利用合成块,通过将图像分辨率从 4x4 上采样到 8x8、16x16……最终到 1024x1024 像素来逐步构建图像。

每个 StyleGAN 合成模块的核心组件是:

  • 上采样(第一个合成块除外)。前一个合成块的输出变大,以便随后进行处理。
  • 卷积层。
  • 自适应实例标准化(AdaIN)。
  • 风格向量 (A) 和噪声向量 (B)

接下来我们将更详细地了解每个单独的组件。然后您将发现 StyleGAN 中每个组件的作用。让我们首先从第一个合成块的起点开始:Constant构建图像的张量!

第一个综合块中的恒定起点

是的,你没听错——StyleGAN 的合成块的起点是一个常数值

与之前的 GAN 相比,这是一个完全不同的设计,之前的 GAN 都是从潜在空间中抽取样本开始的。

该输入被学习并初始化为 1(Karras 等人,2018)。换句话说,在每个纪元之后,常数都会略有变化 - 但在每个纪元内,它保持不变。

风格和噪音,两个重要的合成元素

常数张量现在由合成块的其余部分处理。尽管我们现在将更详细地讨论该块中的每个组件,但重要的是要知道将返回两个高级概念:

  • 风格。常量就像用于任何类型合成的“主干”。就像具有特定风格的画家一样,生成的图像中的高级组件由所谓的“风格”进行调整。
  • 噪音。如果您将相同的常量张量提供给具有相同样式的合成块,您将一次又一次地获得完全相同的图像。这是不现实的:您会读到风对某人的形象产生影响。换句话说,生成图片存在随机性,这是通过噪声实现的。

2.2 噪声是如何产生和添加的

Constant 值发生的第一件事是向其中添加了噪声。当人们注意到图片中的头发时,就可以最好地解释对噪点的需求。

假设下图是由StyleGAN生成的。事实并非如此,但假设是这样。您可以看到它包含各种具有不同粒度的组件:

  • 较低粒度的组件,例如头部(特别是其位置)、躯干等。对于human类的每个实例,它们都是相对平等的。
  • 相反,更高粒度的组件(例如头发)在人与人之间不同,而且在同一个人的照片之间也不同。头发在图片中的位置取决于相对确定的选择(例如发型),但也取决于看似随机的影响(例如风)。

噪声决定了这些更高粒度的组件。下图中女人的头发在什么位置?如果它是由 StyleGAN 生成的,那么它就不会由您接下来会听到的样式驱动,而是由随机性驱动,从而产生噪声。

噪声张量是从高斯分布中得出的(Karras 等人,2018)。

2.3 w 如何转换为样式

        现在我们知道噪声如何为生成的图片添加随机性,是时候了解样式以及它们如何控制图像合成过程了。

        这从映射网络生成的潜在向量w开始。

        该向量被馈送到下面概述中称为A 的部分——神经网络的学习仿射变换部分。

在欧几里得几何中,仿射变换或亲和力(来自拉丁语,affinis, “连接”)是保留直线和平行度(但不一定是距离和角度)的几何变换。

维基百科

        例如,如果我们有向量2 \\ 3,仿射变换将能够产生向量4 \\ 6(尺度 2 在空间中具有相同的线,但只是更长,因此没有保留距离)。

        从概念上讲,这意味着仿射变换可以在不彻底修改图像的情况下改变图像分量,因为仿射变换的输出必须与输入“连接”,即潜在向量w

        输入向量w转换为样式y,其中y = ( y _s, y _b)。这些分别是样式的比例偏差组件(您将在下面了解它们的使用方式)。它们具有与它们将控制的合成张量相同的形状。

        仿射变换是在训练期间学习的,因此是可用于控制较低粒度组件(例如发型、肤色等)的图像合成过程的组件,而请记住,使用的是随机性例如,控制单根毛发的位置。

        您现在应该能够解释样式随机性如何使我们能够生成独特的图像。现在让我们更精确地了解样式如何控制图像生成。

基于自适应实例标准化的样式添加

与样式加法相关是两个向量的向量加法:

  • 添加噪声的常量张量(在第一个 4x4 像素合成块中)或到目前为止生成的张量(对于其他合成块)。
  • 仿射变换,然后进行自适应实例标准化(AdaIN)标准化。

这是 AdaIN 的样子:

这里,x_i是输入Tensor的第i个特征图(即向量的第i个元素), y是仿射变换生成的样式。

您可以在中间部分看到,特征图首先被归一化(或者更确切地说,标准化)为零均值、单位方差,然后通过样式缩放组件中的第i个元素进行缩放,并添加第i个偏差组件随后。

换句话说,AdaIN 确保生成的样式可以通过改变比例和/或偏差来控制(标准化)合成输入。这就是样式如何控制添加噪声的输入张量上的图像合成过程!

第二个和更高的合成块 - 上采样,然后控制

上面的文本主要关注第一个合成块 - 其输出是 4 x 4 像素图像。正如你可以想象的那样,这还不足以给人留下深刻的印象。

后续合成块(8x8、16x16、最高 1024x1024 像素)的工作方式与第一个合成块略有不同:

  • 首先,应用双线性上采样对图像进行上采样,然后使用具有 3x3 内核的 2d 卷积层进行学习下采样。
  • 随后,添加噪声,之后执行用于风格控制的AdaIn操作。
  • 然后,使用类似的卷积层进行另一个下采样,之后执行另一个噪声和风格控制。

对于第一层,这会生成 8x8 像素的图像,依此类推。

最终结果

StyleGAN 在面部训练时的最终结果非常惊人!

在我的下一篇文章中,我们将了解如何使用 PyTorch 实现 StyleGAN。感谢您的阅读!

资料参考

Karras, T.、Laine, S. 和 Aila, T. (2018)。用于生成对抗网络的基于样式的生成器架构。 arXiv 预印本 arXiv:1812.04948

Goodfellow, IJ、Pouget-Abadie, J.、Mirza, M.、Xu, B.、Warde-Farley, D.、Ozair, S.……和 Bengio, Y. (2014)。生成对抗网络。 arXiv 预印本 arXiv:1406.2661

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/213658.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

rust入门(rust教程、rust安装方法)

文章目录 Rust开发入门Rust的特性Rust的应用场景Rust安装——环境配置1. 安装rustup具体执行步骤 2. 验证安装 Rust的卸载基本语法变量与数据类型控制流函数 Rust的所有权系统错误处理实战:构建一个小项目创建新项目编写代码运行项目安装相关链接器运行 删除项目 Ru…

第十五届蓝桥杯模拟赛(第二期)

第一题 计算 答案&#xff1a;108 std::cout<<36*30/10; 第二题 快速幂 答案&#xff1a;608 #include<bits/stdc.h> const int mod1e3; #define int long long int qmi(int a,int b) {int res1;while(b){if(b&1) res(res*a)%mod;b>>1;aa*a%mod;}return…

【数据库】基于封锁的数据库调度器,以及等待锁处理的优先级策略

封锁调度器的体系结构 ​专栏内容&#xff1a; 手写数据库toadb 本专栏主要介绍如何从零开发&#xff0c;开发的步骤&#xff0c;以及开发过程中的涉及的原理&#xff0c;遇到的问题等&#xff0c;让大家能跟上并且可以一起开发&#xff0c;让每个需要的人成为参与者。 本专栏会…

Redis中分布式锁的使用

在分布式系统中&#xff0c;如果使用JVM中的同步锁在高并发的场景下仍然会产生线程安全问题。首先我们来查看在多个服务器时为什么会产生线程安全问题&#xff0c;有这样一个案例&#xff0c;有一件商品购买规则为一个用户只能购买一次&#xff0c;如果使用同步锁锁住用户id&am…

C# Spire操作Excel数据透视表

一、概述 数据透视表&#xff08;Pivot Table&#xff09;是一种交互式的表&#xff0c;可以进行某些计算&#xff0c;如求和与计数等&#xff0c;可动态地改变透视表版面布置&#xff0c;也可以重新安排行号、列标和页字段。当改变版面布置时&#xff0c;数据透视表也会按照新…

PMP-01

考纲 需要看的书籍 学习计划

奇技淫巧第9期

今天回顾一下 5~12 月所遇到的零碎知识点。 文章目录 歪门邪道优雅删除“学习资料”快速下载 vscode两种硬盘格式zotero在word中插入参考文献markdown 下划线查看 CPU Linux 命令postgres 无法通过 root 用户操作bash 初学者礼包gitwin 11 edge 浏览器0x80190001 报错 python …

Pycharm调用Conda虚拟环境

参考这个链接的评论区回答&#xff1a;Pycharm调用Conda虚拟环境 笑死&#xff0c;我之前也是这样的&#xff0c;不过好像也能用&#xff0c;搞不懂~

蓝桥杯每日一题2023.12.2

题目描述 蓝桥杯大赛历届真题 - C 语言 B 组 - 蓝桥云课 (lanqiao.cn) 题目分析 答案&#xff1a;3598180 由题目分析可以知道&#xff0c;给小明发的牌一共有13种类型&#xff0c;每种类型的牌一共有四张。对于每种牌&#xff0c;我们都有5种选择&#xff0c;不拿、拿一张、…

WebGL笔记:矩阵缩放的数学原理和实现

矩阵缩放的数学原理 和平移一样&#xff0c;以同样的原理&#xff0c;也可以理解缩放矩阵让向量OA基于原点进行缩放 x方向上缩放&#xff1a;sxy方向上缩放&#xff1a;syz方向上缩放&#xff1a;sz 最终得到向量OB 矩阵缩放的应用 比如我要让顶点在x轴向缩放2&#xff0c;y轴…

ArrayList 与 顺序表 (附洗牌算法)!

曾经我也是一枚学霸&#xff0c;直到有一天想去学渣的世界看看&#xff0c;结果就找不到回去的路了。 目录 1. 线性表 2.顺序表 2.1 接口的实现 3. ArrayList简介 4. ArrayList使用 4.1 ArrayList的构造 4.2 ArrayList常见操作 4.3 ArrayList的遍历 4.4 ArrayList的扩…

分享66个焦点幻灯JS特效,总有一款适合您

分享66个焦点幻灯JS特效&#xff0c;总有一款适合您 66个焦点幻灯JS特效下载链接&#xff1a;https://pan.baidu.com/s/10bqe09IAZt_hbsZlXaxkxw?pwd6666 提取码&#xff1a;6666 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 学习知识费力气&#xff0c;…

万能的视频格式播放器

今天博主给大家带来一款“万能”的视频播放器——VLC Media Player&#xff0c;支持的文件格式非常多&#xff0c;大家快来一起看看吧&#xff01; VLC Media Player 是一款可播放大多数格式&#xff0c;而无需安装编解码器包的媒体播放器。可以播放 MPEG-1、MPEG-2、MPEG-4、D…

Tektronix泰克示波器

一、what’s the oscilloscope&#xff1f; 【ref】https://www.tek.com.cn/blog/what-is-an-oscilloscope 二、基础知识 1、带宽&#xff1a;100Mhz&#xff1b;采样率&#xff1a;2.5GS/s 1GS/s指的是采样率&#xff0c;前面大写的S是sample采样的意思 后面的s是秒 也就是示波…

粉丝提问:岗位与描述不一致,小公司感觉学不到东西,工作内容就是调试,想辞职

0、粉丝问题&#xff1a; 大哥&#xff0c;我毕业已经工作两个月了&#xff0c;在一家小公司&#xff0c;岗位和描述的不一致&#xff0c;感觉就像调试一样&#xff0c;写代码的机会很少也没人带&#xff0c; 我想转嵌入式&#xff0c;您有什么建议的方向吗&#xff0c;或者是…

MathType公式编辑器安装教程

一、下载 MathType7是一款可以帮助用户快速完成数学公式编辑的应用软件&#xff0c;这款软件适合在进行教育教学、科研机构、论文写作的时候使用。我们可以直接通过这款软件来获取到大量数学上使用到的函数、数学符号等内容&#xff0c;然后使用这些内容来完成公式编辑。 …

玩转大数据4:大数据的崛起与应用领域探索

图片来源网络 引言 在当今数字化时代&#xff0c;大数据正以前所未有的速度和规模崛起。大数据的出现不仅改变了企业和组织的经营模式&#xff0c;也对我们的社会生活带来了深刻的影响。Java作为一种广泛使用的编程语言&#xff0c;在大数据领域发挥着重要的作用。本文将重点…

自动驾驶学习笔记(十三)——感知基础

#Apollo开发者# 学习课程的传送门如下&#xff0c;当您也准备学习自动驾驶时&#xff0c;可以和我一同前往&#xff1a; 《自动驾驶新人之旅》免费课程—> 传送门 《Apollo Beta宣讲和线下沙龙》免费报名—>传送门 文章目录 前言 传感器 测距原理 坐标系 标定 同…

初识Linux:保姆级教学,让你一秒记住Linux中的常用指令!

文章目录 前言一、LInux的背景及发展史二、Linux下的基本指令1、ls指令2、pwd指令3、cd指令4、touch指令5、mkdir指令&#xff08;重要&#xff09;6、tree指令7、rmdir指令和rm指令&#xff08;重要&#xff09;8、man指令&#xff08;重要&#xff09;9、cp指令&#xff08;重…

操作PDF相关的工具,EPUB转PDF,golang

unipdf 安装依赖 go get github.com/unidoc/unipdf/v3 示例代码 https://github.com/unidoc/unipdf-examples 获取KEY 登录 https://cloud.unidoc.io/ 注册账号&#xff0c;生成 KEY&#xff0c;但是需要收费。 chromedp 使用Golang编写&#xff0c;主要功能是调用浏览器内…