【论文精读】DALLE: Zero-Shot Text-to-Image Generation零样本文本到图像生成

文章目录

  • 一、前言
  • 二、摘要
  • 三、方法
    • (一)主要目标
    • (二)stage 1:训练离散变分自动编码器(dVAE)
    • (三)stage 2:训练自回归转换器
    • (四)公式表达
  • 四、模型细节
    • (一)Stage One: Learning the Visual Codebook
      • 1、最大化证据下界ELB
      • 2、模型优化
      • 3、模型结构
      • 4、输入归一化和输出还原
    • (二)Stage Two: Learning the Prior
      • 1、模型输入
      • 2、模型结构(稀疏Transformer)
    • (三)图像生成
    • (四)混合精度训练
    • (五)分布式运算
  • 五、实验结果
    • (一)对比效果
    • (二)消融研究


一、前言

https://openai.com/research/dall-e

在这里插入图片描述

DALL·E 是GPT-3的 120 亿参数版本, 经过训练,可以使用文本-图像对的数据集从文本描述生成图像。我们发现它具有多种功能,包括创建动物和物体的拟人化版本、以合理的方式组合不相关的概念、渲染文本以​​及对现有图像应用转换。

DALL·E 2可以生成更逼真、更准确的图像,分辨率提高 4 倍。

二、摘要

研究现状的缺点: 文本到图像生成传统上专注于寻找更好的建模假设以在固定数据集上进行训练,而这些假设会涉及到复杂的架构、辅助损失或辅助信息。

作者的研究:

  1. 基于transformer
  2. 将文本和图像标记自回归建模为单个数据流
  3. 凭借足够的数据和规模,当以零样本方式评估时,我们的方法与以前的特定领域模型具有竞争力。

在这里插入图片描述

三、方法

(一)主要目标

  1. 训练一个 Transformer 将文本和图像标记作为单个数据流 进行自回归建模

(图像是连续的,可以采用VQVAE离散化)

  1. 图片的分辨率很大,如果把单个pixel当成一个token处理,会导致计算量过于庞大,于是DALL·E引入了一个dVAE模型来降低图片的分辨率。
  2. 似然目标倾向于优先考虑对像素之间的短程依赖性进行建模,因此大部分建模能力将用于捕获高频细节,而不是使我们在视觉上可识别对象的低频结构。

在这里插入图片描述

(二)stage 1:训练离散变分自动编码器(dVAE)

  • 将每个 256×256 RGB 图像压缩为 32×32 图像令牌网格
  • 每个图像令牌可以取到8192个可能的离散值之一
  • 这将transformer的上下文大小减少了 192 倍,而视觉质量没有大幅下降
    192 = ( 256 ÷ 32 ) × ( 256 ÷ 32 ) × 3 192=(256\div 32) \times (256\div 32) \times 3 192=(256÷32)×(256÷32)×3在这里插入图片描述

(三)stage 2:训练自回归转换器

  • 文本token:256个(BPE编码)
  • 图像token:32 × 32 = 1024 个
  • 连接文本token和图像token
  • 训练自回归转换器来对文本和图像标记上的联合分布进行建模

BPE(Byte Pair Encoding)编码是一种常用的无损数据压缩算法,也常被用于自然语言处理中的词汇表示和分词任务。它基于统计的方法,通过不断合并数据中出现频率最高的字节对来构建编码表。

在这里插入图片描述

(四)公式表达

整个过程可以被视为最大化 x、y 和z 上模型分布的联合似然的证据下界 (ELB)

  • x:图像images
  • y:图像的文字描述captions
  • z:编码的RGB 图像

p θ , ψ ( x , y , z ) = p θ ( x ∣ y , z ) p ψ ( y , z ) p_{θ,ψ}(x, y, z) = p_θ(x | y, z)p_ψ(y, z) pθ,ψ(x,y,z)=pθ(xy,z)pψ(y,z)

  • q φ q_φ qφ:在给定 RGB 图像的情况下,dVAE 编码器 生成的 32 × 32 图像令牌上的分布;
  • p θ p_θ pθ:给定图像标记的 dVAE 解码器 生成的 RGB 图像上的分布;
  • p ψ p_ψ pψ:由transformer 建模的文本和图像标记上的联合分布。

在这里插入图片描述

在这里插入图片描述

四、模型细节

(一)Stage One: Learning the Visual Codebook

1、最大化证据下界ELB

证据下界是用于评估概率模型的变分推断方法中的一个重要概念。

  • 在变分推断中,我们通常试图近似一个复杂的后验分布,以使其更容易计算和处理。而证据下界是一个下界,用于评估我们近似的后验分布和真实后验分布之间的接近程度。如果我们的近似分布可以很好地拟合真实后验分布,那么证据下界将会比较高。
  • 在机器学习中,通常使用 “Evidence Lower Bound” 作为损失函数,用于训练概率生成模型,如变分自编码器(VAE)和概率图模型。通过最大化证据下界,我们可以使生成模型更好地拟合数据,并学习到数据背后的潜在结构。

普通的变分自编码器VAE的证据下界(Evidence Lower Bound,ELB)的推导过程:(利用率琴生不等式)
在这里插入图片描述

DALL-E的Stage1中的证据下界可以写为:
在这里插入图片描述

2、模型优化

问题1: q ψ q_ψ qψ是离散分布(one-hot编码),我们无法使用重新参数化梯度来最大化它。

重新参数化梯度是一种常用于训练变分自编码器(VAE)等生成模型的技术。

  • 在训练VAE时,我们希望从一个分布中采样出一些隐变量,以生成模型的输出。然而,由于采样操作是不可导的,因此通常不能直接对采样操作求梯度。为了解决这个问题,我们可以使用重新参数化技术。
  • 重新参数化技术的基本思想是,将采样过程拆分为两步:首先从一个固定的分布中采样一些固定的随机变量,然后通过一个确定的函数将这些随机变量转换为我们所需的随机变量。这样,我们就可以对这个确定的函数求导,从而能够计算出采样操作对于损失函数的梯度。

解决方案: 使用gumbel-softmax 松弛

Gumbel-Softmax 松弛的思想是,从 Gumbel 分布中采样一些随机噪声,并与离散分布的 logits 相结合,然后通过 softmax 操作将结果归一化为一个概率分布。这样,我们就可以用一个连续、可导的操作来近似离散分布的采样过程,并且可以通过反向传播来训练模型。

DALL-E中的gumbel-softmax:向sotfmax中引入超参数 Υ \Upsilon Υ使得argmax可导。(设置 Υ = 1 16 \Upsilon =\frac{1}{16} Υ=161

超参数 Υ \Upsilon Υ在深度学习中有一个专业术语叫温度,可以通过调整softmax曲线的平滑程度来实现不同的功能。

  • Υ \Upsilon Υ的值大于1时,我们可以得到的更加平滑的softmax曲线,这种方式可以得到更加平滑的置信度分布;
  • Υ \Upsilon Υ的值小于1时,得到的softmax曲线更加陡峭;
  • Υ \Upsilon Υ的值趋近0时,可以得到近似argmax的效果,但是这时softmax还是可导的。

问题2: 在构建生成图像时,图像的像素是有值域范围的,而VAE中通过拉普拉斯分布或者高斯分布得到的值域是整个实数集,这就造成了模型目标和实际生成内容的不匹配问题。

解决方案: DALL-E提出了拉普拉斯分布的变体:log-拉普拉斯分布。它的核心思想是将sigmoid作用到拉普拉斯分布的随机变量上,从而得到一个值域是(0,1)的随机变量。

3、模型结构

DALL-E的离散VAE的编码器和解码器都是基于残差网络构建的,DALL-E保持了残差网络的基础结构,但也有其针对性的调整,核心修改如下:

  • 编码器的输入层的卷积核的大小是7x7;
  • 编码器的最后一个卷积的卷积核的大小是1x1,用于产生大小是32x32x8192的Feature Map;
  • 使用最大池化而非原来的平均池化进行降采样;
  • 解码器的的第一个卷积核最后一个卷积的卷积核的大小均为1x1;
  • 解码器使用了最近邻的方式进行上采样;
  • 为了提升训练速度,MAE使用了混合精度训练。

4、输入归一化和输出还原

输入归一化:图像像素范围是0到255,DALL-E中将输入像素的范围映射到 ( ϵ , 1 − ϵ ) (\epsilon,1-\epsilon) (ϵ,1ϵ)的范围。
在这里插入图片描述

输出还原:在解码器中通过log-拉普拉斯分布预测得到的结果的范围是 ( 0 , 1 ) (0,1) (0,1),通过 φ \varphi φ 的逆运算即可得到解码器的生成内容。
在这里插入图片描述

(二)Stage Two: Learning the Prior

1、模型输入

阶段2的输入是拼接的文本特征和图像特征以及各自的位置编码等信息。

如图一个模型输入的例子,在这个示例中,文本嵌入的长度是6,图像嵌入的长度是2。文本的输入是文本的嵌入和文本的位置编码,图像的输入是图像的标志嵌入,行位置编码以及列位置编码。这些编码的长度均是3968。
在这里插入图片描述

2、模型结构(稀疏Transformer)

DALL-E使用的Transformer是稀疏Transformer,它的特点是只关注Top-k个贡献最大的特征的状态,因此比普通的Transformer更能关注重要的特征。DALL-E的Transformer有64个自注意力层,每个层的头数是62,每个注意力头的维度是64。

DALLE共使用了3个不同形式的稀疏自注意力编码:

  • (a)是行注意力,每个标志只关注top-5的相关标志;
  • (b)是列注意力,(c)是列注意力的转置,它能够更好的利用GPU;
  • (d)是卷积自注意力。
    在这里插入图片描述

(三)图像生成

图像生成过程:

  1. 将输入文本编码成特征向量,然将特征向量送入到自回归的Transformer中生成图像的token
  2. 将图像的token送入到dVAE的解码器中得到生成图像
  3. 通过CLIP对生成样本进行评估,得到最终的生成结果

在这里插入图片描述

(四)混合精度训练

问题: 为了提升GPU的计算效率,DALL-E的大量参数以及激活都使用了16位的低精度存储。这种低精度模型的最大挑战是梯度下溢(underflow)的问题,也就是计算的梯度值超出了16位浮点数能表示的最低值。

传统的低精度训练通过将梯度值限制在一个模型能表示的范围内来避免梯度下溢。但是这种粗暴的限制每一个梯度的范围的方法并不适合DALL-E这种文本到图像更复杂的任务,它需要更过的精度表示。

解决方案: DALL-E使用了大量的技术来解决这一问题,其中最重要的一个点:每个残差块的梯度缩放(per-resblock gradient scaling)。

  • 对每个残差块使用单独的梯度缩放比例,因此命名为混合精度训练
  • 对于每个残差块进行缩放替代传统的对损失函数进行缩放;
  • 只在有必要使用低精度浮点数来提速的地方才使用16位精度表示;
  • 除以梯度的时候避免下溢。

DALL-E的一个残差块的混合精度训练:(实线表示前向传播的计算顺序,虚线表示反向传播的计算流程)

  • 在前向计算时,对于单位映射,我们先将其缩放到16位,当进行完卷积运算时,我们再将其放到到32位。
  • 在进行反向运算时,我们先对梯度进行过滤和缩放,其中过滤操作会将所有NaN和Inf的值置0,经过卷积操作权值的更新后再将其放大到32位。
    在这里插入图片描述

(五)分布式运算

DALL-E的模型即使使用16位的精度来存储,也要占用大约24G的显存,这超过了他们训练环境的单卡(NVIDIA V100 16G)的硬件显存,这里他们使用了参数分片(Parameter Sharding)来解决显存不足的问题。在进行模型的参数分片训练时,一个问题是不同机器的通信问题,它们之间的带宽是远小于同一台机器的不同显卡之间的带宽的,这成为了多机多卡训练。

五、实验结果

(一)对比效果

  1. 在不同程度的可靠性下,我们的模型似乎能够以合理的方式组合不同的概念,创建动物的拟人化版本,呈现文本,并执行某些类型的图像到图像的翻译:

  2. 将模型中的样本与MS-COCO中先前方法的样本进行比较。每个模型样本都是由对比模型排名的512个样本中最好的:
    在这里插入图片描述

  3. 人类对模型(在没有温度降低的情况下评估零射击)与先前对MS-COCO标题的工作(DF-GAN)的评估。在五选一的投票中,模型的样本在90.0%的情况下被选为最真实的,在93.3%的情况下被选为最匹配共享标题的图像。

  4. MS-COCO和CUB的定量结果。实线表示针对原始验证集计算的FID,虚线表示针对删除重叠图像的验证集计算的FID。对于MS-COCO,我们在从验证集中采样的30,000个标题的子集上评估所有模型。对于CUB,我们在测试集中的所有唯一标题上评估所有模型。

(二)消融研究

  1. 我们展示了模型大小和梯度的最小压缩等级(最高128的倍数)之间的关系,这是避免在训练的前10%的训练损失中出现差距所必需的。这些结果表明,在我们的设置中,我们可以实现约85%的压缩率,与模型大小无关。
  2. 增加对比重排序过程中图像数量对MS-COCO标题的影响。

参考:
【一起读论文】OpenAI文本驱动的图像生成DALL-E (DALLE)
DALL-E:Zero-Shot Text-to-Image Generation
如何评价DALL-E模型的实现?
[PMLR 2021] Zero-Shot Text-to-Image Generation:零样本文本到图像生成
非官方实现:DALLE-pytorch

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

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

相关文章

Flutter开发之CupertinoApp

Flutter开发之CupertinoApp 最近由于使用Flutter编程更多,使用Flutter更顺手,相对于其他前端框架来说,Flutter在跨平台、响应式UI、自绘引擎、即插即用的组件和庞大的社区生态支持方面有更大的优势;Flutter拥有更低的学习成本&am…

gpt批量工具,gpt批量生成文章工具

GPT批量工具在今天的数字化时代扮演着越来越重要的角色,它们通过人工智能技术,可以自动批量生成各种类型的文章,为用户提供了便利和效率。本文将介绍5款不同的GPT批量工具,并介绍一款知名的147GPT生成工具,以及另外一款…

c++/c图的邻近矩阵表示

#include<iostream> using namespace std;#define MaxVerterNum 100 typedef char VerterType; typedef int EdgeType; typedef struct {VerterType vexs[MaxVerterNum]; // 存储顶点EdgeType edges[MaxVerterNum][MaxVerterNum]; // 存储邻接矩阵int n, e; // 顶点数和边…

netlink原理及应用

什么是netlink netlink是一种基于网络的通信机制&#xff0c;允许内核内部、内核与用户态应用之间甚至用户态应用之间进行通信&#xff1b;netlink的主要作用是内核与用户态之间通信&#xff1b;它的思想是&#xff0c;基于BSD的socket使用网络框架在内核和用户态之间进行通信…

GaussDB跨云容灾:实现跨地域的数据库高可用能力

背景 金融、银行业等对数据的安全有着较高的要求&#xff0c;同城容灾建设方案&#xff0c;在绝大多数场景下可以保证业务数据的安全性&#xff0c;但是在极端情况下&#xff0c;如遇不可抗力因素等&#xff0c;要保证数据的安全性&#xff0c;就需要采取跨地域的容灾方案。 …

Dell R730 2U服务器实践3:安装英伟达上代专业AI训练Nvidia P4计算卡

Dell R730是一款非常流行的服务器&#xff0c;2U的机箱可以放入两张显卡&#xff0c;这次先用一张英伟达上代专业级AI训练卡&#xff1a;P4卡做实验&#xff0c;本文记录安装过程。 简洁步骤&#xff1a; 打开机箱将P4显卡插在4号槽位关闭机箱安装驱动 详细步骤&#xff1a; 对…

网络工程师学习笔记——VRP配置命令大全

VRP是Versatile Routing Platform的简称&#xff0c;它是华为公司数据通信产品的通用网络操作系统。它以IP业务为核心&#xff0c;采用组件化的体系结构&#xff0c;在实现丰富功能特性的同时&#xff0c;还提供了基于应用的可裁剪和可扩展的功能&#xff0c;使得路由器和交换机…

计算机网络物理层知识点总结

本篇博客是基于谢希仁编写的《计算机网络》和王道考研视频总结出来的知识点&#xff0c;本篇总结的主要知识点是第二章的物理层。上一章的传送门&#xff1a;计算机网络体系结构-CSDN博客 通信基础 物理层概念 物理层解决如何在连接各种计算机的传输媒体上传输数据比特流&am…

【Kubernetes】k8s中容器之间、pod之间如何进行网络通信?

目录 PodKubernetes 网络模型同一Pod上的容器之间进行通信同一Node上的不同Pod之间进行通信不同Node上的Pod之间进行通信Service参考 Pod 首先来回顾一下Pod&#xff1a; Pod 是用于构建应用程序的最小可部署对象。单个 Pod 代表集群中正在运行的工作负载&#xff0c;并封装一…

C++初阶篇----类与对象上卷

目录 引言1.面向过程和面向对象初步认识2.类的引入3.类的定义3.1声明与定义全部放在类体中3.2声明与定义分离 4.类的访问限定符及封装4.1访问限定符4.2封装 5.类的作用域6.类的实例化类是对对象进行描述一个类&#xff08;一个类型变量&#xff09;可以实例化出多个对象 7.类对…

Day12-【Java SE进阶】JDK8新特性:Lambda表达式、方法引用、常见算法、正则表达式、异常

一、JDK8新特性 1.Lambda表达式 Lambda表达式是JDK 8开始新增的一种语法形式;作用:用于简化名内部类的代码写法。 注意:Lambda表达式并不是说能简化全部匿名内部类的写法&#xff0c;只能简化函数式接口的匿名内部类。 有且仅有一个抽象方法的接口。注意:将来我们见到的大部…

分布式事务简介

分布式事务简介&#xff0c;通过组内分享学习到的知识&#xff0c;并进行讨论。 主要内容 分布式事务简介 分布式事务是指跨越多个数据库或服务的一系列操作&#xff0c;这些数据库或服务可能分布在网络的不同节点上&#xff0c;它们共同组成一个完整的逻辑工作单元&#xf…

GEE必须会教程—蒸散发数据时间序列分析与下载

今天带来的有关蒸散发数据的下载代码&#xff0c;蒸散发数据在气象气候&#xff0c;农业干旱监测等领域应用广泛&#xff0c;那么在GEE上如何方便快捷获取蒸散发数据呢&#xff1f;今天跟着小编分享代码&#xff0c;快来学习吧&#xff01;&#xff01; A.定义研究区域 //定义…

【前端素材】推荐优质数据统计后台管理系统网页Cleopatra.平台模板(附源码)

一、需求分析 在线后台管理系统是指供管理员或运营人员使用的Web应用程序&#xff0c;用于管理和监控网站、应用程序或系统的运行和数据。它通常包括一系列工具和功能&#xff0c;用于管理用户、内容、权限、数据等。下面是关于在线后台管理系统的详细分析&#xff1a; 1、功…

ssh简介以及 windows 安装ssh教程

SSH&#xff08;Secure Shell&#xff09;是一种网络协议&#xff0c;用于计算机之间的加密登录和其他安全网络服务。通过 SSH&#xff0c;用户可以安全地访问远程计算机&#xff0c;执行命令、传输文件等操作。SSH 使用公钥加密技术&#xff0c;确保数据传输的安全性。本文将从…

TypeScript 哲学 - 2、Narrowing

四种类型守卫 1、truthiness narrowing 2、 3、 4、 control flow analysis

C语言:结构体(自定义类型)知识点(包括结构体内存对齐的热门知识点)

和黛玉学编程呀&#xff0c;大家一起努力呀............. 结构体类型的声明 回顾一下 struct tag { member-list; }variable-list; 创建和初始化 我们知道&#xff0c;在C语言中&#xff0c;对于一些数据是必须初始化的&#xff0c;但是结构体怎么创建并且初始化呢&#xff1…

【计算机网络】TCP 如何实现可靠传输

TCP通过三次握手建立连接&#xff0c;四次挥手释放连接&#xff0c;确保连接建立和连接释放的可靠。 序列号、检验和、确认应答信号、重发机制、连接管理、窗口控制、流量控制、拥塞控制 标准回答 可靠传输就是通过TCP连接传送的数据是没有差错、不会丢失、不重复并且按序到达的…

springboot+vue+mysql项目使用的常用注解

实体类常用注解 Data Data 是一个 Lombok 提供的注解&#xff0c;使用 Data 注解可以简化代码&#xff0c;使代码更加简洁易读。 作用&#xff1a;自动为类生成常用的方法&#xff0c;包括 getter、setter、equals、hashCode 和 toString 等需要加Lombok的依赖 <depende…

rk3568-一种基于wifi的网络环境搭建方案

前言&#xff1a; PC--Ubuntu--开发板 三者之间的网络互相ping通很重要&#xff0c;尤其是ubuntu和开发板互ping成功最关键&#xff0c;关系到nfs&#xff0c;tftp等常用的开发手段。现在大多数开发板都带有wifi芯片&#xff0c;现在提供一种方案可以三个设备无线地搭建网络环境…