Stable Diffusion经典应用场景

🌺系列文章推荐🌺

扩散模型系列文章正在持续的更新,更新节奏如下,先更新SD模型讲解,再更新相关的微调方法文章,敬请期待!!!(本文及其之前的文章均已更新

 SD模型原理:

  1. Stable Diffusion概要讲解
  2. Stable diffusion详细讲解
  3. Stable Diffusion的加噪和去噪详解
  4. Diffusion Model
  5. Stable Diffusion核心网络结构——VAE
  6. Stable Diffusion核心网络结构——CLIP Text Encoder
  7. Stable Diffusion核心网络结构——U-Net
  8. Stable Diffusion中U-Net的前世今生与核心知识
  9. SD模型性能测评
  10. Stable Diffusion经典应用场景
  11. SDXL的优化工作

微调方法原理:

  1. DreamBooth
  2. LoRA
  3. LORA及其变种介绍
  4. ControlNet
  5. ControlNet文章解读
  6. Textual Inversion 和 Embedding fine-tuning

​​​ 目录

文本生成图像(txt2img)

【一】生成图片的尺寸(width和height)

【二】推理步数(steps、num_inference_steps或者Sampling steps)

【三】guidance_scale(guidance_scale或者CFG Scale)

【四】Negative Prompt

图像生成图像(img2img)

图像重绘(Inpainting)

图像的可控生成(使用ControlNet辅助生成)

图像超分辨率重建


摘录来源:https://zhuanlan.zhihu.com/p/632809634

在本章节中,将详细介绍Stable Diffusion的五大经典应用,并梳理各个经典应用场景的完整工作流(Workflow),清晰直观的展示SD应用场景的每个细节流程,让大家对SD经典应用场景有更深的理解。【这里主要介绍其中两种:文生图和图生图】

文本生成图像(txt2img)

文本生成图像是SD系列模型最基础也是最核心的应用功能,下面是SD系列模型进行文本生成图像的完整流程:

​​
SD系列模型文本生图像的完整流程

根据上面的完整流程图,我们
结构化分析一下SD系列模型进行文本生成图像的脉络:

  • 输入:将输入的文本(prompt)通过Text Encoder提取出Text Embeddings特征(77x768);同时初始化一个Latent空间的随机高斯噪声矩阵(维度为64x64x4,对应512x512分辨率图像)。
  • 生成过程:将Text Embeddings特征和随机高斯噪声矩阵通过CrossAttention机制送入U-Net中,结合Scheduler algorithm(调度算法)【和采样算法】迭代去噪,经过N次迭代后生成去噪后的Latent特征。
  • 输出:将去噪后的Latent特征送入VAE的Decoder模块,重建出像素级图像(512x512分辨率)。

节点式结构图展示一下SD模型进行文本生成图像的全部流程:

​​
SD模型进行文生图的节点式结构图

其中Load Checkpoint模块代表对SD系列模型的主要结构的权重进行加载初始化(VAE、U-Net、Text Encoder),CLIP Text Encode表示文本编码器,可以输入Prompt和Negative Prompt,来控制图像的生成,Empty Latent Image表示初始化的高斯噪声,KSampler表示调度算法以及SD相关生成参数,VAE Decode表示使用VAE的解码器将Latent特征转换成像素级图像。

SD在推理过程中的几个重要参数:

  • 生成图片的尺寸(width和height)
  • 推理步数(steps、num_inference_steps或者Sampling steps)
  • guidance_scale(guidance_scale或者CFG Scale)
  • Negative Prompt
【一】生成图片的尺寸(width和height)

之前我们已经讲过,SD模型是在512x512分辨率的数据上进行训练的,所以在默认情况下生成512x512分辨率的图片效果最好

SD本身的模型结构也是支持任意尺寸的图像生成的,因为SD模型中的VAE支持任意尺寸图像的编码和解码,U-Net部分(只有卷积结构和Attention机制,没有全连接层)也是支持任意尺寸的Latent特征的生成

然而,由于原生SD模型在训练时输入尺寸是固定的,这就导致了实际使用时生成512x512分辨率以外的图像会出现问题。在生成低分辨率(比如256x256)图像时,图像的质量会大幅度下降;在生成高分辨率(比如768x512、512x768、768x768、1024x1024)的图像时,图像质量虽然没问题,但是可能会出现物体特征重复、物体被拉长、主体结构崩坏等问题。

解决这个问题的一个直观有效的方法是进行多尺度训练。在传统深度学习时代,这是YOLO系列模型的一个必备训练方法,终于跨过周期在AIGC时代重新繁荣,并由NovelAI优化后变成了适合于SD系列模型的Aspect Ratio Bucketing策略。

【二】推理步数(steps、num_inference_steps或者Sampling steps)

num_inference_steps表示SD系列模型在推理过程中的去噪次数或者采样步数。一般来说,我们可以设置num_inference_steps在20-50之间,其中设置的采样步数越大,图像的生成效果越好,但同时生成所需的时间就越长

到这里大家可能会有疑问,为什么SD系列模型在训练时设置1000的noise scheduler,在推理时却只用设置20-50的noise scheduler?

这是因为,虽然SD模型在训练时参照DDPM采样方法,但推理时可以使用DDIM这个采样方法,DDIM通过去马尔可夫化,让SD模型在推理时可以进行“跳步”,抽取短的子序列作为noise scheduler,大大减少了推理步数

当然的,除了使用DDIM采样方法,我们也可以使用其他的采样方法,目前主流的采样方法有DPM系列、DPM++系列、Euler系列、LMS系列、Heun、UniPC、Restart等。

【三】guidance_scale(guidance_scale或者CFG Scale)

guidance_scale代表CFG(无分类指引,Classifier-free guidance,guidance_scale)的权重,当设置的guidance_scale越大时,文本的控制力会越强,SD模型生成的图像会和输入文本更一致。通常guidance_scale可以设置在7-8.5之间,就会有不错的生成效果。如果使用非常大的guidance_scale值(比如11-12),生成的图像可能会过饱和,同时多样性会降低

当我们使用CFG之后,SD模型在去噪过程会同时依赖条件扩散模型和无条件扩散模型:

​其中w代表guidance_scale,当w越大时,输入文本起的作用越大,即生成的图像更和输入文本一致,当w被设置为0时,图像的生成是无条件的,输入文本会被忽略。

【四】Negative Prompt

我们可以使用Negative Prompt来避免生成我们不想要的内容,从而改善图像生成效果。

Negative Prompt和CFG有关,下面的公式中包含了条件扩散模型和无条件扩散模型:

Negative Prompt就是无条件扩散模型的文本输入,只是SD模型的训练过程中我们将文本设置为空字符串来实现无条件扩散模型,即negative_prompt = ""。当推理阶段我们开始使用Negative Prompt时,这部分的文本不再为空,并且从上述公式可以看出无条件扩散模型是我们想远离的分布。

图像生成图像(img2img)

SD模型的图生图功能是以文生图功能为基础的一个拓展功能,和文生图相比,图生图的初始Latent特征不再是一个随机噪声,而是初始输入图像通过VAE编码之后加上一定高斯噪声(扩散过程)的Latent特征。然后使用SD模型进行去噪操作,此时去噪的步数要和加噪的步数保持一致,这样才能生成整体布局与初始图像一致的无噪声图像。

​​
SD模型的图生图过程

与此同时,我们【通过调度器】设置一个去噪强度(Denoising strength)来控制加入多少噪声。如果设置Denoising strength = 0,就不添加噪声。如果设置Denoising strength = 1,则添加噪声原始图像成为一个随机噪声矩阵,此时就相当于进行文生图的流程了。

​​
去噪强度(Denoising strength)控制噪音的加入量

讲完了图生图的完整流程,我们在结构化分析一下SD系列模型进行图生图的脉络:

  • 输入:将输入的文本(prompt)通过Text Encoder提取出Text Embeddings特征(77x768);同时将初始图像通过VAE编码成一个Latent特征(维度为64x64x4,对应512x512分辨率图像)。
  • 生成过程:通过扩散过程往Latent特征中加入N次迭代的噪声,再将Text Embeddings特征和随机高斯噪声矩阵通过CrossAttention机制送入U-Net中,结合Scheduler algorithm(调度算法)【和采样算法】迭代去噪,经过N次迭代后生成去噪后的Latent特征。
  • 输出:将去噪后的Latent特征送入VAE的Decoder模块,重建出像素级图像(512x512分辨率)。

下面Rocky再用节点式结构图展示一下SD模型进行图生图的全部流程:

​​
SD模型进行图生图的节点式结构图

其中Load Checkpoint模块代表对SD模型的主要结构进行初始化(VAE、U-Net、Text Encoder),CLIP Text Encode表示文本编码器,可以输入Prompt和Negative Prompt,来控制图像的生成,Load Image表示输入的初始图像,KSampler表示调度算法以及SD相关生成参数,VAE Encode表示使用VAE的编码器将初始图像转换成Latent特征,VAE Decode表示使用VAE的解码器将Latent特征转换成像素级图像。

图像重绘(Inpainting)

图像inpainting最初用在图像修复上,是一种图像修复技术,可以将图像中的水印、噪声、标志等瑕疵去除。

传统的图像inpainting过程可以分为两步:

  1. 找到图像中的瑕疵部分
  2. 对瑕疵部分进行重绘去除,并填充图像内容使得图像语义完整自然。

在AIGC时代,图像inpainting再次繁荣,成为Stable Diffusion的经典应用场景,在图像编辑上重新焕发生机。

那么什么是图像编辑呢?

图像编辑是指对图像进行修改、调整和优化的过程。它可以包括对图像的颜色、对比度、亮度、饱和度等进行调整,以及修复图像中的缺陷、删除不需要的元素、添加新的图像内容等操作。

在SD中,主要是通过给定一个想要编辑的区域mask,并在这个区域mask圈定的范围内进行文本生成图像的操作,从而编辑mask区域的图像内容

SD中的图像inpainting流程如下所示:

SD中的图像inpainting流程
SD中的图像inpainting流程

从上图可以看出,图像inpainting整体上和图生图流程一致,不过为了保证mask以外的图像区域不发生改变,在去噪过程的每一步,我们利用mask将Latent特征中不需要重建的部分都替换成原图最初的特征只在mask部分进行特征的重建与优化

在加入了mask后,SD模型的输入通道数也发生了变化,文生图和图生图任务中,SD的输入是64x64x4,而在图像inpainting任务中,增加了mask(64x64x1),所以此时SD的输入为64x64x5。

讲完了图像inpainting的完整流程,我们在结构化分析一下SD系列模型进行图像inpainting的脉络:

  • 输入:输入的文本(prompt)通过Text Encoder提取出Text Embeddings特征(77x768);同时将初始图像Mask通过VAE分别编码成两个Latent特征(维度分别为64x64x4和64x64x1,对应512x512分辨率图像)。
  • 生成过程:通过扩散过程往Latent特征中加入N次迭代的噪声,但只影响Mask涵盖的区域,再将Text Embeddings特征和随机高斯噪声矩阵通过CrossAttention机制送入U-Net中,结合Scheduler algorithm(调度算法)迭代去噪,经过N次迭代后生成去噪后的Latent特征。
  • 输出:将去噪后的Latent特征送入VAE的Decoder模块,重建出像素级图像(512x512分辨率)。

下面Rocky再用节点式结构图展示一下SD模型进行图像inpainting的全部流程:

SD模型进行图像inpainting的节点式结构图

其中Load Checkpoint模块代表对SD模型的主要结构进行加载(VAE、U-Net、Text Encoder)。CLIP Text Encode表示SD模型的文本编码器,可以输入Prompt和Negative Prompt,来引导图像的生成。Load Image表示输入的图像和mask。KSampler表示调度算法以及SD相关生成参数。VAE Encode表示使用VAE的Encoder将输入图像和mask转换成Latent特征,VAE Decode表示使用VAE的Decoder将Latent特征重建成像素级图像。

下面就是进行图像inpainting的直观过程:

由于图像inpainting和图生图的操作一样,只是在SD模型原有的基础上扩展了它的能力,并没有去微调SD模型,所以如何调整各种参数成为了生成优质图片的关键。

当然的,也有专门用于图像inpainting的SD模型,比如说Stable Diffusion Inpainting模型,是以SD 1.2为基底模型微调而来,同时在输入端增加了经过mask处理的图像的Latent特征(64x64x4)和mask(64x64x1),所以此时SD的输入为64x64x9,同时新增的部分设置权重全零初始化。Stable Diffusion Inpainting模型由于经过专门的inpainting训练,在生成细节上比起常规SD模型会更好,但是相应的常规文生图的能力会有一定的减弱。

图像的可控生成(使用ControlNet辅助生成)

SD系列模型的可控生成主要依赖于ControlNet等控制模型,可以与文生图、图生图以及图像Inpainting等任务结合使用。

ControlNet的核心基础知识:

  1. ControlNet
  2. ControlNet文章解读

下面Rocky用节点式结构图展示一下SD模型使用ControlNet辅助生成的全部流程:

SD模型使用ControlNet辅助生成的节点式结构图

其中Load Checkpoint模块代表对SD模型的主要结构进行初始化(VAE、U-Net、Text Encoder),CLIP Text Encode表示文本编码器,可以输入Prompt和Negative Prompt,来控制图像的生成,Load Image表示输入的ControlNet需要的预处理图Empty Latent Image表示初始化的高斯噪声Load ControlNet Model表示对ControlNet进行初始化,KSampler表示调度算法以及SD相关生成参数,VAE Decode表示使用VAE的解码器将Latent特征转换成像素级图像。

使用ControlNet辅助生成图片

图像超分辨率重建

图像超分辨率重建可以说是图像生成任务的一个后处理功能,用于获得高分辨率的高质量图像。

目前主流的超分模型主要分两类,一类是基于传统深度学习时代的GAN模型(R-ESRGAN、ESRGAN、ScuNET GAN等),另外一类是基于AIGC时代的扩散模型(LDSR、stable-diffusion-x4-upscaler等)。

下面Rocky用节点式结构图展示一下SD模型进行图像超分辨率重建的全部流程:

图像超分辨率重建的节点式结构图

在结构图中可以看到,整体流程与文生图和图生图一致,在此基础上增加了Upscale Image表示对生成的图片进行超分操作。

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

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

相关文章

04 —— Webpack打包CSS代码

加载器css-loader :解析css代码 webpack 中文文档 | webpack中文文档 | webpack中文网 加载器style-loader:把解析后的css代码插入到DOM style-loader | webpack 中文文档 | webpack中文文档 | webpack中文网 准备css代码,放到src/login目…

springboot高校网上缴费综合务系统

摘 要 相比于以前的传统手工管理方式,智能化的管理方式可以大幅降低运营人员成本,实现了高校网上缴费综合务系统的标准化、制度化、程序化的管理,有效地防止了高校网上缴费综合务的随意管理,提高了信息的处理速度和精确度&#x…

IDEA怎么定位java类所用maven依赖版本及引用位置

在实际开发中,我们可能会遇到需要搞清楚代码所用依赖版本号及引用位置的场景,便于排查问题,怎么通过IDEA实现呢? 可以在IDEA中打开项目,右键点击maven的pom.xml文件,或者在maven窗口下选中项目,…

springMVC重点知识

一、springMVC请求流程 二、springMVC环境搭建 Idea 下创建 springmvc01 ⼯程 1、pom.xml 坐标添加 <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>12</maven.compiler.source> …

django基于python 语言的酒店推荐系统

摘 要 酒店推荐系统旨在提供一个全面酒店推荐在线平台&#xff0c;该系统允许用户浏览不同的客房类型&#xff0c;并根据个人偏好和需求推荐合适的酒店客房。用户可以便捷地进行客房预订&#xff0c;并在抵达后简化入住登记流程。为了确保连续的住宿体验&#xff0c;系统还提供…

机器学习笔记——30种常见机器学习算法简要汇总

本笔记介绍机器学习中常见的30种机器学习算法。 文章目录 监督学习算法&#xff08;Supervised Learning&#xff09;回归算法&#xff08;Regression Algorithms&#xff09;分类算法&#xff08;Classification Algorithms&#xff09; 无监督学习算法&#xff08;Unsupervis…

Vue3、Vite5、Primevue、Oxlint、Husky9 简单快速搭建最新的Web项目模板

Vue3、Vite5、Oxlint、Husky9 简单搭建最新的Web项目模板 特色进入正题创建基础模板配置API自动化导入配置组件自动化导入配置UnoCss接入Primevue接入VueRouter4配置项目全局环境变量 封装Axios接入Pinia状态管理接入Prerttier OXLint ESLint接入 husky lint-staged&#xf…

利用RAGflow和LM Studio建立食品法规问答系统

前言 食品企业在管理标准、法规&#xff0c;特别是食品原料、特殊食品法规时&#xff0c;难以通过速查法规得到准确的结果。随着AI技术的发展&#xff0c;互联网上出现很多AI知识库的解决方案。 经过一轮测试&#xff0c;找到问题抓手、打通业务底层逻辑、对齐行业颗粒度、沉…

百度智能云千帆大模型平台引领企业创新增长

本文整理自百度世界大会 2024——「智能跃迁 产业加速」论坛的同名演讲。 更多大会演讲内容&#xff0c;请访问&#xff1a; https://baiduworld.baidu.com 首先&#xff0c;跟大家分享一张图&#xff0c;这个是我们目前大模型应用落地的场景分布。可以看到&#xff0c;大模型…

人形机器人开发、XR仿真训练、影视动画制作,一副手套支持多种应用

近日&#xff0c;动作捕捉数据手套供应商Manus 推出了其最新产品Metagloves Pro。其最大特点是佩戴更加方便简洁且精度更高。Metagloves Pro功能强大且适用于多种应用场景&#xff0c;包括&#xff1a;人形机器人研究、XR仿真训练以及影视动画制作等。 一、人形机器人研究 Man…

sql server怎样用sql profiler捕获带变量值的慢sql

一 新建跟踪 点击工具-SQL Server Profiler&#xff1a; 点击文件-新建跟踪的按钮&#xff1a; 在‘事件选择’选项卡只选择如下两项内容&#xff08;RPC:Completed,SQL:BatchCompleted&#xff09;&#xff0c;把多余的取消勾选&#xff1a; 然后勾选上面截图中右下方的‘显示…

Linux中虚拟内存详解

一、虚拟内存的概念 虚拟内存是现代操作系统为了有效管理内存资源、提高内存利用率以及实现多任务处理等目的而引入的一种重要的内存管理机制。它为每个程序&#xff08;通常对应一个进程&#xff09;提供了一个看似连续且容量较大的地址空间&#xff0c;而这个地址空间并不一…

Qt、C++实现五子棋人机对战与本地双人对战(高难度AI,极少代码)

介绍 本项目基于 Qt C 实现了一个完整的五子棋游戏&#xff0c;支持 人机对战 和 人人对战 模式&#xff0c;并提供了三种难度选择&#xff08;简单、中等、困难&#xff09;。界面美观&#xff0c;逻辑清晰&#xff0c;是一个综合性很强的 Qt 小项目 标题项目核心功能 棋盘…

Vue非单文件组件

目录 Vue非单文件组件 几个注意点 组件的嵌套 关于VueComponent 重要的内置关系 Vue非单文件组件 Vue中使用组件的三大步骤&#xff1a; 一、定义组件(创建组件) 二、注册组件 三、使用组件(写组件标签) 一、…

关于C++地址交换的实现

关于地址的交换实现&#xff0c;我们要使用指针引用的方式进行&#xff0c;例如&#xff1a; #include <iostream>// 定义函数交换两个整型指针的地址 void swapIntPtrAddresses(int* &ptr1, int* &ptr2) {int *temp ptr1;ptr1 ptr2;ptr2 temp; }int main() …

Windows 软件之 FFmpeg

文章目录 前言1 FFmpeg 视频处理1.1 编解码1.2 其它视频编辑命令1.3 视频抽帧 2 FFmpeg 音频处理3 FFmpeg 图片处理3.1 编解码3.2 拼接图片3.3 图片合成视频 附录1&#xff1a;mediainfo.ps1 前言 FFmpeg 是一套可以用来记录、转换数字音频、视频&#xff0c;并能将其转化为流的…

Android okhttp 网络链接各阶段监控

步骤 1: 添加依赖 在项目的 build.gradle 文件中&#xff0c;添加 OkHttp 依赖&#xff1a; implementation com.squareup.okhttp3:okhttp:4.11.0 步骤 2: 创建自定义的 EventListener 创建一个自定义的 EventListener 类&#xff1a; import android.util.Log import okht…

【Java】字节码文件

字节码文件组成部分 1、基本信息 1.1 Magic 魔数 文件是无法通过文件扩展名来确定文件类型的&#xff0c;文件扩展名可以随意修改&#xff0c;不影响文件的内容。软件使用文件的头几个字节&#xff08;文件头&#xff09;去校验文件的类型&#xff0c;如果软件不支持该种类型就…

Easyexcel(3-文件导出)

相关文章链接 Easyexcel&#xff08;1-注解使用&#xff09;Easyexcel&#xff08;2-文件读取&#xff09;Easyexcel&#xff08;3-文件导出&#xff09; 响应头设置 通过设置文件导出的响应头&#xff0c;可以自定义文件导出的名字信息等 //编码格式为UTF-8 response.setC…

【机器学习】朴素贝叶斯算法

目录 什么是朴素贝叶斯算法&#xff1f; 算法引入 贝叶斯定理 朴素贝叶斯分类器 工作原理 优缺点 应用场景 实现示例 基本步骤&#xff1a; 在机器学习的世界里&#xff0c;朴素贝叶斯算法以其简单性和高效性而著称。尽管它的名字听起来有点复杂&#xff0c;但实际上…