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详解与实现

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

领域驱动设计架构演进

领域驱动设计由于其强调对领域的深入理解和关注业务价值,其架构演进依赖于领域的变化和特定领域中的技术实践。 初始阶段 一个单体架构,所有的功能都集成在一个应用程序中,领域模型可能还不完全清晰,甚至并未形成。这个阶段主要是为了验证产品的可行性,快速迭代并尽快推…

有没有国内个人可用的GPT平替?推荐5个AI工具

随着AI技术的快速发展&#xff0c;AI写作正成为创作的新风口。但是面对GPT-4这样的国际巨头&#xff0c;国内很多小伙伴往往望而却步&#xff0c;究其原因&#xff0c;就是它的使用门槛高&#xff0c;还有成本的考量。 不过&#xff0c;随着GPT技术的火热&#xff0c;国内也涌…

2023年度合肥市优秀知识产权服务机构评选申报主体条件、材料和时间程序须知

一、申报主体 在合肥市行政区域内登记注册的知识产权服务机构&#xff0c; 二、申报条件 (一)在合肥市登记注册时间满1年&#xff0c;营业执照经营范围包含知识产权代理、服务等相关内容; (二)在全国专利代理信息公示平台进行备案; (三)有稳定的专业服务人才队伍和服务对象…

【SSL证书】免费单域名SSL证书怎么申请

1、访问证书颁发机构&#xff08;CA&#xff09;&#xff1a;比如JoySSL、ZeroSSL、各大云平台等&#xff0c;这些机构提供免费的SSL证书申请&#xff0c;并支持单域名证书。在网站上注册账号&#xff0c;并根据提示选择单域名证书进行申请。 &#xff01;&#xff01;&#xf…

工厂模式应用实例

引言 设计模式概念 设计模式&#xff08;Design Pattern&#xff09;的官方概念可以表述为&#xff1a;在软件设计中&#xff0c;设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。它是针对特定问题或特定场景的解决方案&#xff0c;是一种经过…

使用STM32CubeMX进行STM32F4的定时器配置

目录 1. Pin脚2. 配置2.1 时钟配置2.2 RCC配置2.3 Timer配置2.4 输出文件 3. 代码3.1 使能定时器3.2 回调函数 1. Pin脚 2. 配置 2.1 时钟配置 timer3时钟挂载在APB1上&#xff1a; 时钟配置如下&#xff1a; 外部使用8MHz晶振 开启内部16MHz晶振 使用锁相环 开启最高100MHz。…

揭秘依赖注入:软件开发人员的基本指南

Dependency injection (DI) is a design pattern and programming technique to manage dependencies between different components. 依赖注入&#xff08;DI&#xff09;是一种用于管理不同组件之间依赖关系的设计模式和编程技术。 In DI, the dependencies of a class or ot…

机台统一管理有多困难?但现在出现可行的解决方案了

机台的统一管理对于企业来说对提高生产效率、降低成本、优化资源配置以及保障生产安全等方面都具有至关重要的作用。但企业机台统一管理却存在实际的困难&#xff0c;主要体现在&#xff1a; 多样化的设备和运作模式&#xff1a;由于机台设备可能来自不同的厂商&#xff0c;其规…

如何描述自己的算法?

算法的表达 好的&#xff0c;让我们来一起探讨如何向别人介绍我们的算法。说话很简单&#xff0c;但要把话说清楚&#xff0c;说明白就不那么容易了。同样的道理&#xff0c;能够通俗易懂&#xff0c;直观清晰和严谨地描述一个算法&#xff0c;也是一项具有挑战性的任务。接下…

106短信群发平台在金融和法务行业的应用分析

一、金融行业应用 1.客户通知与提醒&#xff1a;银行、证券、保险等金融机构经常需要向客户发送各类通知和提醒&#xff0c;如账户余额变动、交易确认、扣费通知、理财产品到期提醒等。106短信群发平台可以快速、准确地将这些信息发送到客户的手机上&#xff0c;确保客户及时获…

.NET邮箱API发送邮件的步骤?怎么配置API?

.NET邮箱API发送邮件需要注意哪些&#xff1f;如何使用API发信&#xff1f; 在.NET环境中&#xff0c;使用邮箱API发送邮件是一个常见的需求。无论是企业级的邮件通知&#xff0c;还是个人项目中的邮件验证&#xff0c;都少不了.NET邮箱API的帮助。下面&#xff0c;AokSend将详…

我的创作纪念日(365天)

时间如白驹过隙&#xff0c;转眼间&#xff0c;我已经在技术写作这条路上走过了365个日夜。回望2023年5月9日&#xff0c;我敲下了第1篇技术博客的标题——《什么是代理IP&#xff1f;代理IP有什么用途》。那一天&#xff0c;平凡而又不平凡&#xff0c;因为我决定将自己的知识…

政安晨【零基础玩转各类开源AI项目】:基于Ubuntu系统本地部署使用GPT-SoVITS进行语音克隆与TTS语音生成

目录 介绍 什么是TTS 安装Miniconda 框架功能 测试通过的环境 开始 1. 安装好miniconda 2. 进入下载的GPT-SoVITS目录 3. 创建虚拟环境并执行脚本 4. 执行过程中可能会出错 5. 下载预训练模型 6. 训练过程中可能会报错 7. 使用过程中可能出错 8.以下是使用全过程…

信息安全管理体系介绍(含全套体系文档)

信息安全管理体系英文全称Information Security Management System&#xff0c;简称为ISMS&#xff0c;是1998年左右从英国发展起来的信息安全领域中的一个全新概念&#xff0c;是管理体系&#xff08;Management System&#xff0c;MS&#xff09;思想和方法在信息安全领域的应…

Flask-大体了解介绍

初识Flask Flask是使用 Python编写的Web微框架。Web框架可以让我们不用关心底层的请求响应处理&#xff0c;更方便高效地编写Web程序。 Flask主要有两个依赖&#xff0c;一个是WSGI&#xff08;Web Server Gateway Interface&#xff0c;Web服务器网关接口&#xff09;工具集…

探索大语言模型在信息提取中的应用与前景

随着人工智能技术的快速发展&#xff0c;大语言模型&#xff08;LLMs&#xff09;在自然语言处理&#xff08;NLP&#xff09;领域取得了显著的进展。特别是在信息提取&#xff08;IE&#xff09;任务中&#xff0c;LLMs展现出了前所未有的潜力和优势。信息提取是从非结构化文本…

ChatGPT-Next-Web漏洞利用分析(CVE-2023-49785)

1. 漏洞介绍 ​ 日常网上冲浪&#xff0c;突然粗看以为是有关Chat-GPT的CVE披露出来了&#xff0c;但是仔细一看原来是ChatGPT-Next-Web的漏洞。漏洞描述大致如下&#xff1a;&#xff08;如果有自己搭建了还没更新的速速修复升级防止被人利用&#xff0c;2.11.3已经出来了&am…

解决ModuleNotFoundError: No module named ‘skfuzzy‘,这个库全名可不叫skfuzzy哦,否则直接报错!!

ModuleNotFoundError: No module named skfuzzy 在这里插入图片描述在这里插入图片描述如何解决 ModuleNotFoundError: No module named skfuzzy 的问题&#xff1f;skfuzzy 模块介绍什么是模糊C均值聚类&#xff1f;skfuzzy 的应用如何使用 skfuzzy 进行模糊聚类 结论 如何解决…

数据结构-线性表-应用题-2.2-14

1&#xff09;算法基本设计思想&#xff1a; 2&#xff09;c语言描述&#xff1a; #define INT_MAX 0X7FFFFFFF int abs_(int a) {//绝对值if(a<0) return -a;else return a; } bool min(int a,int b,int c){if(a<b&&a<c) return true;else return false; } …

JAVA随记——集合篇

注意&#xff1a;作者之前的Java基础没有打牢&#xff0c;有一些知识点没有记住&#xff0c;所以在学习中出现了许多零散的问题。现在特地写一篇笔记总结一下&#xff0c;所以有些知识点不是很齐全。 集合中各类名词的关系 Collection集合为单列集合。 集合存储数据类型的特点…