DALL-E 系列 (1-3)

DALL-E 系列 (1-3)

本文主要梳理 DALL-E 系列图像生成模型的整体框架,相关论文中都包含了丰富的训练、优化细节,对这些细节本文不做过多介绍,有兴趣的读者可以阅读原文。注意,在阅读本文之前,最好先了解 VAE、VQVAE、VQGAN、GLIDE、CLIP 等一系列工作,这些在之前的文章中已经介绍过。

DALL-E: VQVAE+TextCondition

论文:Zero-Shot Text-to-Image Generation

DALLE-E 1 是在 VQVAE ( + AR model) 自回归生成的基础上加上文本条件,实现了 zero shot 的 text-to-image 生成。

与 VQGAN 类似,DALL-E 1 的训练分为两个阶段,第一阶段训练 dVAE(论文中叫 dVAE,实际就是 VQVAE)和 codebook,来作为图片 tokenizer,第二阶段训练一个 decoder-only 的 Transformer 自回归模型,作为 prior 模型。

在这里插入图片描述

第一阶段,训练 dVAE + codebook,整体过程与 VQVAE 类似,之前的文章已经介绍过,不再赘述。训练好的 dVAE encoder 相当于是一个图片 tokenizer,将像素空间的图片编码为隐空间的特征图,而 dVAE decoder 则可以将隐空间的特征图解码为真实图片。

第二阶段,训练 prior 模型。DALL-E 中的 prior 模型是一个参数量达 12B 的 decoder only 的自回归模型。在第一阶段训练完 dVAE 和 codebook 之后,固定其参数,作为图片 tokenizer。训练数据是图片文本对,BPE tokenizer 对文本进行编码,得到长度为 256 的文本 token,dVAE encoder 对图片进行编码,得到 32*32 的特征图,拉直后为 1024 个图片 token,注意这 1024 个token 都是 codebook 中的向量。将文本 token 和 图片 token 拼接起来,得到长度为 1280 的 token 序列。以前 256 个文本 token 为 prefix,把当前位置后面的图片 token 都 mask 掉,自回归地预测下一个图片 token,实际就是预测下一个 token 在 codebook 中的索引,通过交叉熵损失函数优化。

训练完成后,推理生图阶段,给定文本,将其 BPE 编码为 256 个文本 token,在后面预测图片 token 即可。在图片的自回归生成中,codebook 就相当于自然语言中的词表。所谓生成,就是预测下一个 token 的索引。预测出每一个 token 之后,将其 reshape 为特征图,送入 dVAE decoder 中生成出真实像素图片。这就完成了一次推理生图。

DALL-E 的做法基本与 VQVAE、VQGAN 一致,但是它将文本作为 prefix 预置条件,实现了 zero-shot 的 text-to-image 生成。DALL-E 的论文中,还花费很大篇幅介绍了大模型训练工程和大规模数据集构建的细节,感兴趣的读者可以参考原文。

DALL-E 2 (unCLIP): GLIDE+CLIP

论文:Hierarchical Text-Conditional Image Generation with CLIP Latents

2020 年从 DDPM 开始,扩散模型在图像生成领域大放异彩。DALL-E 2 就使用了扩散模型,方法与 OpenAI 之前另一篇扩散模型的工作 GLIDE 非常相似。在此基础上,为了实现更好的文本引导,OpenAI 还结合了自家提出的 CLIP 模型。

CLIP 模型是 OpenAI 提出的基于海量图片文本对数据集进行对比学习预训练的图文跨模态特征对齐方法,CLIP 由图片编码器和文本编码器组成,它们各自对图片和文本数据进行编码,两种数据模态的特征可以直接计算相似度。从而,CLIP 可以实现 zeroshot 的图文检索,比如由图片检索文本。而 DALL-E 2 刚好是倒过来,由文本生成图片,所以原文中将 DALL-E 2 称为 unCLIP。下图是 CLIP 由图片检索文本和 unCLIP 由文本生成图片的推理过程的示意图。

在这里插入图片描述

DALL-E 2(unCLIP)共有三部分组成,分别是预训练的 CLIP 模型,prior 模型和 decoder 模型。从上图 unCLIP 的采样过程可以看出他们各自的作用,CLIP 的文本编码器负责提取文本特征,prior 模型将文本特征转换为图片特征,解码器 decoder 则根据图片特征生成图片。

unCLIP 的几个组件是如何训练的呢?首先,CLIP 模型是预训练好的,其参数在 unCLIP 的训练过程中一直都是冻结的。所以 unCLIP 需要训练的是两部分:prior 模型和解码器 decoder。还要强调的一点是训练数据,训练 DALL-E 2 所需要的数据形式与其他文生图模型一直,是图片文本对,即一张图片与其对应的内容描述文本。

CLIP 模型不仅在 DALL-E 2 的推理生图过程中负责理解文本条件,在训练过程中它也非常重要。训练时,其参数固定,为 decoder 和 prior 的训练提供输入和监督信号。需要训练的 decoder 和 prior 分别是以 CLIP 的图像和文本特征作为输入,其中 prior 的训练还需要 CLIP 的图像特征作为监督信号,decoder 的训练则是以输入原图作为监督信号。

在这里插入图片描述

训练 decoder 模型

在生图过程中,decoder 模型的任务是将 CLIP 图片特征解码为真实的图片。其输入为 CLIP 的图像特征,输出为对应语义的真实图片。其训练过程相当于固定自编码器的编码器(参数冻结的 CLIP 图像编码器),来训练解码器。DALL-E 2 中的 decoder 是在 GLIDE 模型的基础上修改了文本条件注入的方式,具体实现细节这里就不多说。

为了生成高清大图,DALL-E 2 训练了两个扩散模型的上采样模型,分别将 64*64 上采样到 256*256 和将它们上采样到 1024*1024。即论文标题中所说的层级式的(hierarchical)生成。

训练 prior 模型

在生图的过程中,prior 模型负责的是将 CLIP 文本特征转换为 CLIP 图像特征。既然 CLIP 图片文本特征是对齐的,为什么不直接拿文本特征去生图,而是还要一步转换为图像特征呢?(以下是笔者的经验猜测)虽然经过 CLIP 对比学习的训练,图像特征和文本特征得到了一定的对齐,但是毕竟还是不同模态的特征来自两个不同的模型,还是有 modality gap 的存在。熟悉 CLIP 的读者也会知道,CLIP 的图文特征相似度的绝对值很小,即使是正样本,其相似度一般也在 0.5 以下,与孪生网络类的同模态特征相似度正样本特征接近 1 相比,modality gap 非常明显。(对 CLIP 模型 modality gap 感兴趣的读者,这里推荐一篇工作:Mind the Gap: Understanding the Modality Gap in Multi-modal Contrastive Representation Learning. arXiv 2203.02053)因此,直接将 CLIP 文本特征用于生图的效果并不好,所以 prior 模型这一步将 CLIP 文本特征转换为 CLIP 图片特征还是很有必要的。

prior 模型的输入和输出分别是 CLIP 文本特征和图片特征,所以直接由固定参数的 CLIP 分别提取图像文本对的特征,然后训练即可。

在 prior 模型的具体实现上,作者尝试了两种结构,分别是

  1. 自回归 prior ,将 CLIP 图像特征转换为一个离散编码序列,然后根据文本条件,预测下一个 token 进行自回归生成
  2. 扩散模型 prior,直接用一个高斯扩散模型来建模 CLIP 图像特征

作者还采用了一系列方法对两种结构进行优化,最终结论是效果差不多,但是扩散模型 prior 更加高效,因此 DALL-E 2 最终选择了扩散模型来作为 prior。

DALL-E 3: recaptioning + ?

论文:Improving Image Generation with Better Captions

DALLE-E 3 的论文并没有完整地介绍整个生图系统所使用的技术,而是重点介绍了目前文生图模型的一个难点:如何提升文生图模型的 prompt following 能力。目前的文生图模型的 prompt following 能力普遍还不够强,很多时候生成出的图片与文本 prompt 不够相关,并且,通常文本 prompt 只能是类似咒语一样的,多个单词的组合。作者认为,导致这个问题的原因是目前用于训练文生图模型的图片文本对数据集的质量都不够高,文本很多没能完整地描述图片内容,甚至有些干脆就是一些互联网上噪声的 alt-text。使用这种数据训练出的文生图模型,自然 prompt following 的能力不够强。作者提出的解决方案是:recaptioning,即训练一个 captioner 模型,来为图片生成更完整的文本描述。用这种合成的(synthetic)图像文本对数据集,来训练文生图模型,prompt following 能力显著提升。

训练并微调 Captioner

作者首先构建了一个基础版本的 captioner 模型,具体来说,是一个 CoCa 模型。但是这个模型也是使用通用的图像文本对数据集训练出来的,因此肯定也会受到上面说的那些低质量数据的影响。因此作者随后会对这个基础版本的 captioner 模型进行微调。微调使用的数据有两类,一类是仅描述图像主体的短 caption,称为 “short synthetic caption, SSC”,另一类则详尽地描述了图像的内容,称为 “discriptive synthetic caption, DSC”。两类 caption 的对比示例如下图。

在这里插入图片描述

不同 caption 数据集的评估

微调好两类 captioner 之后,可以合成数据集中图片的 caption,现在就有 gt、ssc、dsc 三类 caption。作者在相同的数据集上使用不同的 caption 训练了文生图模型,并评估了模型生成结果与 gt caption (下图左) 和与 dsc caption (下图右) 计算 CLIP score 的结果。CLIP score 可以反映不同文生图模型的 prompt following 能力。可以看到,与 gt caption 计算 CLIP score,基于 dsc 和 ssc 训练的文生图模型的 prompt following 均略微优于基于 gt 训练的模型;而如果与 dsc caption 计算 CLIP score,则 dsc 和 ssc 训练的模型则大幅优于 gt 训练的模型。无论怎么比,合成 caption 数据集训练出的文生图模型都比仅使用 gt caption 的 prompt following 能力更强。

注意该实验中使用合成 caption 训练的模型均是与 gt caption 进行了 95% 比 5% 的混合,而非全是合成 caption。

在这里插入图片描述

数据配比

虽然看起来合成 caption 训练出摸型的 prompt following 能力更强,但是实际中如果推理生图时的 prompt 与训练时的 caption 分布有较大的 bias,生成结果就不够好。因此要考虑用户写的生图 prompt 是否与训练时的 caption 分布一致,gt caption 自然是满足这一点的,因为它本身也是人类写的。但是合成的 caption 却不一定,因此需要在训练数据中混入适量的 gt caption 进行正则化。

那么合成 caption 与 gt caption 的配比应该是多少呢?作者对合成 caption 占比分别为 65%, 80%, 90%, 95% 进行了对比实验,结果如下图。其中 65% 的结果太低,没有出现在图中。可以看到,尽可能地提高合成 caption 的占比,可以显著提高模型的 prompt following 能力。

在这里插入图片描述

还有一点细节需要注意,DALL-E 3 使用了上述的合成 caption 数据集进行训练,但这会使得模型只有在生图 prompt 也是尽可能详尽描述图像的长 caption 时才会产生好的结果。而我们不能要求用户每次都详尽地描述图像,实际中这里会使用 GPT4 进行细节的补充。

consistency decoder

虽然 DALL-E 3 没开源,甚至技术报告都只提了 recaptioning 这一个技术点,但是 OpenAI 还是放出了一个很有用的东西:consistency decoder。代码及权重在:https://github.com/openai/consistencydecoder。

在技术报告的附录 A、B 中提到,DALL-E 3 的框架也是一个 LDM 模型,使用的也是 LDM 中的 VAE encoder 来将真实图片压缩为隐层空间特征图,也就是说,DALL-E 3 与目前常见的 Stable Diffusion 模型的隐层空间是同一个。但是,将隐层空间特征图解码为真实图片的 decoder,OpenAI 自己重新训了一个。

具体来说,consistency decoder 是一个 unet diffusion decoder,与 DDPM 中的 diffusion UNet 一致。在训练完成后,使用 consistency distillation 技术进行蒸馏,从而使得去噪过程只需两步。

只要是使用 LDM 相同的 vae 的模型,都可以直接将其 vae decoder 替换为 consistency decoder,其生成细节质量(如文字、人脸等)显著增强。

总结

DALL-E 系列(1, 2, 3)看起来更像是一个产品编号,从技术上来看,并没有什么一致性。从 DALL-E 1 的 VQVAE,到 DALL-E 2 的 unCLIP,再到 DALL-E 3 的 LDM,从 DALL-E 系列核心技术的迭代中,反倒是可以看出业界主流图像生成技术的演进:从自回归生成,到 Diffusion 模型加 CLIP 文本引导,再到如今基本统一的 LDM。只是可惜从论文到技术报告再到单个技术点分享, OpenAI 似乎越来越不 “open”,很遗憾无法一窥 DALL-E 3 全貌。

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

SQL进阶(三):Join 小技巧:提升数据的处理速度

复杂数据结构处理:Join 小技巧:提升数据的处理速度 本文是在原本sql闯关的基础上总结得来,加入了自己的理解以及疑问解答(by GPT4) 原活动链接 用到的数据:链接 提取码:l03e 目录 1. 课前小问…

静态时序分析:SDC约束命令set_load详解

相关阅读 静态时序分析https://blog.csdn.net/weixin_45791458/category_12567571.html?spm1001.2014.3001.5482 set_load命令用于指定端口(port)或线网(net)的负载电容,该指令的BNF范式(有关BNF范式,可以参考以往文章)为&#…

锂电池SOC估计 | PyTorch实现基于Basisformer模型的锂电池SOC估计

目录 预测效果基本介绍程序设计参考资料 预测效果 基本介绍 PyTorch实现基于Basisformer模型的锂电池SOC估计 锂电池SOC估计,全新【Basisformer】时间序列预测 1.采用自适应监督自监督对比学习方法学习时序特征; 2.通过双向交叉注意力机制计算历史序列和…

计算机网络面经-TCP的拥塞控制

写在前边 前边我们分享了网络分层协议、TCP 三次握手、TCP 四次分手。今天我们继续深入分享一下 TCP 中的拥塞控制。 对于 TCP 的拥塞控制,里边设计到很多细节,平平无奇的羊希望通过这一节能够将这部分内容串通起来,能够让你更深刻的记忆这部分内容。 思维导图 1、什么…

嵌入式学习 Day 23

一. 进程基本概念: 1.进程: 程序:存放在外存中的一段数据组成的文件 进程:是一个程序动态执行的过程,包括进程的创建、进程的调度、进程的消亡 2.进程相关命令: 1.top 动态查看当前系统中的所有进程信息(根据CPU占用率排序)…

Java/Python/Go不同开发语言基础数据结构和相关操作总结-GC篇

Java/Python/Go不同开发语言基础数据结构和相关操作总结 1. 常见gc方式1.1 gc判断对象是否存活1.2 引用计数法1.2 标记-清除算法1.3 复制算法1.4 标记-压缩算法1.5 分代收集算法 2. java的gc方式以及垃圾回收器2.1 gc方式2.1 gc回收器2.1.1 Serial收集器2.1.2 ParNew收集器2.1.…

成长优化算法(Growth Optimizer,GO)求解不闭合MD-MTSP(提供MATLAB代码)

一、成长优化算法介绍 成长优化算法(Growth Optimizer,GO)由Qingke Zhang等人于2023年提出,该算法的设计灵感来源于个人在成长过程中的学习和反思机制。学习是个人通过从外部世界获取知识而成长的过程,反思是检查个体…

手写myscrapy(五)

项目地址:https://gitee.com/wyu_001/myscrapy 我们继续完成返回的处理类 MyResponse的实现 先上类图: 主要功能: json() 方法解析返回的json格式内容,转换为 python 的json对象 xpath()方法解析返回的html格式的内…

LabVIEW和Python开发微细车削控制系统

LabVIEW和Python开发微细车削控制系统 为满足现代精密加工的需求,开发了一套基于LabVIEW和Python的微细车削控制系统。该系统通过模块化设计,实现了高精度的加工控制和G代码的自动生成,有效提高了微细车削加工的自动化水平和编程效率。 项目…

微服务-微服务Spring Security OAuth 2实战

1. Spring Authorization Server 是什么 Spring Authorization Server 是一个框架,它提供了 OAuth 2.1 和 OpenID Connect 1.0 规范以及其他相关规范的实现。它建立在 Spring Security 之上,为构建 OpenID Connect 1.0 身份提供者和 OAuth2 授权服务器产…

区分服务 DiffServ

目录 区分服务 DiffServ 区分服务的基本概念 区分服务 DiffServ 的要点 每跳行为 PHB DiffServ 定义的两种 PHB 区分服务 DiffServ 区分服务的基本概念 由于综合服务 IntServ 和资源预留协议 RSVP 都较复杂,很难在大规模的网络中实现,因此 IET…

挑战杯 基于机器学习与大数据的糖尿病预测

文章目录 1 前言1 课题背景2 数据导入处理3 数据可视化分析4 特征选择4.1 通过相关性进行筛选4.2 多重共线性4.3 RFE(递归特征消除法)4.4 正则化 5 机器学习模型建立与评价5.1 评价方式的选择5.2 模型的建立与评价5.3 模型参数调优5.4 将调参过后的模型重…

vulnhub靶场---->DOUBLETROUBLE: 1

详细思路 知识点1.网段探测2.nmap扫描3.目录扫描4.隐写5.上传木马文件6.awk提权 知识点 图片隐写----->steghide 密码爆破----->stegseek awk提权------>sudo awk BEGIN {system("/bin/bash")}1.网段探测 kali:192.168.0.131 靶机:192.168.0.1…

【小沐学QT】QT学习之Web控件的使用

文章目录 1、简介1.1 Qt简介1.2 Qt下载和安装1.3 Qt快捷键1.4 Qt帮助 2、QtWeb控件2.1 测试代码1(QApplication)2.2 测试代码2(QApplicationQWidget)2.3 测试代码3(QApplicationQMainWindow)2.4 测试代码4&…

Spring事务模板及afterCommit存在的坑

大家好,我是墨哥(隐墨星辰)。今天的内容来源于两个线上问题,主要和大家聊聊为什么支付系统中基本只使用事务模板方法,而不使用声明式事务Transaction注解,以及使用afterCommit()出现连接未按预期释放导致的…

AI赋能Oracle DBA:以自然语言与Oracle数据库互动

DBA AI助手:以自然语言与Oracle数据库互动 0. 引言1. AI赋能Oracle DBA的优势2. AI如何与Oracle数据库交互3. 自然语言查询的一些示例4. 未来展望 0. 引言 传统的Oracle数据库管理 (DBA) 依赖于人工操作,包括编写复杂的SQL语句、分析性能指标和解决各种…

项目解决方案:街道社区视频监控接入、汇聚和联网设计方案

目 录 一、客户需求 二、网络拓扑图 三、方案描述 四、系统配置 1、服务器配置 2、带宽配置 五、方案优势 1. 平台可堆叠使用 2. 支持主流接入协议 4. 多种终端显示 5. 客户端功能强大 6. 一机一档 一、客户需求 1,一个街道有十个社…

计算机设计大赛 深度学习图像风格迁移 - opencv python

文章目录 0 前言1 VGG网络2 风格迁移3 内容损失4 风格损失5 主代码实现6 迁移模型实现7 效果展示8 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 深度学习图像风格迁移 - opencv python 该项目较为新颖,适合作为竞赛课题…

Linux环境基础开发工具使用篇(三) git 与 gdb

一、版本控制器-git 1.简单理解: ①git既是服务端,又是客户端 ②git会记录版本的变化 ③git是一个去中心化的分布式软件 git/gitee 是基于git仓库搭建的网站,让版本管理可视化 2.git 三板斧提交代码 查看安装的git版本 git--version 命令行提交代…

Python读写XML文件的技术指南【第100篇—读写XML文件】

Python读写XML文件的技术指南 在软件开发中,XML(可扩展标记语言)是一种广泛用于数据存储和交换的格式。Python作为一门强大而灵活的编程语言,提供了许多库和工具来处理XML文件。本篇技术博客将介绍如何使用Python读写XML文件&…