图片是如何生成的--图像生成模型(GAN、VAE、扩散模型)简介

news2024/11/19 13:13:36

目录

1.GAN

2.AutoEncoder及其变种:AE/DAE/VAE/VQVAE

2.1 AE: 

2.2 DAE:Denoising AutoEncoder

2.3 VAE:Variational AutoEncoder

2.4 VQVAE:Vector-quantised Variational AutoEncoder

3. 扩散模型 

3.1 扩散模型的基本原理

3.2 扩散模型的发展历程

3.2.1 DDPM 

3.2.2 improved DDPM

3.3.3 Diffusion Model Beats GAN

3.2.4 Glide

3.2.5 DALLE 2

4.AE家族 vs 扩散模型


本文简单介绍了下图像生成相关的一些模型。

本来想从吴恩达的deepai课程开始写的,但是感觉还是不够简单,推荐跟着李沐学AI里的DALL·E 2,我个人觉得讲的蛮清楚的。

传送门:DALL·E 2(内含扩散模型介绍)【论文精读】_哔哩哔哩_bilibili,从28分开始讲解。

1.GAN

GAN就是左右手互搏,生成器(G)和判别器(D)。

生成器:给定随机噪声,生成图像X’,希望X’尽可能的接近真实图像。

判别器:给定X’和真实图像X,判别图片真假。

目标函数:

通过训练,生成器和判别器不断迭代,最终生成器可以生成比较逼真的图像。

优点:生成的图像比较逼真,需要的数据量不那么多,可以在各个场景下使用

缺点:训练不稳定,容易模型坍塌。

           图片真实但是多样性不足。

           非概率模型,隐式生成图像,在数学上的可解释性不如VAE

2.AutoEncoder及其变种:AE/DAE/VAE/VQVAE

2.1 AE: 

原始图像X通过encoder后,得到一个较小维度的特征(bottleneck),再从bottleneck开始,经过decoder后得到新的X',希望X‘尽可能重建原始X。

2.2 DAE:Denoising AutoEncoder

原始图像经过扰乱后得到Xc(X corrupt),再将Xc传给encoder,后续和AE的步骤一致,目标也是希望X’能够尽可能地重建X(而不是扰乱之后的Xc)

 优点:训练出来的结果非常的稳健,也不容易过拟合(原因:图像这边的冗余太高了,参考MAE,masked AutoEncoder,masked 75%)

AE/DAE/MAE的目标都是生成中间的bottleneck,可以用这个embedding做下游的分类任务,但是这里的bottleneck不是一个概率分布,没法对其进行采样,所以无法做生成任务。

2.3 VAE:Variational AutoEncoder

和上面的图很像,只不过不再学习一个固定的bottleneck特征,而是去学习了一个分布,且这个分布满足高斯分布。

 

编码器的特征通过FC层,预测分布的均值和方差,

利用均值和方差,采样一个Z出来,后续的步骤和AE类似。

当模型训练好之后,可以直接由分布生成Z,再通过decoder生成对应的图片X‘,这样就可以做生成任务了。

数学解释:

q(Z|X)后验概率

分布:先验分布

p(X|Z):likelihood

优点:学习的是分布,图像多样性优秀。数学解释性好。

2.4 VQVAE:Vector-quantised Variational AutoEncoder

codebook:可以理解为聚类中心 ,用离散化的codebook替代distribution,效果更好(类比分类比回归效果好)

K:一般是8192,向量的个数

D:512或768,向量的维度

图片通过编码器得到特征图f后,在codebook中找到和特征图最接近的聚类中心,将聚类中心的编码记录到Z中,将index对应的特征取出,作为fa,完成后续的流程。

额外训练了一个pixel-CNN,当做prior网络,从而利用已经训练好的codebook去做图像的生成。

3. 扩散模型 

3.1 扩散模型的基本原理

一张图片X0,每一步都给它加一个极小的噪声,T步之后得到XT,当T特别大时,这时的XT就趋近于一个真正的噪声,满足各向同性的正态分布,整个过程就是forward disfussion,前向扩散过程。

reverse diffusion整个过程反过来,抽样一个噪声XT,通过不断地消除一点点噪声,T步之后,就可以得到一个真正的图片X0,所有的Xt->Xt-1都是用的同一个模型,共享参数,只不过需要抽样很多次。

U-Net:扩散模型一般使用的是U-Net模型,也就是CNN模型。

先用编码器不断压缩图像,再用解码器不断恢复图像,输入图像和输出图像大小一致,中间还有skip-connection,帮助更好地恢复图像。后续也有加入attention的操作,帮助更好地生成图像。

缺点:非常贵,推理也需要T次(T一般是1000)

3.2 扩散模型的发展历程

3.2.1 DDPM 

  1. 优化了SD的预测目标,将其从图像->图像,变为了去预测对应的噪声是如何加上的,有点像resnet,去预测对应的 residual。
  2. 加入了temporal embedding,时序相关的embedding,因为所有步骤的unet结构都一致,我们希望模型在不同步能够生成不同的东西就通过这个embedding来(PS:使用Stable Diffusion的时候会发现,先有轮廓再有细节就是因为这个)
  3. 提出只需要预测均值(方差只需要是常数就可以工作的很好),进一步降低模型优化的难度。

 

3.2.2 improved DDPM

1.在DDPM的基础上,还是去学习了对应的方差,生成图片的效果进一步提升。

2.添加噪声的schedule 由线性改为余弦添加(类似学习率的余弦schedule)

3.尝试使用扩散模型的大模型,发现模型越大,效果也越好。

3.3.3 Diffusion Model Beats GAN

1.将模型加大加宽

        增加自注意力头的数量,single-scale attention->multi-scale attention(多尺度注意力是指在神经网络中引入多个不同尺度的特征图,然后通过注意力机制对这些特征图进行加权融合,从而提高模型对不同尺度信息的感知能力和表达能力。)

2.新的归一化方式(Adaptive Group Normalization)

        根据步数做自适应的归一化

3.classifier guidance

        引导模型做采样和生成,让生成的图片效果更逼真,也加速了反向采样的速度(只需要25次反向采样,相比于之前的1000次,速度提升非常大)

图中的classifer 是在有噪声的ImageNet上训练的图片分类器,加入噪声是因为扩散模型本身就是在有噪声的图片上训练的。

每次训练时,将Xt传给classifer,预测它对应所属的类别,并且计算交叉熵,得到梯度g,用梯度g来指导后续噪声的采样。通过梯度的引导,让Unet采样的结果尽可能接近真实的物体,也就是能被classifer正确分类。

除了classifer之外,还有clip、image、text等其他的引导方式。它们都相当于是公式中条件y。

clip:后续除了使用classifer来引导图片的采样和生成,也可以将其:替换成clip,将文本和图像联系起来,从而用文本来引导图片的采样和生成,

image :图片的重建--像素级别的引导,特征层面的引导,图像风格的引导

text:大语言模型做引导

3.2.4 Glide

classifer-free guidance

 

之前的classfier guidance都是在扩散模型之外,再额外训练一个模型,训练过程不太可控。classifer-free guidance则是同一个模型同时生成2张图片,一张是有条件的(图片左边),一张是无条件的(图片右边),图片右边的条件是一个空集,在训练过程中,让模型学会两张图片的差距。在反向扩散的过程中,通过没有条件生成的图片去推测生成有条件y生成的图片。

3.2.5 DALLE 2

有空补DALLE和DALLE2的坑,哈哈哈。

4.AE家族 vs 扩散模型

都可以视作是编码器解码器结构

区别:1.AE的编码器是学习到的,Diffusion的编码器是固定的过程(这种固定更像是说,每一步都走同一道门,走1000次,最终变成了不同的样子,意会一下)

2.扩散模型每一步的中间过程,尺寸和原始图片大小都是相同的,而AE的bottleneck则是远小于输入图片的。

3.扩散模型有很多步,所以有time step,time embedding的概念,而在AE中则没有。

后续应该还会开坑:

1.写dalle和dalle2,这2个是使用文本生成图像的,效果也很惊艳。网上也有一些API可以玩

2.吴恩达的扩散模型系列,好像视频只有半小时,看看有没有新东西,如果有的话,也蹭个热度。

3.unclip,比如blip

感兴趣的可以点个关注,ღ( ´・ᴗ・` )比心

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

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

相关文章

【openGauss简单数据管理】--快速入门

【openGauss简单数据管理】--快速入门 🔻 一、openGauss数据库管理🔰 1.1 连接openGauss数据库🔰 1.2 创建数据库🔰 1.3 查看数据库和切换数据库🔰 1.4 修改数据库🔰 1.5 删除数据库🔰 1.6 启停…

【QQ界面展示-实现自动回复 Objective-C语言】

一、刚才咱们监听键盘弹出事件,是怎么监听的, 1.监听键盘弹出事件的步骤 1)首先,在控制器的viewDidLoad方法中,创建一个NotificationCenter对象啊 2)通过center,让当前控制器的这个方法,监听这个通知, 3)然后,我们在这个通知里面,获取到键盘的Y值, 4)对我们的…

Rust 原始类型之数组array内置方法

目录 数组 array 声明 访问 引用 Reference 切片 Slice 方法 题目实例 数组 array 在 Rust 中,数组是一种固定大小的数据结构,用于存储具有相同数据类型的元素的有序集合。 “固定大小”是指数组中的元素的类型和数量确定,也就确定了…

【从零开始学习JAVA | 第十八篇】接口介绍

目录 前言: 接口: 如何定义一个接口: 如何使用一个接口: 接口中成员的特点: 接口与类的区别: 接口的应用: 总结: 前言: 接口其实是为了弥补继承的缺点&#xf…

C语言文件打开关闭详解、文件顺序读写详解。

文件的打开和关闭 fopen函数原型: FILE *fopen( const char *filename, const char *mode );const char *filename 文件的路径以及名字const char *mode 文件的打开方式 文件打开方式含义如果文件不存在“r”读文件不存在会报错“w”写(清空写)建立一个新的文件“…

【新手上路】如何在Web3时代成为XR创建者

目录 0 XR在Web3里的作用 1 XR的概念、特征、技术、设备、平台、应用和工具 1.1 VR的概念、特征和技术 1.2 AR的概念、特征和技术 1.2 XR的设备、平台、应用和工具 2 选择XR的方法 2.1 何时使用VR 2.2 何时使用AR 3 开发XR作品的4个步骤 4 成为XR构建者的路径 4.1 三…

小程序布局中相对定位的用法

小程序中一般为了有一定的设计效果,会将下边组件的内容提升一点到上边去,比如我们的电商展示模板里,会将商品列表覆盖一点到背景图,效果如下: 这种要如何搭建呢?就是利用到了CSS相对定位的原理 搭建组件 …

27.移除元素

LeetCode-27.移除元素 1、题目描述2、解题思路3、代码实现3.1Java代码实现3.2双指针代码优化 4、解题记录 1、题目描述 题目描述: 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要…

windows搭建vue开发环境

参考博客:最详细的vue安装教程_一只野生程序媛的博客-CSDN博客 Vue安装环境最全教程,傻瓜式安装_浪漫主义码农的博客-CSDN博客 1、安装nodejs,从下面官网下载版本,对应安装就行了: Node.js 中文网 2、安装好后&…

合宙Air724UG Cat.1模块硬件设计指南--天线接口

天线接口 简介 天线是发射和接收电磁波的一个重要的无线电设备,没有天线也就没有无线电通信。天线品种繁多,以供不同频率、不同用途、不同场合、不同要求等不同情况下使用。 特性 LTE天线接口。50 欧姆特性阻抗,不推荐使用PCB板载天线&#…

脚本模式的特点和用法

一、什么是脚本? 脚本(script)是使用一种特定的描述性语言,依据一定的格式编写的可执行文件,又称作宏或批处理文件。脚本通常可以由应用程序临时调用并执行。 简单解释:脚本类似于演戏时用到的剧本,脚本其实就是一系列指令——演员看了指令就…

算法--itemCF

概述: 电子商务网站是个性化 推荐系统重要地应用的领域之一。亚马逊就是个性化推荐系统的积极应用者和推广者,亚马逊的推荐系统深入到网站的各类商品,为亚马逊带来了至少30%的销售额。 不光是电商类,推荐系统无处不在。 QQ&…

【差旅-游记】记一次海南出差

哈喽,大家好!我是雷工! 这篇不是技术分享,是篇差旅记录。 最近出差去了一次海南,应该算得上我目前出差去过最远的地方了,也是我第一次去海南,还是蛮有新鲜感的,因此记录下此次差旅。…

【软件设计师暴击考点】数据库系统高频考点暴击系列

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:软件…

tensorflow2 模型建立与训练

模型的构建: tf.keras.Model 和 tf.keras.layers 模型的损失函数: tf.keras.losses 模型的优化器: tf.keras.optimizer 模型的评估: tf.keras.metrics 模型(Model)与层(Layer) …

Mysql 索引基础介绍

索引基础介绍 索引是什么 MySQL官方:索引(INDEX)是帮助MySQL高效获取数据的数据结构。 面试官问,回:索引是排好序的快速查找数据结构 索引的目的在于提高查询效率,可以类比字典的目录。如果要查mysql这个这…

13. python从入门到精通——Python操作数据库

数据库编程接口:python database API python database API概述 python database API 规范对于关系数据库的访问,Python社区已经制定出一个标准,称为Python Database API,通过这个接口使python跨不同数据库的操作代码可以更加具有…

动态内存管理(malloc,calloc,realloc)

文章目录 1.为什么存在动态内存分配 2.动态内存函数的介绍 3.常见的动态内存错误 4.几个经典的笔试题 5. C/C程序的内存开辟 文章内容 1.为什么存在动态内存分配 我们已经掌握的内存开辟方式有: int val 20;//在栈空间上开辟四个字节 char arr[10] {0};/…

【javascript】闭包

通过定时器从第一个元素开始往后&#xff0c;每隔一秒输出arr数组中的一个元素。 <script>var arr [one, two, three];for(var i 0; i < arr.length; i) {setTimeout(function () {console.log(arr[i]);}, i * 1000);} </script> 但是运行过后&#xff0c;我…

使用生成 AI 实现准确的新闻摘要

shadow 这篇文章介绍了作者 Alessandro Alviani 的实践经验&#xff0c;非常有参考价值。 指令冗余&#xff0c;多步引导&#xff0c;是目前提高LLM输出质量的方法之一。 Towards Accurate Quote-Aware Summarization of News using Generative AI Alessandro Alviani generati…