【论文阅读】DALL·E: Zero-Shot Text-to-Image Generation

news2025/5/21 15:16:23

OpenAI第一代文本生成图片模型

paper:https://arxiv.org/abs/2102.12092

DALL·E有120亿参数,基于自回归transformer,在2.5亿 图片-文本对上训练的。实现了高质量可控的text to image,同时也有zero-shot的能力。

DALL-E没有使用扩散模型,而是dVAE(discrete variational autoencoder离散变分自动编码器)。文中主要和GAN相关模型进行比较,如AttnGAN、DM-GAN、DF-GAM。
 

1. 介绍

自回归式的模型处理图片的时候,如果直接把像素拉成序列,当成image token来处理,如果图片分辨率过高,一方面会占用过多的内存,另一方面Likelihood的目标函数会倾向于建模短程的像素间的关系,因而会学到更多的高频细节,而不是更能被人辨认的低频结构。

与 GPT-3 一样,DALL·E是一个 Transformer 语言模型。它将文本和图像作为单个数据序列接收,通过Transformer进行自回归。

Zero-Shot:对于GPT-3来说,我们可以指示它仅根据描述和提示执行多种任务,来生成我们想要的答案,而无需任何额外的培训。例如,当提示“here is the sentence 'a person walk his dog in the park' translated into French: ”时,GPT-3 会回答“un homme qui promène son chien dans le parc”。这种能力称为零样本推理。研究者发现 DALL·E 将这种能力扩展到了视觉领域,在以正确的方式提示时,它能够执行多种图像到图像的转换工作。比如最直接的方法是输入一张照片,然后用文本描述“粉红色的照片”或“倒影的照片”,这也往往是最可靠的,尽管照片通常没有被完美地复制或反映,但也从一定程度上表明这个功能有望实现。实现图像版GPT-3。

功能一,创造拟人的器具

功能二,Dall-E能够很聪明地捕捉到每个事物的特性,并且合理地组织在了一起。

功能三,根据文本自动渲染真实场景图片,其仿真程度与真实照片十分接近

功能四,根据文本指令改变和转换现有图片风格。

 不同于GAN(生成式对抗网络)的一点是,虽然GAN能够替换视频里的人脸,但其仅仅限制于人脸的范畴,而Dalle是将概念和概念之间做了关联,这在以往也是从未被实现过的。

2. 方法

整体流程如下:

1.第一个阶段,训练一个dVAE(discrete variational autoencoder离散变分自动编码器),其将256*256的RGB图片转换为32*32的图片token。目的:降低图片的分辨率,从而解决计算量的问题。图片token的词汇量大小是8192个,即每个位置有8192种可能的取值(也就是说dVAE的encoder输出是维度为32x32x8192的logits,然后通过logits索引codebook的特征进行组合,codebook的embedding是可学习的)。第一阶段同时训练dVAE编码器和dVAE解码器。

2.第二阶段,用BPE Encoder对文本进行编码,得到最多256个文本token,token数不满256的话padding到256,然后将256个文本token与1024个图像token(32*32=1024)进行拼接,得到长度为1280的数据,用拼接的数据去训练一个自回归transformer来建模文本和图片token的联合分布。

3.最后的推理阶段,给定一张候选图片和一条文本,通过transformer可以得到融合后的token,然后用dVAE的decoder生成图片,最后通过预训练好的CLIP计算出文本和生成图片的匹配分数,得到不同采样图片的分数排序,最终找到跟文本最匹配的图片。

从以上流程可知,dVAETransformerCLIP三个模型都是不同阶段独立训练的。下面讲一下dVAE、Transformer和CLIP三个部分。

3. 组成

3. 1 dVAE

由于图像特征的密集性和冗余性,不能直接提供给Transformer进行训练。目前主流的方式,例如ViT,Swin-Transformer等都是将图像的Patch作为模型的输入,然后通过一个步长等于Patch大小的大卷积核得到每个Patch的特征向量。

DALL-E提供的方案是使用离散的变分自编码器(dVAE)将大小为256x256的RGB图像压缩到大小为32x32的,通道数为8192的one-hot token的分布,变分自编码器的架构如图2所示。换句话说,阶段1的作用是将图像映射到一个大小为8192的图表中。这里通道数为8192的one-hot向量可以看做是一个词表,它的思想是通过离散VAE,实现图像特征空间想文本特征空间的映射。

不同于AE的是,VAE的预测不再是一个值,而是一个分布,通过在分布上的随机采样便可以解码成不同的生成内容。给定一个输入x,VAE的编码器的输出应该是特征z的后验分布

 

VQVAE:

通过Encoder学习出中间编码,然后通过最邻近搜索将中间编码映射为codebook中K个向量之一,然后通过Decoder对latent code进行重建。

另外由于最邻近搜索使用argmax来找codebook中的索引位置,导致不可导问题,VQVAE通过stop gradient操作来避免最邻近搜索的不可导问题,也就是latent code的梯度跳过最近邻搜索直接复制到中间编码上。

VQVAE相比于VAE最大的不同是,直接找每个属性的离散值,通过类似于查表的方式,计算codebook和中间编码的最近邻作为latent code。由于维护了一个codebook,编码范围更加可控,VQVAE相对于VAE,可以生成更大更高清的图片(这也为后续DALLE和VQGAN的出现做了铺垫)。

作用:

dVAE主要用来为图像的每个patch生成token表示,这次openAI开出的代码就是dVAE的推理代码。dVAE的encoder和decoder的机构较为简单,都是由bottleneck-style的resblock组成,相比于普通的VAE,dVAE有两点区别:

1.和VQVAE方法相似,dVAE的encoder是将图像的patch映射到8192的词表中,论文中将其分布设为在词表向量上的均匀分类分布,这是一个离散分布,由于不可导,此时不能采用重参数技巧,DALL·E使用Gumbel Softmax trick来解决这个问题。

2、在重建图像时,真实的像素值是在一个有界区间内,而VAE中使用的Gaussian分布和Laplace分布都是在整个实数集上,这造成了不匹配的问题。为了解决这个问题,论文中提出了logit-Laplace分布,如下式所示:

3.2 Transformer

Dall-E中的Transformer结构由64层attention层组成,每层的注意力头数为62,每个注意力头的维度为64,因此,每个token的向量表示维度为3968。如图2所示,attention层使用了行注意力mask、列注意力mask和卷积注意力mask三种稀疏注意力。

图2 Transformer使用的3种稀疏注意力

训练方法是用seq2seq的方法,用前面的序列预测下一个token,结合上mask的设计,可以实现行预测或者列预测。

Transformer的输入如图3所示,其中pad embd通过学习得到,根据论文介绍,为每个位置都训练了一个pad embd,即256个pad embd,在对文本token进行pad时,使用对应位置的pad embd。

图3 Transformer输入示意图(假设文本最大长度6)

训练目标:采用Evidence Lower BOund (ELBO,推导详见文章最下面)。如下:

x指图片,y指文本,z指对编码的图片(用于生成图片)。

3.3 CLIP

CLIP的推理过程:

1.先将预训练好的CLIP迁移到下游任务,如图(2)所示,先将下游任务的标签构建为一批带标签的文本(例如 A photo of a {plane}),然后经过Text Encoder编码成一批相应的word embedding。

2.然后将没有见过的图片进行zero-shot预测,如图(3)所示,通过Image Encoder将一张小狗的图片编码成一个feature embedding,然后跟(2)编码的一批word embedding先归一化然后进行点积,最后得到的logits中数值最大的位置对应的标签即为最终预测结果。

在DALL·E中,CLIP的用法跟上述过程相反,提供输入文本和一系列候选图片,先通过Stage One和Stage Two生成文本和候选图片的embedding,然后通过文本和候选图片的匹配分数进行排序,最后找到跟文本最匹配的图片。

总结:总的来说,目前公开的DALL-E的实现在模型结构上并没有太多创新,而是合理利用了现有的模型结构进行组合,并采用了一些trick解决了遇到的问题,从而在大数据集上训练得到超大规模的模型,取得了令人惊艳的效果,这也符合openAI的一贯风格。但无论如何,DALL-E在深度学习能力边界探索的道路上又前进了一步,也再一次展示了大数据和超大规模模型的魅力。美中不足的是,DALL-E包含了三个模块,更像是一个pipeline,而对于普通的研究者来说,要运行这样一个复杂的大规模模型是一件很困难的事情。

参考:DALL·E: Zero-Shot Text-to-Image Generation - 知乎

如何评价DALL-E模型的实现? - 知乎

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

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

相关文章

汽车螺丝扭力标准/汽车常见螺栓扭矩参照

汽车螺丝扭力标准参照表如下: 1、支座与车身螺栓(13MM)--25Nm; 2、支座与车身螺栓(18MM)--40Nm90度/50Nm; 3、支座与发动机支座螺栓(18Mm)--100Nm; 4、支座与车身螺栓(13MM)--25Nm; 5、支座与车身螺栓(18MM)--40N…

【Rust日报】2023-11-08 RustyVault -- 基于 rust 的现代秘密管理系统

RustyVault -- 基于 rust 的现代秘密管理系统 RustyVault 是一个用 Rust 编写的现代秘密管理系统。RustyVault 提供多种功能,支持多种场景,包括安全存储、云身份管理、秘密管理、Kubernetes 集成、PKI 基础设施、密码计算、传统密钥管理等。RustyVault 可…

面试10000次依然会问的【线程池】,你还不会?

线程池的基本概念 线程池是一种基于池化技术的线程使用方式,它允许我们有效地管理和复用线程,减少线程的创建和销毁的开销,从而提高系统的响应速度。在Java中,线程池的管理主要通过ThreadPoolExecutor类来实现。 线程池的定义与…

docker可视化

什么是portainer? portainer就是docker图形化界面的管理工具,提供一个后台面板供我们操作 目前先用portainer(先用这个),以后还会用到Rancher(CI/CD在用) 1.下载portainer 9000是内网端口,8088是外网访问端口 docker run…

19 数据中心详解

1、数据中心的概念 其实平时我们不管是看新闻,视频,下载文件等,最终访问的目的地都是在数据中心里面。数据中心存放的是服务器,区别于我们平时使用的笔记本或者台式机。 机架:数据中心的服务器被放在一个个叫作机架&…

Go 接口:Go中最强大的魔法,接口应用模式或惯例介绍

Go 接口:Go中最强大的魔法,接口应用模式或惯例介绍 文章目录 Go 接口:Go中最强大的魔法,接口应用模式或惯例介绍一、前置原则二、一切皆组合2.1 一切皆组合2.2 垂直组合2.2.1 第一种:通过嵌入接口构建接口2.2.2 第二种:通过嵌入接…

Guli商城-商品服务-API-三级分类-配置网关路由与路径重写

启动人人fast服务: 打开本地的前端项目,启动: 命令:npm run dev 账号密码:admin/admin 对应的数据库: 接下来在商品系统目录中添加子菜单: 数据库中可以看到记录 退出账号,重新登录…

vue中实现千位分隔符

vue中实现千位分隔符有两种,一种是某一个字段转换,一种是表格table中的整列字段转换 比如将3236634.12,经过转换后变为 3,236,634.12 1. 某一个字段转换 写js方法: export function numberExchange(value){if (!value) return…

Android自定义 View惯性滚动效果(不使用Scroller)

效果图: 前言: 看了网上很多惯性滚动方案,都是通过Scroller 配合 computeScroll实现的,但在实际开发中可能有一些场景不合适,比如协调布局,内部子View有特别复杂的联动效果,需要通过偏移来配合…

JavaScript从入门到精通系列第三十二篇:详解正则表达式语法(一)

文章目录 一:正则表达式 1:量词设置次数 2:检查字符串以什么开头 3:检查字符串以什么结尾 4: 同时使用开头结尾 5:同值开头同值结尾 二:练习 1:检查是否是一个手机号 大神链…

(附源码)基于Springboot智慧园区管理系统-计算机毕设 88160

Springboot智慧园区管理系统的开发 摘要 随着互联网趋势的到来,互联网概念越来越盛行,园区管理最好方式就是建立自己的互联网系统。在现实运用中,应用软件的工作规则和开发步骤,采用Springboot框架建设智慧园区管理系统。 本设计主…

线性代数(五) | 矩阵对角化 特征值 特征向量

文章目录 1 矩阵的特征值和特征向量究竟是什么?2 求特征值和特征向量3 特征值和特征向量的应用4 矩阵的对角化 1 矩阵的特征值和特征向量究竟是什么? 矩阵实际上是一种变换,是一种旋转伸缩变换(方阵) 不是方阵的话还有可能是一种…

博阳精讯、凡得科技访问上海斯歌:共探BPM流程服务新高地

10月27日下午,来自博阳精讯、凡得科技的流程领域专家、领导一行参观访问了上海斯歌总部。三方举行了深度交流会谈,分享了彼此对流程领域的前沿洞察和技术实践,共同探索了BPM流程服务科技力与价值力的新高地。 本次研讨会上,博阳精…

WPF 线程模型

Windows Presentation Foundation (WPF) 旨在将开发人员从线程处理困难中解脱出来。 因此,大多数 WPF 开发人员不会编写使用多个线程的界面。 由于多线程程序既复杂又难以调试,因此当存在单线程解决方案时,应避免使用多线程程序。 但是&…

【Docker安装RockeMQ:基于Windows宿主机,并重点解决docker rocketMQ安装情况下控制台无法访问的问题】

拉取镜像 docker pull rocketmqinc/rocketmq创建网络 docker network create rocketmq-net构建namesrv容器 docker run -d -p 9876:9876 -v D:/dockerFile/rocketmq/namesrv/logs:/root/logs -v D:/dockerFile/rocketmq/namesrv/store:/root/store --network rocketmq-net -…

11.9存储器实验总结(单ram,双ram,FIFO)

实验设计 单端口RAM实现 双端口RAM实现 FIFO实现 文件结构为

【Royalty in Wind 2.0.0】个人体测计算、资料分享小程序

前言 Royalty in Wind 是我个人制作的一个工具类小程序。主要涵盖体测计算器、个人学习资料分享等功能。这个小程序在2022年第一次发布,不过后来因为一些原因暂时搁置。现在准备作为我个人的小程序重新投入使用XD PS:小程序开发部分我是在21年跟随郄培…

使命担当 守护安全 | 中睿天下获全国海关信息中心感谢信

近日,全国海关信息中心向中睿天下发来感谢信,对中睿天下在2023年网络攻防演练专项活动中的大力支持和优异表现给予了高度赞扬。 中睿天下对此次任务高度重视,紧密围绕全国海关信息中心的行动要求,发挥自身优势有效整合资源&#x…

Spring Boot 3.0正式发布及新特性解读

目录 【1】Spring Boot 3.0正式发布及新特性依赖调整升级的关键变更支持 GraalVM 原生镜像 Spring Boot 最新支持版本Spring Boo 版本版本 3.1.5前置系统清单三方包升级 Ref 个人主页: 【⭐️个人主页】 需要您的【💖 点赞关注】支持 💯 【1】Spring Boo…

GUI:贪吃蛇

以上是准备工作 Data import javax.swing.*; import java.net.URL;public class Data {public static URL headerURLData.class.getResource("static/header.png");public static ImageIcon header new ImageIcon(headerURL);public static URL upURLData.class.getR…