AIGC实战——StyleGAN(Style-Based Generative Adversarial Network)

2024-04-10 15:12

本文主要是介绍AIGC实战——StyleGAN(Style-Based Generative Adversarial Network),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

AIGC实战——StyleGAN

    • 0. 前言
    • 1. StyleGAN
      • 1.1 映射网络
      • 1.2 合成网络
      • 1.3 自适应实例归一化层
      • 1.4 风格混合
      • 1.5 随机变化
    • 2. StyleGAN 生成样本
    • 3. StyleGAN2
      • 3.1 权重调制与解调
      • 3.2 路径长度正则化
      • 3.3 非渐进式增长
    • 4. StyleGAN2 生成样本
    • 小结
    • 系列链接

0. 前言

StyleGAN (Style-Based Generative Adversarial Network) 是于 2018 年提出的一种生成对抗网络 (Generative Adversarial Network, GAN) 架构,该架构建立在 ProGAN 基础之上。实际上,StyleGANProGAN 的判别器是相同的,只有生成器发生了变化。本节中,我们将介绍 StyleGAN (Style-Based Generative Adversarial Network) 架构。

1. StyleGAN

在训练生成对抗网络 (Generative Adversarial Network, GAN) 时,通常很难将潜空间中对应于高级属性的向量分离出来,它们通常融合在一起,这意味着虽然调整潜空间中的图像可以使人物具有金色的头发,但这也可能也会无意间改变背景颜色。虽然 ProGAN 能够生成极其逼真的图像,但它也无法解耦潜空间中的特征。如果我们希望完全控制图像的风格,就需要在潜空间中对特征进行解耦。
StyleGAN 通过在不同位置将风格向量显式地注入网络来解耦潜空间的特征,包括控制高级特征(例如脸部方向)的向量和控制低级细节特征(例如头发的颜色)的向量。StyleGAN 生成器的整体架构如下图所示,接下来,我们逐步介绍此架构。

`网络架构

1.1 映射网络

映射网络 (Mapping Network) 是一个简单的前馈网络,将输入噪声 z ∈ Z z ∈ \mathcal Z zZ 转换为不同的潜空间 w ∈ W w ∈ \mathcal W wW。这使得生成器有机会将噪声输入向量分离成不同的特征元素,这些元素可以用于下游的风格生成层解码其特征。
这样做是为了将选择图像风格的过程(映射网络)与生成具有给定风格的图像的过程(合成网络)分开。

1.2 合成网络

合成网络 (Synthesis Network) 是一个生成器,可以根据映射网络提供的风格生成实际图像。风格向量 w w w 在不同的位置注入合成网络中,每次通过不同的全连接层 A i A_i Ai 注入,生成两个向量:偏置向量 y b , i y_{b,i} yb,i 和缩放向量 y s , i y_{s,i} ys,i。这些向量定义了应该在网络中的指定位置注入的特定风格,令合成网络调整特征图以将生成的图像朝指定的风格方向调整,这种调整是通过自适应实例归一化 (adaptive instance normalization, AdaIN) 层实现的。

1.3 自适应实例归一化层

自适应实例归一化 (adaptive instance normalization, AdaIN) 是一种神经网络层,根据风格偏置 y b , i y_{b,i} yb,i 和缩放 y s , i y_{s,i} ys,i 调整每个特征图 x i x_i xi 的均值和方差。这两个向量的长度与合成网络中的前一卷积层输出的通道数相同。自适应实例归一化的方程如下:
A d a I N ( x i , y ) = y x , i x i − μ ( x i ) σ ( x i ) + y b , i AdaIN(x_i,y) = y_{x,i}\frac {x_i-\mu(x_i)}{\sigma(x_i)} + y_{b,i} AdaIN(xi,y)=yx,iσ(xi)xiμ(xi)+yb,i
自适应实例归一化层确保每个层注入的风格向量仅影响该层的特征,防止风格信息跨层传播,因此潜向量 w w w 比原始向量 z z z 更具分解性。
由于合成网络基于 ProGAN 架构,因此它采用渐进训练。合成网络中较早的层(图像分辨率为 4 × 48 × 8 )的风格向量将影响比后续网络中的层(图像分辨率从 64 × 641,024 × 1,024 )更整体的特征。这意味着我们不仅可以通过潜向量 w w w 完全控制生成的图像,还可以在合成网络的不同位置切换 w w w 向量以改变图像的不同细节风格。

1.4 风格混合

风格混合 (Style mixing) 可以确保生成器在训练过程中不能利用相邻风格之间的相关性(即,在每个网络层注入的风格之间尽可能解耦)。对两个潜在向量 ( z 1 , z 2 ) (z_1,z_2) (z1,z2) 进行采样,对应于两个风格向量 ( w 1 , w 2 ) (w_1,w_2) (w1,w2),而不是仅仅只对单个潜向量 ( z z z) 进行采样。然后,在每个层上随机选择 ( w 1 w_1 w1 w 2 w_2 w2),以打破向量间可能存在的的任何相关性。

1.5 随机变化

合成器网络在每个卷积层之后添加噪声,以考虑诸如个别头发位置或面部背景之类的随机细节。同样,在不同位置注入噪声会影响图像生成不同细节。
这也意味着合成网络的初始输入可以是一个通过学习得到的常量,而不需要额外的噪声,因为在风格输入和噪声输入中已经包含了足够的随机性,能够生成具有不同变化的逼真图像。

2. StyleGAN 生成样本

StyleGAN 的图像生成效果如下图所示。

StyleGAN 生成样本

在上图中,图像 A 和图像 B 是使用两个不同的 w w w 向量 ( w A w_A wA w B w_B wB) 生成两个图像。为了生成合成图像,将图像 A w w w 向量 w A w_A wA 通过合成网络进行处理,并在某个时间步,切换为图像 B w w w 向量 w B w_B wB。如果切换发生在网络的早期(分辨率为 4 × 48 × 8 时),则图像B的整体风格(如姿势、脸型和眼镜)会传递到图像 A 上。然而,如果切换发生在网络的晚期,则只有来自图像B的细节风格之处会传递过来(如面部的颜色等细微特征),同时保留了源图像 A 的整体风格。

3. StyleGAN2

StyleGAN2 构建在 StyleGAN 架构的基础上,通过一些关键改进提高了生成图像的质量。值得注意的是,StyleGAN2 并不会受到伪影(图像中的水滴状区域)的影响,这些伪影是由 StyleGAN 中的自适应实例归一化 (adaptive instance normalization, AdaIN) 层引起的。

图像伪影

StyleGAN2 中的生成器和判别器都与 StyleGAN 有所不同,接下来,我们将探讨这两个架构之间的关键差异。

3.1 权重调制与解调

通过移除生成器中的自适应实例归一化 (adaptive instance normalization, AdaIN) 层,并将其替换为权重调制与解调 (Weight Modulation and Demodulation) 步骤,解决了图像伪影问题,如下图所示。 w w w 表示卷积层的权重,其在 StyleGAN2 的运行时由调制和解调制步骤直接更新,相比之下,StyleGANAdaIN 层在图像张量流经网络时对其进行操作。
StyleGAN 中的 AdaIN 层仅仅是一个实例归一化后加样式调制(缩放和偏移),StyleGAN2 是在运行时直接将风格调制和归一化(解调)应用于卷积层的权重,而不是应用于卷积层的输出,如下图所示。使用这一方法能够消除伪影问题,同时使用风格向量保持对图像风格的控制。

StyleGAN 与 StyleGAN2 区别

StyleGAN2 中,每个全连接层A输出一个单独的风格向量 s i s_i si,其中 i i i 表示卷积层中的输入通道的索引。然后,将该风格向量应用于卷积层的权重,如下所示:
w i , j , k ′ = s i ⋅ w i , j , k w_{i,j,k}^{\prime} = si · w_{i,j,k} wi,j,k=siwi,j,k
其中, 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}^{\prime\prime} = \frac {w_{i,j,k}^{\prime}} {\sqrt {{\sum_{i,k}w_{i,j,k}^{\prime }}^2+ε}} wi,j,k′′=i,kwi,j,k2+ε wi,j,k
其中, ε ε ε 是一个很小的常数值,防止除零错误。
使用权重调制与解调步骤足以防止伪影的出现,同时通过风格向量保持对生成图像的控制,并确保输出的高质量。

3.2 路径长度正则化

StyleGAN2 架构在损失函数中加入了一个额外的惩罚项,称为路径长度正则化 (Path Length Regularization)。
我们希望潜空间尽可能平滑和均匀,这样在潜空间中任何方向上的固定大小步长都会导致图像固定幅度的变化。为了实现这种特性,StyleGAN2 期望最大限度的最小化以下值,以及带有梯度惩罚的 Wasserstein 损失:
E w , y ( ∣ ∣ J w T y ∣ ∣ 2 − a ) 2 \mathbb E_{w,y} (||J_w^Ty||_2-a)^2 Ew,y(∣∣JwTy2a)2
其中, w w w 是由映射网络创建的一组风格向量, y y y 是从 N ( 0 , I ) \mathcal N(0, \mathbf I) N(0,I) 中绘制的一组噪声图像, J w = ∂ g ∂ w J_w=\frac {∂g}{∂w} Jw=wg 是生成器网络相对于风格向量的雅可比矩阵。
∣ ∣ J w T y ∣ ∣ 2 ||J_w^Ty||_2 ∣∣JwTy2 可以衡量经过雅可比矩阵给出的梯度变换后图像 y y y 的幅度。我们希望它接近常数 a a a,该常数动态计算为训练过程中 ∣ ∣ J w T y ∣ ∣ 2 ||J_w^Ty||_2 ∣∣JwTy2 的指数移动均值。
这个额外的项能够使探索潜空间更加可靠和一致。此外,为了提高效率,损失函数中的正则化项每 16 批数据仅应用一次,这种懒惰正则化的技术不会导致模型性能显著下降。

3.3 非渐进式增长

StyleGAN2 不再采用通常的渐进训练机制,而是利用生成器中的跳跃连接和判别器中的残差连接将整个网络作为一个整体进行训练,它不再需要对不同分辨率进行独立训练,也并不需要在训练过程中进行混合。StyleGAN2 中的生成器和判别器块如下图所示。

生成器与判别器块

我们希望 StyleGAN2 能够保留的关键特性是,从学习低分辨率特征开始,并随着训练的进行逐渐改进输出。实践证明了,使用以上架构能够保留这一关键特性,在训练的早期阶段,每个网络从低分辨率层的卷积权重中受益,而跳跃连接和残差连接使更高分辨率层的输出基本上没有受到影响;随着训练的进行,更高分辨率的网络层开始主导,生成器发现了能够改进图像真实性的方式,以欺骗判别器,该过程如下图所示。

非渐进式增长

4. StyleGAN2 生成样本

下图显示了 StyleGAN2 的输出示例:

生成样本

小结

StyleGAN 使用用于创建特定风格向量的映射网络,并允许在不同分辨率下注入风格的合成网络,使得模型对图像输出具有更大的控制能力。StyleGAN2 用权重调制和解调步骤代替了 StyleGAN 的自适应实例归一化,并使用如路径正则化等技术。能够在不使用渐近训练模型的情况下,仍保持分辨率逐步提升的特性。

系列链接

AIGC实战——生成模型简介
AIGC实战——深度学习 (Deep Learning, DL)
AIGC实战——卷积神经网络(Convolutional Neural Network, CNN)
AIGC实战——自编码器(Autoencoder)
AIGC实战——变分自编码器(Variational Autoencoder, VAE)
AIGC实战——使用变分自编码器生成面部图像
AIGC实战——生成对抗网络(Generative Adversarial Network, GAN)
AIGC实战——WGAN(Wasserstein GAN)
AIGC实战——条件生成对抗网络(Conditional Generative Adversarial Net, CGAN)
AIGC实战——自回归模型(Autoregressive Model)](
AIGC实战——改进循环神经网络
AIGC实战——像素卷积神经网络(PixelCNN)
AIGC实战——归一化流模型(Normalizing Flow Model)
AIGC实战——能量模型(Energy-Based Model)
AIGC实战——扩散模型(Diffusion Model)
AIGC实战——GPT(Generative Pre-trained Transformer)
AIGC实战——Transformer模型
AIGC实战——ProGAN(Progressive Growing Generative Adversarial Network)

这篇关于AIGC实战——StyleGAN(Style-Based Generative Adversarial Network)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/891415

相关文章

从原理到实战深入理解Java 断言assert

《从原理到实战深入理解Java断言assert》本文深入解析Java断言机制,涵盖语法、工作原理、启用方式及与异常的区别,推荐用于开发阶段的条件检查与状态验证,并强调生产环境应使用参数验证工具类替代... 目录深入理解 Java 断言(assert):从原理到实战引言:为什么需要断言?一、断言基础1.1 语

Java MQTT实战应用

《JavaMQTT实战应用》本文详解MQTT协议,涵盖其发布/订阅机制、低功耗高效特性、三种服务质量等级(QoS0/1/2),以及客户端、代理、主题的核心概念,最后提供Linux部署教程、Sprin... 目录一、MQTT协议二、MQTT优点三、三种服务质量等级四、客户端、代理、主题1. 客户端(Clien

在Spring Boot中集成RabbitMQ的实战记录

《在SpringBoot中集成RabbitMQ的实战记录》本文介绍SpringBoot集成RabbitMQ的步骤,涵盖配置连接、消息发送与接收,并对比两种定义Exchange与队列的方式:手动声明(... 目录前言准备工作1. 安装 RabbitMQ2. 消息发送者(Producer)配置1. 创建 Spr

深度解析Spring Boot拦截器Interceptor与过滤器Filter的区别与实战指南

《深度解析SpringBoot拦截器Interceptor与过滤器Filter的区别与实战指南》本文深度解析SpringBoot中拦截器与过滤器的区别,涵盖执行顺序、依赖关系、异常处理等核心差异,并... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现

深度解析Spring AOP @Aspect 原理、实战与最佳实践教程

《深度解析SpringAOP@Aspect原理、实战与最佳实践教程》文章系统讲解了SpringAOP核心概念、实现方式及原理,涵盖横切关注点分离、代理机制(JDK/CGLIB)、切入点类型、性能... 目录1. @ASPect 核心概念1.1 AOP 编程范式1.2 @Aspect 关键特性2. 完整代码实

MySQL中的索引结构和分类实战案例详解

《MySQL中的索引结构和分类实战案例详解》本文详解MySQL索引结构与分类,涵盖B树、B+树、哈希及全文索引,分析其原理与优劣势,并结合实战案例探讨创建、管理及优化技巧,助力提升查询性能,感兴趣的朋... 目录一、索引概述1.1 索引的定义与作用1.2 索引的基本原理二、索引结构详解2.1 B树索引2.2

从入门到精通MySQL 数据库索引(实战案例)

《从入门到精通MySQL数据库索引(实战案例)》索引是数据库的目录,提升查询速度,主要类型包括BTree、Hash、全文、空间索引,需根据场景选择,建议用于高频查询、关联字段、排序等,避免重复率高或... 目录一、索引是什么?能干嘛?核心作用:二、索引的 4 种主要类型(附通俗例子)1. BTree 索引(

Java Web实现类似Excel表格锁定功能实战教程

《JavaWeb实现类似Excel表格锁定功能实战教程》本文将详细介绍通过创建特定div元素并利用CSS布局和JavaScript事件监听来实现类似Excel的锁定行和列效果的方法,感兴趣的朋友跟随... 目录1. 模拟Excel表格锁定功能2. 创建3个div元素实现表格锁定2.1 div元素布局设计2.

Redis 配置文件使用建议redis.conf 从入门到实战

《Redis配置文件使用建议redis.conf从入门到实战》Redis配置方式包括配置文件、命令行参数、运行时CONFIG命令,支持动态修改参数及持久化,常用项涉及端口、绑定、内存策略等,版本8... 目录一、Redis.conf 是什么?二、命令行方式传参(适用于测试)三、运行时动态修改配置(不重启服务

Python并行处理实战之如何使用ProcessPoolExecutor加速计算

《Python并行处理实战之如何使用ProcessPoolExecutor加速计算》Python提供了多种并行处理的方式,其中concurrent.futures模块的ProcessPoolExecu... 目录简介完整代码示例代码解释1. 导入必要的模块2. 定义处理函数3. 主函数4. 生成数字列表5.