07.Diffusion Model概述

文章目录

  • Diffusion Model原理
    • Reverse Process
    • Denoise模块
    • Forward Process(Diffusion Process)
  • 文字生成图片by Diffusion Model
  • 文字生成图像的常见套路
    • Text Encoder
      • Fréchet Inception Distance
      • Contrastive Language-Image Pre-Training(CLIP)
    • Decoder
    • Generation Model

部分截图来自原课程视频《2023李宏毅最新生成式AI教程》,B站自行搜索。
论文地址: Denoising Diffusion Probabilistic Models (DDPM)

Diffusion Model原理

从搞屎分布里面采样出一个向量,该向量大小应该和你想要生成的图片大小一样。
在这里插入图片描述

Reverse Process

然后一步步通过Denoise模块,逐步将图片显示出来,每一步都会有一个编号,这里的蓝色Denoise模块用的都是同一个。
在这里插入图片描述
The sculpture is already complete within the marble block, before I start my work. lt isalready there, I just have to chisel away the superfluous material. - Michelangelo,
米开朗基罗·博那罗蒂代表作:大卫
在这里插入图片描述

Denoise模块

由于Reverse Process用的是同一个Denoise模块,但是每次输入都不一样,要想逐步得到清晰的图片,还需要有额外的输入,就是可以代表当前图片中noise多少的编号,例如下图中就是第1000和第1个编号作为额外输入的例子:
在这里插入图片描述
Denoise模块内部结构如下图所示,先是将输入图片和当前编号丢进噪音预测模块,得到当前噪声图片,然后通过与输入图片相减得到输出结果。
在这里插入图片描述
为什么要先预测噪音,而不是直接预测要输出的图片?
直接产生带猫咪的图片和产生噪音的图片难度不一样,前者隐含我们的Ground Truth,是模型未知的内容,如上图中的模型能生成带噪音的猫咪,那就意味模型基本上会生成猫咪了,干嘛还要训练?

Forward Process(Diffusion Process)

Denoise模块的训练就是要根据输入得到图片中的噪音,大概流程如下图,但如何找到类似的训练数据?
在这里插入图片描述
去掉噪音可能很难,但是加噪音很简单,这个过程称为Forward Process(Diffusion Process),具体如下图所示,找一张图片,然后从搞屎分布随机采样一个噪音,加入图片,一直重复多次。
在这里插入图片描述
从上面的不断加噪音的过程中,无形中就得到了Denoise模块的训练数据:
输入1:带有噪音的图片(下图蓝框图片)
输入2:编号(下图中的step 2)
输出:输入1中的噪音(下图红框图片)
在这里插入图片描述

文字生成图片by Diffusion Model

上面的Diffusion Model只是生成图片,如果要完成文字生成图片任务,还需要成对的文字+图片的训练数据
在这里插入图片描述
当前比较知名的文字生成图片训练数据集是:LAION-5B,大概有58.5亿个图片与文字的数据,文字还包含多个语种。
每个Denoise模块当然还要吃文字作为输入。
在这里插入图片描述
Denoise模块内部也没有太大编号
在这里插入图片描述
Denoise模块的训练数据的生成过程没有什么变化,文字并不需要参与加噪音的过程:
在这里插入图片描述
只是将输入加了一个:
输入1:带有噪音的图片(上图蓝框图片)
输入2:编号(上图中的step 2)
输入3:图片对应的文字描述
输出:输入1中的噪音(上图红框图片)
在这里插入图片描述

文字生成图像的常见套路

常见的文字生成图像的模型通常由三个魔祖:
1.文字的编码器,吃文字得到embedding表示;
2.Diffusion模型,吃文字的embedding和从高斯分布采样出来的噪音(粉色方块),得到中间产物(可以是模糊图片,也可以是看不懂的图片);
3.解码器,吃中间产物,得到目标图片。
这三个魔祖分开训练,然后合体。
在这里插入图片描述
这些模型中比较知名的就是Stable Diffusion Model:High-Resolution Image Synthesis with Latent Diffusion Models,三个模块分别从右到左:灰色,绿色,粉红,值得注意的是,灰色部分不但可以吃文字,还可以吃其他非结构化的信息。
在这里插入图片描述

还有DALL-E系列:
Hierarchical Text-Conditional Image Generation with CLIP Latents
Zero-Shot Text-to-Image Generation
在这里插入图片描述
Figure 2: A high-level overview of unCLIP. Above the dotted line, we depict the CLIP training process, through which we learn a joint representation space for text and images. Below the dotted line, we depict our text-to-image generation process: a CLIP text embedding is first fed to an autoregressive or diffusion prior to produce an image embedding, and then this embedding is used to condition a diffusion decoder which produces a final image. Note that the CLIP model is frozen during training of the prior and decoder.
这里不一样的是在第二魔祖里面有两种选择,Autoregressive和Diffusion,后者优先。

谷歌的Imagen:
Photorealistic Text-to-Image Diffusion Models with Deep Language Understanding
在这里插入图片描述
这里蓝色对应魔祖1,然后用红色Diffusion模型生成一个小图(大小是64×64),然后再用魔祖3(黄色和绿色,这里也算不上是decoder,也是Diffusion模型)将图片加大到1024×1024。

下面分别介绍三个魔祖。

Text Encoder

Text Encoder技术上之前已经讲过很多,在谷歌的Imagen里面给出了该魔祖对图像生成任务的影响:
在这里插入图片描述
这里用的T5,纵轴是FID,越小越好;横轴是CLIP Score,越大越好。上面的图a表示模型越大生成图像的品质越好。
仅凭LAION中那一丢丢文字语料是无法获得很好的文字embedding表达的,有很多未知词汇在语料中都没有见过,因此使用预训练的大模型可以有效提升图像生成任务的性能,也就是说能看懂文字是生成图像的前提,若是准星有问题是无法命中目标的。
相较魔祖1而言,魔祖2的大小就没有这么重要了,上图b也显示了该结果。

Fréchet Inception Distance

该指标来自文章:GANs Trained by a Two Time-Scale Update Rule Converge to a Local Nash Equilibrium
由于图片生成的结果没有标准答案,因此该文章提出了一种评判生成图像与真实图像之间差异的标准。
先要有一个预先训练好的图像分类模型(CNN就阔以),然后把生成图像与真实图像都丢进分类模型,将进入Softmax之前的图像embedding拿出来如下图所示:
在这里插入图片描述
其中黄色点表示真实图片,蓝色点表示生成图片,Fréchet Inception Distance就表示两类图片分布的距离。这里的分布距离不好算,这里直接假设两个分布都是搞屎(你肯定想问为什么不是别的分布,我只能告诉你这是一个假设,等你写论文的时候就可以做主用其他分布)。距离越小代表生成图片与真实图片越接近。
这个方法的缺点是需要大量图片来拟合分布,上面的FID 10K就表示sample了10000张图片来完成FID的计算。

Contrastive Language-Image Pre-Training(CLIP)

CLIP来自文章:Learning Transferable Visual Models From Natural Language Supervision
这个玩意很简单,吃文字和图片,分别经过文字和图片的Encoder,得到各自的embedding表达,然后计算二者的距离作为CLIP值,距离越近得分越大,CLIP值越大越好。
在这里插入图片描述
这个模型在400万个图片文字对上进行了训练。原文做zero-shot prediction下游任务还做为结果做了处理,这里不需要。
在这里插入图片描述

Decoder

这个魔祖不需要文字与图片对进行训练,只需要无文本标记的图片就可以训练。
根据Generation Model生成的中间产物不一样,训练Decoder的方法也不同。
如果中间中间产物小图(谷歌的Imagen),Decoder需要将分辨率小的图片生成高分辨率的图片,则我们可以线找高清图片,然后对图片进行downsample操作得到小图,就可以得到训练数据与GroundTruth:在这里插入图片描述
如果中间产物是embedding表征(DALL-E、Stable Diffusion):
在这里插入图片描述

则可以使用Auto-Encoder的套路来训练Decoder,结构如下图所示,目的就是要使得两处的图片越接近越好:

在这里插入图片描述
训练好了就可以把Decoder拿出来用。

把上面两种方法结合起来,若我们把输入图片的维度看成 H × W × 3 H\times W\times 3 H×W×3,中间产物无论是压缩的小图也好还是embedding也好,都可以看做是一个 h × w × c h\times w\times c h×w×c的向量。

Generation Model

上面的Forward Process(Diffusion Process)在讲解原理是,是将Noise加到图片上的,但是在实作的时候,从下图可以看到,Noise是加到中间产物上的,这里需要注意的是,Noise的维度大小要和中间产物一致。
在这里插入图片描述
根据原理,Generation Model的输入如下图所示:
在这里插入图片描述
具体包括:
输入1:带有噪音的中间产物(上图蓝框黄色矩阵)
输入2:编号(上图中的step 2)
输入3:图片的文字描述的embedding(上图蓝色向量)

输出:输入1中的噪音(上图红框中的矩阵)
在这里插入图片描述

同理,Reverse Process如下图所示:
在这里插入图片描述
midjourney在生成图片的过程中并不是从噪音慢慢变成图片,而是把每一步的噪音接到Decoder把中间过程放出来,所以我们看到感觉是图片在变清晰。

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

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

相关文章

Fourier分析导论——第3章——Fourier级数的收敛性(E.M. Stein R. Shakarchi)

第 3 章 Fourier级数的收敛性(Convergence of Fourier Series) The sine and cosine series, by which one can represent an arbitrary function in a given interval, enjoy among other remarkable properties that of being convergent. This property did not escape…

【Midjourney入门教程1】Midjourney的注册、订阅

文章目录 前言一、Midjourney是什么二、Midjourney注册三、新建自己的服务器四、开通订阅 前言 AI绘画即指人工智能绘画,是一种计算机生成绘画的方式。是AIGC应用领域内的一大分支。 AI绘画主要分为两个部分,一个是对图像的分析与判断,即“…

行业观察:数字化企业需要什么样的数据中心

伴随着数字经济在中国乃至全球的高速发展,数字化转型已经成为广大企业的必经之路。而作为数字经济的核心基础设施,数据中心充当了接收、处理、存储与转发数据流的“中枢大脑”,对驱动数字经济发展和企业数字化转型起到了极为关键的重要作用。…

路由器基础(十一):ACL 配置

访问控制列表 (Access Control List,ACL) 是目前使用最多的访问控制实现技术。访问控制列表是路由器接口的指令列表,用来控制端口进出的数据包。ACL适用于所有的被路由协议,如IP、IPX、AppleTalk 等。访问控制列表可以分为基本访问控制列表和高级访问控制…

第10章_创建和管理表

文章目录 1 基础知识1.1 一条数据存储的过程1.2 标识符命名规则1.3 MySQL中的数据类型 2 创建和管理数据库2.1 创建数据库2.2 使用数据库2.3 修改数据库2.4 删除数据库代码演示 3 创建表3.1 创建方式13.2 创建方式23.3 查看数据表结构代码演示 4 修改表4.1 追加一个列4.2 修改一…

shell学习脚本05(小滴课堂)

可以对海量的数据进行提取。 -v对提取的内容进行取反。 -n显示出行号。 -w精确匹配: -i:忽略大小写: -E正则匹配: cut命令: -d指定分隔符,-f指定截取区域: 截取第一列到第三列: 截取第二列到最…

在Python中添加Selenium Web Driver等待

本文将介绍在Python中在Selenium Web驱动程序中添加等待的示例。 Python Selenium Web 驱动程序等待 大多数 Web 应用程序都使用 AJAX 技术。 因此,网页上存在的不同元素需要不同的时间间隔才能完全上传,因为硒在网页上存在之前无法找到任何文本。 我们…

系列六、Mybatis的一级缓存

一、概述 Mybatis一级缓存的作用域是同一个SqlSession,在同一个SqlSession中执行两次相同的查询,第一次执行完毕后,Mybatis会将查询到的数据缓存起来(缓存到内存中), 第二次执行相同的查询时,会…

【ML】分类问题

分类问题 classification:根据已知样本特征,判断输入样本属于哪种已知样本类。 常用入门案例:垃圾邮件检测、图像分类、手写数字识别、考试通过预测。 分类问题和回归问题的明显区别: 分类问题的结果是非连续型标签&#xff0c…

【算法|二分查找No.1】leetcode 704. 二分查找+二分模板 leetcode 34. 在排序数组中查找元素的第一个和最后一个位置

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望…

C/C++ static关键字详解(最全解析,static是什么,static如何使用,static的常考面试题)

目录 一、前言 二、static关键字是什么? 三、static关键字修饰的对象是什么? 四、C 语言中的 static 🍎static的C用法 🍉static的重点概念 🍐static修饰局部变量 💦static在修饰局部变量和函数的作用 &a…

【k8s】pod集群调度

调度约束 Kubernetes 是通过 List-Watch **** 的机制进行每个组件的协作,保持数据同步的,每个组件之间的设计实现了解耦。 用户是通过 kubectl 根据配置文件,向 APIServer 发送命令,在 Node 节点上面建立 Pod 和 Container。…

[SSD综述1.7] SSD接口形态: SATA、M.2、U.2、PCIe、BGA

依公知及经验整理,原创保护,禁止转载。 专栏 《SSD入门到精通系列》 <<<< 返回总目录 <<<< 前言 犹记得当年Windows 7系统体验指数中,那5.9分磁盘分数,在其余四项的7.9分面前,似乎已经告诉我们机械硬盘注定被时代淘汰。势如破竹的SSD固态硬盘,彻…

二维码智慧门牌管理系统升级:一键报错解决三大问题

文章目录 前言一、一键报错功能解决了三大问题二、提高效率和便捷性 前言 随着科技的不断发展&#xff0c;智能化管理已经深入到社会的各个角落&#xff0c;其中二维码智慧门牌管理系统在社区、酒店、写字楼等场所的应用尤为广泛。为了更好地提升管理系统效率和解决实际问题&a…

旋转图像[中等]

优质博文&#xff1a;IT-BLOG-CN 一、题目 给定一个n n的二维矩阵matrix表示一个图像。请你将图像顺时针旋转90度。你必须在原地旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。 示例 1&#xff1a; 输入&#xff1a; matrix…

设计模式之装饰模式--优雅的增强

目录 概述什么是装饰模式为什么使用装饰模式关键角色基本代码应用场景 版本迭代版本一版本二版本三—装饰模式 装饰模式中的巧妙之处1、被装饰对象和装饰对象共享相同的接口或父类2、当调用装饰器类的装饰方法时&#xff0c;会先调用被装饰对象的同名方法3、子类方法与父类方法…

【深度学习基础】专业术语汇总(欠拟合和过拟合、泛化能力与迁移学习、调参和超参数、训练集、测试集和验证集)

&#x1f4e2;&#xff1a;如果你也对机器人、人工智能感兴趣&#xff0c;看来我们志同道合✨ &#x1f4e2;&#xff1a;不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 &#x1f4e2;&#xff1a;文章若有幸对你有帮助&#xff0c;可点赞 &#x1f44d;…

vue+asp.net Web api前后端分离项目发布部署

一、前后端项目介绍 1.前端项目是使用vue脚手架进行创建的。 脚手架版本&#xff1a;vue/cli 5.0.8 编译器版本&#xff1a;vs code 1.82.2 2.后端是一个asp.net Core Web API 项目 后端框架版本&#xff1a;.NET 6.0 编译器版本&#xff1a;vs 2022 二、发布部署步骤 第…

Java基础篇 | 多线程详解

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; Java从入门到精通 ✨特色专栏&#xf…

网络工程师进阶课:华为HCIP认证课程介绍

微思网络HCIP VIP试听课程&#xff1a;DHCP协议原理与配置https://www.bilibili.com/video/BV1cy4y1J7yg/?spm_id_from333.999.0.0 【赠送】IT技术视频教程&#xff0c;白拿不谢&#xff01;思科、华为、红帽、数据库、云计算等等 https://xmws-it.blog.csdn.net/article/det…