【深度学习】SDXL-Lightning 体验,gradio教程,SDXL-Lightning 论文

文章目录

  • 资源
  • SDXL-Lightning 论文

资源

SDXL-Lightning论文:https://arxiv.org/abs/2402.13929

gradio教程:https://blog.csdn.net/qq_21201267/article/details/131989242

SDXL-Lightning :https://huggingface.co/ByteDance/SDXL-Lightning

SDXL-Lightning实时出图:https://huggingface.co/spaces/radames/Real-Time-Text-to-Image-SDXL-Lightning

SDXL-Lightning demo自己体验代码:

import timeimport gradio as gr
import torch
import base64
import io
from PIL import Image
from diffusers import StableDiffusionXLPipeline, UNet2DConditionModel, EulerDiscreteScheduler
from huggingface_hub import hf_hub_download
from safetensors.torch import load_filebase = "stabilityai/stable-diffusion-xl-base-1.0"
repo = "ByteDance/SDXL-Lightning"
ckpt = "sdxl_lightning_4step_unet.safetensors"  # Use the correct ckpt for your step setting!# Load model.
unet = UNet2DConditionModel.from_config(base, subfolder="unet").to("cuda", torch.float16)
unet.load_state_dict(load_file(hf_hub_download(repo, ckpt), device="cuda"))
pipe = StableDiffusionXLPipeline.from_pretrained(base, unet=unet, torch_dtype=torch.float16, variant="fp16").to("cuda")# Ensure sampler uses "trailing" timesteps.
pipe.scheduler = EulerDiscreteScheduler.from_config(pipe.scheduler.config, timestep_spacing="trailing")def get_image_from_text(prompt):time1 = time.time()# Ensure using the same inference steps as the loaded model and CFG set to 0.image = pipe(prompt, num_inference_steps=4, guidance_scale=0).images[0]print("time:", time.time() - time1)return imagedef generate(prompt):result_image = get_image_from_text(prompt)return result_imagegr.close_all()
demo = gr.Interface(fn=generate,inputs=[gr.Textbox(label="提示词")],outputs=[gr.Image(label="输出图片")],title="文本生成图片",description="输入提示词,使用SD模型生成图片",allow_flagging="never",examples=["A girl smiling", "A beautiful sunset"])demo.launch(share=True, server_name="0.0.0.0", server_port=7869)

SDXL-Lightning 论文

摘要
我们提出了一种扩散蒸馏方法,在基于SDXL的一步/少步1024px文本到图像生成中实现了新的最先进水平。我们的方法结合了渐进和对抗性蒸馏,以在质量和模式覆盖之间取得平衡。在本文中,我们讨论了理论分析、鉴别器设计、模型构建和训练技术。我们将我们的蒸馏SDXL-Lightning模型开源,包括LoRA和完整的UNet权重。

模型链接:https://huggingface.co/ByteDance/SDXL-Lightning

  1. 引言
    扩散模型是一类新兴的生成模型,已在各种应用中取得了最先进的结果,如文本到图像、文本到视频和图像到视频等。然而,扩散模型的迭代生成过程缓慢且计算量大。如何更快地生成高质量样本是一个积极研究的领域,也是我们工作的主要焦点。

从概念上讲,生成涉及逐渐将样本在数据和噪声概率分布之间传输的概率流。扩散模型学习预测该流的任何位置的梯度。生成只是通过遵循流中预测的梯度,将样本从噪声分布传输到数据分布。由于流是复杂且弯曲的,生成必须一次小步骤地进行。形式上,流可以表示为常微分方程(ODE)。实践中,生成高质量数据样本需要超过50个推理步骤。

已经研究了不同的方法来减少推理步骤的数量。先前的研究提出了更好的ODE求解器来考虑流的弯曲性质。其他人提出了使流更直的公式。尽管如此,这些方法通常仍需要超过20个推理步骤。

另一方面,模型蒸馏可以在不到10个推理步骤下生成高质量的样本。它不是预测当前流位置的梯度,而是将模型更改为直接预测未来更远处的下一个流位置。现有方法可以在4或8个推理步骤下获得良好的结果,但是使用1或2个推理步骤仍然不符合生产要求。我们的方法属于模型蒸馏范畴,并且与现有方法相比获得了更优越的质量。

我们的方法结合了渐进蒸馏和对抗性蒸馏的优点。渐进蒸馏确保蒸馏模型遵循与原始模型相同的概率流,并具有相同的模式覆盖。然而,使用均方误差(MSE)损失的渐进蒸馏在8个推理步骤以下会产生模糊的结果,我们在论文中提供了理论分析。为了减轻这个问题,我们在蒸馏的每个阶段使用对抗损失,以在质量和模式覆盖之间取得平衡。渐进蒸馏还带来了另一个好处,即对于多步采样,我们的模型预测ODE轨迹上的下一个位置,而不是每次跳到ODE轨迹的端点,这更好地保留了原始模型行为,并促进了与LoRA模块和控制插件的更好兼容性。

此外,我们的论文提出了创新的鉴别器设计、损失目标和稳定的训练技术。具体来说,我们使用预训练的扩散UNet编码器作为鉴别器骨干,并完全在潜在空间中操作。我们提出了两个对抗损失目标来权衡样本质量和模式覆盖。我们研究了扩散计划和输出形式的影响。我们讨论了稳定对抗训练的技术。我们的蒸馏方法产生了支持1024px分辨率的一步/少步生成的新的最先进的SDXL模型。我们将我们的蒸馏模型开源为SDXL-Lightning。

2.4. 对抗性蒸馏
对抗性训练涉及一个最小最大化优化,其中包括一个旨在识别生成样本和真实样本的鉴别器网络,以及一个旨在欺骗鉴别器的生成器网络。最初提出为生成对抗网络(GANs),但它存在模式坍塌和不稳定性等问题。最近的研究发现,对抗目标可以纳入扩散训练和蒸馏中。SDXL-Turbo是使用对抗性扩散蒸馏的最新和最流行的开源模型。它遵循先前的工作,使用预训练的图像编码器DINOv2作为鉴别器骨干来加速训练。然而,这带来了几个限制。首先,使用现成的视觉编码器意味着它必须在像素空间而不是潜在空间中操作,这会显著增加计算、内存消耗和训练时间,使高分辨率的蒸馏变得不切实际。这很可能是SDXL-Turbo只支持最高512px分辨率的原因。其次,现成的视觉编码器只在t = 0时起作用。蒸馏模型必须被训练以跳到ODE轨迹端点x0,但由于一步推理的质量还不够好,再次为多步推理添加随机噪声。这种多步推理的方式显著改变了模型行为,使其与现有的LoRA模块和控制插件的兼容性降低。第三,现成的编码器可能很难找到适用于其他数据集(动漫、线条图等)和模态(视频、音频等)的编码器,这降低了蒸馏方法的泛化能力。最后,仅凭对抗目标本身不能强制模型遵循相同的概率流,因此不能强制模式覆盖。

我们的方法使用扩散模型的U-Net编码器作为鉴别器骨干。这使我们能够在潜在空间中有效地进行高分辨率模型的蒸馏,支持在所有时间步骤进行鉴别,并可泛化到所有数据集和模态。我们的方法还允许控制质量和模式覆盖之间的权衡,如后面3.2和3.4节所讨论的那样。

2.5. 其他蒸馏方法
我们简要讨论了我们的方法与其他蒸馏方法相比的优点。

一致性模型(CM)也需要在每个推理步骤中跳转到ODE轨迹的端点。这导致多步采样时模型行为的巨大变化,降低了与LoRA模块和插件的兼容性。该方法已应用于SDXL,但在8个步骤以下的生成质量较差。一致性轨迹模型(CTM)增加了对抗性损失,并支持跳转到任意流位置,但对抗性训练是在蒸馏后应用的,而不是在蒸馏过程中应用的,而且该方法尚未应用于大规模的文本到图像模型。

矫正流(RF)通过重复使用确定性数据和噪声对训练,使流变得直。然而,其少步生成质量仍然很差。此外,由于在蒸馏过程中模型只见过特定的数据和噪声对,它不再支持将数据与任意噪声配对,这影响了像SDEdit这样的图像编辑的能力。

得分蒸馏采样(SDS)已用于SDXL-Turbo来稳定对抗性训练,但其效果很小,并且不能单独作为蒸馏方法使用。变分得分蒸馏(VSD)最近在扩散蒸馏中使用。然而,在蒸馏过程中需要训练一个额外的负分布得分模型,而且像对抗训练中的鉴别器一样,它还涉及动态训练目标,这可能会对训练稳定性产生负面影响。没有开源模型供比较,我们的初步实验发现我们的方法达到了更好的质量。

2.6. LoRA
低秩适应(LoRA)是一种高效的微调技术。它只训练少量额外的参数,并已成为对现有文本到图像模型进行风格化模块训练的特别流行方法。

LCM-LoRA是首个表明模型蒸馏也可以作为LoRA模块进行训练的模型。这确保了最小的参数更改,并可以方便地插入到现有的生态系统中。

我们的工作受到这种方法的启发,我们提供了我们的蒸馏模型作为LoRA,以便进行方便的插拔,并且作为完整模型以获得更好的质量。

  1. 方法
    3.1. 为什么使用MSE蒸馏失败
    在这里插入图片描述

图1. 不同容量模型学习的多个可能流的示意图。针对少步生成的蒸馏学生模型无法具备与教师模型匹配的相同容量,导致使用MSE损失产生模糊结果。
学习到的概率流由数据集、前向函数、损失函数和模型容量确定。鉴于有限的训练样本,底层数据分布是模糊的。最大似然估计(MLE)是一种将均匀概率分配给观察到的样本,其他地方概率为零的分布。如果模型容量无限,它将学习到这种最大似然估计的流,并过度拟合以始终生成观察到的样本并生成没有新数据。实际上,扩散模型可以生成新数据,因为神经网络不是精确学习器。
当模型用于多步生成时,它被堆叠并具有更高的利普希茨常数和更多的非线性,以逼近更复杂的分布。但是当模型用于少步生成时,它不再具有足够的容量来很好地逼近相同的分布。这可以通过扩散模型在初始噪声上进行轻微更改而产生的结果发生非常明显的变化来证明,但是蒸馏模型的潜在遍历更加平滑。这解释了为什么使用MSE损失进行蒸馏会产生模糊的结果。学生模型简单地没有能力与教师相匹配。
此外,神经网络参数优化涉及复杂的景观。即使具有相同容量的模型也很难完全匹配输出,因为参数可能会卡在不同的局部最小值处。
我们发现其他距离度量,例如L1和感知损失,也会产生不理想的结果。另一方面,我们发现对抗目标对缓解这个问题是有效的。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2、Linux-系统目录

一、查看系统目录 登录Linux后,执行“cd /”,再执行“ls”或者“ll”可以查看系统目录。 二、解释 Linux系统中的所有文件和目录被组织成从一个根节点开始的树状结构,树的根就是“/”。 1、/:文件系统的根 2、系统相关 boot&a…

某查查首页瀑布流headers加密

目标网站: 某查查 对目标网站分析发现 红框内的参数和值都是加密的,是根据算法算出来的,故进行逆向分析。 由于没有固定参数名,只能通过搜索headers,在搜索的位置上打上断点,重新请求。 断点在此处断住&a…

Qt 简约又简单的加载动画 第七季 音量柱风格

今天和大家分享两个音量柱风格的加载动画,这次的加载动画的最大特点就是简单,只有几行代码. 效果如下: 一共三个文件,可以直接编译运行 //main.cpp #include "LoadingAnimWidget.h" #include <QApplication> #include <QGridLayout> int main(int argc…

诊所门诊电子处方软件操作教程及试用版下载,医务室处方笺管理系统模板教程

诊所门诊电子处方软件操作教程及试用版下载&#xff0c;医务室处方笺管理系统模板教程 一、前言 以下软件程序教程以 佳易王诊所电子处方软件V17.0为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 如上图&#xff0c;点击基本信息设置——处方配…

【详识JAVA语言】面向对象程序三大特性之一:封装

封装的概念 面向对象程序三大特性&#xff1a;封装、继承、多态。而类和对象阶段&#xff0c;主要研究的就是封装特性。何为封装呢&#xff1f;简单来说 就是套壳屏蔽细节。 比如&#xff1a;对于电脑这样一个复杂的设备&#xff0c;提供给用户的就只是&#xff1a;开关机、通…

WPF应用程序使用MVVM模式

文章目录 一、前言二、正文&#xff1a;模式 - WPF应用程序使用MVVM设计模式2.0 一些术语2.1 秩序与混乱2.2 MVVM模式的演变2.3 为何WPF开发者喜爱MVVM2.4 Demo应用程序2.5 路由命令逻辑2.6 ViewModel类层次结构2.7 ViewModelBase类2.8 CommandViewModel类2.9 MainWindowViewMo…

Dynamo幕墙探究系列(四)——Revolve

我们先放一张截图&#xff0c;不再是通过 loft 创建模型&#xff0c;而是通过旋转生成模型&#xff0c;效果如下&#xff0c;今天我们就来聊聊这个模型是怎么生成得。 “旋转”&#xff0c;顾名思义&#xff0c;和 Revit 中创建形状的旋转是一个意思&#xff0c;只是用来旋转的…

Vue.js+SpringBoot开发衣物搭配系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 衣物档案模块2.2 衣物搭配模块2.3 衣物收藏模块 三、系统设计3.1 用例设计3.2 E-R图设计3.3 数据库设计3.3.1 衣物档案表3.3.2 衣物搭配表3.3.3 衣物收藏表 四、系统实现4.1 登录页4.2 衣物档案模块4.3 衣物搭配模块4.4…

kibana7.17.7 将数据导出csv文件

配置kibana文件 首先先配置kibana.yaml内容如下&#xff0c;这里假设我的服务器ip地址为192.168.130.128&#xff0c;elasticsearch的ip地址为&#xff1a;192.168.130.129:9200&#xff0c;192.168.130.130:9200&#xff1a; server.host: "192.168.130.128" serv…

火灾安全护航:火灾监测报警摄像机助力建筑安全

火灾是建筑安全中最常见也最具破坏力的灾难之一&#xff0c;为了及时发现火灾、减少火灾造成的损失&#xff0c;火灾监测报警摄像机应运而生&#xff0c;成为建筑防火安全的重要技术装备。 火灾监测报警摄像机采用高清晰度摄像头和智能识别系统&#xff0c;能够全天候监测建筑内…

CleanMyMac X2024一款专为Mac用户设计的优化工具

亲爱的用户们&#xff0c;我们都知道电脑在长时间使用后会变得越来越慢&#xff0c;垃圾文件和无用的应用程序会占用我们的硬盘空间&#xff0c;让我们的电脑变得像蜗牛一样慢。但是&#xff0c;现在有一个解决方案可以让你的电脑重获新生&#xff0c;那就是CleanMyMac X&#…

RabbitMQ讲解与整合

RabbitMq安装 类型概念 租户 RabbitMQ 中有一个概念叫做多租户&#xff0c;每一个 RabbitMQ 服务器都能创建出许多虚拟的消息服务器&#xff0c;这些虚拟的消息服务器就是我们所说的虚拟主机&#xff08;virtual host&#xff09;&#xff0c;一般简称为 vhost。 每一个 vhos…

Unity中URP实现水体(水的焦散)

文章目录 前言一、原理1、 通过深度图&#xff0c;得到 对应像素 在 世界空间下的Z值2、得到模型顶点在 观察空间 下的坐标3、由以上两点得到 深度图像素 对应的 xyz 值4、最后&#xff0c;转化到 模型本地空间下&#xff0c;用其对焦散纹理采样 二、实现1、获取深度图2、在顶点…

Web组态可视化编辑器 快速绘制组态

随着工业智能制造的发展&#xff0c;工业企业对设备可视化、远程运维的需求日趋强烈&#xff0c;传统的单机版组态软件已经不能满足越来越复杂的控制需求&#xff0c;那么实现Web组态可视化界面成为了主要的技术路径。 行业痛点 对于软件服务商来说&#xff0c;将单机版软件转变…

使用QEMU搭建U-Boot+LinuxKernel+busybox+NFS嵌入式开发环境

目录 0.课程大纲1.为什么要使用QEMU学习嵌入式QEMU简介使用QEMU可以做哪些事情?当前嵌入式行业现状如何适应这种变化使用QEMU学习嵌入式有哪些好处?驱动开发技能为什么要学习Linux 2.搭建嵌入式开发基本环境2.1.安装u-boot-tools2.2.安装交叉编译工具什么是ABI和EABI 3.QEMU安…

【04】C语言括号匹配问题

欢迎来到土土的博客~&#x1f973;&#x1f973;&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#xff1a;大耳朵土土垚的博客 &#x1f4a5; 所属专栏&#xff1a;C语言系列函数实现 题目描述&#xff1a; 给定一个只包括 ‘(’&#xff0c;‘)’&#xf…

05-Linux部署MySQL

Linux部署MySQL 在今后的使用过程中&#xff0c;需要频繁使用Linux系统&#xff0c;所以在Linux上安装软是必不可少的操作 。 前置要求 需要学习前四章知识&#xff0c;初识Linux、Linux基础命令、Linux权限管理、Linux高阶技巧这4个章节。需要开启多态虚拟机&#xff0c;电…

软考54-上午题-【数据库】-关系模式的范式-真题

一、范式总结 第一步&#xff0c;先求候选码&#xff0c;由此得到&#xff1a;主属性、非主属性。 二、判断部分函数依赖的技巧 【回顾】&#xff1a;部分函数依赖 &#xff08;X&#xff0c;Y&#xff09;——>Z&#xff1b; X——>Z 或者 Y——>Z 题型&#xff1a;给…

关于编写测试用例的一些思考

测试用例是QA同学的基本功&#xff0c;每个人都有一套编写测试用例的体系&#xff0c;本文是作者结合自身的工作经验以及阅读一些测试相关的书籍后的一些看法&#xff0c;欢迎大家一起讨论学习。 测试设计 测试用例格式 面试中一些常见的问题 1.APP测试与服务端测试的区别&am…

DDS数据分发服务——提升汽车领域数据传输效率

1.引言 随着智能化技术的快速发展&#xff0c;汽车行业正经历着一场革命性的变革。如今的分布式系统变得越来越复杂且庞大&#xff0c;对网络通信基数要求在功能和性能层面越来越高。数据分发服务&#xff08;DDS&#xff09;作为一项先进的数据传输解决方案&#xff0c;在汽车…