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制作出,你想要它制作的图片!

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

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

相关文章

IP 地址查询,快速查询自己的 IP 地址

文章目录 在线结果 在线 http://myip.top/ 结果

【计算机网络笔记】Cookie技术

系列文章目录 什么是计算机网络? 什么是网络协议? 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能(1)——速率、带宽、延迟 计算机网络性能(2)…

Redis(04)| 数据结构-压缩列表

压缩列表的最大特点,就是它被设计成一种内存紧凑型的数据结构,占用一块连续的内存空间,不仅可以利用 CPU 缓存,而且会针对不同长度的数据,进行相应编码,这种方法可以有效地节省内存开销。 但是,…

腾讯云 AI 绘画:文生图、图生图、图审图 快速入门

腾讯云 AI 绘画是腾讯云推出的一款基于人工智能的图像生成和编辑产品,能够根据输入的图片或描述文本,智能生成与输入内容相关的图片,支持多样化的图片风格选择。 在本文中,我们将介绍如何使用腾讯云 AI 绘画的三项主要功能&#…

Windows-Oracle19c 安装详解-含Navicate远程连接配置 - 同时连接Oracle11g和Oracle19c

文章目录 0 说明1 下载链接2 安装:一定要以管理员身份运行,不然后面有可能会报错。3 启动监听4. 登录Oracle4 Navicate远程连接-配置监听4.1 修改监听文件4.2 网络配置助手-配置本地监听端口4.3 Navicate连接成功 5 Navicate同时连接两个Oracle数据库 0 …

鸿蒙ArkUI-X跨端应用开发,一套代码构建多平台应用

文章目录 一、项目介绍二、技术架构三、Gitee仓库地址四、ArkUI-X开发者文档五、快速开始——环境准备1、下载DevEco Studio,版本V4.0 Beta2以上2、打开DevEco,下载相关环境配置3、配置开发环境3.1、OpenHarmony SDK3.2、安装ArkUI-X SDK3.2、Android SD…

postgis ST_CoverageInvalidEdges用法

官方文档 概要 geometry ST_CoverageInvalidEdges(geometry winset geom, float8 tolerance 0); 描述 一个窗口函数,用于检查窗口分区中的多边形是否形成有效的多边形覆盖范围。 它返回线性指示器,显示每个多边形中无效边(如果有&#x…

死锁Deadlock

定义 死锁是指两个或多个线程互相持有对方所需的资源,从而导致它们无法继续执行的情况。如下图所示,现有两个线程,分别是线程A及线程B,线程A持有锁A,线程B持有锁B。此时线程A想获取锁B,但锁B需等到线程B的结…

GCC、g++、gcc的关系

GCC、g、gcc的关系 引言 VsCode中对编译环境进行配置的时选择编译器时发现有多种不同的编译器 GNU计划和GCC GNU的全称 GNU’s Not UNIX GNU是一个计划 Q:为什么会有这个计划 因为当时的Unix开始收费和商业闭源,有人觉得不爽→ 想要自己开发和Unix类似的→GNU计划 GUN计划目…

几个常用的nosql数据库的操作方式

dynamoDB 键 partition key:分区键 定义:分区键是用于分布数据存储的主键,每个项(Item)在表中都必须有一个唯一的分区键值。 特点: 唯一性:每个分区键值在表中必须是唯一的,这是因为…

shell脚本变量

目录 1.变量的定义 2.shell脚本中变量的定义方法 3.变量的转译 4.Linux中命令的别名设定 5.用户环境变量的更改 6.利用命令的执行结果设定变量 7.脚本函数 1.变量的定义 1)定义本身 变量就是内存一片区域的地址 2)变量存在的意义 命令无法操作一直变化的目…

【ETL工具】Datax-ETL-SqlServerToHDFS

🦄 个人主页——🎐个人主页 🎐✨🍁 🪁🍁🪁🍁🪁🍁🪁🍁 感谢点赞和关注 ,每天进步一点点!加油!&…

读高性能MySQL(第4版)笔记21_读后总结与感想兼导读

1. 基本信息 高性能MySQL:经过大规模运维验证的策略(第4版) High Performance MySQL, Fourth Edition [美] Silvia Botros(西尔维亚博特罗斯);Jeremy Tinley(杰里米廷利) 电子工业出版社,2022年10月出版 1.1. 读薄率 书籍总字…

HarmonyOS DevEso环境搭建

DevEco Studio 3.1配套支持HarmonyOS 3.1版本及以上的应用及服务开发,提供了代码智能编辑、低代码开发、双向预览等功能,以及轻量构建工具DevEco Hvigor 、本地模拟器,持续提升应用及服务开发效率。 1.下载 官方网站: HUAWEI De…

Python深度学习实战-基于tensorflow原生代码搭建BP神经网络实现分类任务(附源码和实现效果)

实现功能 前面两篇文章分别介绍了两种搭建神经网络模型的方法,一种是基于tensorflow的keras框架,另一种是继承父类自定义class类,本篇文章将编写原生代码搭建BP神经网络。 实现代码 import tensorflow as tf from sklearn.datasets import…

ssh连接远程服务器,并在终端安装anaconda

官网下载安装:anaconda2023.09版本(官网地址:https://www.anaconda.com/download#downloads) wget https://repo.anaconda.com/archive/Anaconda3-2023.09-0-Linux-x86_64.sh使用阿里云镜像下载安装,官网下载太慢。阿…

2698 求一个整数的惩罚数 (子集和,DFS)

class Solution { public:bool dfs(int target, string s, int index, int sum) {// 只有整个字符串都被分割,求和,和看结果是不是等于targetif(index s.size()) {return sum target;}int num 0; // 在现在的子集中去依次加入余下的元素// 1 2 9 6// …

支付宝证书到期更新完整过程

如果用户收到 支付宝公钥证书 到期通知后,可以根据如下指引更新证书 确认上传成功后就会生成新的证书,把新的证书替换到生产环境就可以了

浏览器事件循环 (event loop)

进程与线程 进程 进程的概念 进程是操作系统中的一个程序或者一个程序的一次执行过程,是一个动态的概念,是程序在执行过程中分配和管理资源的基本单位,是操作系统结构的基础。 简单的来说,就是一个程序运行开辟的一块内存空间&a…

RocketMQ事务消息 超时重发还是原来的消息吗?

以下面的一个demo例子来分析一下,探索RocketMQ事务消息原理。 public static final String PRODUCER_GROUP "tran-test";public static final String DEFAULT_NAMESRVADDR "127.0.0.1:9876";public static final String TOPIC "Test&qu…