理解DALL-E 2

news2025/1/25 4:34:48

1.简介

DALL-E 2的效果想必大家都已经很清楚了,效果是非常惊人的,该篇文章就是讲一下DALL-E 2的原理是什么。

2.方法

DALL-E 2的原理不难理解,前提是你知道CLIP。简单来说,CLIP是一个由文本和图片多模态训练的一个zero-shot模型。上图中的text encoder和img encoder是CLIP中的原模型没变,参数都没变,一个用来提取文本的特征,一个用来提取图像的特征,他们之间具有一定的映射关系的。

DALL-E 2的训练主要有两步,一个是训练prior先验模型,一个是训练decoder模型。prior先验模型的训练也比较粗暴,首先输入文本,通过编码器提取文本特征,然后通过先验网络预测对应的图像特征,用CLIP中image encoder输出的图像特征作为ground truth进行训练。decoder就是一个扩散模型。 

2.1图像生成研究现状

  1. 第一个就是大名鼎鼎的GAN了。GAN是由一个生成器和一个判别器构成的,生成器通过输入一个高斯分布的随机采样,输出一个生成的图像。将生成的图像和真实的图像输入到判别器当中,输出一个二分类的结果来判断生成的图片是否能够以假乱真。由于GAN的目标函数是以假乱真的,所以生成的图像更加真实,但是GAN因为要同时训练两个网络,所以平衡不好控制,导致训练不稳定,一不小心就训练失败。第二是GAN的优化目标是尽可能真实,所以GAN的多样性不够好。最后,GAN不是一个概率模型,图片的生成都是隐式的,通过网络去完成的,可解释性不强,所以在数学上不好解释。
  2. 第二是AE了,自编码器能够将输入变换到隐藏向量𝒛,并通过解码器重建(Reconstruct,或恢复)出𝒙。解码器的输出能够完美地或者近似恢复出原来的输入,即𝒙 ≈ 𝒙, 自编码器的优化目标:,  dist(𝒙, 𝒙)表示 𝒙和的距离度量,称为重建误差函数。 常见的度量方法有欧氏距离的平方,计算方法如下:ℒ = ∑(𝑥𝑖 - 𝑥̅𝑖)2

    它和均方误差原理上是等价的。 自编码器网络和普通的神经网络并没有本质的区别, 只是训练的监督信号由标签𝒚变成了自身𝒙。 借助于深层神经网络的非线性特征提取能力, 自编码器可以获得良好的数据表示,相对于 PCA 等线性方法,自编码器性能更加优秀, 甚至可以更加完美的恢复出输入𝒙。

  3. 第三是DAE,Denoising Auto-Encoder。由于原始图像冗余性太高,为了使网络学习到图片的本质,防止神经网络记忆住输入数据的底层特征, Denoising Auto-Encoders 给输入数据添加随机的噪声扰动,如给输入𝒙添加采样自高斯分布的噪声𝜀:\tilde{x} = x+\varepsilon ,\varepsilon \in (0, var),添加噪声后,网络需要从\tilde{x}学习到数据的真实隐藏变量 z,并还原出原始的输入𝒙。

  4. 不论是AE还是DAE,都是从原始图像中学习提取出特征z的,把特征拿去做分类、检测等任务,并不是一个生成任务,因为网络学习到的只是特征,并不是一个概率分布,我们没法进行采样。z是一个专门用来重建图像的特征,并不是一个随机噪声。这时候就出现了VAE。

  5. 变分自编码器VAE和之前的编码器是截然不同的,虽然都是输入图像重建图像,但是VAE学习的是一个分布而不是特征。VAE假设这个分布是高斯分布,可以用均值和方差来描述。输入图像通过编码器提取特征,然后接FC层,预测出均值和方差,然后通过 z = μ + σ⊙ε 公式得到z,最后通过解码器生成图像。预测时只需要从高斯分布里采样一个噪声通过解码器就能够生成出图像了,因为学习的是一个分布,所以生成图片的多样性非常好。

  6. 接下来是VQ-VAE和VQ-VAE2了,他们虽然听起来和VAE密切相关,但实际上和AE更加相似。它是通过形成上千的codebook聚类中心,而不是概率分布,所以多样性稍差。

  7. 最后是近几年火爆的扩散模型了。扩散模型的原理简单来说就是前向加噪和反向去噪的过程。先使用原图一步步的加入高斯噪声,当步数足够大时图片就近似于一个高斯分布了。然后再用共享参数的神经网络,比如U-Net来一步步去噪生成图片。扩散模型的发展史也是非常精彩的,原始的扩散模型是通过Xt预测出Xt-1,但是因为预测的是一个图像,所以非常的难,而且因为要在神经网络上forward上百次,所以速度也是非常慢的。

  8. 这时DDPM论文发表一定程度上解决了一些难题。第一个贡献是将Xt预测出Xt-1改为预测Xt到Xt-1所去掉的噪声了,这样大大减小了预测难度。并且DDPM还在U-Net的输入中加入了一个time embedding,这样可以网络知道目前到了反向扩散的第几步了,这样避免了因为U-Net的共享参数导致生成的图像质量不好的问题,让网络在反向扩散前期注重整体,后期注重细节。网络的目标函数就是p(Xt-1|Xt)=||ε-f(Xt,t)||。其中ε是在正向扩散过程中加入的噪声(已知的),f是U-Net网络,Xt是该时刻图像,t是该时刻的time embedding。DDPM第二个贡献是想要预测高斯分布,只需要预测均值和方差就可以,并且方差也不需要,常数就可以,这样大大减少了训练难度。

  9. 随后在DDPM的基础上又提出了improved DDPM。主要改进是不止预测均值,也会预测方差。第二个改进是在添加的噪声上的改进,从原来线性的schedule改为了余弦的schedule。

  10. 随后Diffusion beats GAN发表了。用了更大的模型,加入了注意力机制等等。主要贡献是用了classifier guidance的方法引导模型采样和生成。classifier guidance就是在训练模型的同时再训练一个图像分类器,输入Xt的有噪声的图像,算交叉熵目标函数,对该图像进行分类,得到对应的梯度,最后用梯度指导网络从Xt预测Xt-1。p(Xt-1|Xt)=||ε-f(Xt,t,y)||,其中y是指导信息。不过这一系列方法都需要单独再去训练一个分类器,比较麻烦,于是又有人提出了classifier free guidane模型,不需要再去训练一个分类器,不过需要模型输出两个值,一个是加y的,一个是不加y的,来找两个之间的映射关系。随后的GLIDE和DALL-E2也用了这种方法。

2.2Decoder模型

DALL-E2的decoder模块其实就是CLIP guidance的GLIDE扩散模型,也用了classifier-free guidance方法。然后加入了一个级联式的形式,先生成64x64的图像,然后训练一个网络上采样成256x256的图像,再训练一个网络上采样成1024x1024的图像。

2.3prior模型

作者主要用了两种方法训练prior模型,两个方法都用了classifier-free guidance方法。一种是自回归模型,也就是和CLIP相似,通过文本特征自回归直接预测图像特征,但是这样效率会比较低。第二种是diffusion prior方法,主要用了Transformer decoder的结构。输入文本、CLIP提取的文本特征、time step的embedding、加入噪声后的CLIP的图像特征、cls token,这些embedding被拿去预测没有加噪声的CLIP图像特征,整体流程和扩散模型相似,不过这里不是去预测噪声,而是预测图像特征z。

3.局限性

DALL-E2还是有很多局限性的,比如在生成图像时不能很好的将物品和他的属性结合起来。作者认为是由于其中应用了CLIP模型的原因,CLIP在训练时只考虑文本和图像的相似性,只要相似性高就能匹配,这样其实对于文本和图像的本质理解是有偏差的。还有就是当你想生成一个复杂场景时,很多细节DALL-E2是生成不出来的。

在twitter上还有人发现DALL-E2其实是有自己的一套语言的。比如你输出文本“两个鲸鱼讨论食物,并且图中有字幕”,这时DALL-E2真的会生成带有字幕的图像,但是他的字幕是完全看不懂的字符。但是当我们将这些字符复制下来输入给DALL-E2时,真的会生成食物的图像,说明DALL-E2在训练过程中对文本的理解产生了一定的偏差。

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

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

相关文章

PTA-2023年软件设计综合实践_9(动态规划法)

7-1 数塔 数塔如图所示&#xff0c;若每一步只能走到相邻的结点&#xff08;图中有数字的方格&#xff09;&#xff0c;则从最顶层走到最底层所经过的所有结点的数字之和最大是多少&#xff1f;测试数据保证结果不大于231−1。 C #include <bits/stdc.h> using namespa…

15个超级实用的Python操作,肯定有你意想不到的!

文章目录 1&#xff09;映射代理&#xff08;不可变字典&#xff09;2&#xff09;dict 对于类和对象是不同的3) any() 和 all()4) divmod()5) 使用格式化字符串轻松检查变量6) 我们可以将浮点数转换为比率7) 用globals()和locals()显示现有的全局/本地变量8) import() 函数9) …

Flink-时间流与水印

时间流与水印 一、背景二、时间语义1.事件时间&#xff08;event time&#xff09;2.读取时间&#xff08;ingestion time&#xff09;3.处理时间&#xff08;processing time&#xff09; 三、水印-Watermarks1.延迟和正确性2.延迟事件3.顺序流4.无序流5.并行流 四、Windows1.…

【Openstack Train安装】八、placement安装

Placement 肩负着这样的历史使命&#xff0c;最早在 Newton 版本被引入到 openstack/nova repo&#xff0c;以 API 的形式进行孵化&#xff0c;所以也经常被称呼为 Placement API。它参与到 nova-scheduler 选择目标主机的调度流程中&#xff0c;负责跟踪记录 Resource Provide…

Windows下命令行启动与关闭WebLogic的相关服务

WebLogic 的服务器类型 WebLogic提供了三种类型的服务器&#xff1a; 管理服务器节点服务器托管服务器 示例和关系如下图&#xff1a; 对应三类服务器&#xff0c; 就有三种启动和关闭的方式。本篇介绍使用命令行脚本的方式启动和关闭这三种类型的服务器。 关于WebLogic 的…

洗地机哪个牌子好用?希亦、添可、石头洗地机品牌实测推荐!

现代家居生活中&#xff0c;普通的扫把拖把已经快要脱离了普通百姓家&#xff0c;人们纷纷使用智能扫地机洗地机等。 但是现在市场上洗地机的品牌参差不齐&#xff0c;很多不懂行的人不知道该选什么&#xff0c;那么什么洗地机的品牌质量好且耐用呢&#xff1f;下面笔者为大家…

Azure Machine Learning - 创建Azure AI搜索索引

目录 一、先决条件检查空间 二、创建和加载索引启动向导连接到 数据源跳过认知技能配置配置索引配置索引器 三、监视索引器进度四、检查搜索索引结果五、添加或更改字段六、使用搜索浏览器查询七、运行更多示例查询八、清理资源 在本文中&#xff0c;你将使用导入数据向导和由虚…

解决msvcr71.dll丢失5个方法,修复程序运行缺失dll问题

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“msvcr71.dll丢失”。这个错误提示通常出现在运行某些程序或游戏时&#xff0c;给使用者带来了很大的困扰。那么&#xff0c;究竟是什么原因导致了msvcr71.dll文件的丢失呢&#xff1f;本文…

T-Rex:检测一切 | 基于视觉提示的开集检测器,检测并计数

图1. 我们引入了一个交互式对象计数模型T-Rex。给定参考图像上指定的框或点&#xff0c;T-Rex 可以检测目标图像上的所有与指定对象表现出相似模式的实例&#xff0c;然后将其相加得到计数结果。我们先通过T-Rex生成检测到框提示&#xff0c;再使用SAM得到mask&#xff0c;以获…

Android端极致画质体验之HDR播放

高动态范围HDR视频通过扩大亮度分量的动态范围(从100cd/m2到1000cd/m2)&#xff0c;以及采用更宽的色彩空间BT2020&#xff0c;提供极致画质体验。从Android10开始&#xff0c;支持HDR视频播放。 一、HDR技术 HDR技术标准包括&#xff1a;Dolby-Vision、HDR10、HLG、PQ。支持…

set与map

set与map 一、序列式容器与关联式容器二、pair1、键值对2、作用3、构造函数4、make_pair&#xff08;1&#xff09;构造函数&#xff08;2&#xff09;作用 5、代码6、运行结果 三、set1、概念2、代码3、运行结果4、说明 四、multiset1、与set的关系2、代码3、运行结果 五、map…

鸿蒙系统扫盲(三):鸿蒙开发用什么语言?

1.两种开发方向 我们常说鸿蒙开发&#xff0c;但是其实鸿蒙开发分为两个方向&#xff1a; 一个是系统级别的开发&#xff0c;比如驱动&#xff0c;内核和框架层的开发&#xff0c;这种开发以C/C为主 还有一个是应用级别的开发&#xff0c;在API7以及以下&#xff0c;还是支持…

linux socket套接字

文章目录 socket流socket&#xff08;TCP&#xff09;数据报socket&#xff08;UDP&#xff09; 讨论 socket 所谓套接字&#xff0c;就是对网络中不同主机上的应用程序之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端&#xff0c;套接字提供了应用层进程利…

WS2812灯条基于WLED开源项目无门槛使用简介

WS2812灯条基于WLED开源项目无门槛使用简介 &#x1f4cc;项目github地址&#xff1a;https://github.com/Aircoookie/WLED&#x1f4cd;WLED详情地址&#xff1a;https://kno.wled.ge/&#x1f388;网页在线烧录固件地址&#xff1a;https://install.wled.me/ ✨ 仅作为使用的…

【同一局域网下】访问其他电脑的虚拟机

一、在被连接的电脑上对VMware进行设置 编辑 --> 虚拟网络编辑器 按顺序点击 如果22端口已被占用&#xff0c;可以自行定义 &#xff08;端口号越大&#xff0c;被占用的可能性越小&#xff09; 二、在被连接的电脑上对防火墙进行设置&#xff08;这里以win11为例&#xff…

【Qt之QSqlRelationalDelegate】描述及使用

描述 QSqlRelationalDelegate类提供了一个委托&#xff0c;用于显示和编辑来自QSqlRelationalTableModel的数据。 与默认委托不同&#xff0c;QSqlRelationalDelegate为作为其他表的外键的字段提供了一个组合框。 要使用该类&#xff0c;只需在带有QSqlRelationalDelegate实例…

考虑极端天气线路脆弱性的配电网分布式电源配置优化模型_IEEE33节点(附带Matlab代码)

随着新能源技术及智能电网的发展&#xff0c;越来越多的分布式电源加入配电网中&#xff0c;不仅改变了配电网结构及供电方式&#xff0c;而且提升了配电网的供电质量。但是在全球气候变暖的背景下&#xff0c;极端天气发生的频率也越来越高&#xff0c;一旦发生必将对配电网系…

竞赛选题 题目:基于深度学习的中文汉字识别 - 深度学习 卷积神经网络 机器视觉 OCR

文章目录 0 简介1 数据集合2 网络构建3 模型训练4 模型性能评估5 文字预测6 最后 0 简介 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习的中文汉字识别 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &a…

python接口自动化测试之requests库的基础使用

简单介绍 requests库简单易用的HTTP库 Get请求 格式&#xff1a; requests.get(url) 注意&#xff1a;若需要传请求参数&#xff0c;可直接在 url 最后的 ? 后面&#xff0c;也可以调用 get() 时多加一个参数 params &#xff0c;传入请求参数&#xff0c;注意需要是 dict…

如何利用轮廓系数(Silhouette Coefficient)来判断模糊c均值聚类FCM的聚类簇数量

文章目录 前言一、轮廓系数的计算方法二、具体流程 前言 轮廓系数&#xff08;Silhouette Coefficient&#xff09;是一种评价聚类效果的指标&#xff0c;它可以用于判断模糊C均值聚类的聚类簇数量。 一、轮廓系数的计算方法 对于每个数据点i&#xff0c;计算它属于每个聚类…