sd1.5/sdxl的推理,训练

1.sd1.5/sdxl的推理

主要讲述一下unet的降噪,以及采样器的作用,已sd1.5为例,sdxl类似

unet的降噪过程中,如20步降噪,这20个unet共用的一个权重

1.1 timesteps

根据unet的降噪步数,即num_inference_steps生成一系列timesteps,每一个降噪步数,对应一个timestep。

num_inference_steps = 20  时
timesteps = tensor([951, 901, 901, 851, 801, 751, 701, 651, 601, 551, 501, 451, 401, 351,  
                    301, 251, 201, 151, 101, 51, 1], device='npu:0')

num_inference_steps = 50  时
timesteps =  tensor([981, 961, 961, 941, 921, 901, 881, 861, 841, 821, 801, 781, 761, 741,
                     721, 701, 681, 661, 641, 621, 601, 581, 561, 541, 521, 501, 481, 461,
                     441, 421, 401, 381, 361, 341, 321, 301, 281, 261, 241, 221, 201, 181,
                     161, 141, 121, 101,  81,  61,  41,  21,   1], device='npu:0')

 1.2 latent的降噪过程

1.2.1首先使用unet预测出噪声noise_pred

如下图第二步所示,左边为unet中输入lantent,prompt,t,输出为当前时刻的预测噪声noise

1.2.2使用scheduler(调度器),计算出前一时刻的latents

如下图第二步所示,右边为schedule(调度器),调度器根据unet的预测噪声noise,当前时刻t,latent,计算出前一时刻的latent

1.2.3如此循环直到计算出t0时刻的latent,即降噪完成

# pipeline_stable_diffusion.py 文件
for i, t in enumerate(timesteps):
    # noise_pred为unet预测的噪声
    noise_pred = self.unet(
        latent_model_input,
        t,
        encoder_hidden_states=prompt_embeds,
        timestep_cond=timestep_cond,                         # None
        cross_attention_kwargs=self.cross_attention_kwargs,  # None
        added_cond_kwargs=added_cond_kwargs,                 # None
        return_dict=False,
    )[0]


    # noise_pred_uncond:无条件的噪声预测,通常是在没有任何文本或条件输入时生成的噪声预测。
    # noise_pred_text:有条件的噪声预测,通常是在给定文本描述或其他条件时生成的噪声预测。
    # 通过 self.guidance_scale * (noise_pred_text - noise_pred_uncond),模型试图将噪声的有条件部分(noise_pred_text)与无条件部分(noise_pred_uncond)之间的差异放大。
    # 通过调整无条件噪声和有条件噪声之间的差异来放大条件对结果的影响,从而使生成的图像更符合指定的条件。
    if self.do_classifier_free_guidance:
        noise_pred_uncond, noise_pred_text = noise_pred.chunk(2)
        noise_pred = noise_pred_uncond + self.guidance_scale * (noise_pred_text - noise_pred_uncond)

    # 此时为调度器的计算过程,将unet预测的噪声noise_pred,当前步数time_step,以及需要降噪的latens输入调度器中,计算上一个时间节点的latens
    # self.scheduler.step方法的实现,如调度器为ddim,则该方法在scheduling_ddim.py文件中
    latents = self.scheduler.step(noise_pred, t, latents, **extra_step_kwargs, return_dict=False)[0] 

1.3 unet的预测噪声详解

noise_pred = self.unet(
    latent_model_input,
    t,
    encoder_hidden_states=prompt_embeds,
    timestep_cond=timestep_cond,                         # None
    cross_attention_kwargs=self.cross_attention_kwargs,  # None
    added_cond_kwargs=added_cond_kwargs,                 # None
    return_dict=False,
)[0]


#unet_2d_condition.py文件中self.unet的forward方法

# 将离散的时间步(例如,0 到 T 的整数)映射到一个连续的、高维的嵌入向量,是固定的,没有权重
# 它将时间步数映射到一个高维的嵌入空间,利用正弦和余弦函数的周期性特征帮助模型捕捉时间步的顺序关系。这种方法类似于 Transformer 中的位置编码,可以为时间步提供平滑的编码表示。
# timestep就是t,单个数值,类型为tensor,如:tensor(51, device='npu:0')
t_emb = self.get_time_embed(sample=sample, timestep=timestep)    # torch.Size([2, 320])

# 将时间的高维特征,先使用激活函数,然后通过线性层映射到更高的维度
# 即上图中ResNetBlock将Time Embeding通过SILU,Liner层,然后加到Latent Feature上
emb = self.time_embedding(t_emb, timestep_cond)

在CrossAttention中,Latent Feature充当Q,Prompt充当K,V,计算交叉注意力。

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

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

相关文章

有哪些工具可以快速压缩图片呢?分享三个简单好用的图片压缩工具

现在的图片经常会因为图片过大的问题,影响在网上的上传使用,一般在平台上传图片时需要比较小的图片。但是随着现在图片质量的提升,导致图片的文件也越来越大,想要缩小图片大小,可以选择使用压缩图片的方法来处理。下面…

Java集合 List——针对实习面试

目录 Java集合 ListJava List的三种主要实现是什么?它们各自的特点是什么?Java List和Array(数组)的区别?Java List和Set有什么区别?ArrayList和Vector有什么区别?什么是LinkedList?…

请求接口时跨域问题详细解决方案

浏览器中的报错: 跨域问题通常需要前端和后端协作解决。以下是一些常用的解决方法,分别从前端和后端的角度进行讲解: 一. 后端解决方案 设置 CORS 头部: 最常用和推荐的方法是后端服务器设置 Access-Control-Allow-Origin 响应头…

同三维T610UDP-4K60 4K60 DP或HDMI或手机信号采集卡

1路DP/HDMI/TYPE-C(手机/平板等)视频信号输入1路MIC1路LINE OUT,带1路HDMI环出,USB免驱,分辨率4K60,可采集3路信号中其中1路,按钮切换,可采集带TYPE-C接口的各品牌手机/平板/笔记本电脑等 同三维…

初级数据结构——顺序表

目录 前言一、定义与特点二、类型三、基本操作四、应用场景五、优缺点六、元素插入和删除动态图解插入删除 七、代码模板八、使用顺序表的经典例题1.求奇数的乘积代码题解 2.数值统计代码题解 九、总结结语 前言 顺序表示最基础的数据结构之一,它也是我们学习开始学…

arkUI:遍历数据数组动态渲染(forEach)

arkUI:遍历数据数组动态渲染(forEach) 1 主要内容说明2 相关内容2.1 ForEach 的基本语法2.2 简单遍历数组2.2 多维数组遍历2.4 使用唯一键2.5 源码1的相关说明2.5.1 源码1 (遍历数据数组动态渲染)2.5.2 源码1运行效果 …

新的恶意软件活动通过游戏应用程序瞄准 Windows 用户

一种新的恶意软件 Winos4.0 被积极用于网络攻击活动。FortiGuard实验室发现,这种先进的恶意框架是从臭名昭著的 Gh0strat 演变而来的,配备了模块化组件,可在受感染的设备上进行一系列恶意活动。 这些攻击已在游戏相关应用程序中发现&#xf…

Maven学习——创建Maven的Java和Web工程,并运行在Tomcat上

一、Maven介绍 Maven 是一款为 Java 项目管理构建、依赖管理的工具(软件),使用 Maven 可以自动化构建、测试、打包和发布项目,大大提高了开发效率和质量。 二、Maven安装步骤 1.下载后解压到没有空格、特殊字符和中文的目录中 2…

【刷题】优选算法

优选算法 双指针 202. 快乐数 链接:. - 力扣(LeetCode) 【思路】 第一个实例是快乐数,因为会变为1且不断是1的循环 第二个实例不可能为1,因为会陷入一个没有1的循环 根据两个实例和鸽巢原理可以发现不断的平方和最…

在unity中实现把普通的照片,图片 变成油画风格的shader实现

可以通过对shader的Radius的值得设置来改变油画风格的力度,0最小,10是最大。

【项目开发 | 跨域认证】JSON Web Token(JWT)

未经许可,不得转载。 文章目录 JWT设计背景:跨域认证JWT 原理JWT 结构JWT 使用方式注意JSON Web Token(缩写 JWT)是目前最流行的跨域认证解决方案,本文介绍它的原理、结构及用法。 JWT设计背景:跨域认证 互联网服务的用户认证流程是现代应用中的核心组成部分,通常的流程…

vue3中如何实现标准元素 拖动 功能 【收藏备用】

最近在用vue3做一个企业后台管理系统的项目,在登录页面的时候需要用户滑动滑块来获取验证码登录系统 用到了元素拖放 这里也顺便记录一下 如何使用的. 目录 1.功能介绍 2.代码部分 3 实现过程 3.1 设置可拖动元素 3.2 拖动什么 3.3 放到何处 3.4 进行放置 1.功能介绍…

Linux(CentOS)运行 jar 包

1、在本地终端运行,关闭终端,程序就会终止 java -jar tlias-0.0.1-SNAPSHOT.jar 发送请求,成功 关闭终端(程序也会终止) 发送请求,失败 2、在远程终端运行,关闭终端,程序就会终止 …

Local Dimming和Mini LED简介

文章目录 Local Dimming和Mini LED的介绍区别和联系联系区别总结 Local Dimming和Mini LED的介绍 电视显示技术中的Local Dimming和Mini LED都是用于提升画面质量的背光技术,主要目的是增强对比度和改善黑色表现。以下是对它们的详细介绍: Local Dimmin…

数据结构选择题及答案

一、选择题 1、下列查找方法中,( )适用于查找有序单链表。 A.分块查找; B.哈希查找; C.顺序查找; D.二分查找; 2、在有n个结点的二叉树的二叉链表表示中,空指针数为( )。 A&#xf…

npm完整发包流程(亲测可验证)

1. 准备工作 (1) 在npm官网上注册一个账号 (2) 注册成功之后,npm会发送一封邮件给你,点击邮件里面的链接,做确认关联操作(必需) 2. 创建自己的npm包 (…

3.2 软件需求:面对过程分析模型

面对过程分析模型 1. 需求分析的模型概述1.1 面对过程分析模型-结构化分析方法1.2 结构化分析的过程 2. 功能模型:数据流图初步2.1 加工2.2 外部实体(数据源点/终点)2.3 数据流2.4 数据存储2.5 注意事项 3. 功能模型:数据流图进阶…

【机器学习】机器学习中用到的高等数学知识-1.线性代数 (Linear Algebra)

向量(Vector)和矩阵(Matrix):用于表示数据集(Dataset)和特征(Feature)。矩阵运算:加法、乘法和逆矩阵(Inverse Matrix)等,用于计算模型参数。特征值(Eigenvalues)和特征向量(Eigenvectors)&…

向量数据库PGVECTOR安装

文章目录 前提向量数据库介绍PGVECTOR安装1、pgvector下载2、编译安装3、创建vector扩展 前提 已经安装好了pg14版本。 其他版本也可以。 pg安装教程:https://blog.csdn.net/yushaoyyds/article/details/138855306?spm1001.2014.3001.5502 向量数据库介绍 向量数…

头歌网络安全(11.12)

头歌禁止复制解决 必须先下篡改猴!!!! 头歌复制助手 Educoder Copy Helperhttps://scriptcat.org/zh-CN/script-show-page/1860 Java生成验证码 第1关:使用Servlet生成验证码 任务描述 本关任务:使用se…