AIGC实战——多模态模型DALL.E 2

AIGC实战——多模态模型DALL.E 2

    • 0. 前言
    • 1. 模型架构
    • 2. 文本编码器
    • 3. CLIP
    • 4. 先验模型
      • 4.1 自回归先验模型
      • 4.2 扩散先验模型
    • 5. 解码器
      • 5.1 GLIDE
      • 5.2 上采样器
    • 6. DALL.E 2 应用
      • 6.1 图像变体
      • 6.2 先验模型的重要性
      • 6.3 DALL.E 2 限制
    • 小结
    • 系列链接

0. 前言

DALL.E 2OpenAI 设计用于文本生成图像的生成模型。该模型的第一个版本 DALL.E2021 年发布,引起了对生成多模态模型的广泛关注。在本节中,我们将介绍该模型的第二个版本 DALL.E 2,该模型于 2022 年发布,DALL.E 2 进一步促使我们了解人工智能 (Artificial Intelligence, AI) 解决多模态问题的能力。它不仅在学术上具有重要意义,同时迫使我们思考 AI 创造性过程中的角色问题,这种制造性问题一直以来被认为是人类独有的能力。

1. 模型架构

为了了解 DALL.E 2 的工作原理,我们首先必须了解其整体架构,如下图所示。

模型架构

我们需要了解以下三个关键组件:文本编码器 (Text encoder)、先验模型 (Prior) 和解码器 (Decoder)。首先,文本通过文本编码器生成文本嵌入向量。然后,这个向量经过先验模型转换成图像嵌入向量。最后,图像嵌入向量连同原始文本一起传递给解码器生成图像。我们将逐个介绍每个组件,以完整地了解 DALL.E 2 的工作原理。

2. 文本编码器

文本编码器 (Text encoder) 的目标是将文本提示 (prompt) 转换为表示文本提示概念意义的嵌入向量,在潜空间中表达。将离散的文本转换为连续的嵌入向量对于所有下游任务来说都是至关重要的,因为我们可以根据特定下游任务进一步操纵该向量。
DALL.E 2 中,并未从头开始训练文本编码器,而是使用了一个名为 CLIP (Contrastive Language-Image Pre-training) 的模型。因此,要理解文本编码器,我们需要首先了解 CLIP 的工作原理。

3. CLIP

CLIPOpenAI2021 年提出的,是一个能够有效地从自然语言中学习视觉概念的神经网络。它使用对比学习技术,将图像与文本描述进行匹配。该模型利用从互联网上获取的 4 亿个文本-图像对数据集进行训练。给定一张图片和一系列可能的文本描述, CLIP 的任务是找到与图片相匹配的描述。
对比学习背后的核心思想很简单,训练两个神经网络:一个将文本转换为文本嵌入向量的文本编码器,以及一个将图像转换为图像嵌入向量的图像编码器。然后,给定一批文本-图像对,使用余弦相似度比较所有文本和图像嵌入向量的组合,并训练网络最大化匹配的文本-图像对的得分,同时最小化错误的文本-图像对的得分,过程如下所示。

对比学习

CLIP 本身不是生成模型,它无法生成图像或文本。它更像是一个判别模型,因为最终输出的是关于给定集合中哪个文本描述与给定图像最匹配(或者反过来,哪个图像最能匹配给定的文本描述)的预测。
文本编码器和图像编码器都是 Transformer 模型,其中图像编码器是 Vision Transformer (ViT) 模型,将注意力机制应用于图像中。
CLIP 有趣的地方在于它可以用于从未接触过的任务上进行零样本预测。例如,假设我们想要使用 CLIP 来预测 ImageNet 数据集中给定图像的标签。我们可以通过使用一个模板(例如“一张<标签>的照片”)将 ImageNet 标签转换为句子,如下图所示。

将标签转换为句子

要预测给定图像的标签,我们可以将其通过 CLIP 图像编码器,并计算图像嵌入向量与所有可能的文本嵌入向量之间的余弦相似度,以找到得分最高的标签,如下图所示。

计算图像嵌入向量

无需重新训练 CLIP 神经网络,就可以将它轻松应用新任务。它使用语言作为共同域,通过该域可以表达任何标签集合。
使用这种方法,CLIP 在各种图像数据集标注挑战中都具有良好的性能表现,如下图所示。而其他在特定数据集上训练以预测给定标签集的模型,往往在应用于具有相同标签的不同数据集时性能交叉,因为它们倾向于高度优化在其训练集上训练的个别(异常)数据集。相比之下,CLIP 更加稳定,因为它学到了对完整文本描述和图像的深入概念理解,而不仅仅擅长类似“将单个标签分配给给定数据集中的图像”这类狭义的任务。

CLIP

CLIP 是根据其判别能力进行评估的,那么它如何帮助我们构建诸如 DALL.E 2 这样的生成模型呢?我们可以将经过训练的文本编码器作为 DALL.E 2 等较大模型的一部分使用,其权重被冻结。经过训练的编码器只是一个用于将文本转换为文本嵌入向量的通用模型,对于生成图像等下游任务非常有用。经过训练的文本编码器能够捕捉到丰富的文本概念理解,尽可能地与其匹配的图像嵌入向量具有相似性,而后者根据相匹配的图像生成。因此,它是我们从文本域过渡到图像域所需的第一部分。

4. 先验模型

先验模型将文本嵌入向量转换为 CLIP 图像嵌入向量,DALL.E 2 尝试了两种不同的方法来训练先验模型:

  • 自回归模型
  • 扩散模型

并证明了扩散模型优于自回归模型,且计算效率更高。在本节中,我们将同时介绍这两种方法并了解它们的区别。

4.1 自回归先验模型

自回归模型按顺序生成输出,通过对输出符号(例如单词、像素)进行排序,并根据先前的符号生成下一个符号,在递归神经网络、Transformer 和 PixelCNN 中我们已经学习了如何应用自回归模型。
DALL.E 2 的自回归先验 (Autoregressive prior) 模型是一个编码器-解码器 Transformer。它的训练目标是在给定 CLIP 文本嵌入向量的情况下重新生成 CLIP 图像嵌入,如下图所示。

自回归先验模型

该模型是在 CLIP 文本-图像对数据集上进行训练的。可以将其视为从文本域跳转到图像域所需的第二个部分,即将一个向量从文本嵌入潜空间转换为图像嵌入潜空间。
输入文本嵌入通过 Transformer 的编码器进行处理,以产生另一个表示,该表示与当前生成的输出图像嵌入一起馈送到解码器中。输出是逐元素生成的,强制将预测的下一个元素与实际的 CLIP 图像嵌入进行比较。
生成的顺序性意味着自回归模型的计算效率低于扩散先验模型。

4.2 扩散先验模型

[扩散模型]逐渐为生成建模的首选,在 DALL.E 2 中,使用了一个仅有解码器的 Transformer 作为先验模型,并使用扩散过程进行训练,训练和生成过程如下图所示。

扩散先验模型

在训练过程中,每个CLIP文本和图像嵌入对首先被连接成一个单一的向量。然后,图像嵌入在1000个时间步长内加入噪声,直到与随机噪声无法区分。然后,训练扩散先验 (Diffusion prior) 模型以预测上一个时间步的去噪图像嵌入。先验模型始终可以访问文本嵌入,因此可以根据这些信息对其预测进行调整,逐渐将随机噪声转变为预测的CLIP图像嵌入。损失函数是去噪步骤的平均均方误差。
为了生成新的图像嵌入,对随机向量进行采样,预处理相关的文本嵌入,并多次将其通过训练的扩散先验模型。

5. 解码器

DALL.E 2 的最后部分是解码器,根据文本提示和先验模型输出的预测图像嵌入生成最终图像。
解码器的架构和训练过程借鉴了生成模型 GLIDE (Guided Language to Image Diffusion for Generation and Editing)。GLIDE 能够根据文本提示生成逼真的图像,与 DALL.E 2 的工作方式非常相似。不同之处在于,GLIDE 并不使用 CLIP 嵌入,而是直接使用原始文本提示进行训练,如下图所示。

GLIDE

5.1 GLIDE

GLIDE 是一种扩散模型,其使用 U-Net 架构作为去噪器,使用 Transformer 架构作为文本编码器。它通过文本提示来消除添加到图像上的噪音。最后,训练一个上采样器,将生成的图像尺寸缩放为 1,024×1,024 像素。
GLIDE 模型中把包括 35 亿个可训练参数,其中包括 23 亿个用于视觉部分模型( U-Net 和上采样器)的参数和 12 亿个用于 Transformer 模型的参数,并在 2.5 亿个文本-图像对上进行训练。
扩散过程如下图所示。首先使用 Transformer 创建输入文本提示的嵌入,然后使用该嵌入指导 U-Net 进行去噪过程。当图像的输入、输出尺寸相同时(例如风格迁移、去噪等),U-Net 模型是完美的选择。

GLIDE

DALL.E 2 解码器同样使用 U-Net 去噪器和 Transformer 文本编码器架构,但还额外使用预测的 CLIP 图像嵌入进行条件控制。这是 GLIDEDALL.E 2 之间的关键差异,如下图所示。

GLIDE 与 GALL.E 2 差异

与所有扩散模型一样,为了生成新的图像,我们只需对一些随机噪声进行采样,以 Transformer 文本编码和图像嵌入为条件,多次通过 U-Net 去噪器进行处理,输出尺寸为 64 × 64 像素的图像。

5.2 上采样器

解码器的最后一部分是上采样器(两个独立的扩散模型)。第一个扩散模型将图像从 64 × 64 像素转换为 256 × 256 像素。第二个扩散模型再次将其转换为 1,024 × 1,024 像素,如下图所示。
使用上采样,可以令我们不必构建大型上游模型来处理高维图像。我们可以在整个过程中使用小尺寸图像,直到最后阶段再应用上采样器。这样可以节省模型参数,并确保上游训练过程更加高效。

上采样器

总之,DALL.E 2 利用预训练的 CLIP 模型生成输入提示的文本嵌入。然后,使用先验扩散模型将其转换为图像嵌入。最后,使用类似 GLIDE 的扩散模型,以生成输出图像,其条件是预测的图像嵌入和 Transformer 编码的输入提示。

6. DALL.E 2 应用

DALL.E2 能够以可信的方式将复杂、不同的概念结合起来,展示了人工智能和生成建模的重大飞跃。DALL.E 2 模型具有多种应用,其中之一是创建给定图像的变体。

6.1 图像变体

使用 DALL.E 2 解码器生成图像时,我们首先对由纯随机噪声组成的图像进行采样,然后在提供的图像嵌入的条件下,使用去噪扩散模型逐渐减少噪声量。选择不同的初始随机噪声样本将产生不同的图像。
为了生成给定图像的变体,我们只需要确定其图像嵌入,并将其馈送到解码器。我们可以使用原始的 CLIP 图像编码器来获得这个图像嵌入,该编码器明确设计为将图像转换为其 CLIP 图像嵌入。

图像变体

6.2 先验模型的重要性

先验模型的目的是利用预训练的 CLIP 模型向解码器提供有用的图像表示。但是,如果将文本嵌入(而非图像嵌入)直接传递给解码器,或者忽略 CLIP 嵌入,仅基于文本提示进行条件控制,这样是否会影响生成的质量?为了进行测试,可以尝试使用三种不同的方法:

  • 只使用文本提示作为解码器的输入(图像嵌入使用零向量)
  • 将文本提示和文本嵌入(将其视为图像嵌入)一起用作解码器的输入
  • 将文本提示和图像嵌入一起用作解码器的输入,即完整 DALL.E 2 模型

示例结果如下图所示。我们可以看到,当解码器缺乏图像嵌入信息时,它只能生成与文本提示大致近似的图像,无法捕获与刺猬和计算器之间的关系等关键信息。将文本嵌入视为图像嵌入进行处理的表现略好,但仍无法捕捉刺猬和计算器之间的关系。只有带有先验模型的完整模型才能生成准确反映提示中包含的所有信息的图像。

先验模型的重要性

6.3 DALL.E 2 限制

DALL.E 2 仍存在一些限制,包括属性绑定和文本生成,如下图所示。

DALL.E 2 限制

属性绑定是模型理解给定文本提示中单词之间关系的能力,尤其是属性与对象之间的关系。例如,根据“一个红色的立方体放在一个蓝色的立方体上方”生成的图像必须与“一个蓝色的立方体放在一个红色的立方体上方”有明显的区别。相比于 GLIDE 等早期模型,尽管生成的整体质量更好且更多样化,但 DALL.E 2 在这方面仍有所欠缺。
此外,DALL.E 2 无法准确地重现文本内容,这可能是因为 CLIP 嵌入并不捕捉拼写特征,而只包含文本的较高级表示。这些表示可以部分地成功解码为文本(例如,个别字母基本正确),但缺乏足够的组合理解以形成完整的单词。

小结

DALL.E 2OpenAI 提出的一个大规模文本生成图像模型,可以根据文本提示生成各种风格的逼真图像。它通过将预训练模型 CLIPGLIDE 中的扩散模型架构相结合完成任务。它还具有其他应用,例如通过文本提示编辑图像和提供给定图像的变体。虽然它也有一些局限性,例如不一致的文本渲染和属性绑定,但 DALL.E 2 是仍然一个非常强大的AI模型,推动了生成模型的发展。

系列链接

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)
AIGC实战——VQ-GAN(Vector Quantized Generative Adversarial Network)
AIGC实战——基于Transformer实现音乐生成
AIGC实战——MuseGAN详解与实现

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

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

相关文章

Apache Knox 2.0.0使用

目录 介绍 使用 gateway-site.xml users.ldif my_hdfs.xml my_yarn.xml 其它 介绍 The Apache Knox Gateway is a system that provides a single point of authentication and access for Apache Hadoop services in a cluster. The goal is to simplify Hadoop securit…

深圳比创达电子|EMI一站式解决方案:提升企业电磁兼容性的路径

随着电子技术的快速发展&#xff0c;电磁干扰&#xff08;EMI&#xff09;问题日益凸显&#xff0c;对电子设备的正常运行和性能稳定造成了严重影响。为了有效应对这一挑战&#xff0c;EMI一站式解决方案应运而生&#xff0c;成为众多企业和个人解决EMI问题的首选方案。 一、E…

2. 外婆都称赞的基于Jaeger的Span模型改造

前言 我们的目标是基于Jaeger来实现分布式链路追踪的Java客户端工具包&#xff0c;实际就是一个Springboot的Starter&#xff0c;在1. 看完这篇文章我奶奶都懂Opentracing了一文中我们详细的学习了一下Opentracing的相关概念以及阅读了相关的源码&#xff0c;同时特别重要的是…

HOOPS Visualize:工业级3D可视化SDK,打造移动端和PC端工程应用程序

HOOPS Visualize是一种高性能的软件开发工具包&#xff08;SDK&#xff09;&#xff0c;旨在帮助开发人员轻松构建和集成高质量的3D可视化功能。这是一种全功能的&#xff0c;以工程为重点的场景图技术&#xff0c;我们称为Core Graphics。Core Graphics可集成到一个框架中&…

将 Vue、React、Angular、HTML 等一键打包成 macOS 和 Windows 平台客户端应用

应用简介 PPX 基于 pywebview 和 PyInstaller 框架&#xff0c;构建 macOS 和 Windows 平台的客户端。本应用的视图层支持 Vue、React、Angular、HTML 中的任意一种&#xff0c;业务层支持 Python 脚本。考虑到某些生物计算场景数据量大&#xff0c;数据私密&#xff0c;因此将…

Quartz怎么简单创建一个定时执行的任务

1.安装Quartz包 2.编写Job任务 继承 IJob编辑自定义任务 3.调用job&#xff0c;以指定时间策略执行 定时600s执行一次 StdSchedulerFactory factory new StdSchedulerFactory(); IScheduler scheduler await factory.GetScheduler(); await scheduler.Start();// 定义…

AP2305GN 封装SOT23 场效应管

AP2305GN是一款P通道增强型功率MOSFET&#xff0c;适用于多种电子设备和系统中的高频率切换应用。下面是一些可能包含在该器件的功能和参数介绍中的关键点&#xff1a; 封装: AP2305GN通常采用表面安装封装&#xff0c;如SMD或SMT封装&#xff0c;适用于自动化电路板装配。 电…

长难句打卡5.8

If it is trying to upset Google, which relies almost wholly on advertising, it has chosen an indirect method: there is no guarantee that DNT by default will become the norm. 如果它想激怒几乎全靠广告业务运营的谷歌公司的话&#xff0c;那么它选择了一个间接的方…

微软正在自主构建一个名为 MAI-1 的大型语言模型(不依赖 OpenAI)

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

C++算法题 - 二叉树(2)

TOC 114. 二叉树展开为链表 LeetCode_link 给你二叉树的根结点 root &#xff0c;请你将它展开为一个单链表&#xff1a; 展开后的单链表应该同样使用 TreeNode &#xff0c;其中 right 子指针指向链表中下一个结点&#xff0c;而左子指针始终为 null 。展开后的单链表应该与…

已解决RuntimeError: CUDA error: invalid device ordinal 亲测有效!!!

已解决RuntimeError: CUDA error: invalid device ordinal 亲测有效&#xff01;&#xff01;&#xff01; 亲测有效 报错问题解决思路解决方法 报错问题 当你尝试使用CUDA进行GPU加速计算时&#xff0c;可能会遇到以下错误&#xff1a; RuntimeError: CUDA error: invalid d…

为什么 ChatGPT 不火了?

不火了是有原因的&#xff0c;下面我来从大部分人拿到 ChatGPT 之后的两大痛点开始讲起&#xff1a; 很多朋友拿到 ChatGPT 后的第一个痛点就是&#xff1a;用的不好 你经常会感觉到 ChatGPT 回答的好空&#xff0c;没有太多参考价值。 而第二个痛点则是&#xff1a;无处去用…

HTML批量文件上传2——进度条显示

作者&#xff1a;私语茶馆 非常多的云应用中需要上传文本&#xff0c;包括图片&#xff0c;文件等等&#xff0c;这些批量文件上传&#xff0c;往往涉及到进度条显示&#xff0c;多文件上传等&#xff0c;这里分享一个非常好的案例&#xff0c;来自BootStrapfriendly.com&#…

C++ | Leetcode C++题解之第76题最小覆盖子串

题目&#xff1a; 题解&#xff1a; class Solution { public:unordered_map <char, int> ori, cnt;bool check() {for (const auto &p: ori) {if (cnt[p.first] < p.second) {return false;}}return true;}string minWindow(string s, string t) {for (const au…

AI中转计费平台系统源码

AI中转计费平台系统源码 源码免费下载地址抄笔记 (chaobiji.cn)

ChIP-seq or CUTTag,谁能hold住蛋白质与DNA互作主战场?

DNA与蛋白质的相互作用作为表观遗传学中的一个重要领域&#xff0c;对理解基因表达调控、DNA复制与修复、表观遗传修饰&#xff08;组蛋白修饰&#xff09;及染色质结构等基本生命过程至关重要。 自1983年James Broach首次公布染色质免疫共沉淀&#xff08;ChIP&#xff09;技…

Ubuntu18.04 安装 anconda

anaconda官网 bash Anaconda3-2021.11-Linux-x86_64.sh一直回车&#xff0c;输入yes 选择安装目录 是否希望更新shell配置文件以自动初始化conda

STM32快速入门(定时器之输入捕获)

STM32快速入门&#xff08;定时器之输入捕获&#xff09; 前言 本节主要讲解STM32利用通用定时器&#xff0c;在输入引脚出现指定电平跳变时&#xff0c;将CNT的值锁存到CCR寄存器当中&#xff0c;从而计算PWM波形的频率、占空比、脉冲间隔、电平持续时间等。其功能的应用有&…

【转载】SAP MM培训事务代码

有需要的赶快收藏起来&#xff01;&#xff01;&#xff01;

4diacIDE同时编译不同版本踩坑记录

4diac不同版本依赖插件版本及jdk版本是不同的&#xff0c;当你需要搭建不同版本4diacIDE开发环境时&#xff0c;就会出现各种问题。最近一个月github上项目提交记录比较多&#xff0c;出现了不少坑。以下记录下此背景下的解决方法&#xff1a; 1、首先由于.target依赖的eclipse…