stable diffusion中的u net

news2024/11/17 17:41:19

Stable Diffusion 包含几个核心的组件:

  • 一个文本编码器(在 Stable Diffusion 中使用 CLIP 的 ViT-L/14 的文本编码器),用于将用户输入的 Prompt 文本转化成 text embedding
  • 一个 Image Auto Encoder-Decoder,用于将 Image 编码成隐含向量  ,或者从隐含向量 中还原出图片;
  • 一个 UNET 结构,使用 UNET 进行迭代降噪,在文本引导下进行多轮预测,将随机高斯噪声  转化成图片隐含向量 

 

这三个部分是相互独立的,其中最重要的是 UNET 结构。UNET 是从噪音中生成图像的主要组件,在预测过程中,通过反复调用 UNET,将 UNET 预测输出的 noise slice原有的噪声中去除,得到逐步去噪后的图像表示。Stable Diffusion Model 的 UNET 包含约 860M 的参数,以 float32 的精度编码大概需要 3.4G 的存储空间。整个 UNET 的如下图所示:

Stable Diffusion Unet 结构

图中列出了 UNET 的核心组件和各组件的参数数量。其中主要的组件包括:

ResnetBlock

左下角小图展示了 ResnetBlock 的结构。Resnet 接受两个输入:latent 向量,和 timestep_embedding。latent 向量经过卷积变换后和经过全连接投影的 timestep_embedding 做加和,再和经过 skip connection 的原始 latent 向量做加和,送入另一个卷积层,得到经 Resnet 编码变换后的 latent 输出。

注意左侧的 ResnetBlock 和右侧的 ResnetBlock 的细微不同。左侧的 Resnet Block 接受的 latent 向量从 UNET 的上一层传入,而右侧的 ResnetBlock 除了接受 UNET 上一层的结果 latent 外,还需要接受左侧对应的 UNET 层的输出,两个 latent concat 起来作为 输入。所以,如果右侧的 ResnetBlock 上层的输出结果 shape 为 (64, 64, 320),左侧对应 UNET 层的输出结果为 (64, 64, 640),那么这个 ResnetBlock 得到的输入 latent 的 shape 为 (64, 64, 960)。

Spatial Transformer(Cross Attention)

右下角小图展示了 Spatial Transformer 的结构。Spatial Transformer 同样接受两个输入:经过上一个网络模块(一般为 ResnetBlock)处理和变换后的 latent 向量,及对应的 context embedding(文本 prompt 经过 CLIP 编码后的输出)。latent 向量对应的是是图片 token,和 context embedding 做 cross attention 之后,得到变换后的 latent 向量(通过注意力机制,将 token 对应的语义信息注入到模型认为应该影响的图片 patch 中)。 Spatial Transformer 输出的 shape 和输出的 shape 保持一致,但在对应的位置上融合了语义信息。

DownSample/UpSample

DownSample 将 latent 向量的前两个轴的大小缩减 50%,而 UpSample 将 latent 向量的前两个轴的大小增大一倍。DownSample 使用一个步长为 2 的二维卷积来实现,同时将输入 latent 向量的 channel 数变化成输出 latent 向量的 channel 数;而 UpSample 使用插值算法来实现,在插值之后进行一个步长为 1 的卷积,同时通过一个步长为 1 的二维卷积来将输入 latent 向量的 channel 数变化成输出 latent 向量的 channel 数。

需要注意的是,在整个 UNET 执行一次的过程中,timestep_embedding 和 content embedding 始终保持不变。而在 UNET 反复执行多次的过程中,timestep_embedding 每次都会发生变化,而 content embedding 始终保持不变。在迭代过程中,每次 UNET 输出的 noise_slice 都原有的 latent 向量相减,作为下次迭代时,UNET 的 Latent 输入。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大模型核心技术原理: Transformer架构详解

在大模型发展历程中,有两个比较重要点:第一,Transformer 架构。它是模型的底座,但 Transformer 不等于大模型,但大模型的架构可以基于 Transformer;第二,GPT。严格意义上讲,GPT 可能…

【学习笔记】Python核心技术与实战-基础篇-03列表和元组,到底用哪个?

目录 列表和元组基础概念区别列表和元组的基础操作和注意事项列表和元组存储方式的差异列表和元组的性能列表和元组的使用场景总结思考题 列表和元组基础 概念 列表和元组,都是一个可以放置任意数据类型的有序集合。 在绝大多数编程语言中,集合的数据类…

C++算法:排序之二(归并、希尔、选择排序)

C算法:排序 排序之一(插入、冒泡、快速排序) 排序之二(归并、希尔、选择排序) 文章目录 C算法:排序二、比较排序算法实现4、归并排序5、希尔排序5、选择排序 原创文章,未经许可,严禁…

从vue2到vue3的生命周期

1.vue2 在vue2.x中的生命周期为 beforeCreate created beforeMount mounted beforeUpdate updated beforeDestroy destroyed activated deactivated errorCaptured 在vue3中,新增了一个setup生命周期函数,setup执行的时机是在beforeCreate生命函数之前…

count(0)、count(1)和count(*)、count(列名) 的区别

当我们对一张数据表中的记录进行统计的时候,习惯都会使用 count 函数来统计,但是 count 函数传入的参数有很多种,比如 count(1)、count(*)、count(字段) 等。 到底哪种效率是最好的呢?是不是 count(*) 效率最差? 一.…

【Mysql数据库从0到1】-入门基础篇--sql语句简单使用

【Mysql数据库从0到1】-入门基础篇--sql语句简单使用 🔻一、数据库创建、删除、选择1.1 🍃 create database 创建数据库1.2 🍃 使用 mysqladmin 创建数据库1.3 🍃 drop 命令删除数据库--一般不建议在数据库执行delete、drop等命令…

公司招人面试了一个00后,绝对能称为是内卷届的天花板

公司前段缺人,也面了不少测试,结果竟然没有一个合适的。一开始瞄准的就是中级的水准,也没指望来大牛,提供的薪资也不低,面试的人很多,但平均水平很让人失望。令我印象最深的是一个00后测试员,他…

【商品页面详情页+商品评论】API接口技术交流,封装接口

商品详情API接口数据:提供了商品的基本信息,包括商品名称、描述、规格、价格、销量、库存等信息。此外,也可以通过提供的API接口来获取商品的图片、评价、物流信息等详细数据。 商品评论接口是消费者对商品所进行的客观评价 电商API的应用价…

使用geoserver发布shp和tiff数据

一、安装并启动geoserver服务 1.1 下载geoserver 进入官网下载 由于geoserver是使用Java语言开发的,所以运行需要java的环境,不同geoserver的版本号对java的版本要求不同,所以选择版本时需注意对应java的版本要求,由于我本地安…

Nginx配置域名证书

Nginx配置域名证书 1、证书存放路径 2、nginx.conf文件中增加以下配置,注意路径不一样,访问地址目录不一样 server {listen 443 ssl http2;server_name jistest.vwatj.ap.vwg;ssl_certificate D:/home/XXX/ssl/2023/XXX.cer; ssl_certificate_key D…

Spring Validation 接口入参校验

一、前言 JSR 是 Java Specification Requests 的缩写,含义为 JAVA 规范提案。 JSR 303 - Bean Validation 规范, 正是一套基于 JavaBean 参数校验的标准。 Hibernate Validator 是 JSR 303 的实现,它提供了 JSR 303 规范中所有约束(constrai…

泪崩!测试面试技术面过了却挂在了——“谈谈你的职业生涯规划”

前不久,软件测试交流群里面有一个成员吐槽,说今天的面试技术已经面过了,可HR却问了她“未来的职业发展目标是什么?”然后,挂了!这个问题我们平时在交流群里都有讲过,可是这丫头比较疯&#xff0…

级差制系统开发模式是怎么赚钱的?

级差制是直销所有模式中最受欢迎的模式之一,很多企业商家都会在级差制和双轨制中二选一,可见这个模式的优秀程度。下面就来简单分析一下,在级差制模式中是怎么赚钱的? 级差制最大的特点就是以卖货为主,它所有的奖金设置…

正规理财app软件有哪些?top5资质正规理财app软件最新排名

正规理财app软件有哪些?随着移动端理财的普及,越来越多的人开始使用理财app软件进行投资和资产管理。但是,市场上有很多理财软件,如何选择一款正规、安全的软件是关键。下面就为大家介绍一些选择理财app软件的建议。首先&#xff…

GDT陶瓷气体放电管串电容的5点作用

串电容,是指串联衔接于线路中,其主要目的是用来补偿电力线路感抗的电容器,电容器也是目前电力设备中必不可少的一环,其种类很多。下面优恩将为大家介绍一下GDT陶瓷气体放电管串电容的作用。 据小编了解,GDT陶瓷气体放电…

Bellhop 海底地形起伏条件下的传播特性

文章目录 前言一、预备内容二、水平海底波导(水平海底)1、海底水平的深海波导中的声线①、环境文件②、Matlab 命令③、执行结果 2、海底水平的深海波导中的本征声线①、环境文件②、Matlab 命令③、执行结果 3、海底水平的深海波导中的相干传播损失①、…

TDEngine3.0 环境安装、配置及使用经验总结

TDEngine3.0 环境安装、配置及使用经验总结 一、TDengine 介绍二、TDengine的下载三、TDengine Server安装及配置3.1 安装3.2 taos的参数配置3.3 启动3.4 taosAdapter 四、TDengine Client 安装4.1 linux客户端安装4.2 windows客户端安装 五、TDEngine3.x的使用总结 一、TDengi…

minhook探究

参考:https://github.com/TsudaKageyu/minhook minhook是windows平台上支持x86/x64的hook库,git上的自我介绍说是“mininalistic",其简约并不简单。在接口的设计,hook的兼容性等方面,还是值得我们初学者解决的。熟悉inline …

Hadoop之HDFS概述

Hadoop概述之HDFS HDFS架构概述优缺点HDFS架构HDFS文件块大小HDFS的shell命令HDFS读写流程写数据流程 HDFS读数据流程NameNode 和 SecondaryNameNode工作机制DataNode工作机制DataNode数据完整性如何保证 端口名称Hadoop2.xHadoop3.xNameNode内部通信端口8020/9000NameNode HTT…

两天搞定计算机专业毕业设计,附源码

两天搞定计算机专业毕业设计,附源码 适用者毕设专业 使用要求具备基本Unity 基本操作小白即可,无需编码 博主诉求快乐毕业 点赞 关注 收藏 资源说明Free资源太多了,看截图目录就知道了 适用者 毕设专业 鄙人也是计算机狗一只,会…