stable diffusion简介和原理
Stable Diffusion中文的意思是稳定扩散,本质上是基于AI的图像扩散生成模型。
Stable Diffusion是一个引人注目的深度学习模型,它使用潜在扩散过程来生成图像,允许模型在生成图像时考虑到文本的描述。这个模型的出现引起了广泛的关注和讨论,不仅因为它在技术上的创新,还因为它在应用领域的广泛适用性。本文将详细介绍Stable Diffusion的背景、技术原理、应用场景以及其优缺点。
stable-diffusion
一、背景介绍
随着深度学习技术的不断发展,文本到图像生成已经成为了研究的热点领域。过去几年中,出现了许多文本到图像的生成模型,如GANs、VQ-VAE等。这些模型在生成图像时,通常需要使用大量的数据和计算资源,并且生成的图像质量也参差不齐。因此,开发一种更加稳定、高效且能够生成高质量图像的文本到图像生成模型成为了当务之急。
在这个背景下,Stable Diffusion应运而生。该模型由CompVis、Stability AI和LAION的研究人员和工程师共同开发,于2022年发布。与其他文本到图像生成模型相比,Stable Diffusion具有更高的稳定性和生成质量,同时使用了一种创新的潜在扩散过程来生成图像。
图1 stable diffusion绘画例子
二、技术原理
Stable Diffusion 技术,作为 Diffusion 改进版本,通过引入隐向量空间来解决 Diffusion 速度瓶颈,除了可专门用于文生图任务,还可以用于图生图、特定角色刻画,甚至是超分或者上色任务。作为一篇基础原理介绍,这里着重解析最常用的“文生图(text to image)”为主线,介绍 stable diffusion 计算思路以及分析各个重要的组成模块。
下图是一个基本的文生图流程,把中间的 Stable Diffusion 结构看成一个黑盒,那黑盒输入是一个文本串“paradise(天堂)、cosmic(广阔的)、beach(海滩)”,利用这项技术,输出了最右边符合输入要求的生成图片,图中产生了蓝天白云和一望无际的广阔海滩。
图2 Stable Diffusion组成
Stable Diffusion 的核心思想是,由于每张图片满足一定规律分布,利用文本中包含的这些分布信息作为指导,把一张纯噪声的图片逐步去噪,生成一张跟文本信息匹配的图片。它其实是一个比较组合的系统,里面包含了多个模型子模块,接下来把黑盒进行一步步拆解。stable diffusion 最直接的问题是,如何把人类输入的文字串转换成机器能理解的数字信息。这里就用到了文本编码器 text encoder(蓝色模块),可以把文字转换成计算机能理解的某种数学表示,它的输入是文字串,输出是一系列具有输入文字信息的语义向量。有了这个语义向量,就可以作为后续图片生成器 image generator(粉黄组合框)的一个控制输入,这也是 stable diffusion 技术的核心模块。图片生成器,可以分成两个子模块(粉色模块+黄色模块)来介绍。下面介绍下 stable diffusion 运行时用的主要模块:
(1) 文本编码器(蓝色模块),功能是把文字转换成计算机能理解的某种数学表示,在第三部分会介绍文本编码器是怎么训练和如何理解文字,暂时只需要了解文本编码器用的是 CLIP 模型,它的输入是文字串,输出是一系列包含文字信息的语义向量。
(2) 图片信息生成器(粉色模块),是 stable diffusion 和 diffusion 模型的区别所在,也是性能提升的关键,有两点区别:
② Diffusion 模型一般都是直接生成图片,不会有中间生成低维向量的过程,需要更大计算量,在计算速度和资源利用上都比不过 stable diffusion;
那低维空间向量是如何生成的?是在图片信息生成器里由一个 Unet 网络和一个采样器算法共同完成,在 Unet 网络中一步步执行生成过程,采样器算法控制图片生成速度,下面会在第三部分详细介绍这两个模块。Stable Diffusion 采样推理时,生成迭代大约要重复 30~50 次,低维空间变量在迭代过程中从纯噪声不断变成包含丰富语义信息的向量,图片信息生成器里的循环标志也代表着多次迭代过程。
(3) 图片解码器(黄色模块),输入为图片信息生成器的低维空间向量(粉色 4*4 方格),通过升维放大可得到一张完整图片。由于输入到图片信息生成器时做了降维,因此需要增加升维模块。这个模块只在最后阶段进行一次推理,也是获得一张生成图片的最终步骤。
那扩散过程发生了什么?
扩散过程发生在图片信息生成器中,把初始纯噪声隐变量输入到 Unet 网络后结合语义控制向量,重复 30~50 次来不断去除纯噪声隐变量中的噪声,并持续向隐向量中注入语义信息,就可以得到一个具有丰富语义信息的隐空间向量(右下图深粉方格)。采样器负责统筹整个去噪过程,按照设计模式在去噪不同阶段中动态调整 Unet 去噪强度。
更直观看一下,如图 3 所示,通过把初始纯噪声向量和最终去噪后的隐向量都输到后面的图片解码器,观察输出图片区别。从下图可以看出,纯噪声向量由于本身没有任何有效信息,解码出来的图片也是纯噪声;而迭代 50 次去噪后的隐向量已经耦合了语义信息,解码出来也是一张包含语义信息的有效图片。
图3 可视化输出图片变化
到这里,我们大致介绍了 Stable Diffusion 是什么以及各个模块思路,并且简单介绍了 stable diffusion 的扩散过程。第三部分我们继续分析各个重要组成模块的运行机制,更深入理解 Stable Diffusion 工作原理。
github开源地址
三、应用场景
Stable Diffusion具有广泛的应用场景。首先,它可以应用于文本生成图像领域。通过输入一段文字描述,Stable Diffusion可以生成一张符合描述的清晰图像。这种应用场景非常适合于创意设计、艺术创作等领域。例如,设计师可以通过文字描述来设计一张海报或者服装图案,然后使用Stable Diffusion来生成符合描述的图像。
其次,Stable Diffusion还可以应用于图像修复、超分辨率重建等领域。在这些领域中,Stable Diffusion可以通过对图像进行编码和解码来修复图像中的缺陷或者提高图像的分辨率。这种应用场景非常适合于数字图像处理、计算机视觉等领域。
此外,Stable Diffusion还可以应用于视频制作、游戏设计等领域。在这些领域中,可以使用Stable Diffusion来生成视频中的动态图像或者游戏中的场景和角色。这种应用场景非常适合于影视制作和游戏开发等领域。
github开源地址 https://github.com/CompVis/stable-diffusion
stable-diffusion-ui
由于Stable Diffusion只是针对开发者的程序,需要通过接口或者命令程序去使用生成图片,对普通人非常不友好,所有一款面向普通人UIweb应用出现了,它就是开源项目stable-diffusion-ui。
Stable Diffusion Web UI是一个基于Stable Diffusion模型的应用程序接口,它利用gradio模块搭建出交互程序,可以在低代码GUI中立即访问Stable Diffusion。Stable Diffusion是一个画像生成AI,能够模拟和重建几乎任何可以以视觉形式想象的概念,而无需文本提示输入之外的任何指导。
Stable Diffusion Web UI提供了多种功能,如txt2img、img2img、inpaint等,还包含了许多模型融合改进、图片质量修复等附加升级。用户可以通过调节不同参数生成不同效果,根据自己的需要和喜好进行创作。在界面Extras(更多)中,用户可以找到优化(清晰、扩展)图像的功能;在Settings中,用户可以修改默认参数。
Stable Diffusion web UI GitHub 地址:https://github.com/AUTOMATIC1111/stable-diffusion-webui
Midjourney和Stable Diffusion
作为目前市场两个主流的AI绘画工具,简单介绍一下他们的共同点和不同点,还有各自的优缺点。
共同点和不同点
Midjourney和Stable Diffusion都是AI绘画工具,它们有一些共同点,但也有很多不同之处。
共同点:
- 都是基于AI技术的绘画工具。
- 都可以通过输入文字或文本提示来生成图像。
- 都可以用于创作各种类型的艺术作品,包括插画、漫画、摄影、设计等。
不同点:
- 生成图像的算法不同:Midjourney主要使用的是扩散模型(diffusion model),而Stable Diffusion则基于Latent Diffusion Model(LDM)。
- 使用的技术栈不同:Midjourney使用了DALL·E模型,而Stable Diffusion则使用了CLIP ViT-L/14文本编码器。
- 输出图像的质量不同:Midjourney的输出图像质量相对较高,而Stable Diffusion的输出图像质量相对较低。
- 使用难度不同:Midjourney的使用难度相对较高,需要一定的学习和实践才能掌握,而Stable Diffusion则相对较容易上手。
- 功能不同:Midjourney具有更多的功能和插件,可以用于创作各种类型的艺术作品,而Stable Diffusion则主要专注于图像生成。
- 总的来说,Midjourney和Stable Diffusion都是非常优秀的AI绘画工具,它们各有所长,可以根据自己的需求选择合适的工具进行创作。
优缺点
Midjourney的优点:
- 输出图像质量高
- 功能丰富:Midjourney具有较多的功能和插件,可以用于创作各种类型的艺术作品,例如插画、漫画、摄影、设计等。
- 支持多种输入方式:Midjourney支持输入文字、图像、视频等多种形式的输入,方便用户进行创作。
Midjourney的缺点:
- 使用难度较高
- 需要科学上网
- 需要付费
Stable Diffusion的优点:
- 稳定性好
- 细节表现好
- 对硬件要求较低:Stable Diffusion对硬件的要求较低,可以在普通的PC上运行。
- 免费本地使用
Stable Diffusion的缺点:
- 输出图像质量不稳定:Stable Diffusion的输出图像质量有时会不稳定,需要一定的实践和调整才能得到满意的图像。
- 功能相对较少:Stable Diffusion的功能相对较少,主要专注于图像生成,不如Midjourney那样具有较多的功能和插件。
总的来说,Midjourney和Stable Diffusion都是非常优秀的AI绘画工具,它们各有所长,可以根据自己的需求选择合适的工具进行创作。
Midjourney具有较高的输出图像质量和丰富的功能,但使用难度较高且对硬件要求较高;而Stable Diffusion具有较好的稳定性和细节表现力,但对训练数据要求较高且功能相对较少。
总结
Stable Diffusion是一个引人注目的文本到图像生成模型,具有广泛的应用前景和潜在的发展空间。该模型使用潜在扩散过程来生成图像,具有很高的生成质量和稳定性。它可以应用于文本生成图像、图像修复、超分辨率重建等多个领域,并且具有开源的预训练模型方便用户使用。然而,由于潜在扩散过程的复杂性以及数据和计算资源的限制,Stable Diffusion仍然存在一些挑战和问题需要进一步研究和解决。
后续会讲解Stable Diffusion web UI的安装和使用,教你如何使用Stable Diffusion制作出,你想要它制作的图片!
相关文章:

stable diffusion简介和原理
Stable Diffusion中文的意思是稳定扩散,本质上是基于AI的图像扩散生成模型。 Stable Diffusion是一个引人注目的深度学习模型,它使用潜在扩散过程来生成图像,允许模型在生成图像时考虑到文本的描述。这个模型的出现引起了广泛的关注和讨论&am…...

【机器学习】模型平移不变性/等变性归纳偏置Attention机制
Alphafold2具有旋转不变性吗——从图像识别到蛋白结构预测的旋转对称性实现 通过Alphafold2如何预测蛋白质结构,看有哪些机制或tricks可以利用? 一、等变Transformer 等变Transformer是Transformer众多变体的其中一种,其强调等变性。不变性…...

c++的4中类型转换操作符(static_cast,reinterpret_cast,dynamic_cast,const_cast),RTTI
目录 引入 介绍 static_cast 介绍 使用 reinterpret_cast 介绍 使用 const_cast 介绍 使用 dynamic_cast 介绍 使用 RTTI(运行时确定类型) 介绍 typeid运算符 dynamic_cast运算符 type_info类 引入 原本在c中,我们就已经接触到了很多类型转换 -- 隐式类型转…...

CNN实现与训练--------------以cifar10数据集为例进行演示(基于Tensorflow)
本文以cifar10数据集为例进行演示 (cifar10数据集有5万张3232像素点的彩色图片,用于训练有1万张3232像素点的彩色图片,用于测试) import tensorflow as tf import os import numpy as np from matplotlib import pyplot as plt from tensorflow.keras.layers import Conv2…...

YOLOv5算法改进(21)— 添加CA注意力机制 + 更换Neck网络之BiFPN + 更换损失函数之EIoU
前言:Hello大家好,我是小哥谈。通过上节课的学习,相信同学们一定了解了组合改进的核心。本节课开始,就让我们结合论文来对YOLOv5进行组合改进(添加CA注意力机制+更换Neck网络之BiFPN+更换损失函数之EIoU),希望同学们学完本节课可以有所启迪,并且后期可以自行进行YOLOv5…...

面对6G时代 适合通信专业的 毕业设计题目
对于通信专业的本科生来说,选择一个与学习内容紧密相关的毕业设计题目十分重要。 以下是东枫科技建议的题目,它们涵盖了通信技术的不同方面: 高校老师可以申请东枫科技工程师共同对学生指导,完成毕业设计。 基于5G/6G的通信技术…...

使用Python实现一个简单的斗地主发牌
使用Python实现一个简单的斗地主发牌 1.源代码实现2.实现效果 1.源代码实现 import random# 定义扑克牌的花色和大小 suits [♠, ♥, ♣, ♦] ranks [2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q, K, A]# 初始化一副扑克牌 deck [suit rank for suit in suits for rank in ranks]# …...

Linux系统之file命令的基本使用
Linux系统之file命令的基本使用 一、file命令介绍1.1 Linux简介1.2 file命令简介 二、file命令的使用帮助2.1 file命令的help帮助信息2.2 file命令的语法解释2.3 file命令的man手册 三、文件类型介绍四、file命令的基本使用4.1 查询file版本4.2 显示文件类型4.3 输出时不显示文…...

【智能大数据分析】实验1 MapReduce实验:单词计数
【智能大数据分析】实验1 MapReduce实验:单词计数 文章目录 【智能大数据分析】实验1 MapReduce实验:单词计数一、实验目的二、实验要求三、实验原理1 MapReduce编程2 Java API解析 四、实验步骤1 启动Hadoop2 验证HDFS上没有wordcount的文件夹3 上传数据…...

KV STUDIO的安装与实践(一)
目录 什么是KV STUDIO? 如何安装KV STUDIO? 如何学习与使用KV STUDIO(在现实中的应用)? 应用一(在现实生活中机器内部plc的读取与替换) 读取 KV STUDIO实现显示器的检测!&#…...

matlab simulink ADRC控制样例
1、内容简介 略 3-可以交流、咨询、答疑 2、内容说明 用adrc控制传递函数,保证输出达到预期 ADRC控制器、传递函数 3、仿真分析 4、参考论文 略...

我是如何走上测试管理岗的
最近有小伙伴问了一个问题:他所在的测试团队规模比较大,有 50 多个人,分成了 4 ~ 5 个小组。这位同学觉得自己的技术能力在团队里应该属于比较不错的,但疑惑的是在几次组织架构调整中,直属领导一直没有让他来管理一个小…...

回溯法:雀魂启动!
题目链接:雀魂启动!_牛客题霸_牛客网 题解: 回溯法 1、用哈希思想构建映射表,标记已有的卡的种类和个数 2、遍历卡池,先从卡池中抽一张卡,因为只能抽一张卡,所以一种卡只判断一次 3、抽到卡后找…...

新的iLeakage攻击从Apple Safari窃取电子邮件和密码
图片 导语:学术研究人员开发出一种新的推测性侧信道攻击,名为iLeakage,可在所有最新的Apple设备上运行,并从Safari浏览器中提取敏感信息。 攻击概述 iLeakage是一种新型的推测性执行攻击,针对的是Apple Silicon CPU和…...

Java练习题2021-1
"从大于等于N的正整数里找到一个最小的数M,使之满足: M和M的逆序数(如1230的逆序数为321)的差的绝对值为一个[100000,200000]区间内的值。 输入说明:起始数字N; 输出说明:找到的第一个符合…...

微信小程序input输入字母自动转大写不生效问题解决
uniapp中开发的小程序,采用 style"text-transform:uppercase" H5中正常小写变大写,编译小程序后不生效 解决办法 uniapp中 input增加 input"TransFormationsFn" <input type"text" value"" input"…...

jmeter报Java.NET.BindException: Address already in use: connect
1、windows10和window11上: 修改注册表的内容: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters: 新建dword(值)的类型: MaxUserPort 65334 TcpTimedWaitDelay 30window...

2023手工测试转自动化测试后,薪资可以达到多少?
目前手工测试工作了8个月,现已辞职在家学习全栈自动化测试的课程中,之前想着学完后工资期望7.5k,开发朋友说太少了 ,想了解下这样的情况在日后找工作,薪资可以达到多少? 说到底,软件测试是技术…...

01 _ 为什么要学习数据结构和算法?
今天我们就来详细聊一聊,为什么要学习数据结构和算法。 想要通关大厂面试,千万别让数据结构和算法拖了后腿 很多大公司,比如BAT、Google、Facebook,面试的时候都喜欢考算法、让人现场写代码。有些人虽然技术不错,但每…...

C语言 每日一题 PTA 10.27 day5
1.高速公路超速处罚 按照规定,在高速公路上行使的机动车,达到或超出本车道限速的10 % 则处200元罚款; 若达到或超出50 % ,就要吊销驾驶证。请编写程序根据车速和限速自动判别对该机动车的处理。 输入格式 : 输入在一行中给出2个正…...

Unity Shader当用户靠近的时候会出现吃鸡一样的光墙
效果图片 靠近墙壁 远离墙壁 材质球的设置 两张图片 使用方式 把这个脚本放到墙上,将player赋值给"_player",然后运行,用户靠近就会根据距离显示光墙。 using UnityEngine;public class NewBehaviourScript : MonoBehaviour {pr…...

Xcode iOS app启用文件共享
在info.plist中添加如下两个配置 Supports opening documents in place Application supports iTunes file sharing 结果都为YES,如下图所示: 然后,iOS设备查看,文件->我的iPhone列表中有一个和你工程名相同的文件夹出现&…...

STM32H750之FreeRTOS学习--------(二)任务的创建和删除
FreeRTOS 二、任务的创建和删除 任务创建 动态方式创建任务 BaseType_t xTaskCreate ( TaskFunction_t pxTaskCode, /* 指向任务函数的指针 */ const char * const pcName, /* 任务名字,最大长度configMAX_TASK_NAME_LEN */const configSTACK_…...

Kafka - 3.x Producer 生产者最佳实践
文章目录 生产经验_生产者提高吞吐量核心参数Code 生产经验_数据可靠性消息的发送流程ACK应答机制ack应答级别应答机制 小结Code 生产经验_数据去重数据传递语义幂等性幂等性原理开启幂等性配置(默认开启) 生产者事务kafka事务原理事务代码流程 生产经验…...

对于多分类问题,使用深度学习(Keras)进行迁移学习提升性能
本文是仿照前面的文章,使用Keras迁移学习提升性能,原文是针对二分类问题,使用迁移学习的方式来提升准确率,本文用迁移学习的方式来提升多分类问题的准确率。 同时,在前面的文章中,使用普通的小型3层卷积网络+2层全连接层实现了多分类的85%左右的准确率, 此处将用迁移学…...

Python----break关键字对while...else结构的影响
案例: 女朋友生气,要求道歉5遍:老婆大人,我错了。道歉到第三遍的时候,媳妇埋怨这一遍说的不真诚,是不是就是要退出循环了?这个退出有两种可能性: ① 更生气,不打算原谅…...

js实现将文本生成二维码(腾讯云cos)
示例 页面代码 import { getQCodeUrl } from /utils/cosInstance; import { PageContainer } from ant-design/pro-components; import { Access, useAccess } from umijs/max; import { Button, Image } from antd; import { useState } from react;const AccessPage: Reac…...

机架式服务器介绍
大家都知道服务器分为机架式服务器、刀片式服务器、塔式服务器三类,今天小编就分别讲一讲这三种服务器,第一篇先来讲一讲机架式服务器的介绍。 机架式服务器定义:机架式服务器是安装在标准机柜中的服务器,一般采用19英寸的标准尺寸…...

解决github有时能访问有时不能访问的问题2
下载地址 https://steampp.net/...

Go实现网络通信
Go 语言提供了强大的网络编程能力,包括 TCP、UDP、HTTP、WebSocket 等协议的支持。下面是 Go 语言中常用的网络操作: TCP 通信 使用 net 包进行 TCP 通信,可以创建 TCP 客户端和服务器。 客户端使用 net.Dial 方法连接到指定的 TCP 地址&am…...