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

Stable Diffusion教程——stable diffusion基础原理详解与安装秋叶整合包进行出图测试

前言

在2022年,人工智能创作内容(AIGC)成为了AI领域的热门话题之一。在ChatGPT问世之前,AI绘画以其独特的创意和便捷的创作工具迅速走红,引起了广泛关注。随着一系列以Stable Diffusion、Midjourney、NovelAI等为代表的文本生成图像的跨模态应用相继涌现与Stable Diffusion的开源,Stable Diffusion以其出色的人物和场景生成效果备受瞩目。它包括文本生成图像、图像生成图像、特定角色的刻画,甚至超分辨率和修复缺损图像等任务。

介绍

Stable Diffusion的应用范围广泛,这不仅因为它生成的图像逼真,还因为它能够以多种不同的方式使用。让我们首先关注文本生成图像的方式(text2img)。

在上述示例中,我们输入了文本描述(prompt),模型就能够生成出一幅精美的图像。例如,输入“天堂、广袤的、沙滩”,就得到了一幅美丽的画面。
在这里插入图片描述

除了文本到图像的转换,另一种主要的使用方式是通过文本来修改现有图像。在这种情况下,输入是文本和图像的组合。例如,将文本描述为“海盗船”,模型生成的图像就会包含海盗船。
在这里插入图片描述

Stable Diffusion组成模块

Stable Diffusion实际上是一个相当复杂的系统,其中包含各种不同的模型模块。首先需要解决的问题是如何将人类理解的文字转换为计算机可理解的数学语言,毕竟计算机无法理解自然语言。这就需要一个文本理解器(text understander)来帮助进行转换。在生成图像之前,下图中蓝色的文本理解器首先将文本转换成某种计算机能够理解的数学表示:
在这里插入图片描述

1.图片信息生成器

在这里插入图片描述

上图粉色的模块是Stable Diffusion与别的Diffusion模型最大的区别之一,也是SD性能提升的着急之一。首先,需要明确一点:图片信息生成器不直接生成图片,而是生成较低维度的图片信息,即所谓的隐空间信息(latent space information)。在下图中,这个隐空间信息被表示为粉色的 4x3 的方格,随后将这个隐空间信息输入到下图中黄色的解码器中,就可以成功生成图片了。Stable Diffusion主要引用的论文“latent diffusion”中的latent一词也来自于隐变量中的“latent”。

一般的Diffusion模型直接生成图片,而不会有先生成隐变量的过程,因此普通的Diffusion在这一步上需要生成更多的信息,负荷也更大。因此之前的Diffusion模型在速度和资源利用上都不如Stable Diffusion。技术上来说,这个图片隐变量是如何生成的呢?实际上,这是由一个Unet和一个Schedule算法共同完成的。Schedule算法控制生成的进度,而Unet则负责一步一步地执行生成的过程。在Stable Diffusion中,整个Unet的生成迭代过程大约需要重复 50~100 次,隐变量的质量也在这个迭代的过程中不断地改善。下图中粉色的Image Information Creator左下角的循环标志也象征着这个迭代的过程。

2、图片解码器

在这里插入图片描述
图片解码器,从图片信息生成器(Image Information Creator)中接收图片信息的隐变量,然后将其升维放大(upscale),还原成一张完整的图片。图片解码器只在最后的阶段起作用,也是我们能获得一张真实图片的最终过程。

现在让更具体地了解一下这个系统中输入输出的向量形状,这样对Stable Diffusion的工作原理应该能有更直观的认识:

  • 文本编码器(蓝色模块)功能:将人类语言转换成机器能理解的数学向量。输入:人类语言;输出:语义向量(77,768)。
  • 图片信息生成器(粉色模块)功能:结合语义向量,逐步去除噪声,生成图片信息的隐变量。输入:噪声隐变量(4,64,64)+语义向量(77,768);输出:去噪的隐变量(4,64,64)。
  • 图片解码器功能:将图片信息的隐变量转换为一张真正的图片。输入:去噪的隐变量(4,64,64);输出:一张真正的图片(3,512,512)。

大概流程中的向量形状变化就是这样。至于语义向量的形状为什么是奇怪的(77,768),会在后面讲到文本编码器里的CLIP模型时解释。

Stable Diffusion定义

Diffusion模型的名称翻译成中文就是扩散模型,扩散的过程发生在Image Information Creator模块中,首先,使用随机函数生成一个与隐变量大小相同的纯噪声(下图中左下角透明的4x4区域)。一旦有了初始的纯噪声(下图中左下角透明的4x4区域)和语义向量(下图中左上角蓝色的3x5区域),Unet就会结合语义向量,不断地去除纯噪声隐变量中的噪声。大约重复50~100次左右就完全去除了噪声,并且不断向隐变量中注入语义信息,这样我们就得到了一个带有语义的隐变量(下图中粉色的4x4区域)。同时,我们还有一个scheduler,用来控制Unet去噪的强度,统筹整个去噪的过程。Scheduler可以在去噪的不同阶段动态调整去噪强度,也可以在某些特殊任务中匀速去除噪声,这都取决于我们最初的设计。
在这里插入图片描述
这个过程是通过一系列迭代步骤来去除噪声的,每一步都向隐变量中注入语义信息,直到噪声被完全去除。为了更直观地理解,可以将初始的纯噪声(左上方的透明44图像)和最终的去噪隐变量(右上方的粉色44图像)都通过最终的图像解码器进行解码,观察生成的图片。如预期所示,初始的纯噪声本身并不包含有效信息,因此解码后的图片仍然是噪声。而经过去噪处理后的隐变量已经包含了语义信息,所以解码后的图片会呈现出包含有效语义信息的图像。
在这里插入图片描述
迭代过程是多次重复的过程。每一次迭代的输入是一个隐变量,经过处理后输出也是一个隐变量,但噪声减少了,同时蕴含更多的语义信息。在下图中,4*4的隐变量从透明变成粉色的过程,代表了迭代的过程。颜色越粉,代表迭代次数越多,噪声也就越少。
在这里插入图片描述
在这个阶段,使用图像解码器可以提前观察到每一步所对应的图片,这样就可以逐步观察到我们期望的图像是如何从噪声中逐步生成的。
在这里插入图片描述

测试

秋叶整合包是简化了Stable Diffusion的安装和使用过程,使得没有编程背景的用户也能轻松地进行AI绘画创作。并提供详细的教程、资源和技术支持。首先确保计算机装备了Nvidia的独立显卡(N卡),尤其是RTX40系列或更高级别的显卡,显存应达到6GB以上,可以提高AI绘画的效率。如果没有N卡,可以使用CPU进行图形计算,但速度较慢,性价比也较低。此外,需要CPU性能足够高,并且至少有16GB的内存。总的来说,进行AI绘画时,推荐使用N卡,特别是RTX30系列或更高级别的显卡,以提高效率和性能。

秋叶整合包的源文件只分享在夸克网盘上,我这里把它转存到百度网盘:https://pan.baidu.com/s/1C8QBbshpgpIxBOTwsMYjaQ 提取码: pth5 ,这里的版本是4.6。

1.查看自己的GPU

查看GPU与内存大小,6G显存是出图的最低配置:

在这里插入图片描述

2.启动项目

下载之后,安装启动所需依赖,安装过.NET6的可以跳过这一步,不懂的再安装一遍也没问题:
在这里插入图片描述
解压“sd-webui-aki-v4.zip”。选择一个最少有20G以上的磁盘,因为解压出来的文件加上模型会很大,然后进入解压后的文件夹 sd-webui-aki-v4 。双击“A启动器.exe”,它会自动下载一些最新的程序文件。可能还会弹出了“设置Windows支持长路径”,确定就可以了。启动成功后,会打开下边这个界面。如果啥都做完了,也没打开这个界面,就再次双击这个文件或者以管理员身份运行。
在这里插入图片描述
之后点击 “一键启动",然后会弹出一个控制台窗口,做一些初始化的操作,出现“Startup time …”的提示就代表启动成功了。
在这里插入图片描述

然后会自动在浏览器中打开SD WebUI的窗口。不小心关了的时候,也可以用 http://127.0.0.1:7860 再次打开。打开的界面如下图所示:
在这里插入图片描述

测试出图

要生成图像,只需以下五个简单步骤:

  1. 选择模型,可以使用默认的大型模型"anything-v5"。

  2. 添加VAE模型。

  3. 提供提示词:用英文描述你想要的图像内容。

  4. 设置反向提示词:用英文描述你不想要在图像中出现的内容。

  5. 点击生成按钮。

图像生成的速度取决于你的计算机性能,稍等片刻即可。完成后,你可以点击图像放大查看,并右键下载。

在这里插入图片描述

常用概念

  1. 模型(Model):模型可以理解为一个函数,接受一系列参数作为输入,并生成相应的输出。在这里,模型接收一些参数(如提示词、反向提示词、图片尺寸、提示词引导系数、随机数种子等),并返回生成的图像数据。

  2. 大模型(Big Model):大模型通常称为基础模型,其文件大小通常在2GB至5GB之间。这些模型经过大量数据的训练,具有数十亿、甚至上百亿个参数。SD官方发布了一个通用的大模型,但由于其通用性,不能满足所有需求。因此,许多组织或个人会训练特定领域的模型,并将其发布到社区供大家使用。

  3. VAE模型(Variational Autoencoder Model):VAE模型类似于图片编辑软件中的滤镜,可以增强图像的色彩和线条,使图像看起来更加丰富。一些大模型可能已经集成了VAE模型,但用户也可以选择添加一个额外的VAE模型。常用的VAE模型之一是编号为840000的模型,用于增强图像的色彩。

  4. Lora模型:Lora模型是基于大模型的风格模型,用于控制图像的风格和特征。例如,在绘制人物时,可以使用Lora模型控制服装和头饰的样式;在绘制机械四肢时,可以使用Lora模型强调机甲样式;在绘制风景时,可以使用Lora模型控制绘画风格。

  5. 提示词(Prompt):提示词用于描述期望生成的图像内容。例如,描述场景、人物或物体的特征。良好的提示词对于生成所需的图像至关重要。

  6. 反向提示词(Negative Prompt):反向提示词用于描述不希望在生成图像中出现的内容。例如,排除特定物体或场景。使用通用的反向提示词可以简化此过程。

  7. 随机数种子(Random Seed):随机数种子影响生成图像的随机性。即使其他参数相同,不同的随机数种子也会产生不同的图像。这使得每次生成的图像都具有一定的差异,增加了创作的多样性。

相关文章:

Stable Diffusion教程——stable diffusion基础原理详解与安装秋叶整合包进行出图测试

前言 在2022年,人工智能创作内容(AIGC)成为了AI领域的热门话题之一。在ChatGPT问世之前,AI绘画以其独特的创意和便捷的创作工具迅速走红,引起了广泛关注。随着一系列以Stable Diffusion、Midjourney、NovelAI等为代表…...

【JavaEE】_线程与多线程的创建

目录 1. 线程的概念 2. 创建与使用多线程 2.1 方式1:继承Thread类 2.2 方式2: 实现Runnable接口 2.3 以上两种创建线程方式的对比 3. 多线程的优势-增加运行速度 1. 线程的概念 进程的存在是由于系统的多任务执行需求,这也要求程序员进…...

【前端工程化面试题】如何优化提高 webpack 的构建速度

使用最新版本的 Webpack 和相关插件: 每个新版本的 Webpack 都会带来性能方面的改进和优化,因此始终确保你在使用最新版本。同时,更新你的相关插件也是同样重要的。 使用DllPlugin动态链接库: 使用DllPlugin和DllReferencePlugin来将第三方库的代码进行…...

免费chatgpt使用

基本功能如下: https://go.aigcplus.cc/auth/register?inviteCode3HCULH2UD...

OpenCV识别人脸案例实战

使用级联函数 基本流程 函数介绍 在OpenCV中,人脸检测使用的是cv2.CascadeClassifier.detectMultiScale()函数,它可以检测出图片中所有的人脸。该函数由分类器对象调用,其语法格式为: objects cv2.CascadeClassifier.detectMul…...

VOSK——离线语音库

文章目录 识别函数调用添加自定义热词表1. SetWords2. SetLatticeWords3. SetPartialWords使用示例注意1. SetMaxAlternatives2. SetNLSML3. SetSpkModel4. SetGrammar使用示例注意SetLogLevel示例用法注意事项 识别函数调用 在使用Vosk库进行语音识别时,PartialRe…...

ELAdmin 隐藏添加编辑按钮

使用场景 做了一个监控模块,数据都是定时生成的,所以不需要手动添加和编辑功能。 顶部不显示 可以使用 true 或者 false 控制现实隐藏 created() {this.crud.optShow {add: false,edit: false,del: true,download: true,reset: true}},如果没有 crea…...

浅谈Websocket

由于 http 存在⼀个明显的弊端(消息只能有客户端推送到服务器端,⽽服务器端不能主动推送到客户端),导致如果服务器如果有连续的变化,这时只能使⽤轮询,⽽轮询效率过低,并不适合。于是 WebSocket 被发明出来 WebSocket 是⼀种在 Web 应⽤程序中实现双向通信的协议。与传…...

JavaScript闭包详细介绍

文章目录 什么是闭包优点:变量持久化:封装私有变量:模块化:函数工厂: 缺点:内存占用:调试困难:过度使用导致性能下降: 什么是闭包 闭包是指有权访问另一个函数作用域中的…...

pytorch神经网络入门代码

import torch import torch.nn as nn import torch.optim as optim import torchvision import torchvision.transforms as transforms# 定义神经网络结构 class SimpleNN(nn.Module):def __init__(self, input_size, hidden_size, num_classes):super(SimpleNN, self).__init_…...

代码随想录算法训练营第三十四天|860.柠檬水找零 406.根据身高重建队列 452. 用最少数量的箭引爆气球

860.柠檬水找零 链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 细节: 1. 首先根据题意就是只有5.的成本,然后就开始找钱,找钱也是10.和5. 2. 直接根据10 和 5 进行变量定义,然后去循环…...

Ditto:提升剪贴板体验的宝藏软件(复制粘贴效率翻倍、文本处理好助手)

名人说:莫道桑榆晚,为霞尚满天。——刘禹锡(刘梦得,诗豪) 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、什么是Ditto?二、下载安装三、如…...

【自然语言处理-工具篇】spaCy<2>--模型的使用

前言 之前已经介绍了spaCy的安装,接下来我们要通过下载和加载模型去开始使用spaCy。 下载模型 经过训练的 spaCy 管道可以作为 Python 包安装。这意味着它们是应用程序的一个组件,就像任何其他模块一样。可以使用 spaCy download的命令安装模型,也可以通过将 pip 指向路径或…...

Java之通过Jsch库连接Linux实现文件传输

Java之通过JSch库连接Linux实现文件传输 文章目录 Java之通过JSch库连接Linux实现文件传输1. JSch2. Java通过Jsch连接Linux1. poxm.xml2. 工具类3. 调用案例 1. JSch 官网:JSch - Java Secure Channel (jcraft.com) JSch是SSH2的纯Java实现。 JSch 允许您连接到 ss…...

Nginx七层负载均衡之动静分离

思路: servera:负载均衡服务器 serverb:静态服务器 serverc:动态服务器 serverd:默认服务器 servera(192.168.233.132): # 安装 Nginx 服务器 yum install nginx -y#关闭防火墙和selinux systemctl stop firewalld setenforce 0# 切换到 Nginx 配置文…...

305_C++_定义了一个定时器池 TimerPool 类和相关的枚举类型和结构体

头文件:定义了一个定时器池 TimerPool 类和相关的枚举类型和结构体 #ifndef TIMERPOOL_H #define TIMERPOOL_H #include "rsglobal.h" #include "taskqueue.h" #incl...

大整数因数分解工具——yafu

一、安装 yafu--下载链接 二、配置环境变量,直接从cmd打开 1.找到yafu-x64.exe 所在的文件路径 2.点击设置——系统——系统信息——高级系统设置——环境变量——点击PATH(上下都可以)——新建 添加yafu-x64.exe 所在路径——点击确定 3…...

非关系型数据库(NOSQL)和关系型数据库(SQL)区别详解

前言: 在我们的日常开发中,关系型数据库和非关系型数据库的使用已经是一个成熟的软件产品开发过程中必不可却的存储数据的工具了。那么用了这么久的关系数据库和非关系型数据库你们都知道他们之间的区别了吗?下面我们来详细的介绍一下。 关系…...

7.Cloud-GateWay

0.概述 https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.1.RELEASE/reference/html/ 1.入门配置 1.1 POM <!--新增gateway--> <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-sta…...

【Linux】Framebuffer 应用

# 前置知识 LCD 操作原理 在 Linux 系统中通过 Framebuffer 驱动程序来控制 LCD。 Frame 是帧的意思&#xff0c; buffer 是缓冲的意思&#xff0c;这意味着 Framebuffer 就是一块内存&#xff0c;里面保存着一帧图像。 Framebuffer 中保存着一帧图像的每一个像素颜色值&…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接&#xff1a;3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

Kafka入门-生产者

生产者 生产者发送流程&#xff1a; 延迟时间为0ms时&#xff0c;也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于&#xff1a;异步发送不需要等待结果&#xff0c;同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险

C#入门系列【类的基本概念】&#xff1a;开启编程世界的奇妙冒险 嘿&#xff0c;各位编程小白探险家&#xff01;欢迎来到 C# 的奇幻大陆&#xff01;今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类&#xff01;别害怕&#xff0c;跟着我&#xff0c;保准让你轻松搞…...

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

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

免费数学几何作图web平台

光锐软件免费数学工具&#xff0c;maths,数学制图&#xff0c;数学作图&#xff0c;几何作图&#xff0c;几何&#xff0c;AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...

Unity UGUI Button事件流程

场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...