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://www.hqwc.cn/news/491387.html

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

相关文章

解决启动服务报./nginx -s reload nginx: [emerg] unknown directive “错误

重启服务报错 bug: ./nginx -s reload nginx: [emerg] unknown directive "? 原因: 一、可能打开没有关闭 二、刚刚编辑的没成功,乱码了,格式问题,重新配置

一种基于道路分类特性的超快速车道检测算法

摘要: 本文介绍了一种新颖、简单但有效的车道检测公式。 车道检测是自动驾驶和高级驾驶员辅助系统 (ADAS) 的基本组成部分,在实际高阶驾驶辅助应用中,考虑车道保持、转向、限速等相关的控制问题,这种方式通常是通过受限的车辆计算…

Xcode与Swift开发小记

引子 鉴于React Native目前版本在iOS上开发遇到诸多问题,本以为搞RN只需理会Javascript开发,没想到冒出CocoaPod的一堆编译问题。所以横下一条心,决定直接进攻iOS本身。不管你是用React Native,还是用Flutter,iOS下的…

深度学习500问——Chapter01:数学基础

文章目录 前言 1.1 向量和矩阵 1.1.1 标量、向量、矩阵、张量之间的联系 1.1.2 张量与矩阵的区别 1.1.3 矩阵和向量相乘结果 1.1.4 向量和矩阵的范数归纳 1.1.5 如何判断一个矩阵为正定 1.2 导数和偏导数 1.2.1 导数偏导计算 1.2.2 导数和偏导数有什么区别 1.3 特征值和特征向量…

Java+SpringBoot+Vue+MySQL:疫情隔离酒店管理的全面技术解决方案

✍✍计算机毕业编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java、…

博途PLC PID仿真(单容水箱液位高度控制含变积分变增益测试)

单容水箱和双荣水箱的微分方程和数值求解,可以参考下面文章链接: https://rxxw-control.blog.csdn.net/article/details/131139432https://rxxw-control.blog.csdn.net/article/details/131139432这篇博客我们利用欧拉求解器在PLC里完成单容水箱的数学建模。PLC也可以和MATL…

贪心算法---前端问题

1、贪心算法—只关注于当前阶段的局部最优解,希望通过一系列的局部最优解来推出全局最优----但是有的时候每个阶段的局部最优之和并不是全局最优 例如假设你需要找给客户 n 元钱的零钱,而你手上只有若干种面额的硬币,如 1 元、5 元、10 元、50 元和 100…

数据结构 计算结构体大小

一、规则: 操作系统制定对齐量: 64位操作系统,默认8Byte对齐 32位操作系统,默认4Byte对齐 结构体对齐规则: 1.结构体整体的大小,需要是最大成员对齐量的整数倍 2.结构体中每一个成员的偏移量需要存在…

自定义el-upload 上传文件

前言 最近在做一个文件上传的功能&#xff0c;后端接口写好了、发现前端上传文件的页面不会写……&#xff08;我很笨的&#xff09;然后我就找啊找发现element有个组件是<el-upload/>能直接上传文件。我就想直接用拿来改改改成自己想要的&#xff0c;可是就是这样我花了…

SpringMVC 学习(六)之视图

目录 1 SpringMVC 视图介绍 2 JSP 视图 3 Thymeleaf 视图 4 FreeMarker 视图 5 XSLT 视图 6 请求转发与重定向 6.1 请求转发 (Forward) 6.2 重定向 (Redirect) 7 视图控制器 (view-controller) 1 SpringMVC 视图介绍 在 SpringMVC 框架中&#xff0c;视图可以是一个 J…

2.23日学习打卡----初学Nginx(二)

2.23日学习打卡 目录: 2.23日学习打卡一. Nginx 虚拟主机虚拟主机的分类Nginx支持三种类型的虚拟主机配置Nginx虚拟主机单网卡多IP配置Nginx虚拟主机_基于域名虚拟主机配置Nginx虚拟主机基于多端口的配置4 二. Nginx 核心指令root和alias指令的区别return指令rewrite指令rewrit…

机器学习打分函数在分子对接中的应用系列-GB_Score

欢迎浏览我的CSND博客&#xff01; Blockbuater_drug …点击进入 文章目录 前言一、GB-Score是什么&#xff1f;二、文献复现 -训练和验证环境1. GB score验证虚拟环境的配置2. Usage1- Preparing ligand and protein file2- Generating features3 - Repeat and extend current…