当前位置: 首页 > news >正文

StableDiffusionPipeline原理解读——引导尺度是如何调整噪声残差的

引导尺度(Guidance Scale)在分类器自由引导(Classifier-Free Guidance, CFG)中起着关键作用,用于调整噪声残差,从而在生成过程中平衡无条件生成和有条件生成的影响。

背景知识

在扩散模型中,生成过程是通过逐步去除噪声来实现的。在每个时间步 t,模型需要预测当前潜变量中的噪声成分。这个噪声成分被称为噪声残差(noise residual)。通过逐步去除噪声,模型最终生成高质量的图像。

分类器自由引导(CFG)是一种技术,允许模型在生成过程中同时考虑无条件生成和有条件生成。也就是说,模型会生成两个噪声预测:

  • 无条件噪声预测(Unconditional Noise Prediction, ϵuncond​):不依赖于任何条件信息的噪声预测。

  • 有条件噪声预测(Conditional Noise Prediction, ϵcond​):依赖于条件信息(如文本提示)的噪声预测。

    引导尺度的作用

    引导尺度 guidance_scale 用于调整条件信息的影响程度。具体来说,引导尺度通过以下公式调整噪声残差:

公式解析

  1. 无条件噪声预测 ϵuncond​

    这是模型在不考虑任何条件信息的情况下预测的噪声残差。
  2. 有条件噪声预测 ϵcond​

    这是模型在考虑条件信息(如文本提示)的情况下预测的噪声残差。
  3. 引导尺度 guidance_scale

    这是一个标量,表示条件信息的影响程度。值越大,生成的图像越接近条件信息(如文本提示)。
  4. 调整后的噪声残差 ϵfinal​

    这是最终用于生成过程的噪声残差,结合了无条件和有条件噪声预测。

具体步骤

这里的latent_model_input参数是包含2份潜变量的,所以在unet模型中会生成一个无条件的噪声残差和一个有条件的噪声残差,通过一次调用 UNet 模型,同时生成两份噪声预测

noise_pred = self.unet(latent_model_input,t,encoder_hidden_states=prompt_embeds,timestep_cond=timestep_cond,cross_attention_kwargs=self.cross_attention_kwargs,added_cond_kwargs=added_cond_kwargs,return_dict=False,)[0]
  1. 分割噪声预测

    noise_pred_uncond, noise_pred_text = noise_pred.chunk(2)
    • noise_pred 分成两部分,分别对应无条件噪声预测和有条件噪声预测。

  2. 计算条件信息的影响

    noise_pred = noise_pred_uncond + self.guidance_scale * (noise_pred_text - noise_pred_uncond)
    • 计算有条件噪声预测与无条件噪声预测之间的差异 ϵcond​−ϵuncond​。

    • 将这个差异乘以引导尺度 guidance_scale。

    • 将调整后的差异加到无条件噪声预测上,得到最终的噪声残差 ϵfinal​。

作用

通过这种方式,引导尺度 guidance_scale 调整了条件信息的影响程度:

  • 当 guidance_scale=1 时

    • ϵfinal​=ϵuncond​+(ϵcond​−ϵuncond​)=ϵcond​。

    • 最终的噪声残差完全等于有条件噪声预测,生成的图像完全依赖于条件信息。

  • 当 guidance_scale=0 时

    • ϵfinal​=ϵuncond​。

    • 最终的噪声残差完全等于无条件噪声预测,生成的图像不依赖于条件信息。

  • 当 guidance_scale>1 时

    • 条件信息的影响被放大,生成的图像更接近条件信息。

  • 当 0<guidance_scale<1 时

    • 条件信息的影响被减弱,生成的图像在无条件和有条件之间进行平衡。


文章转载自:

http://BIPgzw0Z.qwgct.cn
http://Fg5KigC3.qwgct.cn
http://nfvEmvTU.qwgct.cn
http://jLCgSG3e.qwgct.cn
http://aFr1gpET.qwgct.cn
http://dPZTR1th.qwgct.cn
http://UN93AGT4.qwgct.cn
http://cG5ablji.qwgct.cn
http://6Z9OoA0W.qwgct.cn
http://Ohxr9Nfs.qwgct.cn
http://NAuUjxxb.qwgct.cn
http://XLCHAxSt.qwgct.cn
http://Q2UiSdda.qwgct.cn
http://bOcrBGTa.qwgct.cn
http://ElphrbA4.qwgct.cn
http://88wOhx1K.qwgct.cn
http://XMWG4v49.qwgct.cn
http://9FTOxurR.qwgct.cn
http://ZMQIe4aN.qwgct.cn
http://y9R718Xm.qwgct.cn
http://rdAgZ7WF.qwgct.cn
http://CE9mb3oa.qwgct.cn
http://YgRUc5e1.qwgct.cn
http://lFXsHwCy.qwgct.cn
http://qOmOaIyH.qwgct.cn
http://uzwbmryl.qwgct.cn
http://nmDjtoWd.qwgct.cn
http://6OAfKGC9.qwgct.cn
http://lTl90DtG.qwgct.cn
http://Rn78sBeh.qwgct.cn
http://www.dtcms.com/a/151888.html

相关文章:

  • 【C语言经典算法实战】:从“移动距离”问题看矩阵坐标计算
  • 审计效率升级!快速匹配Excel报表项目对应的Word附注序号
  • Ubuntu / WSL 安装pipx
  • E3650工具链生态再增强,IAR全面支持芯驰科技新一代旗舰智控MCU
  • unity使用iTextSharp生成PDF文件
  • 焊接机排错
  • Qt 入门 6 之布局管理
  • spring-ai使用Document存储至milvus的数据结构
  • 【MongoDB + Spark】 技术问题汇总与解决方案笔记
  • JavaScript学习教程,从入门到精通,XMLHttpRequest 与 Ajax 请求详解(25)
  • java 富文本转pdf
  • C#源码分析 --- Random
  • 深度解析:基于Python的微信小程序自动化操作实现
  • MySQL存储STM32F407上的HX711数据
  • 高光谱相机在生物医学中的应用:病理分析、智慧中医与成分分析
  • 【C++】模版初阶:函数模板、类模板
  • 1.1 java开发的准备工作(入门)
  • 2025/4/23 心得
  • 使用logrotate实现日志轮转
  • 专题二十:路由策略与策略路由
  • 详解 synchronized 关键字【通俗易懂】
  • GPLT-2025年第十届团体程序设计天梯赛总决赛题解(2025天梯赛题解,266分)
  • nginx部署前端项目时,正常访问前端页面成功后,浏览器刷新报404解决访问
  • Android开发常用外部组件及使用指南(下)
  • 【自我介绍前端界面分享】附源码
  • java后端开发day35--集合进阶(四)--双列集合:MapHashMapTreeMap
  • 深入剖析PHP反弹Shell:OSCP场景下的实现、原理与优化
  • sql 根据时间范围获取每日,每月,年月的模版数据
  • MOS管驱动电路以及阻值选取
  • rl中,GRPO损失函数详解。