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

浅谈文生图Stable Diffusion(SD)相关模型基础

1.U-Net模型基础

1.基础概念

UNet模型是一种基于卷积神经网络的图像分割算法,它采用了U型的网络结构,由编码器(下采样路径)和解码器(上采样路径)两部分组成

  • 编码器负责提取输入图像的特征,
  • 解码器则通过上采样操作将特征图恢复到原始输入图像的尺寸,并逐步生成分割结果。

UNet的关键创新在于解码器中引入了跳跃连接(Skip Connections),将编码器中的特征图与解码器中对应的特征图进行连接。这种跳跃连接有助于解码器更好地利用不同层次的特征信息,从而提高图像分割的准确性和细节保留能力

2.Unet模型的基础结构

图一

Unet可以分为三个部分,如上图所示:

  • 第一部分是主干特征提取部分,我们可以利用主干部分获得一个又一个的特征层,Unet的主干特征提取部分与VGG相似,为卷积和最大池化的堆叠。利用主干特征提取部分我们可以获得五个初步有效特征层,在第二步中,我们会利用这五个有效特征层可以进行特征融合。
  • 第二部分是加强特征提取部分,我们可以利用主干部分获取到的五个初步有效特征层进行上采样,并且进行特征融合,获得一个最终的,融合了所有特征的有效特征层。
  • 第三部分是预测部分,我们会利用最终获得的最后一个有效特征层对每一个特征点进行分类,相当于对每一个像素点进行分类。

3.作用及意义

在Stable Diffusion中,U-Net模型是一个关键核心部分,能够预测噪声残差,并结合Sampling method(调度算法:DDPM、DDIM、DPM++等)对输入的特征矩阵进行重构,逐步将其从随机高斯噪声转化成图片的Latent Feature

具体来说,在前向推理过程中,SD模型通过反复调用 U-Net,将预测出的噪声残差从原噪声矩阵中去除,得到逐步去噪后的图像Latent Feature,再通过VAE的Decoder结构将Latent Feature重建成像素级图像

2.VAE模型基础

1.VAE概念

VAE(‌变分自编码器,Variational Auto Encoder)是一种深度学习模型,用于生成新的数据样本。‌ 它通过引入隐变量来描述复杂分布,从而生成新的数据点。VAE结合了编码器和解码器,编码器负责将输入数据压缩为低维的隐状态,而解码器则将隐状态恢复为原始数据的高品质复制。这种模型在‌图像生成、‌自然语言处理等领域有广泛应用。

VAE的核心思想在于利用变分推断来近似复杂的概率分布。它通过引入隐变量来描述数据生成的过程,这些隐变量对模型中可观察变量的输出有影响。通过训练编码器和解码器,VAE能够学习数据的概率分布,并生成新的数据点。具体来说,编码器将输入数据映射到低维隐空间,而解码器则将这个低维隐状态恢复为原始数据的高品质复制

在AI绘画领域,VAE技术被广泛应用于生成新的绘画作品。例如,触站AI是一个集成了VAE技术的在线绘画模型,用户可以通过简单的勾画几笔来生成真实的、艺术感十足的图像。这种技术不仅提高了绘画作品的生成效率,还释放了用户的创造力和艺术潜能。

2.核心作用

在Stable Diffusion中,VAE(变分自编码器,Variational Auto-Encoder)是基于Encoder-Decoder架构的生成模型。VAE的Encoder(编码器)结构能将输入图像转换为低维Latent特征,并作为U-Net的输入。VAE的Decoder(解码器)结构能将低维Latent特征重建还原成像素级图像。

1.核心作用一:

VAE通过encoder编码器将输入数据压缩至Latent隐空间中,作为Unet模型的输入,最后通过decoder解码器进行图像重建的作用;   

图二

如图二,有编码器和解码器组成,当我们输入一个尺寸为 H×W×C 的数据,VAE的Encoder模块会将其编码为一个大小为h×w×c的低维Latent特征,其中f=H/h=W/w为VAE的下采样率(Downsampling Factor)。反之,VAE的Decoder模块有一个相同的上采样率(Upsampling Factor)将低维Latent特征重建成像素级别的图像。

  • Q1:什么是隐空间(Latent space)/隐变量(hidden variables)?
  • 图三

隐变量:如上图三左半部分

假设:从a很难推导出b

但是从a能够推导出某个中间变量“c”,从“c”能够推导出b;

因此我们要从a推导出b,可以通过从a推导出中间变量“c”,然后再推导出b。这里的中间变量“c”就称为“隐变量”

有时遇到的原始数据建模很困难,此时可以将原始数据装换成另一种格式的数据----“隐变量”

隐空间(latent space):如上图右半部分

隐变量所在空间,这极大地降低了扩散模型的计算复杂度。

  • 而VAE模型在编码器之后得到一组维度小于原图维度的隐变量(一组对图片的压缩表示)

2.核心作用二:

不同版本的VAE模型,能够在生成的图片的细节与整体颜色上发生改变,通俗理解:滤镜+微调

图四

通过图四可以清晰看到VAE模型的第二个核心作用;

3.Diffusion Mode基础

1.Diffusion Mode的基础

扩散模型Diffusion Models一种新型的、先进的生成模型,用于生成与训练数据相似的数据,可以生成各种高分辨率图像。

它通过两个核心过程——前向扩散过程和反向去噪过程——来实现从噪声数据生成复杂样本。

图五

如图五:

  • 前向扩散:向原始数据逐步添加噪声的过程,直到数据变为纯噪声。

    虽然这个过程本身并不能直接生成图片,但它对于理解扩散模型的工作原理以及构建训练样本的目标(ground truth,简称GT)至关重要。

    逆扩散:前向扩散的逆操作,从纯噪声开始,逐步去除噪声以还原出原始数据。

    这个过程依赖于模型学习到的如何从噪声中恢复出原始数据的模式。模型通过神经网络学习逆扩散过程,从而能够生成与原始数据相似的样本。

这种模型之所以有效,是因为它能够通过学习去噪步骤,在重建过程中捕捉到数据的复杂结构和分布,尽管直观上加噪看似与生成清晰图像相悖。

扩散模型在图像生成、分类、以及如Stable Diffusion、DALL-E等以文生图应用中展现出了卓越性能,其成功在于其强大的特征学习能力、生成高质量样本的能力,以及在数据有限时的良好泛化性能。

2.为什么要加噪和去噪

提高模型鲁棒性:加入噪声可以使模型更具有鲁棒性,能够更好地处理现实世界中的变化和噪声。在训练过程中,模型需要学会从不完美的数据中提取有用的信息,并且对噪声更具有容忍性。

促进样本多样性:通过引入不同类型和强度的噪声,可以增加训练数据的多样性,从而帮助模型更好地泛化到未见过的数据。这有助于防止过拟合,并提高模型的性能。

解决模型偏差:在一些情况下,模型可能存在偏差,即对数据的错误偏好或错误假设。加入噪声可以帮助模型更好地克服这种偏差,从而提高模型的泛化能力和性能。

模拟真实场景:现实世界中的数据往往会受到各种噪声的影响,例如传感器误差、环境变化等。通过在训练数据中引入类似的噪声,可以使模型更好地模拟真实场景,并提高其在实际应用中的效果。

3.扩散模型的网络结构

图六

利用马尔可夫链来定义扩散步骤,通过每一步的状态转移来逐渐将数据“破坏”成纯噪声。然后,通过训练神经网络来逼近真实的反转扩散过程,扩散模型能够从纯噪声中逐步还原出原始数据。

目前有两种结构:

1.基于UNet的网络结构

图七

2.基于DiT的网络结构

图八

4.图像生成模型Stable Diffusion(SD)基础

1.图像生成模型的发展

图九

2.SD模型的结构

1.基于UNet的SD网络结构

图十

如上图:End-to-End模型,由VAE(左侧红色部分),基于Unet的diffusion mode(中间绿色部分)以及CLIP Text Encoder(右侧白色部分)三个核心组件构成

2.基于DiT的SD网络结构

图十一

DiT(Diffusion Transformer)模型由Meta在2022年首次提出,其主要是在ViT(Vision Transformer)的架构上进行了优化设计得到的。DiT是基于Transformer架构的扩散模型,将扩散模型中经典的U-Net架构完全替换成了Transformer架构

3.SD文生图工作流程

图十二

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

以上就是本次分享的关于文生图SD模型相关的模型知识,个人观点,希望有所帮助

相关文章:

浅谈文生图Stable Diffusion(SD)相关模型基础

1.U-Net模型基础 1.基础概念 UNet模型是一种基于卷积神经网络的图像分割算法,它采用了U型的网络结构,由编码器(下采样路径)和解码器(上采样路径)两部分组成。 编码器负责提取输入图像的特征,…...

Vivado使用VScode编译器

旧版Vivado使用Vscode编译器偶尔会出现VScode界面卡死的情况,在新版的Vivado中(我的是Vivado 2023.2),可以使用如下方式: 在设置中选择Text Editor,选择Custom Editor 在对话框中输入以下语句:…...

CEF127 编译指南 MacOS 篇 - 拉取 CEF 源码(五)

1. 引言 在完成了所有必要工具的安装和配置后,我们进入到获取 CEF 源码的阶段。对于 macOS 平台,CEF 的源码获取过程需要特别注意不同芯片架构(Intel 和 Apple Silicon)的区别以及版本管理。本文将详细介绍如何在 macOS 系统上获…...

Jenkins 中 写 shell 命令执行失败,检测失败问题

由于项目的 依赖复杂,随着版本的增多,人工操作,手误几率太大,我们选取kenins 来自动化发布、更新。 这里主要解决,发布 的 每个阶段,确保每个阶段执行成功。 比如: js 运行,…...

Java程序打包成exe,无Java环境也能运行

Java程序开发完成后,通常情况下以jar包的形式发布。但有时我们需要给非软件开发人员使用程序,如制作好窗体应用,把它发给没有java开发环境的人使用,此时就需要制作exe安装包。本文介绍如何将java程序制作成exe安装包,并…...

【java 正则表达式 笔记】

文章目录 快速入门匹配中文或数字或大小写字母(一个或多个) 正则表达式底层实现(重要)mather.find() 完成的任务mather.group(0) 分析 正则表达式基本语法元字符转义字符区分大小写限定字符选择匹配符特殊字符字符匹配符定位符 分组、捕获和反向引用捕获特别分组反向引用经典结…...

基于PWLCM混沌映射的麋鹿群优化算法(Elk herd optimizer,EHO)的多无人机协同路径规划,MATLAB代码

一、麋鹿群优化算法EHO 基本概念 麋鹿群优化算法(EHO,Elephant Herding Optimization)是2024年提出的一种启发式优化算法,它的灵感来自麋鹿群的繁殖过程。麋鹿有两个主要的繁殖季节:发情和产犊。在发情季节&#xff0…...

Vue2五、自定义指令,全局局部注册、指令的值 ,插槽--默认插槽,具名插槽 ( 作用域插槽)

一、自定义指令 使用步骤 1. 注册 (全局注册 或 局部注册) ,在 inserted 钩子函数中,配置指令dom逻辑 2. 标签上 v-指令名 使用 1、自定义指令(全局) Vue.directive("指令名",{ 指令的配置项 insert…...

Pika Labs技术浅析(五):商业智能技术

Pika Labs 的商业智能旨在通过联机分析处理(OLAP)和数据仓库(Data Warehouse)等技术,帮助企业用户高效地进行数据分析和决策支持。 一、商业智能技术模块概述 Pika Labs 的商业智能技术模块旨在通过集成数据仓库和联机…...

YOLO-World:Real-Time Open-Vocabulary Object Detection

目录 摘要 Abstract YOLO-World 1 模型架构 1.1 Text Encoder 1.2 YOLO Backbone 2 RepVL-PAN 2.1 T-CSPLayer 2.2 I-Pooling Attention 2.3 预测 3 消融实验 3.1 预训练数据 3.2 RepVL-PAN的消融实验 3.3 文本编码器 4 效果展示 4.1 零样本 4.2 根据词汇表检…...

Fastjson <= 1.2.47 反序列化漏洞复现

0x01 前言 Fastjson 是一个 Java 语言编写的高性能功能完善的 JSON 库&#xff0c;可以将 Java 对象转换为 JSON 格式&#xff0c;也可以将 JSON 字符串转换为 Java 对象&#xff0c;在中国和美国使用较为广泛。 0x02 漏洞成因 Fastjson < 1.2.68 版本在处理反序列化对象时…...

鸿蒙项目云捐助第二十一讲云捐助项目物联网IoT模拟器的使用

鸿蒙项目云捐助第二十一讲云捐助项目物联网IoT模拟器的使用 在前面的内容中&#xff0c;已经实现了云捐助物联网IoT的产品及设备设置&#xff0c;并且使用华为云Iot设备的在线调试工具进行命令下发的调试&#xff0c;这里也可以通过华为Iot物联网提供的MQTT模拟器进行连接。 …...

大数据技术原理与应用期末复习-知识点(二)

HBASE Hbase与传统关系数据库的对比分析 1.数据类型&#xff1a; 关系型数据库采用关系模型 Hbase采用更简单的数据模型&#xff08;把数据存储为未经解释的字符串&#xff09; 2.数据操作&#xff1a; 关系数据库&#xff1a;增删改查等 Hbase&#xff1a;插入 查询 删…...

高效准确的PDF解析工具,赋能企业非结构化数据治理

目录 准确性高&#xff1a;还原复杂版面元素 使用便捷&#xff1a;灵活适配场景 贴心服务&#xff1a;快速响应机制 在数据为王的时代浪潮中&#xff0c;企业数据治理已成为组织优化运营、提高竞争力的关键。随着数字化进程的加速&#xff0c;企业所积累的数据量呈爆炸式增长…...

C/C++ 数据结构与算法【栈和队列】 栈+队列详细解析【日常学习,考研必备】带图+详细代码

一、介绍 栈和队列是限定插入和删除只能在表的“端点”进行的线性表&#xff0c;是线性表的子集&#xff0c;是插入和删除位置受限的线性表。 &#xff08;操作受限的线性表&#xff09; 二、栈 1&#xff09;概念&#xff1a; 栈(stack)是一个特殊的线性表&#xff0c;是限…...

读书笔记~管理修炼-缄默效应

缄默效应&#xff1a;学会正确批评下属 员工明明犯了错误&#xff0c;却不及时告知你&#xff0c;总是拖到最后一刻无法弥补时才不得不承认出了问题——你遇到过这样的问题吗&#xff1f; 这其实是缄默效应在发挥作用。 在职场中&#xff0c;即使再扁平化的环境&…...

视频会议系统会前预约模块必须包含哪些功能?

视频会议系统会前预约模块必须包含哪些功能&#xff1f; 视频会议系统的会前预约模块是企业高效管理会议资源、提升会议效率的重要工具。一个完善的会前预约模块必须包含一系列功能&#xff0c;以确保会议的顺利进行和资源的合理分配。以下是对视频会议系统会前预约模块必须包…...

RabbitMQ中的Topic模式

在现代分布式系统中&#xff0c;消息队列&#xff08;Message Queue&#xff09;是实现异步通信、解耦系统组件的重要工具。RabbitMQ 是一个广泛使用的开源消息代理&#xff0c;支持多种消息传递模式&#xff0c;其中 Topic 模式 是一种灵活且强大的模式&#xff0c;允许生产者…...

tslib(触摸屏输入设备的轻量级库)的学习、编译及测试记录

目录 tslib的简介tslib的源码和make及make install后得到的文件下载tslib的主要功能tslib的工作原理tslib的核心组成部分tslib的框架和核心函数分析tslib的框架tslib的核心函数ts_setup()的分析(对如何获取设备名和数据处理流程的分析)函数ts_setup()自身的主要代码ts_setup()对…...

Ubuntu vi(vim)编辑器配置一键补全main函数

1.打开对应的配置文件 vi ~/.vim/snippets/c.snippets 2.按G将光标定位到文件末尾 3.按i进入插入模式 以tab键开头插入下的内容&#xff0c;空行也要加 tab键 4.:wq保存退出 5.再打开任意一个新的 .c文件后&#xff0c;插入模式输入 main 然后按tal键就能补全了...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

Python如何给视频添加音频和字幕

在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中&#xff0c;车辆不再仅仅是传统的交通工具&#xff0c;而是逐步演变为高度智能的移动终端。这一转变的核心支撑&#xff0c;来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒&#xff08;T-Box&#xff09;方案&#xff1a;NXP S32K146 与…...

【C++进阶篇】智能指针

C内存管理终极指南&#xff1a;智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...

并发编程 - go版

1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程&#xff0c;系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...

【安全篇】金刚不坏之身:整合 Spring Security + JWT 实现无状态认证与授权

摘要 本文是《Spring Boot 实战派》系列的第四篇。我们将直面所有 Web 应用都无法回避的核心问题&#xff1a;安全。文章将详细阐述认证&#xff08;Authentication) 与授权&#xff08;Authorization的核心概念&#xff0c;对比传统 Session-Cookie 与现代 JWT&#xff08;JS…...

图解JavaScript原型:原型链及其分析 | JavaScript图解

​​ 忽略该图的细节&#xff08;如内存地址值没有用二进制&#xff09; 以下是对该图进一步的理解和总结 1. JS 对象概念的辨析 对象是什么&#xff1a;保存在堆中一块区域&#xff0c;同时在栈中有一块区域保存其在堆中的地址&#xff08;也就是我们通常说的该变量指向谁&…...

Windows电脑能装鸿蒙吗_Windows电脑体验鸿蒙电脑操作系统教程

鸿蒙电脑版操作系统来了&#xff0c;很多小伙伴想体验鸿蒙电脑版操作系统&#xff0c;可惜&#xff0c;鸿蒙系统并不支持你正在使用的传统的电脑来安装。不过可以通过可以使用华为官方提供的虚拟机&#xff0c;来体验大家心心念念的鸿蒙系统啦&#xff01;注意&#xff1a;虚拟…...