Diffusion Models, CLIP与 DALLE 的学习与感悟

news2024/9/23 21:24:37

整合了一下关于Diffusion Models, CLIP与 DALLE 的介绍,应用,以及后续的拓展路线。

(Generative) Diffusion Models

还是先横向对一下最近比较火的几个生成模型 GAN、VAE、Flow-based Models、Diffusion Models。
请添加图片描述

在这里,可以将Diffusion Models更多的理解成拆分成多个步骤的图像还原过程,由于图像是在整个网络中逐步还原的,且不同的时序步之间,只有n-1与n相关,其他时序步与n无关,那么就能构建出一条单通路的时序处理网络,如图所示。整个Diffusion Model的精髓就在于通过噪声(可以理解成一种掩码)将图像遮盖以获得自监督的图像对,且该图像对在单次训练中可以自动生成非常多(同时为逐步恢复的图像序列)。如下图所示。

请添加图片描述
引入定义:"Diffusion probabilistic model is parameterized Markov chain trained using variational inference to produce samples matching the data after finite time.”

Variational inference: “variational inference是一種近似複雜分佈的數學方法。而在 deep learning中最知名的一個情境就是訓練 VAE時使用的 variational bound on negative log likelihood。Diffusion model的過程其實跟 VAE有幾分相似,我們可以把 diffusion model想像成一個 encoder是固定的 VAE,然後對每個停下來的點都可以當成是 VAE裡面的 latent z,那就可以用跟 VAE的 variational lower bound寫出 p(x)的 lower bound。”

个人理解:虽然此处引入了马尔科夫链的概念以定义扩散模型,利用了一个序列变化的过程来解释(模拟)模型学习到图像特征的过程。但是从模型训练的角度来说,我认为该过程更像是一个“类微积分”的掩码训练过程,也就是将模型训练细分到更长的流程,每一步都使用了掩码作为干扰,来使模型进行“自监督”的训练。同时,由于是一种自监督过程,也不用担心数据不够,故可以由此训练超大量参数的模型,作为一种大预训练模型使用,类比GPT3.

CLIP:Contrastive Language-Image Pre-training

Intuitions of CLIP:

  1. 现有CV模型大多都只能预测已知的图像类别,对于没有见过的图像类别,需要额外的信息才能识别。那么文本其实就提供了这样的额外信息。所以利用图像对应的文本数据,也许就能使模型能够分辨未见类的图像。
  2. GPT3等大规模的无监督数据训练模型,可以在多个下游任务上获得非常好的结果,有些甚至超过使用人工标注的数据训练出的模型。
  3. 多模态数据的对齐,可能对图像描述与场景理解产生共鸣。

基于对比学习的模型预训练:CLIP的预训练任务是预测给定的图像和文本是否是一对(paired),使用对比学习(contrastive learning)的loss。直接将image对应的text sentence作为一个整体,来判断text和image是否是一对。对于一个包含N个图像-文本对的batch而言,其中正样本是每张图像及其对应的文本,一共有N个,而其他所有图像和文本的组合都是不成对的,也就是负样本是N×N-N个。

如图所示,每一个T代表一句话,一个I代表一张图,那么在对角线的样本对为正样本,其余的为负样本。CLIP将图像和文本先分别输入一个图像编码器image_encoder和一个文本编码器text_encoder,得到图像和文本的向量表示 I-f 和 T_f 。然后将图像和文本的向量表示映射到一个joint multimodal sapce,得到新的可直接进行比较的图像和文本的向量表示 I_e 和T_e (这是多模态学习中常用的一种方法,不同模态的数据表示之间可能存在gap,无法进行直接的比较,因此先将不同模态的数据映射到同一个多模态空间,有利于后续的相似度计算等操作)。然后计算图像向量和文本向量之间的cosine相似度。最后,对比学习的目标函数就是让正样本对的相似度较高,负样本对的相似度较低。

在这里插入图片描述

通过自监督的方式尽心训练,打破了原有的label-image的标签学习过程,让预训练的图像模型有机会识别未见过的图像(但是见过文本,故也称为是zeroshot)。预计它之后在图像领域会作为预训练模型,有更多的应用,如套用prompt learning 的下游任务对接。

不过,尽管CLIP在识别常见物体上表现良好,但在如计算图像中物品数量、预测图片中物品的位置距离等更抽象、复杂的任务上,“zero-shot”CLIP表现仅略胜于随机分类,而在区分汽车模型、飞机型号或者花卉种类时,CLIP也不好。且对于预训练阶段没有出现过的图像,CLIP泛化能力也很差。例如,尽管CLIP学习了OCR,但评估MNIST数据集的手写数字上,“zero-shot”CLIP准确率只达到了88%,远低于人类在数据集中的99.75%精确度。最后,研究人员发现,CLIP的“zero-shot”分类器对单词构造或短语构造比较敏感,但有时还是需要试验和错误“提示引擎”的辅助,才能表现良好。

启发~ 对于对齐sentence与image,而不是words与image的原因:文中最开始也尝试了基于预测的方法,根据image的信息预测对应的文本的每个词是什么。然而由于对于一个图像的描述可以有很多种,因此预测一个图像具体的描述词是一个非常困难的任务,导致模型收敛存在问题。因此,CLIP使用对比学习的方法,将任务简单化,只去判断图文pair是否匹配,极大提升了模型收敛速度。

CLIP Models are Few-shot Learners:

这是另一篇CLIP的衍生论文,文章对预训练CLIP的后续使用进行了讨论,这里拿出其中一个实验分析。

文中希望验证的另一个点是,CLIP这种多模态模型,image侧的encoder和text侧的encoder是否有很强的跨模态能力,即两个encoder的表示在隐空间中是完全对齐的。为了验证这个问题,作者将预训练CLIP的参数固定不动,使用纯文本的caption和hypothesis训练一个文本蕴含任务的分类器。接下来,对于图像-文本的蕴含任务,将图像侧信息输入到image encoder中,文本侧仍然输入到text encoder中,使用基于文本训练好的分类器进行预测。这样其实是只用文本蕴含任务的数据训练,得到了图文蕴含任务的模型,是zero-shot learning。这个过程的简单示意图如下:

在这里插入图片描述
结果:表面上看还不错,同时该文作者人分析说通过文本-文本的数据训练模型,整体上可以拟合图像-文本的蕴含任务。但是我认为这个实验有点点不足以证明图像-文本与文本-文本的对齐能力。一方面是因为任务本身比较简单,同时对于文本与图像的描述统一性上,该实验也未见得考虑完全。所以谨慎看好这部分~
在这里插入图片描述
总结:CLIP对下游任务的影响,与GPT3相似,比较考验prompts的构造,不同的构造方式,对于最终的结果,差别很大。又一次需要Prompts engineering了。

DALL.E

DALL-E与GPT-3非常相似,它也是一个transformer语言模型,接收文本和图像作为输入,以多种形式输出最终转换后的图像。它可以编辑图像中特定对象的属性,

在这里插入图片描述
在第一个阶段,将256×256的图片分为32×32个patch,然后使用训练好的离散VAE模型的encoder将每个patch映射到大小为8192的词表中,最终一张图片转为用1024个token表示。在第二个阶段,使用BPE-encoder对文本进行编码,得到最多256个token,token数不满256的话padding到256;再将256个文本token与1024个图像token进行拼接,得到长度为1280的数据;最终将拼接的数据输入训练好的具有120亿参数的Transformer模型。在第三个阶段,对模型生成的图像进行采样,并使用同期发布的CLIP模型[2]对采样结果进行排序,从而得到与文本最匹配的生成图像。DALLE包括三个独立训练得到的模型:dVAE,Transformer和CLIP,其中dVAE的训练与VAE基本相同,Transformer采用类似GPT-3的生成式预训练方法。DALL-E在深度学习能力边界探索的道路上又前进了一步,也再一次展示了大数据和超大规模模型的魅力。美中不足的是,DALL-E包含了三个模块,更像是一个pipeline。

DALL.E mini

Mini 是在DALLE还未发布正版时,外界仿真出的一个模型,构建思路也很有意思。模型结构如下图,在训练过程中,输入图像和文本对。图像通过一个VQGAN编码器进行编码,该编码器将图像转化一系列token。文本通过一个BART编码器进行编码。BART编码器的输出和编码后的图像被送入BART解码器,这是一个自动回归模型,其目标是预测下一个token。损失函数是预测文本token和图像token的softmax交叉熵。

在这里插入图片描述

在推理时,只使用sentence,用于生成图像:sentence通过BART编码器进行编码。一个标记(识别 "Beginning Of Sequence "的特殊标记)通过BART解码器输入。根据解码器,预测下一个token的分布,对图像token进行顺序生成。图像token的序列通过VQGAN解码器进行解码。CLIP用于选择最佳生成的图像。

在这里插入图片描述

Imagen:基于扩散模型与预训练语言模型处理的图像生成

Imagen使用在纯文本语料中进行预训练的通用大型语言模型(例如T5),它能够非常有效地将文本合成图像:在Imagen中增加语言模型的大小,而不是增加图像扩散模型的大小,可以大大地提高样本保真度和图像-文本对齐。
请添加图片描述

参考文章,部分内容截取自:
【1】Diffusion Models:生成扩散模型
【2】What are Stable Diffusion Models and Why are they a Step Forward for Image Generation?
【3】What are Diffusion Models?
【4】扩散模型 Diffusion Models - 原理篇
【5】DALL·E 2 解读 | 结合预训练CLIP和扩散模型实现文本-图像生成
【6】详解CLIP (一) | 打通文本-图像预训练实现ImageNet的zero-shot分类,比肩全监督训练的ResNet50/101
【7】预训练CLIP模型的强大威力
【8】實作理解Diffusion Model: 來自DDPM的簡化概念

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

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

相关文章

SAP FICO 批量成本估算

批量成本估算 【前言】 单个物料的成本估算我们使用事务代码CK11N,标记/发布使用事务代码CK24,那么若有大批量新建的物料需要做成本估算,怎么办? 这里首先需要检查“成本核算变式”。 后台路径:SPRO→控制→产品成…

SpringBoot+Vue项目图书个性化推荐系统

文末获取源码 开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7/8.0 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven3.3.9 浏…

Java设计模式-观察者模式Observer

介绍 观察者模式是行为设计模式之一。当您对对象的状态感兴趣并希望在任何更改时得到通知时,观察者设计模式非常有用。在观察者模式中,观察另一个对象状态的对象被称为观察者,而被观察的对象则被称为主体。 优点 观察者模式设计后&#xff0…

手撕RTSP协议中 从零开始学习RTSP协议 持续更新中....

RTSP协议在安防监控 摄像头有着广泛的运用 ,基本上只要是做摄像头 是必须支持的协议。 我个人理解 RTSP基本上算是一个局域网的协议,广域网不太适合因为rtsp传输的视频码率 分辨率 都是比较高的 所有注定了他只适合局域网不适合互联网。 下午就要回家…

Node.js+Vue.js全栈开发王者荣耀手机端官网和管理后台(二) || 后台及接口完结篇

文章目录Node.jsVue.js全栈开发王者荣耀手机端官网和管理后台(二)通用CRUD接口装备(物品)管理图片上传英雄管理英雄编辑【模型字段】英雄编辑【编辑表单】技能编辑【UI】技能编辑【交互】文章管理富文本编辑器(quill)富文本编辑器…

23种设计模式(八)——工厂方法模式【对象创建】

文章目录 意图什么时候使用工厂方法真实世界类比工厂方法模式的实现工厂方法模式的优缺点亦称: 虚拟构造函数、Virtual Constructor、Factory Method 意图 在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,这样做的目的是将…

大数据-hadoop-MapReduce原理详解

MapReduce[1]是Google提出的一个软件架构,用于大规模数据集的并行运算。概念“Map(映射)”和“Reduce(归约)”,及他们的主要思想,都是从函数式编程语言借鉴的,还有从矢量编程语言借来…

【基于crul库编写源码实现上传文件到http服务器】

基于crul库编写源码实现上传文件到http服务器编译crul库(可以去我下载资源里面找)用postman生成代码postman生成的代码对应的http服务器的设置_msnap_send_to_httpserver函数有http通过json发送jpeg文件、以及上传ftp服务器、发邮件的实例编译crul库(可以去我下载资源里面找) …

MySQL数据库及数据表相关操作

一,前言1.典型数据库数据库圈子中典型代表:MySQLOracleSQL Server(一般在学校学习的时候用到的是这个数据库)Oracle是世界上公认的最好的数据库,但是我们现在所学习以及以后上班中大部分时候用到的数据库是MySQL,因为MySQL是开源免费的(任何人都可以阅读…

86.编码器-解码器架构以及代码实现

1. 重新考察CNN 2. 重新考察RNN 3. 编码器-解码器架构 4. 总结 使用编码器-解码器架构的模型,编码器负责表示输入,解码器负责输出 5. 代码实现 5.1 编码器 在编码器接口中,我们只指定长度可变的序列作为编码器的输入X。 任何继承这个Enco…

数据结构 - 学习笔记 - 红黑树前传——234树

数据结构 - 学习笔记 - 红黑树前传——234树简介结点类型与红黑树对应关系插入逻辑插入步骤演示2结点插入3结点插入(红黑树旋转)共对应6种红黑树情形有4种情形需要再平衡4结点插入(红黑树变色)234树转红黑树触发分裂有4种情形需要…

234. 回文链表

1、题目描述 额外要求:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题? 2、题解 2.1 解题思路1 使用额外的栈空间,先将链表中所有的元素依次压入栈中,得到链表的逆序,然后将栈中的元素依次弹出和链表中的元素从…

C++关于初始化列表的细节(必须/不能使用初始化列表的情况、初始化列表的效率分析)

必须使用初始化列表初始化的变量 const修饰的成员变量。 class A { public:A() { a 1; }int a; };构造函数内使用a 1初始化变量a,但这本质上是一种赋值,而我们都知道,const类型的变量是不允许赋值的。 没有默认构造函数的成员变量 所有变量…

百度安全在线查询提示风险原因分析与解决思路

很多站长看到自己的网站被百度提示:“百度网址安全中心提醒您:该页面可能存在违法信息”,这样的提示,都会惊讶自己网站昨天还好好的,怎么今天就提示这样的信息呢?在弄清楚这个问题之前,我们要知…

实时频谱仪的外部I、Q输出端口的同步扫描介绍

实时频谱分析仪与外部GPIO,I、Q输出端口等集成在一起。外部GPIO由外部触发功能组成,通过使用外部硬件和/或多个RTSA设备,可以实现同步扫描设置,以自动进行频谱扫描和捕获。同时,I、Q输出端口有助于与外部高速数字化仪集…

联合证券|日元疯狂跳水30000点!神秘无人机现身韩国萨德基地!

刚刚,又有大事发生! 日本央行意外宣告保持收益率曲线忍受区间不变。日元忽然大暴跌,日元兑美元狂泻超三万点。韩国也有大音讯,据韩联社报导,1月17日,一架无人机挨近韩国“萨德”基地时被美军用搅扰枪击落&a…

2023跳槽最新面试题整理——JVM系列

今天是农历2022年腊月二十七了,和往常的春节假期、五一假期和十一假期一样都是团队中坚持到最后的一个。没几天也要快过年了,我先提前向大家拜个早年——祝大家兔年大吉,新春快乐,财源滚滚,万事如意。 今年从十一…

如何使用 Selenium 实现自动化操作?

目录 前言 一、关于Selenium 1.1、为什么选择它作为web自动化的测试工具? 1.2、Selenium操作浏览器的原理 二、实现一个简单的自动化 2.1、使用自动化操作浏览器 2.2、Selenium常用的API 2.2.1、查找页面元素 小结 前言 本篇咱们来谈谈Selenium自动化脚本是…

pfx证书转pem、crt、key

今天测试端的服务器突然不能下载苹果APP了,经查看,发现原来是测试环境的https证书过期了,需要更换证书,于是赶紧从阿里云更新我们的最新证书 我们程序部署在tomcat上,于是下载tomcat版本,下载完成后如下 我…

【微信小程序-原生开发】实用教程05-首页(含自定义调试模式、插入图片、图文排版、底部留白、添加本地图片)

开始前,请先完成启动/欢迎/首屏广告页的开发,详见 【微信小程序-原生开发】实用教程04-启动/欢迎/首屏广告页(含倒计时、添加文字、rpx、定义变量和函数、读取变量、修改变量、wx.reLaunch 页面跳转、生命周期 onReady等) https://blog.csdn…