理解DALL-E 2

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.mzph.cn/news/184412.shtml

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

相关文章

IDEA专栏—重装IDEA的配置

文章目录 1、maven路径2、默认文件路径3、插件4、导包顺序5、快捷键6、调整配置插件 1、maven路径 2、默认文件路径 3、插件 4、导包顺序 import static all other imports <blank line> import java.* import javax.* <blank line> import all other imports <…

python实现获取aws route53域名信息

最近由于工作原因接触到aws的服务&#xff0c;我需要实时获取所有的域名信息&#xff0c;用于对其进行扫描&#xff0c;因此写了一个自动化爬取脚本 给需要的人分享。 1.基础准备 代码环境&#xff1a;python3 第三方库&#xff1a;boto3 &#xff08;安装方法pip install…

虚幻学习笔记7—蓝图接口

一、前言 蓝图接口就是可以在蓝图中实现的接口&#xff0c;有它方便的地方&#xff0c;可以很方便的调用到实现了接口的函数。 二、实现 2.1、创建一个蓝图接口 1&#xff09;可以添加多个函数。 2&#xff09;函数在蓝图接口中只能规定输入和输出参数。 只有输入参数的可以…

SSM校园学习助手系统开发mysql数据库web结构java编程计算机网页源码eclipse项目

一、源码特点 SSM 校园学习助手系统是一套完善的信息系统&#xff0c;结合springMVC框架完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用SSM框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模…

C语言--每日选择题--Day30

第一题 1. i 5&#xff0c;j 7&#xff0c;i | j 等于多少&#xff1f; A&#xff1a;1 B&#xff1a;3 C&#xff1a;5 D&#xff1a;7 答案及解析 D &#xff5c;这个是按位或运算符&#xff0c;两个数的二进制位&#xff0c;有1为1&#xff0c;同0为0&#xff1b; i的二进…

ubuntu下训练自己的yolov5数据集

参考文档 yolov5-github yolov5-github-训练文档 csdn训练博客 一、配置环境 1.1 安装依赖包 前往清华源官方地址 选择适合自己的版本替换自己的源 # 备份源文件 sudo cp /etc/apt/sources.list /etc/apt/sources.list_bak # 修改源文件 # 更新 sudo apt update &&a…

虚拟机VMware下CentOS7.9对磁盘扩容

首先是在VMware虚拟下对机器进行关机&#xff0c;然后扩容后启动机器&#xff08;操作简单&#xff0c;忽略&#xff0c;网上很多&#xff09; 开始增加磁盘空间 查看磁盘空间 发现此时磁盘空间仍然没变化 df -lh 查看当前磁盘分区信息 fdisk -l 对新加磁盘空间进行分区操…

UG\NX二次开发 创建对象属性UF_ATTR_assign

文章作者:里海 来源网站:里海NX二次开发3000例专栏 感谢粉丝订阅 感谢 weixin_43890371 订阅本专栏,非常感谢。 简介 创建对象属性UF_ATTR_assign 这个函数在后续NX版本中被UF_ATTR_set_user_attribute替代,新的函数使用例子请参阅这篇文章《UG\NX二次开发 创建对象属性UF_…

UG\NX二次开发 获取对象上属性的锁定状态UF_ATTR_ask_locked

文章作者&#xff1a;里海 来源网站&#xff1a;里海NX二次开发3000例专栏 感谢粉丝订阅 感谢 2301_80435318 开发 订阅本专栏&#xff0c;非常感谢。 简介 设置对象上属性的锁定状态UF_ATTR_set_locked&#xff0c;需要先在“用户默认设置”中勾选“通过NX Open锁定属性”&…

shiro-cas处理请求的流程

1.shiro框架处理请求&#xff0c;首先会先经过AccessControlFilter的onPreHandle方法。 2.onPreHandle中 ①isAccessAllowed&#xff1a;判断用户是否登录 在登录的情况下会走此方法&#xff0c;此方法返回true直接访问控制器&#xff1b; ②onAccessDenied&#xff1a;是否是拒…

如何保证缓存和数据库的双写一致性?

一、什么是数据库和缓存双写一致性&#xff1f; 在分布式系统中&#xff0c;数据库和缓存会搭配一起使用&#xff0c;以此来保证程序的整体查询性能。也就说&#xff0c;分布式系统为了缓解数据库查询的压力&#xff0c;会将查出来的数据保存在缓存中&#xff0c;下次再查询时…

什么是UTM投影坐标系?​

UTM&#xff08;Universal Transverse Mercator Grid System&#xff0c;通用横墨卡托格网系统&#xff09;坐标是一种平面直角坐标。 这种坐标格网系统及其所依据的投影已经广泛用于地形图&#xff0c;作为卫星影像和自然资源数据库的参考格网以及要求精确定位的其他应用。 …

android framework分屏“官方”黑屏bug问题发现,你会分析吗?-千里马实战作业挑战

背景 hi&#xff0c;粉丝朋友们&#xff1a; 大家都知道马哥课程以实战为特色&#xff0c;这里的实战就是最贴近公司里面开发的实战项目。这些实战主要来自哪呢&#xff1f; 1、以前在公司的工作积累&#xff0c;自己在公司做过什么&#xff0c;这部分比较好毕竟都是搞过的 2…

webshell之API免杀

ScriptEngineManager命令执行免杀 ScriptEngineManager执行js代码 利用ScriptEngineManager可以执行js命令&#xff0c;但是由于一般情况下&#xff0c;即便能运行js代码也不一定能执行系统命令。因为一般情况下js执行系统命令主要是依靠两种方式&#xff0c;IE的ActiveX插件…

用纯 CSS 实现网格背景

是不是在日常开发中经常遇到实现网格的需求&#xff0c;网格通常对网页中展示的元素能起到很好的定位和对齐作用。 这里介绍如何只通过 CSS 来实现这个需求&#xff1f; 使用背景图 这里我们的背景图使用 SVG 来创建&#xff0c;首先&#xff0c;创建绘出一个正方形&#xff0c…

PC模糊搜索

双向绑定input输入框&#xff0c;监听值改变事件 <el-inputinput"input"v-model"queryParams.keyword"style"margin-bottom: 10px"type"text"prefix-icon"el-icon-search"size"small"placeholder"输入员工…

好视通云会议 upLoad2.jsp 任意文件上传漏洞复现

0x01 产品简介 好视通云会议是基于 Internet 的网络视频会议产品&#xff0c;用户使用好视通云会议可以实现多人音视频交流、文字聊天、共享文档、共享屏幕等&#xff0c;会议的管理者可以控制其他参会人的各种权限&#xff0c;可以将会议录制成视频&#xff0c;对会场进行点名…

轻型载重汽车转向前桥总成系统毕业设计机械设计

wx供重浩&#xff1a;创享日记 对话框发送&#xff1a;前桥 获取完整说明报告工程源文件 绪论 1.1 轻型载重汽车转向桥的设计意义 汽车是现代交通工具中用得最多&#xff0c;最普遍&#xff0c;也是最方便的交通运输工具。汽车转向系是汽车上的一个重要系统,它是汽车转向运动…

Docker篇之利用docker搭建ftp服务器可实现多用户上传

一、前言 场景&#xff1a;公司需要搭建FTP服务器&#xff0c;供内网之前可以互相传递数据&#xff0c;安全稳定&#xff0c;需要满足开通多个账号&#xff0c;每个用户上传的文件有自己对应的文件目录。 这里建议&#xff1a;用户目录Disk尽量大一点&#xff0c;避免因为空间不…

Maven镜像仓库问题

1.pom文件远程仓库地址 <!--使用aliyun的Maven镜像源提升下载速度--><repositories><repository><id>aliyunmaven</id><name>aliyun</name><url>https://maven.aliyun.com/repository/public</url></repository>&…