浅析扩散模型与图像生成【应用篇】(二十一)——DALLE·2

21. Hierarchical Text-Conditional Image Generation with CLIP Latents

  该文提出一种基于层级式扩散模型的由文本生成图像的方法,也就是大名鼎鼎的DALLE·2。在DALLE·2之前呢,OpenAI团队已经推出了DALLE和GLIDE两个文生图模型了,其中DALLE是基于VQVAE方法的与现在流行的扩散模型不同,所以我就不详细展开了。而DALLE·2其实与同样基于扩散模型的GLIDE关系更为密切,关于GLIDE的介绍,可以参见笔者之前的博客。DALLE·2所做的工作其实在题目里面就说的很清楚了,作者首先用一个训练好的CLIP模型,将输入的文本描述转换成潜在的文本特征,然后利用一个先验模型(Prior)将这个文本特征映射成对应的图像特征,最后有一个解码器(Decoder)生成对应的图像。层级式是因为原始输出只有64 * 64的分辨率,作者通过两个级联的上采样器将其分辨率逐步提升至256 * 256和1024 * 1024。整体过程如下图所示
在这里插入图片描述
  首先,作者需要按照CLIP的模式训练一个文本编码器,简单来说就是收集一些文本-图像对,用一个文本编码器将文本转换成文本特征(Text embedding),用一个图像编码器将图像转换成图像特征(Image embedding),然后利用对比学习的方法对模型进行训练,最终得到一个文本编码器和图像编码器,这个过程如图中虚线以上的部分所示。CLIP的效果非常强大,应用也是非常广泛,具体可以参考其他的讲解文章和论文。
  然后,作者将训练好的文本编码器权重锁定,给定一个文本会输出一个确定的文本特征 z t z_t zt,将文本特征输入到一个先验模型(Prior)中,将其转化成一个图像特征 z i z_i zi。这个先验模型有两种实现形式:基于自回归机制(Autoregressive, AR)和基于扩散模型。AR其实是作者先前的工作DALLE中采用的技术,实验表明,二者的效果接近,但扩散模型的计算效率更高,因此作者最终采用了基于扩散模型的方案,下文中我们也主要介绍基于扩散模型的方案。得到图像特征 z i z_i zi后,作者再次利用一个基于扩散模型的图像解码器生成对应的图像。这整个过程就像是将CLIP反过来,从由图到特征,变为由特征到图,因此作者其实是称自己的模型为unCLIP。下面我们详细介绍下基于扩散模型的先验模型和图像解码器的实现方法

先验模型 Prior

   在训练阶段,我们将文本的编码(这里是指采用BPE编码的编码结果,而不是CLIP输出的文本特征),CLIP输出的文本特征,扩散时间步数嵌入特征和加入随机噪声的CLIP输出的图像特征一起输入到一个带有causal attention 掩码的Transformer的解码器中。解码器直接输出无噪声的图像特征,并与真实的无噪声图像特征 z i z_i zi计算均方差损失来训练模型,如下式所示 L prior  = E t ∼ [ 1 , T ] , z i ( t ) ∼ q t [ ∥ f θ ( z i ( t ) , t , y ) − z i ∥ 2 ] L_{\text {prior }}=\mathbb{E}_{t \sim[1, T], z_{i}^{(t)} \sim q_{t}}\left[\left\|f_{\theta}\left(z_{i}^{(t)}, t, y\right)-z_{i}\right\|^{2}\right] Lprior =Et[1,T],zi(t)qt[ fθ(zi(t),t,y)zi 2]这里的先验模型与常见的扩散模型有很多不同,首先,其输入是文本特征 z t z_t zt,输出是图像特征 z i z_i zi,其更接近StableDiffusion中的方法,在特征层面上进行扩散和采样。其次,先验模型采用的是Casual Transformer模型而不是常见的UNet模型。最后,模型直接预测的是采样结果,即无噪声的图像特征,而不是常见的噪声均值。
   在推理阶段,我们还是可以根据输入的文本描述得到对应的文本编码和文本特征,然后从随机高斯分布中采样得到 t t t时刻的图像特征 z i ( t ) z_i^{(t)} zi(t)并与时间步数 t t t编码一起输入到训练好的先验模型中,得到去噪后的图像特征 z i z_i zi

这里其实有一点疑问,就是如果按照典型的扩散模型采样流程,应该是先预测得到 t − 1 t-1 t1时刻的图像特征 z i ( t − 1 ) z_i^{(t-1)} zi(t1),然后再逐步的去噪得到最终的图像特征 z i z_i zi。但是按照训练过程来看,他是直接预测去噪后的图像特征 z i z_i zi的,因此这一点可能还需要阅读代码来确认。

解码器 Decoder

   这里的解码器也与很多AE中的解码器概念不太一样,它并不是直接把前面得到的图像特征解码重建得到图像,而是依旧采用一个扩散模型,将前文得到的图像特征与输入的文本特征一起作为一个条件引导信息,来引导扩散模型完成图像的采样。那么图像特征和文本特征如何构成条件来引导扩散模型呢?一方面,图像特征经过映射后直接加到时间步数嵌入上作为一个条件输入,另一方面,图像特征映射为四个额外的Token并与文本特征序列级联起来也作为一个条件输入。扩散模型采用IDDPM,随机采样 t t t时刻噪声图像,与上述两个条件一起输入到模型中输出噪声分布的均值,然后从中采样得到一个噪声,经过去噪后得到 t − 1 t-1 t1时刻的图像,迭代上述过程直至得到无噪声图像 x 0 x_0 x0下图引用自知乎用户“莫叶何竹”的博文
在这里插入图片描述
   在训练过程中,作者也采用了无分类器引导扩散模型(CDM)中的训练技巧,随机抛弃掉10%的图像特征输入和50%的文本特征。最后,为了提升生成图像的分辨率,作者训练了两个级联的基于卷积模型的上采样器,逐步将图像分辨率提升至256 * 256 和 1024 * 1024。
   作者在MS-COCO数据集上测试了文本-图像的生成效果,并与其他方法做了对比,效果如下
在这里插入图片描述
   此外,作者还做了许多有趣的实验。首先,给定一幅照片经过编码处理后可得到图像特征 z i z_i zi,然后将其作为条件信息与随机采样的噪声图像一起输入到解码器中就可以得到重建后的图像,如下图所示。可以看到重建后的图像与原图保持了风格和基本布局上的一致,但在细节上呈现了更多的多样性。
在这里插入图片描述
   然后,作者实现了两个图像的融合,分别从两幅图像得到对应的特征 z i 1 z_{i_1} zi1 z i 2 z_{i_2} zi2,然后采用球形插值得到插值后的图像特征 z i θ = slerp ⁡ ( z i 1 , z i 2 , θ ) z_{i_{\theta}}=\operatorname{slerp}\left(z_{i_{1}}, z_{i_{2}}, \theta\right) ziθ=slerp(zi1,zi2,θ) θ \theta θ的取值范围是[0,1]。将插值后的特征输入到编码器中,就能得到两幅图像逐渐融合的过程,如下图所示
在这里插入图片描述
   最后,作者还尝试了文本差异引导图像生成,假设原始图像的文本描述特征为 z t 0 z_{t_0} zt0,目标文本描述特征为 z t z_{t} zt,则可以计算文本特征差异 z d = norm ( z t − z t 0 ) z_d=\text{norm}(z_{t}-z_{t_0}) zd=norm(ztzt0),将 z d z_d zd与图像特征 z i z_i zi进行球形插值 z θ = slerp ⁡ ( z i , z d , θ ) z_{{\theta}}=\operatorname{slerp}\left(z_{i}, z_{d}, \theta\right) zθ=slerp(zi,zd,θ),再进行图像生成,就能得到从原始图像过渡到目标图像之间的过程,如下图所示
在这里插入图片描述
   即使DALLE·2已经取得了非常惊艳的生成效果,但在许多任务中仍存在一定的缺陷和局限性。例如,无法将图像的内容和属性对齐,如下图它无法理解“把红色方块放到蓝色方块”上的操作,只是生成了包含红色方块和蓝色方块的图片,这一点上GLIDE表现得要更好
在这里插入图片描述
   此外,在生成一个带有文本的图像时,DALLE·2的生成效果也是一塌糊涂,字母的顺序都是凌乱的。
在这里插入图片描述
   由于图像是从低分辨率图像逐渐上采样得到高分辨率图像的,因此在生成高质量图像时,经常出现许多细节上的缺失和错乱,如下图所示
在这里插入图片描述

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

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

相关文章

Costas-Barker序列模糊函数仿真

文章目录 前言一、Costas 序列二、Barker 码三、Costas-Barker 序列模糊函数仿真1、MATLAB 核心代码2、仿真结果①、Costas-Barker 模糊函数图②、Costas-Barker 距离模糊函数图③、Costas-Barker 速度模糊函数图 四、资源自取 前言 Costas 码是一种用于载波同步的频率调制序列…

(读书笔记-大模型) LLM Powered Autonomous Agents

目录 智能体系统的概念 规划组件 记忆组件 工具组件 案例研究 智能体系统的概念 在大语言模型(LLM)赋能的自主智能体系统中,LLM 充当了智能体的大脑,其三个关键组件分别如下: 首先是规划,它又分为以下…

Docker在linux安装步骤超详细

官网 Install Docker Engine on CentOS | Docker Docs yum -y install gcc yum -y install gcc-c 安装工具 sudo yum install -y yum-utils 设置国内的镜像 yum-config-manager \ --add-repo \ https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yu…

python部署linux

python项目做完了,就涉及到了部署,windows可以打包exe,linux如何部署呢? 部署 Python的打包部署方式有多种,具体取决于项目的需求、规模以及所使用的工具。以下是几种常见的Python打包部署方式: 使用pip安…

vite打包配置

目录 minify默认是esbuild,不能启动下面配置 使用: plugins: [viteMockServe({mockPath: mock})]根目录新建mock/index.ts. 有例子Mock file examples:https://www.npmjs.com/package/vite-plugin-mock-server 开发环境生产环境地址替换。根…

计算机是如何执行指令的

你好,我是 shengjk1,多年大厂经验,努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注!你会有如下收益: 了解大厂经验拥有和大厂相匹配的技术等 希望看什么,评论或者私信告诉我! 文章目录 一…

权益商城系统源码 现支持多种支付方式

简介: 权益商城系统源码,支持多种支付方式,后台商品管理,订单管理,串货管理,分站管理,会员列表,分销日志,应用配置。 上传到服务器,修改数据库信息&#xff…

软件测试与管理-白盒测试-逻辑覆盖法例题

目录 知识点: 例题 : 知识点: 语句覆盖:设计足够多的测试用例,使得被测试程序中的“ 每条可执行语句至少被执行一次” 优点:可通过源码观察直观地得到测试用例,无须细分每个判定表达式。缺点&am…

保研面试408复习 3——操作系统

文章目录 1、操作系统一、进程有哪几种状态,状态之间的转换、二、调度策略a.处理机调度分为三级:b.调度算法 标记文字记忆,加粗文字注意,普通文字理解。 为什么越写越少? 问就是在打瓦。(bushi) 1、操作系统 一、进程…

企业网站 | 被攻击时该怎么办?

前言 每天,数以千计的网站被黑客入侵。发生这种情况时,被入侵网站可用于从网络钓鱼页面到SEO垃圾邮件或者其它内容。如果您拥有一个小型网站,很容易相信黑客不会对它感兴趣。不幸的是,通常情况并非如此。 黑客入侵网站的动机与所…

后端方案设计文档结构模板可参考

文章目录 1 方案设计文档整体结构2 方案详细设计2.1 概要设计2.2 详细设计方案2.2.1 需求分析2.2.2 业务流程设计2.2.3 抽象类:实体对象建模2.2.4 接口设计2.2.5 存储设计 1 方案设计文档整体结构 一,现状:把项目的基本情况和背景都说清楚&a…

MAC 本地搭建Dify环境

Dify 介绍 Dify 是一款开源的大语言模型(LLM) 应用开发平台。它融合了后端即服务(Backend as Service)和 LLMOps 的理念,使开发者可以快速搭建生产级的生成式 AI 应用。即使你是非技术人员,也能参与到 AI 应用的定义和数据运营过…

Voice Conversion、DreamScene、X-SLAM、Panoptic-SLAM、DiffMap、TinySeg

本文首发于公众号:机器感知 Voice Conversion、DreamScene、X-SLAM、Panoptic-SLAM、DiffMap、TinySeg Converting Anyones Voice: End-to-End Expressive Voice Conversion with a Conditional Diffusion Model Expressive voice conversion (VC) conducts speak…

数塔问题(蛮力算法和动态规划)

题目:如下图是一个数塔,从顶部出发在每一个节点可以选择向左或者向右走,一直走到底层,要求找出一条路径,使得路径上的数字之和最大,及路径情况。(使用蛮力算法和动态规划算法分别实现) #include…

c语言从入门到函数速成(1)

温馨提醒:本篇文章适合人群:刚学c又感觉那个地方不怎么懂的同学以及以及学了一些因为自身原因停学一段时间后又继续学c的同学 好,正片开始。 主函数 学c时最先学的是我们c语言程序的主体函数,c的主函数有两种写法,这…

【Docker】★★★

docker 的网络模式 ●host模式:使用 --nethost 指定 容器与宿主机共享网络命名空间、ip和端口 ●container模式:使用 --netcontainer:NAME_or_ID 指定 新建的容器共享已有容器的网络命名空间、ip和端口 ●none模式:使用 --netnone 指定 不进行…

被问了n遍的小程序地理位置权限开通方法

小程序地理位置接口有什么功能? 在平时我们在开发小程序时,难免会需要用到用户的地理位置信息的功能,小程序开发者开放平台新规要求如果没有申请开通微信小程序地理位置接口( getLocation ),但是在代码中却使用到了相关接口&#…

macOS sonoma 14.4.1编译JDK 12

macOS sonoma 14.4.1编译JDK 12 环境参考文档开始简述问题心路历程着手解决最终解决(前面有点啰嗦了,可以直接看这里) 记录一次靠自己看代码解决问题的经历(总之就是非常开心)。 首先,先diss一下bing,我差一点就放弃了。 环境 macOS sonom…

分布式与一致性协议之Raft算法(二)

Raft算法 什么是任期 我们知道,议会选举中的领导者是有任期的,当领导者任命到期后,需要重新再次选举。Raft算法中的领导者也是有任期,每个任期由单调递增的数字(任期编号)标识。比如,节点A的任期编号是1。任期编号会…

自定义类型

引言: C语言分为:1、内置类型 2、自定义类型: 1》结构体——每个成员有自己的空间 2》枚举型——定义多个常量 3》联合体——所有成员共用一快内存空间 一、结构体: 单独写过了一篇 关于结构体的介绍以及使用 二、 枚举型&…