图像生成模型简介

news2025/7/20 9:28:25

因为DALL·E 2是基于CLIP和GLIDE模型写的,作者在写论文的时候弄得十分简略,所以直接看那篇论文可能并不会获得很多信息。今天先帮大家区分一下几个生成模型的区别


GAN

图片来源:What are Diffusion Models? | Lil'Log (lilianweng.github.io)

GAN的话是有两部分的,需要训练两个网络:

  • 一个 生成器(generator)

    给定随机噪声,生成图片。

  • 一个鉴别器(discriminator)

    获取生成的图片,和真实图片进行对比,让判别器判断二者哪个是真的哪个是假的,其实是做一个二分类问题。

在GAN的原文中是这样来描述模型的: 就是说现在有两组人,一组人是警察,另一组人是造假币的。

造假币那个人要干什么呢?就是要做出假的钱呀,让假的钱和真的钱更为相似。但警察的作用就是不断的去识别出假钱来。这样造假币的人不断精进技术造假币,警察的识别技术也不断增进。但是在论文原中,作者是希望最后造假币的人能够胜利,造出以假乱真 让警察无法识别的假币。

警察就是discriminator,而造假币的就是generator。

现在我们有一个生成一个x'x′。然后把生成的这个x'x′和原来的那个xx一起放入discriminator里,进行一个二分类。来判断哪一个是真的。

因为GAN的设计的目的就是以假乱真,所以它生成出来图片非常真实。因为它生成的图片保真度非常的高,所以为此特意美国颁布了两条法令。

  • 第一个是不许拿GAN修改人脸去做涩图。

  • 第二个是不能使用政治人物的脸去说一些他没有说过的话,和做一些他没做过的事情。

GAN不光是生成的图片真实,而且经过这么多年对GAN的这个模型改造之后,现在也比较好用。训练GAN需要的数据也不是那么多,还能在各个场景底下使用,所以优点还是很多的。但GAN也有它的致命缺点:

  • GAN还是训练不够稳定,最主要的原因是要同时去训练两个网络,这存在一个平衡性的问题,经常如果训练的不好会导致模型坍塌。

  • 因为GAN的主要优化目标就是让这个图片尽可能的真实,但是它生成图片的这个多样性就不太好,它的多样性主要就来自于开始的随机噪声。

  • GAN不是概率模型,它的这个生成过程都是隐式的,是黑盒模型,它就是通过一个网络去完成的。所以你也无法知道网络内部到底做了什么,你也不知道它学出来的东西遵循了什么分布,所以说这样的在数学上就不如VAE和扩散模型这些数学模型优美。


AE

图片来源:自己造的

AE模型就是auto-encoder,给定一个输入xx,通过一个编码器,我们可以获得一个小很多的特征表示,称之为bottle neck(直译为瓶颈);之后我们通过一个解码器生成图像x'x′,这个x'x′的目的是重建xx,也就是说让x'x′和xx越相似越好,这里优化目标用的就是一个重建损失。


VAE

图片来源:What are Diffusion Models? | Lil'Log (lilianweng.github.io)

VAE和AE看起来差不多,但是其实区别很大,但是中间特征不再是bottle neck了,而是变成了一个分布。这样就让模型有了泛化能力,模型就可以拿去做生成了。在这里优化目标就变成了去做一个极大似然估计,从数学角度来看就变得优美了。

AE模型和VAE模型具体可以看这里:进来学VAE,VAE都不懂还想懂扩散模型? | Variational Auto-Encoder


VQ-VAE

图片来源:自己造的

VQ-VAE就是把VAE做量化,将其离散化。如果用VAE没办法把模型做的很大,并且中间那个分布可能比较难学,所以这里就将中间换为一个CodeBook,我们可以把它理解为一个聚类中心,大小为K \times D,一般K=8192,D=512K×D,一般K=8192,D=512。

这时候一个图片通过编码器获得对应的特征图ff,我们把特征图的向量去和CodeBook向量做对比,看看和哪个聚类中心更接近,然后将接近的聚类中心放到矩阵zz中,昨晚聚类分配之后我们就使用zz中组合起来的结果作为新的特征图f'f′,然后用量化之后的特征图去经过解码器重建图片。

因为f'f′都是从CodeBook中出来的,所以可控性更高,所以VQ-VAE更好训练。

但是这样的话好像VQ-VAE又回到了AE模型,怎么才能去做生成呢?作者为此又添加了一个pixel CNN当作prior网络,使其做生成。


Diffusion model

扩散模型是一种概率分布模型。扩散模型生成图片是从一个分布里去采样,因此扩散模型的多样性非常的好。但是它的保证度比不过GAN,因为GAN本身就是为了这个以假乱真去优化,所以说GAN生成的图像就特别的逼真,但是扩散模型就做不到这一点。至少是在评价指标的数值比较上,比如说FID score之类的这些指标上面。所以在生成的图片效果上GAN一直都是压制diffusion model的。

我们已经知道扩散模型它存在的问题就是我虽然生成的图片多样性比较好,但是我生成的图片度保真度不好。你人眼比较的话,对比GAN生图片来说可能会有一眼假的这种感觉。比如你看一下下图,最右边考拉的手还是有问题的。

图片来源:Imagen论文

但是从20年开始就有一系列的工作致力于提高扩散模型的保真度,比如说刚开始的DDPM、improved ddpm,到后来的diffusion model beat GAN,再到现在的GLIDE,DALL·E 2等。这一系列的工作采用了很多很多小tricks,其中有一个比较著名的是一个叫引导(gudiance)的技巧,就是牺牲一部分多样性,从而能达到更好的保真度。

通过上边的一些改进,扩散模型才能在数值比较上跟GAN不相上下,从此扩散模型也火了起来,取得了很多SOTA。

简单了解扩散模型可以看这里:

  1. 应用:是什么让人工智能突然开始画画了? - 掘金 (juejin.cn)

  2. 模型数学理论(不含推导):突然火起来的diffusion model是什么? - 掘金 (juejin.cn)

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

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

相关文章

rsync远程同步

目录 一、rsync简介 1.1 rsync介绍 1.2 rsync同步方式 二、rsync特性 三、rsync与cp、scp对比 四、rsync命令 五、rsync本地复制实例 六、配置源的两种表示方法 七、Rsync 同步源 八、配置 Rsync 下行同步 九、inotify简介 十、配置RsyncInotify 实时同步 十一、r…

【linux kernel】基于ARM64分析linux内核的链接脚本vmlinux.lds.S

文章目录一、导读二、链接器是什么三、链接脚本四、linux内核的链接脚本4-1 头文件包含描述4-2 参数设置和宏定义描述4-3 SECTIONS内容分析五、linux内核的“头”六、总结一、导读 在linux内核中,arch目录下放置的是关于linux内核所支持的具体架构相关的代码描述文…

EFK部署centos7.9(一)ES单节点部署

Elasticsearch部署 系统类型:Centos7.9 节点IP:192.168.11.139 软件版本:jdk-8u121-linux-x64.tar、elasticsearch-6.5.4.tar. 1.首先上传jdk的包 tar xzf jdk-8u121-linux-x64.tar.gz -C /usr/local/ 解压jdk的包 cd /usr/local/ 切…

逻辑回归预测瘀血阻络证||LogRegression 二分类 python3

要求 把数据集分为训练集和测试集使用逻辑回归训练、预测,得出相应的分类指标准确率accuracy,精确率precision,召回率recall,F1-score,并画出最终的ROC曲线,得出AUC值。 数据格式 664条样本 每条103个属性…

列的类型定义——整形类型

文章目录 前言一、整数类型的附带属性 类型名称后面的小括号unsignedauto_increment总结前言 1)采用26字母和0-9的自然数加上下互相 ‘_’ 组成,命名简洁明确,多个单词用下划线 ‘_’ 隔开 2)全部小写命名,尽量避免出…

猿创征文|计算机专业硕博研究生提高效率的10款科研工具

前言 大家好,我是帝都某高校的一名在读研究生,研究方向为人工智能安全、强化学习、漏洞挖掘。今天想跟各位计算机相关专业的硕士生、博士生们分享几款超级实用并且能够提高科研效率的工具!!!希望能够得到大家的一键四…

【角点检测】 基于各向异性高斯方向导数滤波器实现图像角点检测附matlab代码

1 内容介绍 为了改进噪声鲁棒性和定位准确性,利用各向异性高斯方向导数滤波器,提出多方向角点检测算法.该算法利用一组各向异性高斯方向导数滤波器对输入图像进行卷积处理得到各个方向的滤波器响应.对于每个像素点,利用它与周围邻近像素点的滤波器响应的相关信息构造局部自相关…

Revit导入Cad图元丢失不正确解决和链接CAD功能

一、导入Cad图元丢失或者图元不正确解决: 导入Cad的时候我们会遇到导入图元丢失或者图元不正确等情况,具体解决如下 01.天正画图时一定要导出t3格式,因为Revit只识别t3版本 02.Cad画图时,最后一定要将图元炸开,然后在框…

NVIDIA NCCL 源码学习(五)- 路径计算

上节NCCL完成了对机器PCI系统拓扑的建图,其中建好的图如下所示,其中GPU之间是通过NVLink连接起来的 为了方便之后的搜索channel,接下来NCCL会先计算GPU和NIC节点到其他任意节点之间的最优路径,以及对应的带宽,即最优路…

Vue3基础——Composition API初体验、合成API详解、setup、Provide 和 inject

文章目录p19 组合式 API (Composition API)初体验p20 Vue3合成API详解p21 setup中使用生命周期函数p22 Provide 和 injectp19 组合式 API (Composition API)初体验 <template><h1 click"add">计数count: {{ count }}</h1><h1 click"incre…

51单片机笔记:定时器/计数器

单片机笔记 定时器/计数器 定时器/计数器的结构 AT89S51内部两个16位定时器/计数器&#xff1a;T0(P3.4)&#xff0c;T1(P3.5)&#xff0c;定时器/计数器T0由特殊寄存器TH0,TL0构成&#xff0c;T1由特殊功能寄存器TH1&#xff0c;TL1构成 T0,T1都有定时器和计数器两种工作模…

DuckDB学习-初识tpcds

DuckDB学习-1 文章目录DuckDB学习-1跑TPC-DS编译DuckDB支持TPC-DS扩展执行数据生成及查询TPC-DS简单分析&#xff08;v3.2.0&#xff09;事实表维度表跑TPC-DS 编译DuckDB支持TPC-DS扩展 下载代码&#xff0c;然后进源码目录&#xff0c;执行下面两个步骤。 export BUILD_TPC…

Word控件Spire.Doc 【文本】教程(19) ;如何在 C#、VB.NET 中通过 Word 中的正则表达式查找和替换文本

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下&#xff0c;轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具&#xff0c;专注于创建、编辑、转…

【附源码】计算机毕业设计JAVA车辆调度管理系统

【附源码】计算机毕业设计JAVA车辆调度管理系统 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JAVA my…

计算机毕业设计ssm+vue基本微信小程序的健康食谱交流共享平台

项目介绍 当今社会健康食谱交流共享买卖是必不可少的,人们不管走到哪里都需要有一个健康的身体,有一个强迫的体质,所以健康食谱交流共享市场也是非常火爆&#xff01;不管是健康食谱交流共享公司或者是个人都需要一套完整的管理系统来掌握整个市场信息。针对这一需求,本文设计并…

一步一步教你安装部署 Jenkins,不信你安不上

1、可以去官网 Jenkins 下载jenkins.war包 这里有个坑&#xff1a;jenkins下载的版本需要和jdk版本匹配 我的jdk是1.8,这里选择jenkins版本为2.332.4&#xff0c;下面的链接是jenkins.war安装包直接用 链接&#xff1a;百度网盘 请输入提取码 提取码&#xff1a;8bxy 2、使…

【C++】模板template

前言&#xff1a;本教程使用到的工具是vs2010&#xff1b; 目录 为什么要使用模板&#xff1f; template模板 函数模板 类的模板 template模板的本质 总结 为什么要使用模板&#xff1f; 我们先来大概了解一下模板的概念&#xff0c;下面是菜鸟教程对于模板给出的解释&am…

每天5分钟快速玩转机器学习算法:带有核函数的支持向量机模型

本文重点 硬间隔和软间隔都是在说样本的完全线性可分或者大部分样本点的线性可分。但我们可能会碰到的一种情况是样本点不是线性可分的,比如: 那么这个时候支持向量机软硬不吃,此时要想解决这个问题,我们可以使用一种魔法,我们将他们映射到一个高维空间中,然后再高维空…

链表相关OJ及方法总结

目录​​​​​​​ 第一类&#xff1a;改变链接关系 第二类&#xff1a;快慢指针 第一类&#xff1a;改变链接关系 1. 删除链表中等于给定值 val 的所有结点。 (1)原地删除 struct ListNode* removeElements(struct ListNode* head, int val){if(headNULL){return head…

一般人我劝你还是要不自学软件测试.....

软件测试基础真的很简单&#xff0c;是个人稍微认真点都能懂&#xff0c;这就是好多人说软件测试简单、易懂、好学&#xff0c;然后就是一顿浮夸的言论&#xff0c;误导那些小白&#xff0c;这里我就给那些轻浮的人泼一桶冷水&#xff0c;懂和学会是一码事吗&#xff1f; 这里…