AI绘画Stable Diffusion 使用指北

image-20230421181934021

开局先上几个地址给他供起来

几个B站UP主

安装Stable Diffusion

目前各路大神都对stable-diffusion-webui进行了优化打包, 几乎是一键运行, 大大节省了部署的时间, 不然自己要被各种环境安装和初始化搞的头皮发麻

Windows版

整合包UP主主页秋葉aaaki

这里使用秋葉V4整合包 ← 下载到本地

(初次安装需要安装依赖 下载地址)

解压到一个你喜欢的目录, 双击运行A启动器.exe

image-20230421160611027

再点击一键启动即可

image-20230421164355685

Linux版

先决条件

驱动

显卡驱动的安装请自行百度解决

参考文章1:https://www.cnblogs.com/panie2015/p/10683819.html

参考文章2:https://www.cnblogs.com/2012blog/p/9431432.html

1
2
3
4
5
6
# n卡下面这条命令都可以正常运行
nvidia-smi
# amd卡下面这三条命令都可以正常运行
rocm-smi
rocminfo
clinfo
常用程序

确保系统已安装vim git zip unzip 程序

1
2
3
4
# ubuntu系统(debian系)
sudo apt install vim git zip unzip -y
# centos系统(红帽系)
yum install vim git zip unzip -y

整合包部署

Linux版使用B站青空的整合包

下载解压

下载地址:stable-diffusion-webui-nvidia.zip 6.2G

复制链接地址 使用wget下载到本地

1
2
3
4
#amd卡下载stable-diffusion-webui-amd.zip并解压
unzip -q stable-diffusion-webui-amd.zip
#N卡下载stable-diffusion-webui-nvidia.zip并解压
unzip -q stable-diffusion-webui-nvidia.zip
部署

解压完成后打开webui文件夹并运行install.sh脚本

1
2
cd stable-diffusion-webui
sh install.sh
image-20230421150054855

初次安装直接输入1回车进行一键部署SD-webui环境, 时间稍微长一些

这里一般是自动的,如果提示覆盖需要根据实际情况选择是否覆盖。

这里如果输入y会删除环境包(也就是删除webui文件夹下install文件夹),一般会选择n。等运行没有问题后可以删除那个文件夹

显示部署完成即部署成功

后续更新输入2即可git pull更新webui本体及全部插件

启动并运行webui

激活conda环境

执行bash命令

出现(base) 表示conda安装成功

切换webui虚拟环境

1
2
3
4
#n卡执行:
conda activate sd-webui
#AMD卡执行:
conda activate webui-py38-rocm

运行start.sh

确保已经切换到虚拟环境,而不是(base)环境

然后sh start.sh

看到这个即运行成功

image-20230421150543937

基本使用

刚进来大概是这样的

image-20230421172134209

关于主模型

不同的模型生成的图片各有不同, 按需选择主模型

我们可以使用别人训练好的模型进行AI绘画

我们可以去C站或者别的地方下载模型放在自己的SD里面

比如从C站下载chilloutmix模型(ckpt或safetensors格式), 然后放在SD目录的models\Stable-diffusion文件夹里面

关于格式,目前建议使用safetensors文件,因为

  • 文件更小
  • 安全性更高

另外注意.safetensors格式的文件也有可能是Lora,不一定是CheckPoint,后续讲到的时候在细说。

在SD的左上角刷新就可以看到我们放进去的模型

image-20230421172718735

chilloutmix系列 真人风格

ChikMix系列 5D韩风

Counterfeit系列 常用二刺猿风格

Guofeng3系列 国风

Pastel系列 粉彩二次元风

一些模型下载方式

  1. https://huggingface.co/ (目前最多人使用的一个分享模型的网站,不用魔法上网)
  2. https://drive.google.com/drive/folders/1vGc16Bb8CDW1piUj_5thzbsCmDFamYyt?usp=sharing(里面的很多模型是基于日本绘画师的风格训练,需魔法上网)
  3. https://civitai.com/(模型很多,各种风格,不用魔法上网)
  4. https://cyberes.github.io/stable-diffusion-models/(SD模型,不用魔法上网)
  5. https://rentry.co/sdmodels(模型很多,需魔法上网)

关于prompt

基本使用:

  • 确定主体:

    • 主题是什么?人物?动物还是风景? => 猫
  • 添加细节:

    • 特殊灯光: 柔和、环境、环形灯、霓虹 => 自然光
    • 动作: 跳、坐、跑、飞 => 飞
    • 环境。室内、室外、水下、太空中等 => 在天空中
    • 色彩方案。鲜艳、黑暗、柔和色调等 => 使用明亮的颜色
    • 画面风格? 3D渲染、吉卜力工作室、电影海报等 => 3D渲染
    • …等等
  • (word) - 将权重提高 1.1 倍

  • ((word)) - 将权重提高 1.21 倍(= 1.1 * 1.1),乘法的关系。

  • [word] - 将权重降低 90.91%

  • (word:1.5) - 将权重提高 1.5 倍

  • (word:0.25) - 将权重减少为原先的 25%

反向关键词就是你不想要什么, 如:

1
nsfw, lowres, bad anatomy, bad hands, text, error, missing fingers,extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts, signature, watermark, username, blurry

配合ChatGPT食用更佳

image-20230421180816758

跑起来

image-20230421175918152

其他参数可以先不用动, 本节先把SD跑起来再说

文生图

下面就开始比较详细的介绍

开始使用该ui映入眼帘的就是文生图功能

image-20230426171717624

模仿是学习的好方法

image-20230427175623560

别人使用的lora模型本地可能不存在 跑出来的图片也会有所不同

保存自己的关键词等信息

image-20230427180038090

重载

image-20230427180153078

Prompt

一些速查tag:

自然语言

对于在自然语言上特化训练的模型,建议使用描述物体的句子作为提示词。

取决于训练时使用的数据集,可以使用英文日文特殊符号或一些中文。大多数情况下英文较为有效。

避免 with 之类的连接词或复杂的语法,大多数情况下 NLP 模型只会进行最简单的处理。

其他语言

Emoji

Emoji (??,??,??,??,??,??,??,?????) 表情符号也是可以使用并且 非常准确 的。

Emoji 因为只有一个字符,所以在语义准确度上表现良好。

更多Emoji: https://unicode.org/emoji/charts/emoji-list.html

例:使用??,girl生成的图片

img

颜文字

对于使用 Danbooru 数据的模型来说,可以使用颜文字在一定程度上控制出图的表情。

例如:

:-) 微笑 :-( 不悦 ;-) 使眼色 :-D 开心 :-P 吐舌头 :-C 很悲伤 :-O 惊讶 张大口 :-/ 怀疑

仅支持西方颜文字,详细内容请见 Danbooru 颜文字部分

例:使用girl,:-P生成的图片

img

艺术风格

可以在关键词中添加你想要的艺术风格来改变图片

  • Ink wash painting 水墨画

    image.png
  • Ukiyo-e 浮世绘

    img
  • 某些游戏的风格, Granblue Fantasy 碧蓝幻想

    image.png
  • 或是一些名人画师的艺术风格等等…

运动和姿势

如果没有很大要求的话,选择只与少数姿势相关的提示。

这里的姿势是指某一事物的物理配置:图像主体相对于摄像机的位置和旋转,人类/机器人关节的角度,果冻块被压缩的方式,等等。

试图指定的事物中的差异越小,模型就越容易学习。

因为运动就其定义而言涉及到主体姿势的巨大变化,与运动相关的提示经常导致身体的扭曲,如重复的四肢。另外,因为人类的四肢,特别是人类的手和脚有很多关节,他们可以采取许多不同的、复杂的姿势。这使得他们的可视化特别难学,对于人类和神经网络都是如此。

简而言之:人类站着/坐着的好形象很容易,人类跳着/跑着的好形象很难。

基本模板

先想一下要画什么,例如 主题,外表,情绪,衣服,姿势,背景 一类,然后参考数据集标签表。

然后将想要的相似的提示词组合在一起,请使用英文半角 , 做分隔符,并将这些按从最重要到最不重要的顺序排列。

一种模板示例如下:

1
(quality), (subject)(style), (action/scene), (artist), (filters)
  • (quality) 代表画面的品质,比如 low res 结合 sticker 使用来 “利用” 更多数据集, 1girl 结合 high quality 使用来获得高质量图像。
  • (subject) 代表画面的主题,锚定画面内容,这是任何提示的基本组成部分。
  • (style) 是画面风格,可选。
  • (action/scene) 代表动作/场景,描述了主体在哪里做了什么。
  • (artist) 代表艺术家名字或者出品公司名字。
  • (filters) 代表一些细节,补充。可以使用 艺术家,工作室,摄影术语,角色名字,风格,特效等等。

权重

  • (word) - 将权重提高 1.1 倍
  • ((word)) - 将权重提高 1.21 倍(= 1.1 * 1.1),乘法的关系。
  • [word] - 将权重降低 90.91%
  • (word:1.5) - 将权重提高 1.5 倍
  • (word:0.25) - 将权重减少为原先的 25%
  • \(word\) - 在提示词中使用字面意义上的 () 字符

使用数字指定权重时,必须使用 () 括号。如果未指定数字权重,则假定为 1.1。指定单个权重仅适用于 SD-WebUI。

1
2
3
4
5
6
> ( n ) = ( n : 1.1 )
> (( n )) = ( n : 1.21 )
> ((( n ))) = ( n : 1.331 )
> (((( n )))) = ( n : 1.4641 )
> ((((( n )))) = ( n : 1.61051 )
> (((((( n )))))) = ( n : 1.771561 )

img

参数替换

  • [to:when] 在指定数量的 step 后添加 to 到提示
  • [from::when] 在指定数量的 step 后从提示中删除 from
  • [from:to:when] 在指定数量的 step 后将 from 替换为 to

其中 fromto 是替换前后的提示词,when 表示替换时机。

如果 when 是介于 0 和 1 之间的数字,则它指进行切换的步数的百分比。如果它是一个大于零的整数,那么这代表进行切换的字面步数。

替换标签可无限嵌套。

示例:对于 a [fantasy:cyberpunk:16] landscape

  • 开始时,模型将绘制 a fantasy landscape
  • 在第 16 步之后,它将采用 a cyberpunk landscape 继续生成。

参数转换

tstmp_20230426175428

生成过程中每步轮换使用多个提示词。基本语法是:[a|b|c]

1
[cow|horse] in a field

在第 1 步中,提示是“田间的奶牛”。第 2 步是“田野里的马”。第 3 步是“田野里的奶牛”,依此类推。

参数矩阵

需开启Prompt matrix脚本

使用 | 分隔多个 Tag,程序将为它们的每个组合生成一个图像。 例如,如果使用 1girl,| red hair| green hair ,则可能有四种组合(始终保留提示的第一部分):

1
2
3
4
1girl
1girl,red hair
1girl,green hair
1girl,red hair,green hair
img

反向关键词

否定提示是一种使用 Stable-Diffusion 的方式,允许用户指定他不想看到的内容,而不对模型本身做额外的要求。

比如使用以下提示词避免生成水印和文字内容

1
2
3
lowres, bad anatomy, bad hands, text, error, missing fingers,
extra digit, fewer digits, cropped, worst quality, low quality,
normal quality, jpeg artifacts, signature, watermark, username, blurry

或者

1
nsfw, lowres, bad anatomy, bad hands, text, error, missing fingers,extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts, signature, watermark, username, blurry

迭代次数

image-20230426184304065

迭代是重复反馈的动作,神经网络中我们希望通过迭代进行多次的训练以到达所需的目标或结果。

每一次迭代得到的结果都会被作为下一次迭代的初始值。

更多的迭代步数可能会有更好的生成效果,更多细节和锐化,但是会导致生成时间变长。而在实际应用中,30 步和 50 步之间的差异几乎无法区分。

建议步数在20 ~ 25之间

采样方法

image-20230426184255859

目前好用的有 EulerEuler a(更细腻),和 DDIM

推荐 Euler a 或者 DPM ++ * Karras

Euler a 富有创造力,不同步数可以生产出不同的图片。调太高步数 (>30) 效果不会更好。

DDIM 收敛快,但效率相对较低,因为需要很多 step 才能获得好的结果,适合在重绘时候使用

LMSPLMSEuler 的衍生,它们使用一种相关但稍有不同的方法(平均过去的几个步骤以提高准确性)。大概 30 step 可以得到稳定结果

PLMS 是一种有效的 LMS(经典方法),可以更好地处理神经网络结构中的奇异性

DPM2 是一种神奇的方法,它旨在改进 DDIM,减少步骤以获得良好的结果。它需要每一步运行两次去噪,它的速度大约是 DDIM 的两倍。但是如果你在进行调试提示词的实验,这个采样器效果不怎么样

Euler 是最简单的,因此也是最快的之一

尺寸

出图尺寸太宽时,图中可能会出现多个主体。

要匹配好姿势,镜头和人物才不畸形,有时候需要限定量词,多人物时要处理空间关系和 prompt 遮挡优先级。人数->人物样貌->环境样式->人物状态

1024 之上的尺寸可能会出现不理想的结果,比如多个头多个身子,推荐使用 小尺寸分辨率 + 高清修复

提示词相关性

image-20230426185615831

图像与引导词匹配程度。

增加这个值将导致图像更接近引导词,但过高会让图像色彩过于饱和。一般在5 ~ 15之间为好,7,9,12是3个常见的设置值。

建议默认7

随机种子

image-20230426185250664

理论上,种子决定模型在生成图片时涉及的所有随机性。

实际的种子数值并不重要。它只是初始化一个定义扩散起点的随机初始值。

批次与数量

image-20230426190142067

  • Batch Count(生成批次) 指定共生成几个批次。

  • Batch Size(每批数量) 指定每个批次并行生产多少张图片。

大的生成批次需要消耗巨量显存。显卡没有超过 12G 的显存,请不要调节批次。

对于显存极大的显卡而言,一次生成一张图片无法充分利用显卡计算容量,此时可将批次提高以充分压榨算力。

高清修复

文生图中可以可以通过高清修复来提升分辨率,按照作者的介绍说,这个高清修复其实就是使用了图生图功能对图片进行放大。

其实就是这个高清修复就是把文生图出来的图片用图生图调高分辨率又再跑了一次。

实际操作

image-20230426190710044

image-20230426190749030

图生图

image-20230427182329797

图生图部分参数和文生图一样 下面介绍一些不同的地方

参数介绍

重绘程度

image-20230427182510421

图生图中最重要的参数即为重绘幅度,首先准备一个小姐姐,不输入任何正负tag,研究下重绘幅度的对图片的影响

img

不输入负向tag,在正向tag中输入Pikachu,可以看到前几张还算正常,0.8之后就直接变成皮卡丘了

img

重绘幅度很重要,值越大表示对原图重绘幅度越大

一般设置为0.75,这样图片会有较大的变化。

缩放模式

image-20230427182801363

  • 拉伸
  • 裁剪
  • 填充
  • 拉伸(放大潜变量)

没特殊需求的话使用填充即可

绘图

绘图会把颜色信息带入,重绘幅度越低,颜色信息表现得越明显,另外绘图会将输入图片的所有部分继续重绘

比如给衣服换个颜色,注意如果正向tag中有和衣服颜色相关的可以先去掉,避免对结果产生影响

  • 提示词相关性7
  • 重绘幅度0.1,0.4,0.5,0.6,0.7,0.8,1.0

img

0.5重绘程度看起来符合预期一些

img

局部重绘

局部重绘没有颜色信息,仅仅只针对蒙版部分或者非蒙版部分继续绘制(可通过选项控制),其中会多出几个选项

image-20230427183219674

image-20230427183557073

换个衣服

  • 提示词相关性7
  • 重绘幅度0.1,0.4,0.5,0.6,0.7,0.8,1.0
  • 加上关键词(blue school uniform:1.4),(pink t-shirt:1.4)

img

重绘幅度在0.5的时候比较符合结果

再来重绘幅度选择0.6、重绘区域选择全图、蒙版蒙住内容选择潜变量数值零

img

局部重绘(手涂蒙版)

image-20230427183824939

重绘幅度0.6, 没有写任何提示词

img

重绘幅度太大AI就开始在蒙版里面放飞自我了, 不能太大

脚本-回送

将输出的图片继续当作输入生成图片,迭代次数即最终生成几张,每张的前一张作为本次的输入参数一直迭代

img

脚本-向外绘制

采样方法DPM++ SDE Karras、步数20、重绘幅度0.6、左边为原图,右边为左右外绘的图,虽然看起来不是很符合逻辑,但是一眼就能看出这个功能的含义了,就是向图像外进行绘制,如果边缘比较硬可以调高蒙版模糊像素试试

img

脚本-使用SD放大

Stable Diffusion中有很多方法,此处简单描述,注意使用放大的时候重绘幅度要比较小,否则画面可能重绘幅度过大,导致变化太多,重绘幅度太小可能导致没有添加足够多的细节,放大是在尺寸倍增的时候适当添加细节。

image-20230427193541691

反推提示词

在顶部生成按钮的旁边有两个按钮,这两个按钮是用来反推提示词的,比如在随便一张照片,并不是AI生成自带提示词那种(AI生成的也可以),他会根据图片的内容用文本去描述图片,第一次点击会下载相关依赖,比较慢一点

image-20230427193641946

  • CLIP反推,描述还是比较准确的,衣服、颜色、背景都符合图像,CLIP反推一般是一句话描述

  • DeepBooru反推,结果也很准确,不过它的风格是关键词堆砌,很想我们在书写tag时的做法

image-20230427193730880