你真的看懂扩散模型(diffusion model)了吗?(从DALL·E 2讲起,GAN、VAE、MAE都有)

news2024/9/24 9:23:33

本文全网原创于CSDN:落难Coder ,未经允许,不得转载!

扩散模型简单介绍

我们来讲一下什么是扩散模型,如果你不了解一些工作,你可能不清楚它究竟是什么。那么我举两个例子说一下:AI作画(输入一些文字就可以得到与你描述相符的图像)和抖音大火的真图生成漫画风图等都是它的成果。如下图是我利用AI生成的漫画图。

在这里插入图片描述

这里说的两个例子就表现出了扩散模型已经有的两个能力:文生图以及根据文字/图像对已有图像进行改图,当然这里的工作只是有限的列举,在各个方面扩散模型仍有很多优秀表现。

接下来,我们定义一下扩散模型:扩散模型是根据文本/图像输入生成原创性的贴近真实的图片输出。值得一提的是,这里原创性是至关重要的,很多我们错误理解是:是不是模型学习到了你给的数据集,然后记住了这些数据,进而将输入与输出对应而出图的,这里很明显的强调了是模型原创性的设计,不是原数据集所存在的图像(Fake Image)。

在这里了解技术的同学可能就会产生跟我产生一样的疑问,生图模型不是有GAN吗,为什么还要有扩散模型?这里有一个很专业的回答:GAN模型生图的能力确实是无法比拟的,可以说是具有强大的逼真性,并且一直保持在该领域有良好专业指标(FID score等)。然而最新最热门的扩散模型除了具备生图的逼真性,还兼具了多样性,这也是GAN模型的一大局限。--该解释来自DALL·E 2(最新的扩散模型)论文

关于为什么要叫扩散模型这个问题,其实是来自于热力学,热力学上我们都知道物质会从高浓度往低浓度的地方流动,最终达到一种动态的平衡,而这个过程就是一个扩散过程,由此,扩散模型的名称而来。

从DALL·E 2模型讲起

DALL·E是OpenAI于2021年1月份做出来的一个扩散模型的工作。自从DALL·E出来以后,一大堆工作就开始涌现:

  1. 2021年5月,清华推出CogView模型,支持中文生成;
  2. 2021年11月,微软和北大推出了NUWA(女娲)模型,支持较短视频的生成任务;
  3. 2021年12月,OpenAI推出了GLIDE
  4. 2021年12月,百度推出了ERNIE-ViLG(文心大模型)模型,支持中文生成,参数量巨大(100亿),比肩DALL·E(120亿);
  5. 2022年4月,OpenAI推出了DALL·E 2(官方名称为unCLIP);

接下来,以DALL·E 2为例,详细看下扩散模型这个领域的发展:

在这里插入图片描述

为了方便介绍一些具体的细节介绍,这里我对DALL·E 2论文中的核心架构图进行了编号。

在这个图中,虚线以上部分其实是CLIPCLIP可以用来做图文匹配任务),虚线以下部分才是DALL·E 2的内容。首先看CLIP,它的工作在于将图像的描述文本(即编号1)做成了文本描述编码器和图像本身(即编号2)做成了图像编码器,之后生成了文本编码和图像编码的配对,然后正确的图像与文字描述就会成为一个正样本,而错误的图像和文字描述会组成一个负样本,从而形成对比学习,利用对比学习,图像和文字(多模态)特征就联系在了一起。这里值得注意的是通过对比学习得到的模型是被锁住的,这里的锁住指的是在训练得到模型以后,该模型不能再进行任何训练和Fine-tune
接下来我们继续看DALL·E 2,它其实是一个两阶段的过程,分为prior(即编号5)和decoder(即编号6),由于之前CLIP是有文本特征(即编号1)和图像特征(即编号2)的,在DALL·E 2可以利用输入文本特征生成图像,并且用CLIP的图像特征作为Ground Truth进行监督训练,这样在推理阶段,prior模型就可以利用输入的文字生成图像了,在这里看起来生图任务已经完成了,那么为什么又多了一个decoder(即编号6)呢?这里decoder过程其实就可以理解为64*64图像变成1024*1024这样大图的意思(简单理解,OpenAI有钱,想做的有B格)。

这里解释下前面说到DALL·E 2官方名称为unCLIP,主要是因为之前的CLIP是想要拿到文本特征和图像特征去做匹配任务,例如图像检索。而到了DALL·E 2应用了该方法,但是又没有完全用,DALL·E 2是一个文字特征生成图像特征进入生成图像的过程,可以理解为CLIP的反过程,即unCLIP

这里我们完整描述了一整个DALL·E 2模型的论文,对这个扩散模型有了基础的了解,接下来我们可以深入的讲讲扩散模型的知识了。

远古的GAN模型

在这里插入图片描述

GAN模型可以理解成一个左右手互博的过程,它拥有一个生成器(用于生成噪声的假图像)和一个辨别器(辨别是否是生成的假图像),通过两个网络的互相较量,最终训练出一个保真度极高的图像生成网络模型,所以这也就造就了DeepFake的火爆。然而除了保真度高之外的优良特性,他也有一个致命缺点:由于采取两个网络训练,这里就存在两个网络平衡的问题,如果真的设计不好两个网络,很容易造成整个结果坍塌。还有前面提到的一个缺点就是多样性生成不好。

后来的AE、DAE、VAE、MAE、VQVAE模型

在这里插入图片描述

AE、DAE、VAE、MAE、VQVAE这些模型都是采取了一种encoder-decoder的思想。如AE模型,它对于输入X,随机添加一些噪声,之后得到Y,最后让模型能学习利用Y可以重建出来X的过程。

在这里插入图片描述

后来的工作,如VAE发现了让模型直接学习噪声从而恢复图像的计算和各种性能上有很大的开销,它开始让模型去学习添加的这些噪声的分布从而让模型有效重建原始的X。再之后的VQVAE则继续改进了这个预测分布(包括均值和方差)的模型,从事了一些其他的研究。

再次回到扩散模型

在这里插入图片描述

这里,我们就可以深入的讲解扩散模型的构成了。首先看上图,扩散模型进行一个forward diffusion过程,即从原始X0开始,每次都添加一些正太分布噪声或者其他噪声最终变成XT(X1、X2…XT为不断加入噪声的图像,当T为无穷大时,这个真正的图就变成了一个完全的噪声图,此时就会变成一个各向同性的正太分布)。之后模型就可以进行一个reverse diffusion过程,这个过程其实就是训练一个模型(这个模型是共享的),使得让XT恢复成X(T-1)并最终恢复成X0的过程。由上图可以看到每次reverse diffusion都是一个相同尺寸的图生成另外一个相同尺寸的图像的过程,所以这里很容易就想到了U-Net架构,一个编码-解码的模型,这里将U-Net采用跳跃连接来恢复一些信息,甚至之后在U-Net上加一些Attention等对结构进行改进。大部分时候扩散模型是采用了U-Net,但也不是绝对。

扩散模型的发展历程

扩散模型的概念起源于2015年甚至更早之前,这些年逐渐演变发展:

  1. DDPM(扩散领域开山之作,不是采用U-Net预测图,而是预测噪声【只预测均值,方差设为常数,这样模型也可以有很好的效果】进而恢复图像,同时引入了Time Embedding,用于记录预测的第几步,告诉模型当前这一步是否需要生成更细致图像)。
  2. Improved DDPM(让模型又学了方差,同时证明了大模型有更好表现)。
  3. Diffusion beats GAN(将模型加大加宽,同时加入classifier guided diffusion,把专业指标做上去,赶超之前的GAN)。
  4. GLIDEclassifier-free guided diffusion方法)。
  5. DALL·E 2classifier-free guided diffusion方法同时除了使用classify模型去引导模型学习,使用文本是不是也可以做引导呢,此时引入结合了CLIP,同时做CLIP和classify的guided)。

这里着重介绍下classifier guided diffusion,它其实就是一个简单图像分类器,它可以是基于ImageNet数据集训练,但是又不完全相同于ImageNet,因为需要保持与diffusion(diffusion就是一个输入不断加入噪声的过程)相同,所以需要对ImageNet数据加入噪声再训练得到的一个图像分类模型:
在这里插入图片描述
那么这里的图像分类模型有什么用呢?前面我们提到reverse diffusion过程是一个利用U-Net预测XT到X(T-1)的过程,在每一步U-Net预测恢复前一个图像时加入这个图像分类模型去预测当前图像的分类结果,从而干预下一步U-Net模型的采样和生成结果。除了这个工作,后续也有classifier-free guided diffusion等工作。

扩散模型的未来

在生图这个领域,连续霸榜了很久的GAN模型好像已经走到了末尾,已经没有太多的工作去做了,而扩散模型已经击败GAN并且迎来了它发展的最好的时期。

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

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

相关文章

分布滞后线性和非线性模型(DLNM)分析空气污染(臭氧)、温度对死亡率时间序列数据的影响...

全文下载链接 http://tecdat.cn/?p23947 分布滞后非线性模型(DLNM)表示一个建模框架,可以灵活地描述在时间序列数据中显示潜在非线性和滞后影响的关联。该方法论基于交叉基的定义,交叉基是由两组基础函数的组合表示的二维函数空间…

为什么要让img浮动:

为什么要浮动&#xff1a; 图片不浮动的话&#xff0c;图片和文字是像下面这样排版的&#xff1a; 代码&#xff1a; <img src"https://static.maizuo.com/pc/v5/usr/movie/1f25dd6943762288dfd84b961c98f478.jpg" /> <div><div>红发歌姬</d…

OpenAI发布ChatGPT:程序员瞬间不淡定了

OpenAI发布ChatGPT&#xff1a;程序员瞬间不淡定了 12月1日&#xff0c;OpenAI发布了针对对话场景优化的语言大模型ChatGPT。ChatGPT是InstructGPT的兄弟模型&#xff0c;可以以对话的形式与用户交互&#xff0c;这使得ChatGPT能够回答问题、承认错误、质疑假设、拒绝不当问题…

时尚品牌Gucci 的Web3元宇宙营销进行时ing

Gucci 宣布在 The Sandbox 中推出 “Gucci Vault Land” 古驰藏宝阁 —— 元宇宙中心 &#xff0c;成为第一个在 The Sandbox 虚拟世界中拥有专门用于 Web3 产品的主流时尚品牌。Gucci 美学概念空间开放日&#xff1a;10月27日-11月 9 日 2022 年 Gucci Vault Land建立虚拟世界…

数据结构薄弱知识点

数据结构串KMP算法树二叉树二叉树的基本概念二叉树的遍历&#xff08;&#xff01;非递归实现&#xff09;先序遍历中序遍历后序遍历&#xff08;&#x1f538;非递归实现&#xff09;&#x1f536;线索二叉树找先序遍历的前驱节点&#xff08;&#x1f538;&#xff09;和后继…

Spring学习:二、Bean的管理

4. Bean的管理 ​ Spring的基本Bean管理包括Bean配置&#xff0c;Bean实例化和Bean的依赖注入。这些管理可以通过手工编码的方式把每个Bean注册到容器中&#xff0c;也可以通过properties文件和xml文件配置Bean和Bean之间的依赖关系。通常我们的配置方式是XML作为配置文件。 …

基于纳芯微产品的尾灯方案介绍

文章目录1.前言2.方案简介2.1 概述2.2 功能介绍2.3 DEMO资料3.主要器件介绍3.1 LED Driver3.2 LDO3.3 CAN\LIN收发器4.演示视频5.推荐阅读1.前言 最近拜访一些做尾灯模组的客户了解到&#xff0c;目前LED Driver依然紧缺&#xff0c;特别是TPS929120&#xff0c;BD18331这些差…

网络编程,UDP通信程序,TCP通信程序

一、网络编程 网络编程概述 网络编程 : 在网络[通信协议]下&#xff0c;不同计算机上运行的程序&#xff0c;可以进行[数据传输] 思考&#xff1a; A电脑中的QQ&#xff0c;发送消息给B电脑中的QQ。那么需要知道[哪些条件]才能发送&#xff1f; 在这个故事场景下&…

GitHub 的基本使用

文章目录一、使用前工作二、GitHub 的基本使用一、使用前工作 下载 uu 加速器&#xff0c;用于访问 GitHub 网站&#xff08;有魔法工具的小伙伴请忽略&#xff09;&#xff1b;uu 加速器下载安装完毕后搜索框搜索学术资源并点击加速&#xff08;如图1.2.1&#xff09;&#xf…

【Android App】人脸识别中使用Opencv比较两张人脸相似程度实战(附源码和演示 超详细)

需要全部代码请点赞关注收藏后评论区留言私信~~~ 一、比较两张人脸的相似程度 直方图由一排纵向的竖条或者竖线组成&#xff0c;横轴代表数据类型&#xff0c;纵轴代表数据多少。 图像直方图经常应用于特征提取、图像匹配等方面。 假设有两幅图像&#xff0c;它们的直方图很相…

Vue项目devServer.proxy代理配置详解

Vue项目devServer.proxy代理配置详解目录概述需求&#xff1a;设计思路实现思路分析1..config.js文件中&#xff0c;引入依赖项2.devServer.proxy 可以是一个指向开发环境 API 服务器的字符串3.更多控制行为参考资料和推荐阅读Survive by day and develop by night. talk for i…

语言模型也会“地域黑”?实验表明ALBERT最能黑,BART最友善

文 | ZenMoore前言今天我们来谈论一个不那么硬核的问题&#xff1a;预训练语言模型中的歧视与偏见(bias)。这个问题虽然不像技术问题那样核心&#xff0c;但仍然非常重要。想象一下&#xff1a;你接到了一笔外交级别的订单&#xff0c;要做一个生成语言模型&#xff0c;先不论效…

NNDL 实验七 循环神经网络(3)LSTM的记忆能力实验

文章目录6.3 LSTM的记忆能力实验6.3.1 模型构建6.3.1.1 LSTM层6.3.1.2 模型汇总6.3.2 模型训练6.3.2.1 训练指定长度的数字预测模型6.3.2.2 多组训练6.3.2.3 损失曲线展示【思考题1】LSTM与SRN实验结果对比&#xff0c;谈谈看法。&#xff08;选做&#xff09;6.3.3 模型评价6.…

Android OpenGL ES 学习(六) – 使用 VBO、VAO 和 EBO/IBO 优化程序

OpenGL 学习教程 Android OpenGL ES 学习(一) – 基本概念 Android OpenGL ES 学习(二) – 图形渲染管线和GLSL Android OpenGL ES 学习(三) – 绘制平面图形 Android OpenGL ES 学习(四) – 正交投屏 Android OpenGL ES 学习(五) – 渐变色 代码工程地址&#xff1a; https://…

【ARIMA时序预测】基于ARIMA实现时间序列数据预测附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

Unity常用的三种拖拽方法(内置方法 + 接口 + Event Trigger组件)

目录 内置方法OnMouseDrag【对象含有Collider组件】 配对小游戏 Event Trigger组件 接口 窗口小案例 内置方法OnMouseDrag【对象含有Collider组件】 OnMOuseOver()检测鼠标是否进入到这个2D贴图 当鼠标进入或离开2D贴图&#xff0c;会相应的放大、缩小 private void OnMo…

[附源码]计算机毕业设计springboot校园快递柜存取件系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

山外山通过注册:拟募资12亿 大健康与华盖信诚是股东

雷递网 雷建平 12月2日重庆山外山血液净化技术股份有限公司&#xff08;简称&#xff1a;“山外山”&#xff09;日前通过注册&#xff0c;准备在科创板上市。山外山计划募资12.47亿元&#xff0c;其中&#xff0c;8.63亿用于血液净化设备及高值耗材产业化项目&#xff0c;1.64…

【Python基础系列】Part2. 列表

二、列表 1.列表介绍 定义&#xff1a;列表是由一系列按照一定顺序排列的元素组成。 Python中用[]表示列表&#xff0c;用,分割元素。 number ["one", "two", "three"] print(number)# [one, two, three]列表中的元素可以是不同类型 numbe…

netsh interface portproxy端口转发,从本地端口到本地端口不起作用的解决办法

开启IP V6 你虽然可能用不到IPV6,但是有些系统是需要用到IPV6的dll来做端口转发的. 如图,确保你联网的连接已经开启 IPV6 检查IP Helper服务 打开任务管理器 点击 服务 查看iphlpsvc是否启动状态,点击右键如果显示的是停止,就是已经启动了. 如果显示"启动服务"则…