大模型 Dalle2 学习三部曲(一)Latent Diffusion Models学习

这篇具有很好参考价值的文章主要介绍了大模型 Dalle2 学习三部曲(一)Latent Diffusion Models学习。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

引言

Diffusion model大获成功,但是它的短板也很明显,需要大量的计算资源,并且推理速度比较慢。如何才能提升Diffusion model的计算效率。业界有各种各样的改进,无疑Latent Diffusion Models(潜在扩散模型,LDMs)是比较成功的一篇,那就来学习一下LDMS是怎么做的吧


论文贡献

1,与基于变换的方法相比,论文的方法在处理更高维度数据,可以高效地应用于高分辨率图像的合成,具体措施如下

  1. )使用潜在空间进行训练:作者在空间而不是像素空间上训练扩散模型。这使得模型可以在更高分辨率的图像上实现高效的图像合成,同时降低计算复杂性。
  2. )训练自动编码器:首先,作者训练了一个自动编码器,它提供了一个低维(因此高效)的表示空间,该空间在感知上等价于数据空间。这种表示空间使得模型可以更好地处理高维数据,同时保留了图像的细节。
  3. )在潜在空间中训练扩散模型:在自动编码器的潜在空间上训练扩散模型,使得模型可以在更高分辨率的图像上实现高效的图像合成和条件生成。这种方法在降低计算复杂性的同时,保留了扩散模型的高质量和灵活性。

2论文在多个任务(无条件图像合成、修复、随机超分辨率)和数据集上实现了竞争性的性能,同时显著降低了计算成本。与基于像素的扩散方法相比,论文还显著降低了推断成本。

3,论文发现,与先前同时学习编码器/解码器架构的方法相比,论文的方法不需要精细权衡重建和生成能力。这确保了极其准确的重建,并且对潜在空间的正则化要求非常低。

4,此外,论文设计了一种基于交叉注意力的通用条件机制,实现了多模态训练。

  1. )引入交叉注意力层:作者在模型架构中引入了交叉注意力层,使得潜在扩散模型(LDMs)能够处理各种条件输入,例如文本或边界框。
  2. )条件潜在扩散模型:作者将交叉注意力层与 UNet 结合,以实现条件图像生成。这使得模型可以在各种条件图像合成任务中实现高效的图像生成。
  3. )文本到图像合成:作者在 LAION-400M 数据集上训练了一个基于文本提示的条件 LDM。他们使用 BERT-tokenizer 对文本进行编码,并实现 τθ 作为 Transformer,以从文本中推断出潜在编码,然后通过(多头)交叉注意力将其映射到 UNet。
  4. )多模态训练:作者在多个数据集上训练了模型,以实现类别条件、文本到图像和布局到图像的生成。这种方法可以在不同的任务上获得高度竞争性的性能,而无需针对特定任务的架构。

5,最后,论文在https://github.com/CompVis/latent-diffusion上发布了预训练的潜在扩散和自编码模型。

具体方法

sd如何训练一个latent-diffusion大模型,DALL·E 2,学习,深度学习

1,结构整体理解

Latent Diffusion Models整体框架如图,分为左中右三个部分,左边是一个训练好自编码模型(AutoEncoder,包括一个编码器 E 和一个解码器 D ),中间是个Diffusion Models,右边是个condition模块

首先为什么要加入左边红色这个模块,我们可以这么想,Diffusion Models的问题在于耗时和耗费资源,那么最耗资源的部分是哪里,肯定是从清晰图像到相对模糊的这部分,因为这时候要从图像的每个像素点开始计算,占用了大量的资源和时间,

解决的方法也很直观,我们先把像素点压缩合并一下,大图像变小图像,然后从小图像开始做diffusion,因为压缩和解压缩的这个过程远比diffusion过程来的快和节省资源,所以整个过程也就一下子压缩节省了大量资源和时间。

同理我们把像素点压缩的方法替换成编码器和解码器,小图片理解成隐空间,对这就是Latent Diffusion Models的做法了。

其实到上一步Latent Diffusion Models主体工作已经可以完成,不过作者觉得可以无条件扩散生成,也可以有条件引导模型进行更好的扩散。如图1右边部分。通过使用交叉注意力机制将DM的底层UNet骨干增强为更灵活的条件图像生成器,整体是不是很自然的一个思路。

好那让我们再具体看看Latent Diffusion Models是怎么做的。对应图左中右三部分,分别为图片感知压缩(Perceptual Image Compression),潜在扩散模型(Latent Diffusion Models),条件机制(Conditioning Mechanisms)

2,图片感知压缩(Perceptual Image Compression)对应图最左边AutoEncoder部分

感知压缩的扩散模型的训练本质上是一个两阶段训练的过程的第一阶段,第一阶段训练一个自编码器

在第一阶段训练自编码器时,为了避免潜在表示空间出现高度的异化,作者使用了两种正则化方法,一种是KL-reg,另一种是VQ-reg。

具体地说,给定一个在RGB空间中的图像x∈R H×W×3,编码器E将x编码为一个潜在表示z = E(x) 编码图像,解码器 D 从潜在空间重构图像,得到 x˜ = D(z) = D(E(x)),其中 z ∈ R^(h×w×c)

3,潜在扩散模型(Latent Diffusion Models)对应图1中间部分

潜在扩散模型对应的是两阶段训练的过程的阶段针对第一阶段得到的隐空间进行diffusion操作

回忆一下Diffusion Models的公式

LDM = Ex,ε∼N(0,1),th [ (ε - εθ(xt, t))^2 / 2 ]

我们把编码器 E 和一个解码器 D代入公式得到

LDM = E[x, ε ∼ N(0,1), t]((ε - ε_θ(z_t, t))^2 / 2)

好我们就得到了LDM的训练公式了

4,条件机制(Conditioning Mechanisms)对应图1右边部分

具体来说,引入一个特定领域的编码器τθ,该编码器将y投影到中间表示τθ(y)∈RM×dτ,然后通过交叉注意力层将其映射到UNet的中间层,该层算法实现如下

Attention(Q, K, V) = softmax  QKT √ d  · V,

其中

Q = W (i) Q · ϕi(zt),

K = W (i) K · τθ(y),

V = W (i) V · τθ(y)

好,到这里LDM的算法部分就结束了,是不是还挺直观的。文章来源地址https://www.toymoban.com/news/detail-801786.html

到了这里,关于大模型 Dalle2 学习三部曲(一)Latent Diffusion Models学习的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 人脸识别三部曲

    引用文121本 开始运行时,输入待录入的人脸姓名。 按下s键后,开始录入人脸图像,录入两百张后,结束程序。

    2024年02月07日
    浏览(45)
  • JavaCV人脸识别三部曲之二:训练

    这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本文是《JavaCV人脸识别三部曲》的第二篇,前文《视频中的人脸保存为图片》咱们借助摄像头为两位群众演员生成大量人脸照片,如下图,群众演员A的照片保存在 E:temp20211218\\001 man ,B的照片保存

    2024年02月11日
    浏览(37)
  • Java版人脸跟踪三部曲之三:编码实战

    这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 作为《Java版人脸跟踪三部曲》系列的终篇,本文会与大家一起写出完整的人脸跟踪应用代码 前文《开发设计》中,已经对人脸跟踪的核心技术、应用主流程、异常处理等方方面面做了详细设计,建

    2024年02月12日
    浏览(38)
  • JavaCV人脸识别三部曲之三:识别和预览

    这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 《视频中的人脸保存为图片》 《训练》 《识别和预览》 作为《JavaCV人脸识别三部曲》的终篇,今天咱们要开发一个实用的功能:有人出现在摄像头中时,应用程序在预览窗口标注出此人的身份,效

    2024年02月11日
    浏览(39)
  • vscode上的git三部曲+git pull操作

    git三部曲:git add .、git commit -m \\\'\\\'、git push,命令在连接远程仓库的本地仓库路径下的终端执行。 vscode上的可视化操作如下:  1、对仓库里的文件做更改,让仓库操作的地方有变化。 2、 点击+号,让文件进入缓存,此步骤相当于终端执行命令git add .  3、在这里输入信息并点击

    2024年02月11日
    浏览(40)
  • Java版人脸跟踪三部曲之二:开发设计

    如何开发Java版人脸跟踪应用?本篇给出了设计大纲,并解释了相关的重要知识点 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇是《Java版人脸跟踪三部曲》系列的第二篇,前文体验了人脸跟踪的效果,想要编码实现这样的效果,咱们需要做

    2024年02月12日
    浏览(42)
  • Go语言基准测试(benchmark)三部曲之一:基础篇

    这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos Go的标准库内置的testing框架提供了基准测试(benchmark)功能,可以用来验证本地方法在串行或者并行执行时的基准表现,帮助开发者了解代码的真实性能情况,例如一个方法执行一次的平均耗时,还能

    2024年02月06日
    浏览(50)
  • 【C++系列P4】‘类与对象‘-三部曲——[类](2/3)

     前言 大家好吖,欢迎来到 YY 滴 C++系列 ,热烈欢迎! 【 \\\'类与对象\\\'-三部曲】的大纲主要内容如下 : 如标题所示,本章是【 \\\'类与对象\\\'-三部曲】三章中的第二章节—— 类章节 ,主要内容如下: 目录 一.类 1.类的组成与计算类的大小(含结构体内存对齐规则) 二. 空类的大小

    2024年02月08日
    浏览(41)
  • Go语言基准测试(benchmark)三部曲之三:提高篇

    这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos -《Go语言基准测试(benchmark)三部曲》已近尾声,经历了《基础篇》和《内存篇》的实战演练,相信您已熟练掌握了基准测试的常规操作以及各种参数的用法,现在可以学习一些进阶版的技能了,在面

    2024年02月06日
    浏览(44)
  • 数据结构:堆的三部曲(二)top K问题

    top k问题解决的是获取前几个最值的问题。 我们知道 堆的功能主要是选数,选出最大值或者最小值 。那么我们每次获取堆顶元素后,再将剩余元素调整成堆,就可以选出次大的数,如果我们只想要前k个最大值或者最小值,就只需要获取堆顶元素k次,调整k次。比如王者荣耀

    2024年02月02日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包