当前位置: 首页 > 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 时

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

相关文章:

  • 【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实现日志轮转
  • 专题二十:路由策略与策略路由
  • 2025年度人大立法工作计划将公布:研究启动法律清理工作
  • 国新办发布会丨2024年市监部门查办知产领域侵权行政违法案件4.4万件
  • 获公示拟任省辖市委副书记的胡军,已赴南阳履新
  • 《不眠之夜》上演8年推出特别版,多业态联动形成戏剧经济带
  • 与包乐史驾帆航行|航海、钓鱼和写书:一个记者的再就业之路
  • 全国双拥模范城(县)名单