生成模型 | 从 VAE 到 Diffusion Model (下)

🐧大模型系列篇章

💖 多模态大模型 🔎 GroundingDINO 论文总结
💖 端到端目标检测 🔎 从DETR 到 GroundingDINO
💖 多模态大模型 👉 CLIP论文总结
💖 多模态大模型 👉 EVA-CLIP
💚 生成模型 👉 从 VAE 到 Diffusion Model (上)
💚 生成模型 👉 从 VAE 到 Diffusion Model (下)
💧 天气大模型

欢迎订阅专栏,第一时间掌握最新科技
专栏链接

在这里插入图片描述

生成模型 | 从 VAE 到 Diffusion Model (上)的链接请点击下方蓝色字体: 上部分主要介绍了,GAN, AE, VAE, VQ-VAE, DALL-E

生成模型 | 从 VAE 到 Diffusion Model (上)

文章目录

  • 我们先来看一下生成模型现在的能力
  • 一,扩散模型
    • 反向过程
    • U-NET
  • 二,扩散模型的发展历程
    • 1. Denoising Diffusion Probabilistic Model (DDPM) (2020.06)
      • 贡献一
      • 目标函数
      • 贡献二
      • VAE 与 Diffusion Model的相似之处
    • 2. Improved Denoising Diffusion Probabilistic Model (Improved DDPM) (2021.02)(OpenAI)
    • 3. Diffusion Model Beats GAN(2021.05) (OpenAI)
    • 4. GLIDE(2021.) (OpenAI)
    • 5. DALL-E-2(2021.05) (OpenAI)
      • decoder
      • prior
  • 三,文生图模型的总体架构
    • Text Encoder
    • Decoder

我们先来看一下生成模型现在的能力

他能干什么:文生图,生成原有图像之外的新内容,修改图片,生成图片的变体

生成模型现在的能力示例
文生图在这里插入图片描述
生成原有图像之外的新内容在这里插入图片描述
修改图片在这里插入图片描述
生成图片的变体在这里插入图片描述
不同公司的生成式模型示例
之前的生成模型在这里插入图片描述
OpenAI在这里插入图片描述
stability ai在这里插入图片描述
Midjounery在这里插入图片描述

一,扩散模型

在训练的时候有两个过程:

  • 前向过程: 把 噪声 加到图片里面去, 直到图片变成一个纯纯的高斯分布的这么一个噪声。

  • 反向过程: 把高斯分布的这么一个噪声 一步步 的去噪,生成图片。

(扩散模型:是一个概率分布模型,他生成这个图片,是从分布里去采样的,所以他的多样性非常好,但是保真度比不过GAN)

数学上,简洁美观,正向,逆向都是高斯分布,所以能做很多推理证明。

如果我现在的输入是一个随机噪声Z(和GAN里面那个一样),找到一种方式,把噪声一点点恢复到最初的图片,就可以做图像生成了。通过这个反向过程来生成图像。

  • 我们随机抽样一个噪声,比如说Xt,那我就训练一个模型把它从Xt 还原回 Xt-1,一步一步这样倒退回来。
  • 抽样生成很多次,训练比较贵,推理也是最慢的一个。
  • 最原始的扩散模型T是选择了1000个step,如果你随机选择一个噪声,你要往前推1000步,一千次forword 一点一点把图像恢复回来。开销很大。
    在这里插入图片描述
    在这里插入图片描述

反向过程

这个reverse 反向模型长什么样呢?每一步的输入输出的图片大小保持不变,在这个情况下,diffusion model采取了一个非常常见的一个模型结构U-NET

在这里插入图片描述

U-NET

U-NET: 他的输入输出的特征图大小一样,我们用u-net来做这个噪声的预测

  • u-net就是一个CNN ,一点点把图像压小,然后解码一点点把图片恢复回来,前后两个图片尺寸大小是一样的。
  • 为了让恢复做的更好,还有一些skip connection, 这样能恢复一些细节。
  • 后来又对网络结构有了一些改进,比如加了attention,让模型生成变得更好。
  • 这里不一定要用u-net模型,但是大部分扩散网络都用了u-net

在这里插入图片描述

二,扩散模型的发展历程

1. Denoising Diffusion Probabilistic Model (DDPM) (2020.06)

贡献一

  • 以前大家都用Xt预测Xt-1,这让有点难,取而代之去预测这个噪声。
  • 同时这里面也加了time embedding,告诉模型这是我们现在走哪一步了。现在这个输出我是想要糙一点的还是想要细致一点的
    • 我们希望u-net在刚开始的反向过程中,可以生成物体大概的轮廓,一些很粗糙的图像,不需要很清晰,不需要很写实
    • 随着扩散模型往前走,我们希望模型还原图片的细节信息,比如物体的边边角角,物体细小的特征,让图片变得逼真。

目标函数

训练这个简单的目标函数,我们就把DDPM这个网络训练起来了。
在这里插入图片描述

贡献二

  • 如果你要预测一个正态分布呢,其实你只要学习他的均值和方差,就可以了
  • 作者这里发现,其实你只要去学均值就可以了,方差都不用学,方差变成一个常数,效果就很好了
  • DDPM降低了模型优化的难度,第一次能够用扩散模型,能够生成很好的图片,是扩散模型的开山之作

VAE 与 Diffusion Model的相似之处

  1. 编码器解码器的结构
  2. 对于扩散模型,每一步的中间过程,和刚开始的输入都是同样维度大小。对VAE来说,中间特征bottleneck 要比输入小很多
  3. 对扩散模型来说有步数的概念。从随机噪声开始要经过很多很多步才能生成一个图片,所以它有time embedding的概念。而且在所有的time step里所有的模型都是共享参数
  • 换一个角度看VAE 和 Diffusion Model
    • VAE 先用一个ENCODER, 把Image 变成 Latent presentation, 然后用一个Decoder 把 这个特征还原回图片。
    • 扩散模型,你可以把这个前向加噪的过程看成一个ENCODER, 这个encoder不是神经网络,不是学习得来的,而是固定好的,是人设计的。一直加噪,得到这么一个纯粹的噪声图片就像是人类看不懂的Latent presentation。然后把噪声还原的过程就是Decoder的过程。

在这里插入图片描述

2. Improved Denoising Diffusion Probabilistic Model (Improved DDPM) (2021.02)(OpenAI)

  • 之前的DDPM里面说,正态分布的方差呢,不用学,OpenAI觉得要是学了可能会更好,后来取样,生成的效果都不错
  • 更改了如何添加噪声的schedule,从一个线性的schedule, 变成了一个余弦的schedule。
  • 模型越大,图像生成更好。

3. Diffusion Model Beats GAN(2021.05) (OpenAI)

  • 把模型加大加宽,增加自注意力头的数量,变复杂
  • 新的归一化的方式,根据步数做自适应的归一化
  • classifier guidance的方法,引导模型做采样和生成,让生成的图片更加的逼真,同时加速了反向采样的速度。
    • 之前的扩散模型在计算FID等数值的时候,与GAN相比不具有竞争性,classifier guidance的方法, 提高了FID, INCEPTION SCORE。同时也提升了采样生成的速度。
    • classifier guided diffusion: 在训练模型的同时,再训练一个图像分类器,
      • 分类器的作用:当我有一个图片Xt,我把它扔给图片分类器,看他分类对不对,我就能算一个交叉熵目标函数,对应的呢就能得到一些 梯度,然后我用这个梯度来帮助模型进行采样和图片的生成。这里的梯度暗含了图片里面的物体,告诉U-NET我现在要生成的图片呢,要看起来更像某一类物体。
    • 在classifier guided diffusion 之后生成的图片逼真了很多
    • 这篇论文第一次把diffusion model的FID等评价指标得分打败了GAN
    • 相当于牺牲了一部分多样性,增加了 写实性。
  • 除了用classifier 当作指导信号,还可以用什么当作指导信号?除了梯度,还可以用 clip, image, text 做引导
  • 所有的这个方法有一个缺陷:需要用另外一个模型来做这个引导
    在这里插入图片描述

4. GLIDE(2021.) (OpenAI)

  • classifier free guidance
    • 不想要这些classifier了,能不能找到一种指导信号,让模型生成更好呢?
    • 让模型生成两个输出,一个是给定条件生成一个输出,另一个是不给条件生成一个输出。
      • 比如,给定的条件是text,生成一个输出,然后随机的不给条件,生成输出。假设我们现在有一个空间,刚才生成的图片分别是有条件生成的图片和没用条件生成图,那我们现在知道,有一个方向 让我们从无条件的输出,成为有条件得到的这个输出,通过训练,我们就会知道他们之间的差距大概是多少。最后在反向扩散图像生成的时候呢,我们能做出一个合理的推测,能从一个没有条件生成的输出,变成一个有条件生成的输出。这样就摆脱了分类器的限制。
    • 训练很贵,训练的时候生成两个输出。但是好用。是一个非常重要的技巧,从GLIDE, DALL-E.2 到Imagen都说这是一个非常好用的技巧。

在前面的所有发展历程的积累下,GLIDE模型是一个很好的根据文本生成图片的扩散模型了。只用了3.5B的参数,就直逼之前的DALL-E模型(12B参数)。所以OpenAI就不顺着之前DALL-E, 之前 VQ-VAE的方向去做了,就用扩散模型来做了。

5. DALL-E-2(2021.05) (OpenAI)

任务:给定文本去生成图像:

1. 先训练好一个clip模型, 找到图像和文本对之间的相连关系后
2. 然后把text变成text embedding, 训练一个prior 模型, 把text embedding 变成 image embedding
3. 然后用一个 decoder 把 image embedding 还原成图像

DALL-E2这种显示的生成图像特征的 提高了图片的 多样性, 他们这种基于 扩散模型 的解码器,能够根据给定的图片特征,生成不同的图片,同时保持语义信息和风格都是比较接近的,只是细节不一样。
因为这个是通过文本生成图像,所以很容易的通过clip做为中间的桥梁,从而达到这种图片编辑的功能。

在这里插入图片描述

  • 给定一个文本y, 恢复图像X。 他可以写成给定一个文本y, 然后生成图片对应的特征Zi,然后根据chain rule,就可以写成最后的式子了。’
  • 给定文本生成图片特征,给定y,Zi之后,用图像embedding去生成图像X就是decoder
    在这里插入图片描述

decoder

这里的decoder就是GLIDE模型的变体,他用了clip来作为guidance,也用了classifier-free guidance,能用的都用了。

为了产生高清大图,训练了两个扩散上采样模型,一个从64到256,一个模型从256到1024,

prior

给定一个文本,去生成一个图片的特征。

diffusion prior 作者训练了一个transformer decoder,因为他的输入输出是embedding,所以说用u-net就不太合适,直接上transformer去处理这个序列就可以了。

这里的输入有:文本,clip文本特征,time embedding, 加噪的clip图片特征,transformer自己的embedding(cls token)

最终这个embedding特征呢就拿去预测没有加过噪声的clip图片特征。

这里他不去预测噪声,直接去预测噪声图

简而言之,在GLIDE的基础上,加了prior,用了层级式的生成,最终做出了DALL-E.2。

三,文生图模型的总体架构

在这里插入图片描述
举几个例子:1. stable diffusion 2. DALL-E 系列 3. Imagen
用的trick都大不相同,总之就是大力出奇迹

模型模型流程示意图
Stable Diffusion
在这里插入图片描述
DALL-E 系列
在这里插入图片描述
Imagen在这里插入图片描述

Text Encoder

Text Encoder: 把文本特征 ——> 图片特征。

所以训练的数据需要大量的 图像-文本对

Imagen的实验说,Text Encoder 的模型越大,整个生成模型生成的图片越好。

相对而言,增大DIFFUSION MODEL 对 提升图片生成的效果有限

注:FID越小越好,他评估真实图片与生成图片的距离。 FID-10K的意思就是,他sample了10k数量的图片,来计算FID。

CLIP Score,越大越好, 说明生成的图片与文本联系度很高

在这里插入图片描述

Decoder

Decoder的作用:Image embedding → 还原成图片

  • Imagen这个模型的 Image embedding 是小图

在这里插入图片描述

  • stable diffusion, DALL-E 的Image embedding是一个 隐性的特征
    在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C语言】strstr函数的使用和模拟

前言 今天给大家带来一个字符串函数,strstr()的使用介绍和模拟实现。 模拟实现这个函数,可以帮助我们更深刻地理解这个函数的功能和提高解决字符串相关问题的能力,有兴趣的话就请往下看吧。 strstr函数介绍 函数功能: strstr函…

STL:string

文章目录 标准库中的string类string的构造string的赋值重载string的容量size(length)max_sizeresizereservecapacityclearemptyshink_to_fit string的元素访问operator[] 和 atfront 和 back string的迭代器 和 范围forstring的修改operatorappendpush_backassigninserterasere…

Spring OAuth2:开发者的安全盾牌!(上)

何利用Spring OAuth2构建坚不可摧的安全体系?如何使用 OAuth2 从跨域挑战到性能优化,每一个环节都为你的应用保驾护航? 文章目录 Spring OAuth2 详解1. 引言简述OAuth2协议的重要性Spring Framework对OAuth2的支持概述 2. 背景介绍2.1 OAuth2…

上位机图像处理和嵌入式模块部署(f103 mcu中的串口接口)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 在mcu开发中,mcu扮演着非常重要的角色。一方面,串口可以帮助我们对固件功能进行调试,另外一方面,串…

微信图片识别文字怎么弄?介绍三个识别方法

微信图片识别文字怎么弄?在信息爆炸的时代,我们每天都会接触到大量的图片信息,其中包含的文字内容往往是我们获取信息的重要途径。然而,手动输入图片中的文字既费时又费力,这时,一款能够准确识别微信图片中…

2024受欢迎的便签app是哪个

在繁忙的工作和生活中,便签app成为了我们不可或缺的小助手。2024年,随着人们对高效工作和生活品质的追求,选择一款功能强大且用户友好的便签app显得尤为重要。在众多选择中,敬业签以其出色的记录与提醒功能,脱颖而出&a…

MQ第②讲~保证消息可靠性

前言 上一讲我们讲了MQ实际工作中常见的应用场景,这一节讲一下消息的可靠性,如果对MQ掌握程度比较高的铁子,可以不用看,节省您宝贵的时间。 消息的大致链路 消息从投递到消费需要考虑如下几个问题 生产者的消息是否成功投递到消…

隐藏在OceanBase ODC中的运维神器

近期OceanBase 的ODC 推出的新版 v4.2.4中,提供了内置运维代码,让我们一起来看看吧。 DBA 可能会喜欢的功能 查看集群可用的资源 统计数据库内表的数据大小 用 SQL 创建租户不再复杂 请注意,在修改租户名字时,unit config和reso…

2024 最新版 Navicat 17 下载与安装步骤及演示 (图文版)

Navicat 是一款专业的数据库管理工具,支持多种数据库类型,包括 MySQL、Oracle、SQL Server、PostgreSQL、MariaDB、Redis、MongoDB 和 SQLite。Navicat17包含的版本如下Navicat Premium 17, Navicat 17 for MySQL, Navicat 17 for Oracle, Navicat 17 fo…

记录使用自定义编辑器做试题识别功能

习惯了将解析写在代码注释,这里就直接上代码啦,里面用到的bxm-ui3组件库是博主基于element-Plus做的,可以通过npm i bxm-ui3自行安装使用 // 识别方法: // dom 当前识别数据所在区域, questionType 当前点击编辑选择的题目类型&a…

Java设计模式 _行为型模式_观察者模式

一、观察者模式 1、观察者模式 观察者模式 ( Observer Pattern )是一种行为型模式。 常用于对象间存在一对多关系时,比如,当一个对象被修改时,需要自动通知它的依赖对象。 2、实现思路 (1)、定义被观察者的行为&…

Kafka原生API使用Java代码-生产者-发送消息

文章目录 1、生产者发送消息1.1、使用EFAK创建主题my_topic31.2、根据kafka官网文档写代码1.3、pom.xml1.4、KafkaProducer1.java1.5、使用EFAK查看主题1.6、再次运行KafkaProducer1.java1.7、再次使用EFAK查看主题 1、生产者发送消息 1.1、使用EFAK创建主题my_topic3 1.2、根…

c++(六)

c(六) 多态概念在c中是如何实现多态静态多态(绑定)动态多态(绑定) 动态多态的实现原理动态内存分配中遇到的问题 重载、重定义、重写的区别抽象类接口类---抽象类空类对象的内存大小explicitfinal修饰类修饰…

稳定性大升级!EMCS全球服务网络携手NineData实现数据实时同步

易客满(ECMS Express)专注于提供全球化的国际物流解决方案和经济快递服务,服务网络覆盖全球主要贸易市场的国际物流公司。ECMS拥有国际快递、国际货代、仓储供应链全球覆盖服务能力。 1. 易客满(ECMS)数据复制的技术挑…

SOLIDWORKS 2024:零件亮点的升级与突破

随着科技的不断发展,工程设计软件也在持续进步,以更好地满足工程师和设计师的需求。SOLIDWORKS,作为一款广泛使用的三维CAD软件,一直在不断地推出新版本,以提供更强大、更便捷的功能。今天,我们将深入探讨S…

高边坡监测常用的主要仪器设备

随着人类的发展,近几年由于人类生活生产的破坏,地球环境不断恶化。鉴于这一现象,监测行业也随之应运而生。常见的监测类型有:边坡监测,地灾监测,水库监测,大坝监测,矿山监测&#xf…

geotrust通配符证书600元且赠送一个月

GeoTrust作为国际知名的数字证书颁发机构,旗下有RapidSSL、QuickSSL等子品牌经营着各种类型的SSL数字证书,其中RapidSSL旗下的SSL数字证书都是入门级的,性价比高。审核速度也比较快,证书的适用范围也比较广泛。今天就随SSL盾小编了…

HarmonyOS-9(stage模式)

配置文件 {"module": {"requestPermissions": [ //权限{"name": "ohos.permission.EXECUTE_INSIGHT_INTENT"}],"name": "entry", //模块的名称"type": "entry", //模块类型 :ability类型和…

【Python Cookbook】S01E02 从任意长度的可迭代对象中分解元素

目录 问题解决方案讨论 问题 从某个不确定长度的迭代对象中分解出 N N N 个元素。 解决方案 *分解操作和各种函数式语言中的列表处理功能有着一定的相似性。例如,如果有一个列表,可以像下面这样轻松将其分解为头部和尾部。 scores [99, 97, 91, 89…

CHIMA专访美创高级总监丁斐:为医疗数据安全构筑体系化防御新机制

5月17-19日,中国医院信息网络大会(CHIMA 2024)在南京隆重召开。作为结识多年的老友,美创科技再携以数据为中心的全系列安全业务、新一代数字化安全平台、医疗行业解决方案精彩亮相。 会议期间,CHIMA专访美创科技&…