AI图像生成 | Stable Diffusion

Stable Diffusion(学习笔记)

Zhujunwei, 2023-9-29

概念

Stable Diffusion用途:AI图像生成(AI绘画)

基本原理:首先对原图使用扩散(增加噪声)得到一张模糊图片,当图片被扩散以后,信息也分散了,从而可以被AI根据新的逻辑重新组织,接着再生成(去除噪声)得到一张特定内容的图片,AI深度学习扩散的“逆过程”,从而领会了生成特定内容的方式。

两种模式:

  1. 文生图(Text to Image)

    需要提示词,画面控制主要靠提示词

  2. 图生图(Image to Image)

    需要提示词,图片辅助提示词进行画面控制

配置

【核心】:Stable Diffusion WebUI(SD WebUI)

前置软件安装

  1. 安装Python,CUDA, Git
  2. 安装WebUI本体(Github)
  3. 在浏览器使用WebUI

注意事项

Python 推荐3.10.*

安装路径尽量不要有中文

WebUI文件夹放在较空的盘(需要下载运用大量模型文件)

模型(Checkpoint)

介绍

存放目录:StableDiffusionWebUI/models/Stable-diffusion

后缀:大模型占空间大*.ckpt, 小模型占空间小*.safetensors

VAE(Variational Auto Encoder, 变分自编码器):负责将加噪后的潜空间数据转化为正常图像,从使用属性上看可以粗略理解成AI绘图的一种“调色滤镜”,主要影响画面色彩质感。目前多数比较新的模型已经把VAE整合到大模型文件里了,无需单独加载VAE模型。也不排除有些模型需要单独使用VAE模型,按照模型作者的推荐进行下载配置即可,例如比较通用的VAE模型kl-f8-anime2.ckpt,但一般VAE模型后缀是*.pt和*.safetensor,存放目录:StableDiffusionWebUI/models/VAE,可以把针对特定模型的VAE改成和他们Checkpoint一样的名字,然后再在WebUI的VAE选项中勾选自动即可。

【补充】其实AI绘画里的模型不止Checkpoint一种

  • 超网络(hypernetwork) :常用于画面微调
  • 嵌入式向量(embeddings):优化画风
  • 低秩适应模型(LoRa):固定特定人物角色特征

下载 (私炉模型)

  1. Hugging face
  2. Civitai

分类

  1. 二次元模型:Anything V5, Counterfeit V2.5, Dreamlike Diffusion
  2. 真实系模型:Dliberate, Realistic Vision, L.O.F.I
  3. 2.5D风模型:Never Ending Dream(NED), Protogen(Realistic), 国风3(GuoFeng3)

提示词(Prompts)

英文书写,以词组为单位,分隔符为英文逗号,主要分为正向提示词&反向提示词

其中“反向提示词”是可以没有的,但出于标准化考虑可以通过抄作业的方式复用一些比较好的反向提示词

提示词的分类

  1. 内容提示词
    • 人物及主体特征:服饰穿搭(white dress),发型发色(blonde hair, long hair),五官特点(small eyes, big mouth),面部表情(smiling),肢体动作(stretching arms)
    • 场景特征:室内室外(indoor,outdoor),大场景(forest, city, street),小细节(tree, bush, white flower)
    • 环境光照:白天黑夜(day,night),特定时段(morning, sunset),光环境(sunlight, bright, dark),天空(blue sky, starry sky)
    • 画幅视角:距离(close-up, distant),人物比例(full body, upper body),观察视角(from above, view of back),镜头类型(wide angle, Sony A73)
  2. 标准化提示词(基本可以通用,所以可直接抄作业复用)
    • 画质提示词:通用高画质(best quality, ultra-detailed, masterpiece, hires, 8k),特定高分辨率类型(extremely detailed CG unity 8k wallpaper[超精细的8k Unity游戏CG], unreal engine rendered[虚幻引擎渲染])
    • 画风提示词:插画风(illustration, painting, paintbrush), 二次元(anime, comic, game CG),写实系(photorealistic, realistic, photograph)

提示词通用模板

描述人物,描述场景,描述环境(时间、光照),描述画幅视角,其他画面要素

高品质标准化,画风标准化,其他特殊要求

提示词的权重分配

  1. 括号加数字(控制准确)

    圆括号里面包含“提示词:数字”,其作用是用来增强或减弱提示词的优先级和权重

  2. 纯套括号(微调方便)

    【可叠加,相当于n次方】一层圆括号1.1倍,一层大括号1.05倍,一层方括号0.9倍

提示词网站推荐

  1. openart.ai
  2. arthub.ai

出图参数

文生图&图生图通用参数

  1. 采样迭代步数(Steps)

    理论上Steps越多效果越清晰,但实际上>20步后提升不大,默认20步,算力充足可设置30-40步,最低不要低于10步

  2. 采样方法(Sampler)

    AI进行图像生成时使用的某种特定算法,SD WebUI提供了很多算法选项,例如Euler a,Euler(适合插画风格,出图比较朴素)等,推荐使用有+号的算法,都是改进后的算法,不同模型也有自己推荐的算法,照做就好(推荐使用最后几个+Karras的)

  3. 宽度、高度(就是最后出图的分辨率)

    由于大部分模型都是使用低分辨率图片进行训练的,所以默认使用512x512分辨率的图片,如果直接设置高分辨率的输出结果,算法有可能会采用图片拼接的方式生成多个对象。通常想要获取高清图像的做法是,首先生成低分辨率图像后再通过“高清修复”进行放大(原理是再做了一次“图生图”)

  4. 提示词相关性(CFG Scale)

    数值越高,AI忠实的反映你的提示词的程度越高,通常7-12之间是比较安全的数值,太高容易变形

  5. 随机种子(seed)

    用来控制画面内容一致性的重要参数

  6. 生成的批次和每批数量

    就是batch 和 batch size,可以让机器一直跑,跑完找个最好的结果,再进行微调

图生图额外参数

  1. 原始图片

  2. 重绘幅度(Denosing)

    生成漫画效果,推荐0.6-0.8之间;注意太高会导致画面变形,太低看不出效果,需要尝试找到平衡的且合适的参数值

  3. 高度、高度(分辨率设置补充说明)

    一般推荐设置和导入原始图片相同的分辨率;但如果原始图片分辨率很大,生成会爆显存,此时就按比例往下折算到设备能够画出来的安全区间内;注意生成图片的比例建议与原始图片一致,如果想生成其他比例的图片,优先将原始图片裁剪成理想比例后再导入

  4. 缩放模式(图片下方)

    可以帮助裁掉一部分,包括:拉伸、裁剪、填充、直接缩放(放大潜变量)

    直接缩放(放大潜变量)对显存要求很高,不推荐使用

  5. 随机种子(补充说明)

    AI生成一幅画的过程是随机的,但每一次生成都有自己的一套描绘方式,该方式会被记录成一组随机数,即随机种子,使用相同的随机种子生成的图像必然会有很多相似之处,因为采用了同一套随机方法

    从图库浏览器,点击图片后右侧生成参数里包含了具体的随机种子值(Seed)

高清修复和放大算法

文生图:高清修复(Hi-Res Fix)

“打回重画,再来一幅”。分两步处理图像,先生成一个低分辨率版本,再根据它与指定的放大算法,再生成一个高分辨率版本,从而在不更改构图的情况下丰富细节。其本质其实就是将低分辨率的图片再"图生图"一次打回潜空间内,再重新去噪。

在参数控制里面勾选上“高清修复”后,就会多出两排额外的参数选项:

  1. 放大算法

    优先使用模型作者推荐的放大算法,不然无脑使用R-ESRGAN *,二次元使用R-ESRGAN *+ Anime6B

  2. 高清修复采样次数

    在修复过程中进行的采样步数,类似于生成图片时设置的Steps,因为修复是也需要对图片进行重绘

  3. 重绘幅度(Denoising)

    和图生图里的一致,要保持画面大的结构不发生变化,最好不要超过0.5。太低会出现边缘模糊,太高容易变形。如只是为了放大,安全区间0.3-0.5。如果想赋予AI更多想象力和发挥空间,那就设置0.5-0.7

  4. 尺寸设置(放大倍率、将宽度调整到、将高度调整到)

    指将图片由原始分辨率放大到多少,可以按倍数定,也可以按具体数值定

图生图:SD放大(SD Upscale)

“分几块画,拼到一起”。根据指定的放大倍数,将图生图的图像拆分成若干小块按固定逻辑重绘,再拼合成一张大图,可以实现在低显存下绘制大尺寸图片。

其实图生图本身就是一种高清修复,只要设置输出比原图更高的分辨率,控制重绘幅度即可。

如果想要让图生图变得更大、更精细,常用的另一种方式是Upscale放大脚本,在“脚本”的下拉框中选择“使用SD放大(SD upscale)”

  • 缩放系数:就是放大倍数

  • 放大算法:和之前介绍的一致

  • 图块重叠的像素(Tile overlap):就是拆分图片块之间,重合的缓冲像素区域,避免拼接后的结果图有明显的拼接痕迹。

【注意】开启SD放大后,最终宽高=(设置的宽高-重叠像素)x 放大倍率

​ 因此,设置重叠像素后,要在设置宽高的基础之上加上该像素值。

生成后处理:附加功能放大

“简单放大,随时可用”。利用各种放大算法,在图像生成后对其进行单独的放大处理,使之拥有更高的分辨率尺寸。相当于重绘幅度为0的高清修复,而且不存在扩散过程,所以速度很快。

它是在拉伸放大的基础上适当润滑了线条和色块边缘的模糊区域,但整体的精致和细腻程度不如前两种涉及了重绘的操作手法,它的优势还是在简单、方便、负担小,且随时可以调用

进阶模型

Embeddings(词嵌入,嵌入式向量)

Textual Inversion,后缀*.pt 文件很小kb级别,如果是Checkpoints是大词典,那么Embeddings就是小书签,它能够精准地指向个别字、词的含义,从而提供一个特别高效的索引,这样除了能够帮AI更好地画出字典里已经有的东西以外,还可以实现特定形象的重现。

存放路径:根目录StableDiffusionWebUI/embeddings,与models同级

在WebUI中Embeddings不需要特别调用,只需要在提示词里通过特定的词汇召唤它即可,可以是正面Embeddings,也可以是负面的Embeddings,而且可以多个Embeddings嵌套使用

LoRa(Low-Rank Adaptation Models,低秩适应模型)

向AI传递、描述某一个特征准确、主体清晰的形象。如果将Embeddings比喻成书签,那么LoRa就更像是夹在书本里的一页彩页,直接在这张纸上写的明明白白。主要应用特点是各种游戏、动漫角色的二次创作构建。

存放路径:根目录StableDiffusionWebUI/models/Lora

在提示框里使用尖括号调用 <lora:lara名[:权重]>

Hypernetwork(超网络)

和LoRa功能类似,都可以为网络提供特定的信息,但是Hypernetwork一般被用于改善生成图像的整体风格,即画风。

存放路径:根目录StableDiffusionWebUI/models/hypernetwork,与LoRa同级

使用时,在WebUI设置里,选择附加网络,在”将超网络(Hypernetwork)添加到提示词“中选中对应的Hypernetwork文件

【补充】网上多数研究者对于Hypernetwork在图像生成方面的评价并不好,至少不如LoRa和Embeddings那么好,其次它的作用其实可以部分被LoRa取代,现在有不少优秀的LoRa通过对训练样本的把控实现了画风的塑造植入。

局部重绘

局部重绘、inPaint Sketch(绘制)、inPaint Upload(上传蒙版)

扩展插件(Extension)

WebUI:列表安装、仓库url 安装

扩展推荐:

  1. 基础扩展:初学者补全WebUI
    • 中文语言包:实现基础的界面汉化
    • 图库浏览器(image browser):方便浏览作品,进行多种查询和管理
    • Tag Autocompletion:实现提示词的补全/翻译
    • Tagger:实现提示词高效精确反推
  2. 进阶扩展:熟练后拓展功能
    • Ultimate SD Upscale:图生图放大脚本”上位替代“
    • Local Latent Couple(LLuL):局部添加细节
    • Cutoff:提示词的描述成分分离控制
    • Infinite Zoom:生成趣味无限缩放视频

__EOF__

本文作者Zhu Junwei
本文链接https://www.cnblogs.com/zhujunwei/p/17737824.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   MisterJunwei  阅读(545)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
点击右上角即可分享
微信分享提示