SD入门教程一:Stable Diffusion 基础(技术篇)

前言

在开篇的时候就大致讲了SD和VAE,那么今天我们具象化地再来讲讲Stable Diffusion(稳定扩散)。

严格说来它是一个由几个组件(模型)构成的系统,而非单独的一个模型。我以最常见的文生图为例,解释下 Stable Diffusion 的整体架构和工作原理。


!如何工作!


当我们输入一句prompt 后,比如“a dog,standing on the grass,”,Stable Diffusion 会生成一张狗子站在草地的图,看似只有一步:

但实际上,整个生成的过程经过三个大的步骤。我会先概括地介绍这三大步骤分别是什么,先让大家对 Stable Diffusion 有一个整体的理解,然后再细讲里面的细节:

  1. 首先,用户输入的 Prompt 会被一个叫Text Encoder(文本编译器) 的东西编译成一个个的词特征向量。此步骤下会输出 77 个等长的向量,每个向量包含 768 个维度。各位同学可以简单将其理解为「将文本转化为机器能识别的多组数字信息」。

  2. 接着,这些特征向量会和一张随机图(可以简单理解这是一张老式电视机的雪花图,或充满信息噪声的图),一起放到 Image Information Creator 里。在这一步,机器会将这些特征向量和随机图先转化到一个Latent Space(潜空间)里,然后根据这些特征向量,将随机图「降噪」为一个「中间产物」。你可以简单理解,此时的「中间产物」是人类看不懂的「图」,是一堆数字信息,但此时这个中间产物所呈现的信息已经是一只狗站在草地上了。

  3. 最后,这个中间产物会被Image Decoder(图片解码器)解码成一张真正的图片。

所有的AI设计工具,安装包、模型和插件,都已经整理好了,👇获取~在这里插入图片描述

如果将以上的三大步骤可视化的话,会是这样:

总结一下,简单理解,就是用户输入了一段 Prompt 指令,机器会按照这个指令,在一个潜空间里,将一张随机图降噪为一张符合指令的图片。整个过程,与其说 AI 是在「生成」图片,不如称其为「雕刻」更合适。

所有图片都存在了一张充满噪点的图片里,AI 只是把不要的部分去掉了。所以如果你用同样是 Diffusion Model 搭建的 Midjourney 话,你会看到如下的过程,首先是一张模糊甚至黑色的图片,然后图片会一步步变得越来越清晰,这就是我前面所说的「降噪」或者「雕刻」的过程:

你可能好奇,为何前面的解释里,Stable Diffusion 最后是直接出图,而不像 Midjourney 那样?实际上,在第二步中,机器会分多次对图进行「降噪」,只是没有将每一次的结果用 Image Decoder 解码成图片,而是只将最后一次结果解码成照片。所以你使用 Stable Diffusion 的时候才不会像 Midjourney 那样看到生成的过程。


!Image Information Creator!


既然说到降噪,我们就来展开讲讲整个「降噪」的过程。

首先整个降噪的过程会在一个 Latent Space(潜空间)里进行,然后会进行多 Steps(步)的降噪,你可以对这个 Steps 进行调整,一般越多图片质量也会好,但时间也会越久。当然这个也跟模型有关,Stable Diffusion XL Turbo 就能 1 步出图,耗时不到 1 秒,而且生成的图片质量还很不错。如果我们将这一步过程可视化,类似是这样的(为了更好地解释,我将下方黑色的块都描述成图,本质上它不是图,只是一堆与图像相关的数据),那 Denoise 里又发生了什么呢?下图是第一个 Denoise 过程的可视化:

上图看上去很复杂,但不要恐惧,我们只要懂加减乘除就能理解这张图:

  • 首先,在 Denoise 里有一个 Noise Predictor(噪音预测器),顾名思义,它就是能预测出随机图里包含什么噪音的模型。除了输入随机图和 Prompt 的词特征向量外,还需要输入当前的 Step 数。虽然在上面的可视化流程中,你会看到很多个 Denoise,但实际程序运行的是同一个 Denoise,所以需要将 Step 告知 Noise Predictor 让其知道正在进行哪一步的预测。

  • 然后,我们先来看橙色的线,Noise Predictor 会使用随机图(比如一张4 X 4的图)和 Prompt 的词特征向量预测出一张噪声图 B。注意,这里不是根据预测输出实际的图,而是一张噪声图。换句话来说,Noise Predictor 是根据词向量预测这张随机图里有哪些不需要的噪声。如果拿前面的雕刻的例子来类比,它输出的是雕刻雕像所不需要的废料。与此同时,Noise Predictor 还会不使用 Prompt 的词特征向量预测出一张噪音图 C(也就是图中的蓝色线)。

  • 接着,Denoise 会拿噪音图 B 和 C 相减得出图 D。我们用简单的数学解释下这张图是啥。首先,图 B 是用 Prompt 加随机图预测的噪声,简单理解,就包含了「根据 Prompt 预测的噪声」+「根据随机图预测的噪声」,而 C 则是「根据随机图预测的噪声」,B 减 C 就等于「根据 Prompt 预测的噪声」。

  • 再之后,Denoise 会将 C 噪声放大,一般就是会乘以一个系数,这个系数在一些 Stable Diffusion 里会以CFG、CFG Scale 或者 Guidance Scale表示。接着再那这张放大后的图与噪声图 C 相加,得到图 E。这样做的原因是为了提高图片生成的准确性,所以通过乘以一个系数,来刻意提高「根据 Prompt 预测的噪声」的权重。如果没有这一步,生成的图片就跟 Prompt 没那么相关了。这个方法也被称为 Classifier Free Guidance(无分类引导法)。

  • 最后,Denoise 会将图 A 减去图 E,得出一张新的图。也就是我前面提到的「雕刻」的过程,去掉不需要的噪声。

如果你有用过 Stable Diffusion 的工具,你会发现 Prompt 的输入框有两个,一个是正向的,一个负向的。那负向的 Prompt 是如何生效的呢?用上述的数学方法,简单理解,当输入负向的 Prompt 的时候,也会生成一张噪声图 B2,但此时我们会用正向的 Prompt 生成的噪声图 B1 减去 B2 再减去 C 得出 D,那就意味着最终生成的图片会更加远离 B2,因为减掉了更多与 B2 相关的噪声。


!Image Decoder!


接着我们再来聊下 Latent Space(潜空间)。我在学习这个概念的时候,最大的疑惑就是为何要在潜空间里进行?而不是直接用图片进行去噪?

要解答这个问题,首先要理解什么是潜空间?

Latent Space(潜空间):潜在空间是指在机器学习和深度学习中,用于表示数据的低维空间。它是通过对原始数据进行编码和降维得到的一组潜在变量。潜在空间的维度通常比原始数据的维度低,因此可以提取出数据中最重要的特征和结构。

看上去很复杂,简单理解就是潜空间会将图片编码成一堆数字,同时对这些数字进行压缩。让我们通过可视化的方式看看这个过程:

图片会先被一个 Image Encoder 编码成一组数据,并被压缩,如果用像素的角度来衡量这个数据压缩的效果,原图可能是一张 512 X 512 的图,压缩后变成了 64 X 64,数据极大地减少了,最后再使用 Image Decoder 还原即可。而这个 Encoder 加 Decoder 的组件,也被称为 Variational Auto Encoder(变分自编码器)简称 VAE 。所以这个 Image Decoder 在一些产品里,也叫 VAE Decoder。

那使用这个技术有什么好处和坏处呢?

**好处:**首先当然是效率提升了非常多。使用 VAE 后,即使消费级显卡 GPU 也能以相对较快的速度,完成降噪运算。同时训练模型的时间也会更短。另外,潜在空间的维度通常比原始图像的维度低得多,这意味着它可以更有效地表示图像的特征。通过在潜在空间中进行操作和插值,可以对图像进行更精细的控制和编辑。这使得在生成图像时可以更好地控制图像的细节和风格,从而提高生成图像的质量和逼真度。

**坏处:**经过编码,然后再将数据还原会导致一些数据丢失。而且加上潜在空间的维度较低,它可能无法完全捕捉原始数据中的所有细节和特征。最终导致还原的图片比较奇怪。

为何 Stable Diffusion 生成的图片中,文字一般都很诡异?因为在这个过程中,一方面是文字的一些细节特征丢失了。另一方面,在预测噪音的时候,文字的预测与图像的预测相比,不那么连贯。举个例子,预测狗的特征是相对简单的,因为狗大概率有 2 个眼睛,眼睛下面是鼻子,它是连贯的。


!Text Encoder!


在最前面的流程中,我提到过,Text Encoder(文本编译器)会将你输入的 Prompt 编译成一个个的词特征向量。此步骤下会输出 77 个等长的向量,每个向量包含 768 个维度。这些向量里到底有什么用呢?

另外,还有一个更有趣的问题,当我们在 Prompt 里只输入 Dog,并没有在 Prompt 里加上狗的品种,那为何最后输出的狗是“约克夏”呢?要回答这些问题,我们需要先理解 Text Encoder 的实现。

目前 Stable Diffusion 常用的 Text Encoder 用的是 OpenAI 开源(opens in a new tab)的 CLIP 模型,全称为 Contrastive Language Image Pre-training(对比语言图像预训练)。我们照例先画个图:

首先,这个 CLIP 也有一个 Text Encoder,会将文本转化为一个特征向量,然后它还有一个 Image Encoder 会将图片也转成各种特征向量。如果这两个向量越近,意味着这个描述,越接近图片的内容;反之越远,则越不相关。

OpenAI 使用了 4 亿组图片文本对,对此模型进行了训练,最后训练出来的 CLIP 模型效果如下图所示。当我们输入图片的描述时,CLIP 能判断出与这个描述最相近的图片是哪张。比如下图中第四行,描述是「一张约克夏狗的照片」,它与纵向第四张图最相关,相似度达到 0.31,与第一张书本的截图相似度只有 0.12。

我们回到 Stable Diffusion,在 Stable Diffusion 里,我们只使用了 CLIP 的 Text Encoder 的部分,因为它能将文本转化成对应文本的特征向量,并且这些特征向量与现实存在的图片会有相关性。

为何当我们输入 Dog 的时候,生成的图大概率是一只约克夏?因为 Text Encoder 将 Dog转化成 77 个等长的向量 Embedding 里会包含与 Dog 相关的一些特征和含义:

  • 形态特征:向量表示可能会捕捉到 Dog 的形态特征,比如它的体型、头部的形状、四肢的位置等。这些特征可以帮助区分 Dog 与其他动物或物体。

  • 视觉特征:向量表示可能会包含 Dog 的视觉特征,比如它的颜色、毛发、眼睛的形状等。这些特征可以帮助识别 Dog 的外观特点。

  • 语义含义:向量表示可能会包含与 Dog 相关的语义含义,比如它是一种宠物、一种独立的动物、与人类有亲密关系等。这些含义可以帮助理解 Dog 在人类文化和社会中的角色和意义。

注意:因为模型有些地方具有不可解释性,所以实际上这些向量不一定包含这些特征,主要是为了更好地解释,所以我举了几个比较具象的例子。

最后,因为在 Stable Diffusion 里,只用到了 CLIP 的 Text Encoder 的部分,所以在一些产品里,这个又称为 CLIP Text Encoder,或者 CLIP Text Encode。

为何使用 Stable Diffusion 或者 Midjourney 时,输入的 Prompt 不需要在意语法?以及大小写不明感呢?因为这些 Prompt 都会被 Text Encoder 转成特征向量,语法、大小写被转成特征向量后,都会是一串数字了,在没有对模型进行调整的情况下,这些都不太敏感了。


这里分享给大家一份Adobe大神整理的《AIGC全家桶学习笔记》,相信大家会对AIGC有着更深入、更系统的理解。

有需要的朋友,可以点击下方免费领取!

在这里插入图片描述

AIGC所有方向的学习路线思维导图

这里为大家提供了总的路线图。它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。如果下面这个学习路线能帮助大家将AI利用到自身工作上去,那么我的使命也就完成了:
在这里插入图片描述

AIGC工具库

AIGC工具库是一个利用人工智能技术来生成应用程序的代码和内容的工具集合,通过使用AIGC工具库,能更加快速,准确的辅助我们学习AIGC
在这里插入图片描述

有需要的朋友,可以点击下方卡片免费领取!

在这里插入图片描述

精品AIGC学习书籍手册

书籍阅读永不过时,阅读AIGC经典书籍可以帮助读者提高技术水平,开拓视野,掌握核心技术,提高解决问题的能力,同时也可以借鉴他人的经验,结合自身案例融会贯通。

在这里插入图片描述

AI绘画视频合集

我们在学习的时候,往往书籍源码难以理解,阅读困难,这时候视频教程教程是就很适合了,生动形象加上案例实战,科学有趣才能更方便的学习下去。

在这里插入图片描述

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

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

相关文章

大型保险公司进行营销活动时,如何与外部客户实现文件安全外发?

大型保险公司为了吸引新客户、维护老客户、提升品牌形象以及推广特定的保险产品,会定期向外部客户或潜在客户发送营销文件。在客户签单后,保险公司会将客户相关的签单个人文件发送给客户。因此,大型保险公司内部存在较为频繁且重要的文件安全…

安装DNS

在 CentOS 7 上安装并配置 BIND 以实现 DNS 的正向和反向解析可以按照以下步骤进行: 安装 BIND 打开终端并运行以下命令来安装 BIND 及其工具: yum install bind bind-utils -y配置 BIND 编辑主配置文件: 使用文本编辑器打开 BIND 的主配…

电商价格监测的创新之路

在当今数字化高速发展的时代,电商如汹涌的浪潮席卷了商业的每一个角落。品牌们在这片广阔的电商海洋中奋力前行,而价格监测则成为了他们手中至关重要的罗盘。 力维网络以其专业的价格监测服务,为品牌在电商之海的航行点亮了一盏明灯。然而&a…

多节点网络流量监控与网络性能优化的利器——轻松实现高效管理

目录 为什么网络性能监控如此重要? 多节点网络流量监控如何优化网络性能? 实例:AnaTraf如何帮助企业解决网络故障 了解更多 随着企业网络规模的不断扩大,维护网络性能的复杂性日益增加。如何实时监控网络流量、快速排查网络故…

网安加·百家讲坛 | 潘继平:AI赋能DevOps平台:全面提升代码安全性

作者简介:潘继平,中国软协项目管理专委会专家,深圳市软件行业协会特聘专家。华为土耳其研究所外聘高级项目顾问,负责华为云应用生态圈产品线研发管理。曾为华为全球技术服务中心、华为制造IT以及华为流程IT解决方案提供等多个部门…

(二)、CT系统硬件构成

简单来说分为以下几个步骤来描述整个CT系统的运行流程: X射线管和探测器环绕被测物体,准直器进行高度准直X射线。X射线穿过被测物料时发生衰减,其中有两个探测器,一个是参考探测器记录和测量来自X射线管的辐射强度,另…

【C语言从不挂科到高绩点】28-数组综合运用

Hello!彦祖们,俺又回来了!!!,继续给大家分享 《C语言从不挂科到高绩点》课程!! 数组是我们在C语言学习过程中比较重要的一个知识点,也是在今后的学习与开发过程中经常会用到的技能,…

明达IO:赋能工业机器人新未来

摘要: 明达技术以其卓越的分布式IO(MR30)与一体式IO(MR20)产品,为工业机器人行业提供了完美的信号交互解决方案。在集群式机器人应用场景中,MR30分布式IO以其稳定性能和自由热插拔功能&#xf…

“跨时空拥抱”风靡TikTok,这款AI视频工具借势变现20万美金,你也来看看吧!

用AI生成跨时空拥抱最近悄悄在海外翻红,还带火了一款AI视频产品。 8月28日,TikTok博主“iammskira”发布了一条配文为“用AI实现了拥抱我的妈妈,因为她已经不在人世了”的短视频教程,在TikTok上走红。 视频中,AI不仅…

Java毕业设计:Java社区物品置换网站系统毕业设计源代码作品和开题报告

博主介绍:黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程&#xff…

xss-labs靶场第五关测试报告

目录 一、测试环境 1、系统环境 2、使用工具/软件 二、测试目的 三、操作过程 1、注入点寻找 2、使用hackbar进行payload测试 3、绕过结果 四、源代码分析 五、结论 一、测试环境 1、系统环境 渗透机:本机(127.0.0.1) 靶 机:本机(127.0.0.…

如何下载和安装CLion,图文详解

一、下载 登录JetBrains官网,下载最新版本的Clion,Clion目前没有社区版,都是专业版。 二、安装 1、启动Clion安装程序,下一步。 2、修改安装目录,下一步。 3、创建桌面快捷方式,更新PATH变量&#xff0…

【汇编语言】寄存器(CPU工作原理)(六)—— 修改CS,IP的指令以及代码段

文章目录 前言1. 修改CS、IP的指令2. 问题分析:CPU运行的流程3. 代码段小结结语 前言 📌 汇编语言是很多相关课程(如数据结构、操作系统、微机原理)的重要基础。但仅仅从课程的角度出发就太片面了,其实学习汇编语言可以深入理解计…

Excel中多条件筛选问题解决方法

例题解析: 有雇员信息表如下所示&#xff1a; 查询出 Gender 为 Female&#xff0c;且 1970 年以前出生的员工&#xff1a; spl("E(?1).select(Gender""Female"" && Birthday<""1970-01-01"")",A1:O32)SPL桌面…

SpringBoot框架在服装制造业的应用案例

2 关键技术简介 2.1 JAVA技术 Java是一种非常常用的编程语言&#xff0c;在全球编程语言排行版上总是前三。在方兴未艾的计算机技术发展历程中&#xff0c;Java的身影无处不在&#xff0c;并且拥有旺盛的生命力。Java的跨平台能力十分强大&#xff0c;只需一次编译&#xff0…

手写mybatis之数据源的解析、创建和使用

前言 在上一章节我们解析 XML 中的 SQL 配置信息&#xff0c;并在代理对象调用 DefaultSqlSession 中进行获取和打印操作&#xff0c;从整个框架结构来看我们解决了对象的代理、Mapper的映射、SQL的初步解析&#xff0c;那么接下来就应该是连库和执行SQL语句并返回结果了。 那么…

需求10——通过改一个小bug来学习如何定位问题

在浏览我之前完成的一些小需求时&#xff0c;我发现了一个非常有价值的需求。这个需求可以让我深入了解系统中关于故障上报的功能。通过完善这个需求&#xff0c;我能够全面掌握整个故障上报的流程。 这个需求主要是关于故障上报流程中出现的问题。当前的流程如下&#xff1a;…

地面沉降数值模拟方法

目前&#xff0c;地面沉降问题是我国较为常见的环境地质问题&#xff0c;其巨大的破坏力严重影响城市建筑安全和交通轨道运行。围绕地面沉降的防控与治理&#xff0c;是工程地质、环境地质、轨道交通设计等相关技术人员十分关注的领域&#xff0c;而数值模拟技术是评估防控效果…

云栖实录 | Hologres3.0全新升级:一体化实时湖仓平台

本文根据2024云栖大会实录整理而成&#xff0c;演讲信息如下&#xff1a; 演讲人&#xff1a; 姜伟华 | 阿里云智能集团资深技术专家、Hologres 负责人 丁 烨 | 阿里云智能集团产品专家、Hologres 产品负责人 活动&#xff1a; 2024 云栖大会 - 商用大数据计算与分析平台论…

RS485为什么用隔离?

RS-485是工业与仪器仪表中的物理层总线设计 标准&#xff0c;目前已成为业界应用最为广泛的标准通信接 口之一。这种通信接口允许在简单的一对双绞线上 进行多点双向通信&#xff0c;它所具有的噪声抑制能力、数 据传输速率、电缆长度及可靠性是其他标准无法比 拟的。 当需要在…