AIGC实战——VQ-GAN(Vector Quantized Generative Adversarial Network)

AIGC实战——VQ-GAN

    • 0. 前言
    • 1. VQ-GAN
    • 2. ViT VQ-GAN
    • 小结
    • 系列链接

0. 前言

本节中,我们将介绍 VQ-GAN (Vector Quantized Generative Adversarial Network) 和 ViT VQ-GAN,它们融合了变分自编码器 (Variational Autoencoder, VAE)、Transformer 和生成对抗网络 (Generative Adversarial Network, GAN) 的思想,VQ-GANMuse (Google 提出的文本生成图像生成模型)的关键组成部分。

1. VQ-GAN

VQ-GAN (Vector Quantized GAN) 是于 2020 年提出的生成对抗网络 (Generative Adversarial Network, GAN) 架构,这种模型架构建立在以下基础上:变分自编码器 (Variational Autoencoder, VAE)学习到的表示可以是离散的,而不仅是连续的。这种模型称为 Vector Quantized VAE (VQ-VAE),能够用于生成高质量的图像,同时避免了传统连续潜空间 VAE 经常出现的一些问题,比如后验坍塌(由于过强的解码器导致学到的潜空间不具有信息性)。
离散潜空间指的是一个学习到的向量列表 (codebook),每个向量与相应的索引关联。在 VQ-VAE 中,编码器的任务是将输入图像压缩为一个较小的向量网格,然后将其与 codebook 进行比较。对于每个网格向量,选择最接近该网格方格向量的 codebook 向量(通过欧氏距离),并将其传递给解码器,如下图所示。codebook 是一个长度为 d d d (嵌入大小)的学习向量列表,与编码器输出和解码器输入中的通道数相匹配。例如, e 1 e_1 e1 是一个可以解释为背景的向量。

VQ-VAE

codebook 可以看作是编码器和解码器共享的一组可学习的离散概念,以便描述给定图像的内容。VQ-VAE 需要找到使这组离散概念尽可能具有信息性的方法,以便编码器可以用对解码器有意义的特定码向量准确地标记每个网格正方形。因此,VQ-VAE 的损失函数需要在重构损失加上以下两项:对齐损失 (alignment loss) 和承诺损失 (commitment loss),以确保编码器的输出向量尽可能接近 codebook 中的向量。使用这些项替代了经典 VAE 中编码分布与标准高斯先验之间的 KL 散度项。
承诺损失 (Commitment loss) 是一种在生成对抗网络 (Generative Adversarial Network, GAN) 中使用的损失函数,旨在促使编码器网络将输入图像的特征信息有效地编码到潜在空间中。
在一般的 GAN 架构中,编码器网络负责将输入图像编码为潜在空间的向量表示,而生成器网络则将该向量映射回原始图像域。为了确保编码过程不丢失重要的图像细节和特征,我们需要鼓励编码器将不同图像之间的相似特征映射到相似的潜在向量附近。
Commitment loss 的目标是最小化潜在向量之间的平均方差,从而迫使编码器将相似图像的潜在表示映射到相近的位置,即使在生成器的输出图像上也能保持这种相似性。通过这种方式,编码器被迫"承诺"将输入图像的特征有效地编码到潜在空间中,以减小潜在向量间的差异。
通过最小化 Commitment loss,可以使编码器网络更好地捕捉图像的特征和结构,并将相似的图像编码为接近的潜在向量。这有助于提高生成图像的质量和一致性,并保持输入图像与生成图像之间的相似性。
然而,VQ-VAE 如何采样新的 codebook 以传递给解码器生成新的图像?显然,使用均匀先验(为每个网格方格均等概率选择每个编码)并不可行。例如,在 MNIST 数据集中,左上角的网格方格很有可能被编码为背景,而靠近图像中心的网格方格则不太可能被编码为背景。为了解决这个问题,VQ-VAE 使用了另一个模型,即自回归模型 PixelCNN,根据先前的编码向量预测网格中下一个编码向量。换句话说,先验由模型学习,而不像传统 VAE 中的先验是静态的。
VQ-VAE 架构的关键变化如下图所示。

VQ=VEA

首先,VQ-GAN 模型中包含了一个 GAN 判别器,它试图区分 VAE 解码器的输出和真实图像,并带有相应的对抗损失函数。与 VAE 相比,GAN 能够生成更清晰的图像,因此添加判别器改善了整体图像质量。需要注意的是,尽管名字中包含 “GAN”,但 VQ-GAN 模型仍然包含 VAEGAN 判别器只是作为一个额外的组件而并未替代 VAE
其次,GAN 判别器并不是一次性预测整个图像的真假,而是预测图像中的小块区域 (patch) 是真实的还是伪造的。PatchGAN 判别器会输出一个预测向量(每个区域一个预测),而不是直接预测整个图像(单个预测值)。使用 PatchGAN 判别器的好处是损失函数可以度量判别器在样式上(而非内容上)区分图像的能力。由于判别器预测的每个元素都是基于图像的一个小区域,必须使用方块的样式而不是内容来做出决策。我们知道 VAE 生成的图像在风格上比真实图像更模糊,因此 PatchGAN 判别器可以促使 VAE 解码器生成比其自然产生的图像更清晰的图像。
第三,VQ-GAN 不再使用单一的均方差重构损失来比较输入图像像素和 VAE 解码器输出的像素,而是使用感知损失项,在编码器和对应的解码器的中间层计算特征图之间的差异,这种损失函数会产生更逼真的图像生成结果。
最后,VQ-GAN 使用 Transformer (而不是 PixelCNN )作为模型的自回归部分,用于生成编码序列。TransformerVQ-GAN 完全训练完毕后进行单独的训练阶段。与其以完全自回归方式使用先前的符号不同,VQ-GAN 选择仅使用滑动窗口范围内的符号来预测符号。这确保模型能够适应更大的图像,这需要更大的潜变量网格大小,因此 Transformer 需要生成更多的符号。

2. ViT VQ-GAN

Yu 等人对 VQ-GAN 进行了扩展,用 Transformer 替换 VQ-GAN 中的卷积编码器和解码器,如下图所示。

ViT VQ-GAN

在编码器中,使用了 Vision Transformer (ViT),ViT 是一种神经网络架构,将最初设计用于自然语言处理的 Transformer 模型应用于图像数据。ViT 不使用卷积层从图像中提取特征,而是将图像分为一系列小区域,对其进行分词,然后作为输入传递给编码器 Transformer
具体而言,在 ViT VQ-GAN 中,非重叠的输入小区域(每个大小为 8 × 8 )首先被展平,然后投影到一个低维嵌入空间中,其中添加了位置嵌入。然后,这个序列被传递给一个标准的编码器 Transformer,并根据学到的 codebook 对结果进行量化。这些整数编码随后由解码器 Transformer 模型处理,最终的输出是一个区域序列,可以重新拼接成原始图像。整个编码器-解码器模型作为自编码器进行端到端训练。
与原始 VQ-GAN 模型一样,第二阶段的训练使用自回归解码器 Transformer 生成编码序列。因此,除了 GAN 判别器和学习的 codebook 外,ViT VQ-GAN 总共还包含三个 Transformer。下图展示了 ViT VQ-GAN 生成的示例图像。

小结

VQ-GAN 模型中,将几种不同类型的生成模型进行有效地组合,VQ-GAN 通过额外的对抗损失项鼓励 VAE 生成更清晰的图像。使用自回归T ransformer 构建了一系列能够由 VAE 解码器解码的编码符号。ViT VQ-GAN 进一步扩展了这一思想,将 VQ-GAN 的卷积编码器和解码器替换为 Transformers

系列链接

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.mzph.cn/news/822078.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue加载glb / gltf模型(如何在vue中使用Three.js,vue使用threejs加载glb模型)

简介:Three.js 是一个用于在 Web 上创建和显示 3D 图形的 JavaScript 库。它提供了丰富的功能和灵活的 API,使开发者可以轻松地在网页中创建各种 3D 场景、模型和动画效果。可以用来展示产品模型、建立交互式场景、游戏开发、数据可视化、教育和培训等等…

嵌入式4-16

tftpd #include <myhead.h> #define SER_IP "192.168.125.243" //服务器IP地址 #define SER_PORT 69 //服务器端口号 #define CLI_IP "192.168.125.244" //客户端IP地址 #define CLI_PORT 8889 //客户端端…

解读科技智慧公厕改变生活的革命性创新之路

公共厕所&#xff0c;作为城市基础设施的一部分&#xff0c;一直以来都备受人们诟病。脏乱差、设施老旧、管理混乱&#xff0c;成为公共厕所长期存在的问题。然而&#xff0c;随着科技的不断进步&#xff0c;智慧公厕应运而生&#xff0c;为解决公厕难题&#xff0c;智慧公厕源…

【ElasticSearch】安装(bug篇)

以下解决办法参考自网友们的分享 1. JDK绑定问题 但其实这样也没有问题&#xff0c;因为内嵌的jdk版本与当前的es版本是适配的 但是&#xff0c;如果内嵌的jdk与当前es不适配&#xff0c;那就要修改配置文件 / 添加环境变量&#xff0c;让es启动的时候能扫描到我们本地的jdk …

校园水电能源智能化管理系统

校园作为大量人员集聚的场所&#xff0c;水电能源的高效管理对于降低运营成本、保障安全稳定供应以及推动可持续发展至关重要。校园水电能源智能化管理系统应运而生&#xff0c;通过先进技术的应用&#xff0c;实现了对校园水电资源的智能监控、计量和管理。本文将从系统背景、…

Elasticsearch:下载、启动和账号密码登录

因为我的电脑是 window&#xff0c;以下都是以 window 环境举例。 一、下载 Elasticsearch 是使用 java 开发的&#xff0c;且 7.8 版本的 ES 需要 JDK 版本 1.8 以上&#xff0c;安装前注意java环境的准备。 官网地址&#xff1a;https://www.elastic.co/cn/ 下载地址&#xf…

最新可用免费云服务器推荐汇总

随着云计算技术的不断发展&#xff0c;越来越多的企业和个人开始关注并尝试使用云服务器。云服务器以其高度的灵活性、可扩展性和成本效益&#xff0c;成为了部署应用和存储数据的理想选择。本文将为大家汇总目前市场上最新可用的免费云服务器资源&#xff0c;帮助大家更好地了…

Linux基础|线程池Part.1|线程池的定义和运行逻辑

线程池的定义和运行逻辑 多线程的问题&#xff1a; 如果并发的线程数量很多&#xff0c;并且每个线程都是执行一个时间很短的任务就结束了&#xff0c;这样频繁创建线程就会大大降低系统的效率&#xff0c;因为频繁创建线程和销毁线程需要时间。 那么一个很自然的想法就出现了…

AI音乐,8大变现方式——Suno:音乐版的ChatGPT - 第505篇

悟纤之歌 这是利用AI为自己制作的一首歌&#xff0c;如果你也感兴趣&#xff0c;可以花点时间阅读下本篇文章。 ​ 导读 随着新一代AI音乐创作工具Suno V3、Stable audio2.0、天工SkyMusic的发布&#xff0c;大家玩自创音乐歌曲&#xff0c;玩的不亦乐乎。而有创业头脑的朋友…

mysql 转pg 两者不同的地方

因项目数据库&#xff08;原来是MySQL&#xff09;要改成PostgreSQL。 项目里面的sql要做一些调整。 1&#xff0c;写法上的区别&#xff1a; 1&#xff0c;数据准备&#xff1a; 新建表格&#xff1a; CREATE TABLE property_config ( CODE VARCHAR(50) NULL…

【UE5.1】使用MySQL and MariaDB Integration插件——(4)修改、插入、删除数据

目录 效果 步骤 一、修改 二、插入、删除 在上一篇博客&#xff08;【UE5.1】使用MySQL and MariaDB Integration插件——&#xff08;3&#xff09;表格形式显示数据&#xff09;基础上继续实现修改、插入和删除数据库数据的功能 效果 修改数据&#xff1a; 插入数据&…

java线程(1)

1、多线程启动 有两种启动方式 1、实现Runable接口 2、继承Thread类并且重写run&#xff08;&#xff09;方法 在执行进程中的任务才会产生线程&#xff0c;所以需要实现Runable接口并且重写run&#xff08;&#xff09;方法&#xff0c;然后将Runable的实现对象作为参数传…

女上司问我:误删除PG百万条数据,可以闪回吗?

作者&#xff1a;IT邦德 中国DBA联盟(ACDU)成员&#xff0c;10余年DBA工作经验 擅长主流数据Oracle、MySQL、PG、openGauss运维 备份恢复&#xff0c;安装迁移&#xff0c;性能优化、故障应急处理等可提供技术业务&#xff1a; 1.DB故障处理/疑难杂症远程支援 2.Mysql/PG/Oracl…

UML 介绍

前言 UML 简介。 文章目录 前言一、简介1、事务2、关系1&#xff09;依赖2&#xff09;关联聚合组合 3&#xff09;泛化4&#xff09;实现 二、类图三、对象图四、用例图五、交互图1、序列图&#xff08;顺序图&#xff09;2、通信图 六、状态图七、活动图八、构件图&#xff0…

【数据结构(七)】二叉树

❣博主主页: 33的博客❣ ▶文章专栏分类: Java从入门到精通◀ &#x1f69a;我的代码仓库: 33的代码仓库&#x1f69a; &#x1faf5;&#x1faf5;&#x1faf5;关注我带你学更多数据结构的知识 目录 1.前言2.树形结构2.1树的概念2.2常见概念2.3树的表示形式 3.二叉树3.1概念3…

ES源码二:集群启动过程

命令行参数解析 Elasticsearch&#xff1a;在main里面创建了Elasticsearch实例&#xff0c;然后调用了main方法&#xff0c;这个main方法最终会调用到父类Command的main方法 这里做了几件事&#xff1a; 注册一个 ShutdownHook&#xff0c;其作用就是在系统关闭的时候捕获IO…

【Web】陇原战“疫“2021网络安全大赛 题解

目录 CheckIN eaaasyphp EasyJaba CheckIN 拿到附件&#xff0c;贴出关键代码 func getController(c *gin.Context) {cmd : exec.Command("/bin/wget", c.QueryArray("argv")[1:]...)err : cmd.Run()if err ! nil {fmt.Println("error: ", …

C++11(下篇)

文章目录 C111. 模版的可变参数1.1 模版参数包的使用 2. lambda表达式2.1 Lambda表达式语法捕获列表说明 2.2 lambda的底层 3. 包装器3.1 function包装器3.2 bind 4. 线程库4.1 thread类4.2 mutex类4.3 atomic类4.4 condition_variable类 C11 1. 模版的可变参数 C11支持模版的…

当全连接队列满了,tcp客户端收到服务端RST信令的模拟

当tcp服务端全连接队列满了后&#xff0c;并且服务端也不accept取出连接&#xff0c;客户端再次连接时&#xff0c;服务端能够看到SYN_RECV状态。但是客户端看到的是ESTABLISHED状态&#xff0c;所以客户端自认为成功建立了连接&#xff0c;故其写往服务端写数据&#xff0c;发…

鸿蒙入门02-首次安装和配置

注&#xff1a;还没有安装编辑器&#xff08; deveco studio &#xff09;的小伙伴请看鸿蒙入门01-下载和安装-CSDN博客 首次安装配置 编辑器&#xff08; deveco studio &#xff09;安装完毕以后需要进入配置界面进行相关配置配置完毕以后才可以正常使用 环境配置&#xf…