Stable Diffusion WebUI 中调度器(Schedule type)简单研究

2024-05-03 04:52

本文主要是介绍Stable Diffusion WebUI 中调度器(Schedule type)简单研究,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

💎内容概要

在近期,stable diffusion webui更新了1.9版本,其中包含的一项变化就是,把采样器和调度器(Schedule type)分开了,之前是合并在一起来选择的,所以这篇文章主要分两个部分,第一个部分是作者为什么把他们给分开了,第二个是采样器和调度器的概念对于设计师来说,是否需要重点理解。

✨作者怎么说

了解原作者的思路,还是得从官方更新说明上看,主要是这几个相关的帖子:

1.9.0 · AUTOMATIC1111/stable-diffusion-webui · Discussion #15498 · GitHub

这里分为两块,一块是在UI界面上增加了调度器的设置的说明:

emm,简单来说,就是没有太多说明,如果是选择了Automatic,那么会根据采样器自动调取最合适的调度器。

所以,对于使用来说,大家默认选择“Automatic”就好了。

另外还有一个相关的帖子,是关于SDXL-Lightning模型的。

原帖地址在:Sgm uniform scheduler for SDXL-Lightning models by KohakuBlueleaf · Pull Request #15325 · AUTOMATIC1111/stable-diffusion-webui · GitHub

(马赛克部分请忽略,虽然是比较正常的图片,但是csdn的图片屏蔽尺度比较神奇,我就先马赛克为净了)

SDXL-Lightning模型,大家应该之前也都了解过,可以更少的步数,更快的速度,生成质量还不错的图片,所以现在在各个模型网站上还是有一席之地的,貌似感觉比turbo模型更受欢迎一些?

在这位朋友的测试下,SGM Uniform的调度器会比其他调度器更适合lightning类型的模型,并且做了一些尝试,在Euler采样器下,4步采样,分别使用不同的调度器,生成结果如上图,的确SGM Uniform在这里看起来更好一些。

我也做了一点尝试。

模型使用的是,TAILANG XL-Lightning-2.5D 闪电_2.0.safetensors

(大家如果感兴趣也可以自行下载,不需要魔法:LiblibAI·哩布哩布AI -TAILANG XL-Lightning-2.5D 闪电_2.0.safetensors)

SGM Uniform
SGM Uniform + Euler + 4Steps
Automatic + Euler + 4Steps

SGM Uniform + Euler + 4Steps
Automatic + Euler + 4Steps

emm,从效果上看,如果都是4steps,固定种子,SGM Uniform调度器的确会好一丢丢,所以如果追求极致的话,大家还是需要记得在使用lightning模型时,记得手动更改下这个调度器。

🤿概念研究

在Stable Diffusion模型中,采样器(Sampler)和调度器(Scheduler)是生成图像过程中的关键组件,它们共同决定了生成图像的质量和速度,那么这俩概念到底意味着什么呢?

  1. 采样器(Sampler):在Stable Diffusion的上下文中,采样器是指用于从噪声图像生成清晰图像的算法。这个过程被称为采样,因为它在每一步中生成一张新的图像样本。采样器通过在一系列步骤中逐渐减少噪声来生成图像,每一步都会根据预定的噪声计划(Noise Schedule)来减少噪声,并生成新的图像样本。不同的采样器有不同的算法和特性,影响着图像生成的速度和质量。
  2. 调度器(Scheduler):调度器通常与采样器的概念紧密相关,它负责控制采样过程中每一步的噪声水平,也就是所谓的噪声计划(Noise Schedule)。调度器决定了在生成图像的每一步中减少多少噪声,从而影响采样过程的速度和最终图像的清晰度。在某些文献中,调度器和采样器这两个术语有时被交替使用,因为它们都涉及到控制生成过程中的噪声减少。

就算是概念解释部分,这两个词也的确很难分开,或者可以简单的理解为:采样器是图像生成过程中的降噪算法,而调度器则控制这个过程中每一步的噪声水平,两者共同作用,决定了生成图像的质量和所需时间。当然了,这两者本来就是搭配使用的,所以强行分开解释貌似也意义不大。

对于只是想生成一张图片来说的朋友,记住以下结论就好了:

📌调度器选择Automaitc就好了,除非使用了lightning类型的模型,那就手动改一下为SGM Uniform, 当然,就算是忘记修改了,问题也不大。

🎉写在最后~

去年的时候写了两门比较基础的Stable Diffuison WebUI的基础文字课程,大家如果喜欢的话,可以按需购买,在这里首先感谢各位老板的支持和厚爱~

✨StableDiffusion系统基础课(适合啥也不会的朋友,但是得有块Nvidia显卡):

https://blog.csdn.net/jumengxiaoketang/category_12477471.html

​​​​🎆综合案例课程(适合有一点基础的朋友):

https://blog.csdn.net/jumengxiaoketang/category_12526584.html

​​​​

这里是聚梦小课堂,就算不买课也没关系,点个关注,交个朋友😄

这篇关于Stable Diffusion WebUI 中调度器(Schedule type)简单研究的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/955866

相关文章

Mysql表的简单操作(基本技能)

《Mysql表的简单操作(基本技能)》在数据库中,表的操作主要包括表的创建、查看、修改、删除等,了解如何操作这些表是数据库管理和开发的基本技能,本文给大家介绍Mysql表的简单操作,感兴趣的朋友一起看... 目录3.1 创建表 3.2 查看表结构3.3 修改表3.4 实践案例:修改表在数据库中,表的操作主要

springboot简单集成Security配置的教程

《springboot简单集成Security配置的教程》:本文主要介绍springboot简单集成Security配置的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录集成Security安全框架引入依赖编写配置类WebSecurityConfig(自定义资源权限规则

Java时间轮调度算法的代码实现

《Java时间轮调度算法的代码实现》时间轮是一种高效的定时调度算法,主要用于管理延时任务或周期性任务,它通过一个环形数组(时间轮)和指针来实现,将大量定时任务分摊到固定的时间槽中,极大地降低了时间复杂... 目录1、简述2、时间轮的原理3. 时间轮的实现步骤3.1 定义时间槽3.2 定义时间轮3.3 使用时

如何使用Python实现一个简单的window任务管理器

《如何使用Python实现一个简单的window任务管理器》这篇文章主要为大家详细介绍了如何使用Python实现一个简单的window任务管理器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起... 任务管理器效果图完整代码import tkinter as tkfrom tkinter i

C++中函数模板与类模板的简单使用及区别介绍

《C++中函数模板与类模板的简单使用及区别介绍》这篇文章介绍了C++中的模板机制,包括函数模板和类模板的概念、语法和实际应用,函数模板通过类型参数实现泛型操作,而类模板允许创建可处理多种数据类型的类,... 目录一、函数模板定义语法真实示例二、类模板三、关键区别四、注意事项 ‌在C++中,模板是实现泛型编程

使用EasyExcel实现简单的Excel表格解析操作

《使用EasyExcel实现简单的Excel表格解析操作》:本文主要介绍如何使用EasyExcel完成简单的表格解析操作,同时实现了大量数据情况下数据的分次批量入库,并记录每条数据入库的状态,感兴... 目录前言固定模板及表数据格式的解析实现Excel模板内容对应的实体类实现AnalysisEventLis

Java中数组转换为列表的两种实现方式(超简单)

《Java中数组转换为列表的两种实现方式(超简单)》本文介绍了在Java中将数组转换为列表的两种常见方法使用Arrays.asList和Java8的StreamAPI,Arrays.asList方法简... 目录1. 使用Java Collections框架(Arrays.asList)1.1 示例代码1.

Java8需要知道的4个函数式接口简单教程

《Java8需要知道的4个函数式接口简单教程》:本文主要介绍Java8中引入的函数式接口,包括Consumer、Supplier、Predicate和Function,以及它们的用法和特点,文中... 目录什么是函数是接口?Consumer接口定义核心特点注意事项常见用法1.基本用法2.结合andThen链

springboot的调度服务与异步服务使用详解

《springboot的调度服务与异步服务使用详解》本文主要介绍了Java的ScheduledExecutorService接口和SpringBoot中如何使用调度线程池,包括核心参数、创建方式、自定... 目录1.调度服务1.1.JDK之ScheduledExecutorService1.2.spring

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::