论文介绍 One-step Diffusion 只需单步扩散生成!

论文介绍 One-step Diffusion with Distribution Matching Distillation

关注微信公众号: DeepGo

源码地址: https://tianweiy.github.io/dmd/

论文地址: https://arxiv.org/abs/2311.18828

这篇论文介绍了一种新的图像生成方法,名为分布匹配蒸馏(DMD),将扩散模型转换为一步生成器,极大地加快了图像生成速度,同时保持了图像质量。通过最小化近似的KL散度和简单的回归损失,DMD能够在保持图像质量的同时实现极速的生成效率,即在现代硬件上以20 FPS的速度生成图像。实验表明,DMD在ImageNet 64×64上的FID达到了2.62,在零样本COCO-30k上达到了11.49 FID,与稳定扩散模型相当,但速度快了几个数量级。此外,DMD还探讨了与分类器无关指导的结合使用,进一步提高了生成图像的质量。尽管DMD在一步生成模型的效率和质量方面取得了显著进步,但作者也指出了其局限性,包括与更细致的扩散采样路径相比,仍有质量差距,以及性能受限于教师模型的能力。作者期待通过蒸馏更先进的模型和引入变化的指导尺度,进一步提升模型性能和灵活性。

alt 图1展现了一下和目前SOTA方法的对比: 基线稳定扩散(Stable Diffusion, SD):生成每张图像需要约250毫秒。扩散匹配蒸馏(Diffusion Matching Distillation, DMD):生成每张图像仅需约90毫秒。强调了DMD技术生成图像的速度比SD快得多,同时还在图像生成速度和质量上的潜在优势。(猜一下哪个是该论文中的方法的效果?文末给答案)

问题和挑战

这篇论文致力于解决将扩散模型转化为快速单步图像生成器的问题,挑战在于如何在最小化生成图像质量损失的同时提高生成速度。一句话概括:论文提出了一种分布匹配蒸馏(DMD)方法,通过精确匹配单步生成器和扩散模型的分布,显著提升了生成效率,同时保持了图像的高质量。

alt 训练框架图:作者训练单步生成器 来将随机噪声 映射成真实图像。为了匹配多步扩散模型的采样输出,作者预先计算了一系列噪声-图像对,并偶尔从该集合中加载噪声,同时施加LPIPS回归损失,以确保作者的单步生成器与扩散输出之间的一致性。此外,作者还为假图像提供分布匹配梯度 ,以增强其真实感。作者向假图像注入随机量的噪声,并将其传递给两个扩散模型:一个在真实数据上预训练的模型,另一个持续在假图像上以扩散损失进行训练,以获取其去噪版本。去噪得分(在图中以平均预测表示)指示了使图像变得更真实或更假的方向。这两者之间的差异表示向着更高真实性和较低虚假感的方向,这一差异被反向传播到单步生成器中。

方法概述

分布匹配蒸馏(Distribution Matching Distillation,简称DMD)的目标是将给定的预训练扩散去噪器(基模型)转化为能够快速生成高质量图像的“一步”图像生成器,而不需要耗时的迭代采样过程。这一过程包括两个主要部分:预训练基模型与一步生成器的构建,以及分布匹配损失的定义。

预训练基模型和一步生成器
  • 预训练基模型 作者的蒸馏过程假设给定了一个预训练的扩散模型 。扩散模型被训练以逆转一个高斯扩散过程,该过程逐渐向来自真实数据分布 的样本添加噪声,将其转化为白噪声 ,经过 时间步骤,作者使用 。作者将扩散模型表示为 。从一个高斯样本 开始,模型迭代地去噪一个运行中的噪声估计 ,基于时间步 (或噪声水平)来产生目标数据分布的样本。扩散模型通常需要10到100步骤来产生逼真的图像。作者的推导使用扩散的均值预测形式来简化,但与 -预测同样有效,仅需变量变换。作者的实现使用来自EDM和Stable Diffusion的预训练模型。

  • 一步生成器 ( ) 的架构与基模型的扩散去噪器相同,但不包括时间条件。在训练前,一步生成器的参数 ( ) 以基模型为初始化,即

分布匹配损失(Distribution Matching Loss)

理想情况下,作者希望快速生成器能产生与真实图像无法区分的样本。受到ProlificDreamer[78]的启发,作者通过最小化真实图像分布 与假图像分布 之间的Kullback–Leibler (KL) 散度来实现这一目标,得Eq. (1):

直接计算这些概率密度来估计此损失通常是不可行的,但作者只需要对 的梯度来通过梯度下降法训练作者的生成器。

梯度更新使用近似分数

针对生成器参数的Eq. (1)的梯度,导出Eq. (2):

其中 分别是各自分布的分数。直观上, 移向 的模式,而 则将它们分散开。

通过对数据分布加入随机高斯噪声的不同标准差,作者创建了一系列“模糊”的分布,这些分布在整个空间上都是全支撑的,因此重叠,使得Eq. (2)中的梯度有定义。然后,Score-SDE 显示,训练好的扩散模型近似了扩散分布的分数函数。

作者的策略是使用一对扩散去噪器来模拟经过高斯扩散后的真实和假分布的分数。作者分别将这些定义为 。扩散样本 通过在扩散时间步 向生成器输出 添加噪声得到:

其中 来自扩散噪声时间表。

真实分数由基扩散模型的训练图像固定,因此作者使用预训练扩散模型的固定副本 来模拟它的分数。

假分数随着作者生成的样本分布在训练过程中的变化而动态调整。作者从预训练的扩散模型 初始化假扩散模型,并在训练过程中通过最小化标准去噪目标来更新参数

作者的最终近似分布匹配梯度通过用两个扩散模型在扰动样本 上定义的分数替换Eq. (2)中的精确分数,并对扩散时间步取期望得到, 就是对应的真实样本。

回归损失和最终目标

分布匹配目标在前一节已经介绍,它对于 ,即当生成样本被大量噪声损坏时,是很好定义的。然而,对于少量噪声, 通常变得不可靠,因为 趋于零。此外,由于得分 对概率密度函数 的缩放是不变的,优化容易受到模式坍塌/丢失的影响,其中假分布为一部分模式分配更高的总密度。为了避免这一点,作者使用额外的回归损失来确保所有模式都被保留。这个损失衡量了给定相同输入噪声时,生成器输出与基模型输出之间的点对点距离。通过构建随机高斯噪声图像 和基模型的确定性输出 的配对数据集,可以计算回归损失 ,其中 是距离函数,本文中使用了Learned Perceptual Image Patch Similarity (LPIPS)。

最终目标 ,其中 是一个超参数,控制回归损失的权重。通过自动微分计算 的梯度,分别应用于未配对的假样本(用于分布匹配梯度)和配对样本(用于回归损失)。

DMD通过这种方式训练一步生成器,不仅快速生成高质量的图像,而且有效地桥接了生成模型与预训练扩散模型之间的性能差距。

alt

该图展示了从相同的初始配置(左图)优化不同目标函数所导致的不同结果: (a) 只有真实得分: 当只优化真实得分时,生成的假样本都聚集在真实分布的最近模式上,出现了模式坍塌现象,即只能捕捉到数据的一部分特征。 (b) 真实得分+假得分: 当考虑了真实和假分布的得分,但没有回归损失时,生成的假数据覆盖了更多的真实分布,但仍然完全错过了第二个模式,即没有捕捉到分布的全部特征。 (c) 真实得分+假得分+回归损失: 当全面考虑真实得分、假得分以及回归损失时,完整的目标函数能够恢复目标分布的所有模式,生成的数据不仅多样且质量高。 这三个子图说明了不同优化策略对生成模型性能的影响,强调了在生成过程中同时考虑多个目标的重要性,以确保生成的数据既真实又多样。这一点在使用生成模型进行数据增强或者模拟真实世界分布时尤为重要。

总结

本文介绍了一种名为分布匹配蒸馏(DMD)的新技术,旨在加速扩散模型的图像生成过程,同时保持高质量的输出。DMD通过将扩散模型转化为一步生成模型,极大地提高了生成速度,达到了实时生成的目标。通过最小化真实与生成分布间的KL散度和引入回归损失,DMD能够在加速生成的同时,保证图像的多样性和质量。实验结果表明,DMD在多个标准数据集上达到了与原始扩散模型相媲美的性能,同时生成速度得到了显著提升。这一进展不仅为图像生成领域带来了新的技术突破,也为其他基于模型蒸馏的应用提供了可能的方向。尽管存在一些局限性,比如与更细致的扩散采样路径相比,质量上仍有差距,DMD的提出无疑为高效、高质量的图像生成研究开辟了新的路径。作者期待未来能通过蒸馏更先进的模型和引入变化的指导尺度来进一步提升模型性能和灵活性。

图1 答案: (DMD:bottom, top, bottom, bottom, top)

更多细节请参阅论文原文

关注微信公众号: DeepGo

本文由 mdnice 多平台发布

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++三剑客之std::optional(一) : 使用详解

相关文章系列 C三剑客之std::optional(一) : 使用详解 C三剑客之std::any(一) : 使用 C之std::tuple(一) : 使用精讲(全) C三剑客之std::variant(一) : 使用 C三剑客之std::variant(二):深入剖析 目录 1.概述 2.构建方式 2.1.默认构造 2.2.移动构造 2.3.拷贝构…

前端vue 数字 字符串 丢失精度问题

1.问题 后端返回的数据 是这样的 一个字符串类型的数据 前端要想显示这个 肯定需要使用Json.parse() 转换一下 但是 目前有一个问题 转换的确可以 showId:1206381711026823172 有一个这样的字段 转换了以后 发现 字段成了1206381711026823200 精度直接丢了 原本的数据…

假期作业 8

1、若有以下说明语句:int a[12]{1,2,3,4,5,6,7,8,9,10,11,12};char c’a’,d,g;则数值为4的表达式是( B)。 A)a[g-c] B)a[4] C)a[‘d’-‘c’] D)a[‘d’-c] 2、假…

【C++ 02】类和对象 1:初识类和对象

文章目录 🌈 Ⅰ 面向对象介绍🌈 Ⅱ 类的引入🌈 Ⅲ 类的定义格式1. 声明和定义不分离2. 声明和定义分离 🌈 Ⅳ 类的访问限定符🌈 Ⅴ 类的作用域🌈 Ⅵ 类的实例化🌈 Ⅶ this 指针 🌈 Ⅰ…

【Java程序设计】【C00254】基于Springboot的java学习平台(有论文)

基于Springboot的java学习平台(有论文)) 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的学习平台 本系统分为系统功能模块、管理员功能模块、教师功能模块以及学生功能模块。 系统功能模块:在平台…

LLM大模型常见问题解答(3)

简要描述下列概念在大语言模型中的作用 Transformer 架构Attention 机制预训练与微调过拟合和欠拟合 Transformer 架构 Transformer是一种基于自注意力机制的深度学习模型,它在论文“Attention Is All You Need”中首次提出。与此前流行的循环神经网络&#xff0…

第四节 zookeeper集群与分布式锁

目录 1. Zookeeper集群操作 1.1 客户端操作zk集群 1.2 模拟集群异常操作 1.3 curate客户端连接zookeeper集群 2. Zookeeper实战案例 2.1 创建项目引入依赖 2.2 获取zk客户端对象 2.3 常用API 2.4 客户端向服务端写入数据流程 2.5 服务器动态上下线、客户端动态监听 2…

力扣题目训练(8)

2024年2月1日力扣题目训练 2024年2月1日力扣题目训练404. 左叶子之和405. 数字转换为十六进制数409. 最长回文串116. 填充每个节点的下一个右侧节点指针120. 三角形最小路径和60. 排列序列 2024年2月1日力扣题目训练 2024年2月1日第八天编程训练,今天主要是进行一些…

AcWing 802. 区间和 离散化

文章目录 题目链接题目描述解题思路代码实现总结 题目链接 链接: AcWing 802. 区间和 题目描述 解题思路 离散化是一种常用的技巧,它能够将原始的连续数值转换为一组离散的值,从而简化问题的处理。在这段代码中,离散化的过程主要分为三个步…

探索Nginx:强大的开源Web服务器与反向代理

一、引言 随着互联网的飞速发展,Web服务器在现代技术架构中扮演着至关重要的角色。Nginx(发音为“engine x”)是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。Nginx因其卓越的性能、稳定性和灵活性&…

02.数据结构

一、链表 作用&#xff1a;用于写邻接表&#xff1b; 邻接表作用&#xff1a;用于存储图或树&#xff1b; 1、用数组模拟单链表 #include<iostream> using namespace std;const int N 100010;// head 表示头结点的下标 // e[i] 表示结点i的值 // ne[i] 表示结点i的ne…

前端工程化面试题 | 08.精选前端工程化高频面试题

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

DS Wannabe之5-AM Project: DS 30day int prep day14

Q1. What is Autoencoder? 自编码器是什么&#xff1f; 自编码器是一种特殊类型的神经网络&#xff0c;它通过无监督学习尝试复现其输入数据。它通常包含两部分&#xff1a;编码器和解码器。编码器压缩输入数据成为一个低维度的中间表示&#xff0c;解码器则从这个中间表示重…

CentOS 7.9安装Tesla M4驱动、CUDA和cuDNN

正文共&#xff1a;1333 字 21 图&#xff0c;预估阅读时间&#xff1a;2 分钟 上次我们在Windows上尝试用Tesla M4配置深度学习环境&#xff08;TensorFlow识别GPU难道就这么难吗&#xff1f;还是我的GPU有问题&#xff1f;&#xff09;&#xff0c;但是失败了。考虑到Windows…

BIO、NIO、Netty演化总结

关于BIO&#xff08;关于Java NIO的的思考-CSDN博客&#xff09;和NIO&#xff08;关于Java NIO的的思考-CSDN博客&#xff09;在之前的博客里面已经有详细的讲解&#xff0c;这里再总结一下最近学习netty源码的的心得体会 在之前的NIO博客中我们知道接受客户端连接和IO事件的…

Vulnhub靶机:hacksudo-ProximaCentauri

一、介绍 运行环境&#xff1a;Virtualbox 攻击机&#xff1a;kali&#xff08;10.0.2.15&#xff09; 靶机&#xff1a;hacksudo-ProximaCentauri&#xff08;10.0.2.51&#xff09; 目标&#xff1a;获取靶机root权限和flag 靶机下载地址&#xff1a;https://www.vulnhu…

算法学习——LeetCode力扣二叉树篇4

算法学习——LeetCode力扣二叉树篇4 222. 完全二叉树的节点个数 222. 完全二叉树的节点个数 - 力扣&#xff08;LeetCode&#xff09; 描述 给你一棵 完全二叉树 的根节点 root &#xff0c;求出该树的节点个数。 完全二叉树 的定义如下&#xff1a;在完全二叉树中&#xf…

二叉树、堆和堆排序(优先队列)

前言&#xff1a; 本章会讲解二叉树及其一些相关练习题&#xff0c;和堆是什么。 二叉树&#xff1a; 二叉树的一些概念&#xff1a; 一棵二叉树是有限节点的集合&#xff0c;该集合可能为空。二叉树的特点是每一个节点最多有两个子树&#xff0c;即二叉树不存在度大于2的节点…

中科大计网学习记录笔记(十):P2P 应用

前言&#xff1a; 学习视频&#xff1a;中科大郑烇、杨坚全套《计算机网络&#xff08;自顶向下方法 第7版&#xff0c;James F.Kurose&#xff0c;Keith W.Ross&#xff09;》课程 该视频是B站非常著名的计网学习视频&#xff0c;但相信很多朋友和我一样在听完前面的部分发现信…

全坚固平板EM-I12U,全新升级后的优质体验

平板终端机在户外勘探、制造业、畜牧业、银行金融行业当中都不是陌生的&#xff0c;能采集各种数据来转换成信息流向企业和行业的各个分支当中&#xff0c;在整个行业发展、社会推动上面都起着关键性作用&#xff0c;而平板终端机的升级也就意味着未来的这些行业发展会进入一个…
最新文章