本系列我会带大家进修一款强大的 AI 图画对象——Stable Diffusion,可以帮你解决很多运用层面的AI控图问题。
关于 Stable Diffusion 的内容很多,在本篇教程里,我会先为你先容 Stable Diffusion 模型的运行原理、发展历程和相较于其他 AI 画图运用的区别。
更多SD教程:
一、关于 Stable Diffusion 的几个名词
相信大家或多或少有看到过以下几个名词,因此有必要先给大家做个区分,以便你更好理解后续教程的内容。
Diffusion Model:散布模型,一款支持文本生成图象的算法模型,目前市面上主流的 DALL E、Midjourney、Stable Diffusion 等 AI 图画对象都是基于此底层模型开发的
Latent Diffusion Model:即潜伏散布模型,基于上面散布模型基础上研制出的更高级模型,升级点在于图象图形生成速度更快,而且对计算资源和内存消耗需求更低
Stable Diffusion:简称SD模型,其底层模型就是上面的潜伏散布模型,之所以叫这个名字是因为其研发公司名叫Stability AI,相当于品牌冠名了
Stable Diffusion Web Ul:简称SD WebUI,用于操作上面Stable Diffusion模型的网页端界面,通过该操作系统就能控制模型出图,而无需进修代码
在本系列的教程中,我们需要进修的内容就是利用 SD WebUI 来调用 Stable Diffusion 模型生成图象。
二、Stable Diffusion 模型的运行原理
在上面先容的几个概念中,你会发现都包含了 Diffusion 散布模型这个词,所以我们先从它开始讲起。
Diffusion 模型是图象生成领域中运用最广的生成式模型之一,除此之外市面上还有生成对抗模型(GAN)、变分自动编码器(VAE)、流模型(Flow based Model)等其他模型,它们都是基于深度进修为训练方式的模型。
散布模型之所以用 Diffusion 来命名,因为它的运作流程就是向训练图象不断地添加噪声,直到变为一张无意义的纯噪声图,再逐步恢复的流程。
其中加噪的流程就像在干净的水中滴了一滴墨汁,颜料会逐渐向整个水体散布,直至整个水体变浑。如果你之前有尝试过 AI 图画,会发现整个画图流程就是从一张模糊的噪声图,逐渐变为清晰的图象,而这就是逆向降噪的流程。
正常来说,标准的散布模型已经可以实现图象训练和绘制了,为什么要再出一套 Latent Diffusion Model 潜伏散布模型呢?这里主要是为了计算量的问题:
标准的散布模型是在像素空间(可以理解为高维空间)中进行的,对于一张 512×512 尺寸的 RBG 图片,这将是一个 768432(512x512x3)维度的空间,意味着生成一张图需要确定 768432 个值,这个流程往往需要多台专业显卡同时运算,我们平时自己用的商业级显卡资源是不可能完成这个任务的。
而潜伏散布模型就是解决这个问题的,它的流程是先把训练图象先缩小 48 倍再进行运算,结束后再恢复到原始尺寸,这样运算流程中需要处理的计算数据就少了许多,运算速度也会比正常的像素空间中快了很多,在硬件上的要求也大大降低,而这个压缩后再运算的空间就是 Latent 潜空间(可以理解为低维空间)。
以上是潜伏散布模型的工作原理,但 Stable Diffusion 模型并不是单一的文生图模型,而是多个模型组成的运作系统,其中的技术可以拆解为 3 个结构来看:
ClipText 文本编码器:用于解析提示词的 Clip 模型
Diffusion 散布模型:用于生成图象的 U-Net 和 Scheduler
VAE 模型:用于压缩和恢复的图象解码器
先来看看编码器 Clip,它是由 OpenAI 公司开发的模型,包括文本编码和图象编码 2 个部分,分别用于提取文本和图象的特征,通过搜集大量网络上的图象和文字信息再对 Clip 模型进行训练,可以实现文本和图象的对应关系。
在 SD 模型运作流程中,它可以提取提示词文本部分的特征传递给图象生成器,让模型理解我们输入的提示词内容,从而达到文本控制图象生成的目的。
图象生成器里包含了 U-Net 神经网络和 Scheduler 采样算法 2 个部分。
U-Net 原本是用于生物医学图象分割的神经网络模型,因为工作结构像一个 U 型字母,因此被称为 U 型神经网络训练模型。在散布模型中,U-Net 可以辅助提取并解构训练图象的特征,有了它就能在较少训练样本的情况下获得更加准确多样的数据信息,从而使模型在出图结果上更加精确。
在训练散布模型流程中,可以采用不同的算法来添加噪音,而 Scheduler 就是用来定义利用哪种算法来运行程序,它可以定义降噪的步骤、是否具备随机性、查找去噪后样本的算法等,因此它又被称为采样算法。在 WebUI 中,它是可调节的一项,我们可以根据图象类型和利用的模型来选择不同的采样器,从而达到更佳的出图效果。
最后的解码器 VAE,全称是 Variational Auto Encoder 变分自动编码器。简单来说,它的作用就是将高维数据(像素空间)映射到低维空间(潜空间),从而实现数据的压缩和降维。它由编码器(Encoder)和解码器(Decoder)两部分组成,编码器用于将图象信息降维并传入潜空间中,解码器将潜伏数据表示转换回原始图象,而在潜伏散布模型的推理生成流程中我们只需用到 VAE 的解码器部分。
在 WebUI 中,VAE 模型一般是训练好的内置模型,实际效果类似模型的调色滤镜,可以修饰最终图象的色彩和质感。
是不是看到这里已经有点头晕了,别担心,这里只需简单了解每一部分的功能即可,在后续 WebUI 的功能先容中我们还和他们有更深的接触,到时候就更容易理解每一部分的概念了。
三、Stable Diffusion背景先容
1. Stable Diffusion 是如何诞生的
下面,我再为大家先容下 Stable Diffusion 的发展历程,有助于你更深层次的了解这款 AI 图画对象。
如今提到 Stable Diffusion,就不得不提 Stability AI,这家独角兽公司在去年以十亿美元的估值一跃成为这过去半年中 AIGC 行业的黑马。但其实 Stable Diffusion 并不是由 Stability 独立研发,而是 Stability AI 和 CompVis、Runway 等团队合作开发的。
在去年上半年 AI 图画还没开始被大家熟知的时候,来自慕尼黑大学的机器进修研究小组 CompVis 和纽约的 Runway 团队合作研发了一款高分辨率图象合成模型,该模型具有生成速度快、对计算资源和内存消耗需求小等优点,而这就是我们前面提到的 Latent Diffusion 模型。
大家都知道,训练模型需要高昂的计算成本和资源要求,Latent Diffusion 模型也不例外。而当时的 Stability 恰巧也在寻找 AI 领域发展的机会,于是便向手头拮据的研究团队递出了橄榄枝,提出愿意为其提供研发资源的支持。在确定合作意向后,Stability 才开始正式加入到后续 Stable Diffusion 模型的研发流程中。
随后到了 7 月底,训练后的新模型以 Stable Diffusion 的名号正式亮相,现在大家知道 Stable 这个词其实是源于其背后的赞助公司 Stability。相较于 Latent Diffusion 模型,改进后的 Stable Diffusion 采用了更多的数据来训练模型,用于训练的图象尺寸也更大,包括文本编码也采用了更好的 CLIP 编码器。在实际运用上来说,Stable Diffusion 生成模型会更加准确,且支持的图象分辨率也更高,比单一的 Latent Diffusion 模型更加强大。
在 Discord 上进行短期内测后,Stable Diffusion 于 8 月 22 日正式开源。后面的事情大家都知道了,就在推出的短短几天后,Stability 拿到了 1 亿美元的融资,让这家年轻企业直接获得了约 10 亿美元的估值,可谓是名利双收。
虽然 Stability AI 通过 Stable Diffusion 这款开源模型享誉世界,但它背后其实暗藏着让人诟病的商业行为。就在 6 月初,福布斯发布了一条关于 Stability 创始人夸大 Stable Diffusion 成就的新闻,其中罗列了窃取 Stable Diffusion 研究成果、学历造假、拖欠工资等 9 大罪证,如果对其感兴趣的朋友可以去看看原文:
福布斯报道原文:https://www.forbes.com/sites
2. 从开源到百花齐放
对于 Stability 的商业行为我们不做过多点评,但他们在开源这条路上确实践行的很好,正如他们官网首页所说:AI by the people, for the people—AI取之于民,用之于民。
起初,Stable Diffusion 和 Midjourney 一样先是在 Discord 上进行了小范围的免费公测。随后在 22 年的 8 月 22 日,关于 Stable Diffusion 的代码、模型和权重参数库在 Huggingface 的 Github 上全面开源,至此所有人都可以在本地部署并免费运行 Stable Diffusion。
最早在 Github 上开源的代码地址:https://github.com/huggingface/diffusers/releases/tag/v0.2.3
有朋友可能对开源这个词比较陌生,这里简单先容下:开源指的是开放源代码,即所有用户都可以自由进修、修改以及传播该软件的代码信息,并且不用支付任何费用。举个不太恰当的比喻,就像是一家餐厅把自己辛苦研究的秘制菜谱向全社会公布,任何人都可以拿去自由利用,不管是自己制作品尝,还是由此开一家新餐厅都可以。但这里有个问题,并不是每个人都是厨师,更不用说做这种需要繁琐环境部署和基础设施搭建的“秘制菜”。
开源后的 Stable Diffusion 文件,起初只是一串你我这样小白都看不懂的源代码,更不用说上手体验。但伴随着越来越多开发者的介入,Stable Diffusion 的上手门槛逐渐降低,开始走向群众视野,它的生态圈逐渐发展为商业和社区 2 个方向。
一方面,海量的中小研发团队发现了商机,将其封装为商业化的套壳运用来进行创收,有的是 APP 网站等程序,有的是内嵌在自家产品中的特效和滤镜。根据 Stable Diffusion 官网统计的数据,在 Stable Diffusion 2.0 发布一个月后,苹果运用商店排名前十的 App 中就有四款是基于 Stable Diffusion 开发的 AI 图画运用。
这些运用在很大程度上都进行了简化和设计,即使是小白用户也可以快速上手,当然缺点就是基本都要付费才能利用,而且很难针对个人做到功能定制化。
另一方面,开源的 Stable Diffusion 社区受到了广泛民间开发者大力支持,众多为爱发电的程序员自告奋勇的为其制作方便操控的 GUI 图形化界面(Graphical User Interface)。其中流传最广也是被公认最为方便的,就是由越南超人 AUTOMATIC1111 (下文统一用 A41 代称)开发的 WebUI,而这正是前面提到的 Stable Diffusion WebUI,后面的教程内容都是基于该程序展开的。
它集成了大量代码层面的繁琐运用,将 Stable Diffusion 的各项画图参数转化成可视化的选项数值和操控按钮。如今各类开源社区里 90%以上的拓展运用都是基于它而研发的。
当然,除了 WebUI 还有一些其他的 GUI 运用,比如 Comfy UI 和 Vlad Diffusion 等,不过它们的运用场景更为专业和小众,感兴趣的可以点击下面的 GitHub 链接了解,这里就不再赘述了。
Comfy UI 地址: https://github.com/comfyanonymous/ComfyUI
Vlad Diffusion 地址: https://github.com/pulipulichen/
四、Stable Diffusion 的特点
看到这里,你已经了解了 Stable Diffusion 的发展背景和生态环境,那它和其他 AI 图画对象相比到底有哪些优势呢?
目前,市面上绝大多数商业级 AI 图画运用都是采用开源的 Stable Diffusion 作为研发基础,当然也有一些其他被大众熟知的 AI 图画对象,比如最受欢迎的 Midjourney 和 OpenAI 公司发布的 DALL·E2。但不可否认的是,开源后的 Stable Diffusion 在实际运用上相较其他 AI 图画对象存在巨大优势:
1. 可拓展性强
首先最关键的一点就是极其丰富的拓展性。得益于官方免费公开的论文和模型代码,任何人都可以利用它来进行进修和创作且不用支付任何费用。光是在 A41 WebUI 的说明文档中,目前就已经集成了 110 多个扩展插件的功能先容。
从局部重绘到人物姿势控制,从图象高清修复和到线稿提取,如今的 Stable Diffusion 社区中有大量不断迭代优化的图象调整插件以及免费分享的模型可以利用。而对于专业团队来说,即使社区里没有自己满意的,也可以通过自行训练来定制专属的画图模型。
在 Midjourney 等其他商用图画运用中,无法精准控图和图象分辨率低等问题都是其普遍痛点,但这些在 Stable Diffusion 中通过 ControlNet 和 UpScale 等插件都能完美解决。如果单从工业化运用角度考虑,如今的 Stable Diffusion 在 AI 图画领域毫无疑问是首选对象。
2. 出图效率高
其次是其高效的出图模式。利用过 Midjourney 的朋友应该都有体验过排队等了几分钟才出一张图的情况,而要得到一张合适的目标图我们往往需要试验多次才能得到,这个试错成本就被进一步拉长。其主要原因还是由于商业级的 AI 运用都是通过访问云服务器进行操作,除了排队等候服务器响应外,网络延迟和资源过载都会导致画图效率的降低。
而部署在本地的 Stable Diffusion 画图效率完全由硬件设备决定,只要显卡算力跟得上,甚至能够实现 3s 一张的超高出图效率。
3. 数据安全保障
同样是因为部署在本地,Stable Diffusion 在数据安全性上是其他在线图画对象无法比拟的。商业化的图画运用为了运营和丰富数据,会主动将用户的画图结果作为案例进行传播。但 Stable Diffusion 所有的画图流程完全在本地进行,基本不用担心信息泄漏的情况。
总结来说,Stable Diffusion 是一款图象生产+调控的集合对象,通过调用各类模型和插件对象,可以实现更加精准的商业出图,加上数据安全性和可扩展性强等优点,Stable Diffusion 非常适合 AI 画图进阶用户和专业团队利用。
而对于具备极客精神的 AI 图画爱好者来说,利用 Stable Diffusion 流程中可以学到很多关于模型技术的知识,理解了 Stable Diffusion 等于就掌握了 AI 图画的精髓,可以更好的向下兼容其他任意一款低门槛的图画对象。
结束撒花
本期关于 Stable Diffusion 的基础先容到这里就结束了,下篇我会分享 SD 的部署教程和更多进修经验。