时下文生图已经非常火热, 自己搭一个服务, 跑起来玩也是不错的选择

环境搭建

Windows环境搭建

  1. 获取AUTOMATIC1111/stable-diffusion-webui, 解压缩.

  2. 安装python 3.10.9, 注意开头要勾选把python添加到PATH或者手动添加.

  3. 设置国内pip源. 在C:\users\你的用户名\下创建pip文件夹, 并新建pip.ini文件, 添加以下内容:

    1
    2
    3
    [global]
    index-url = https://pypi.tuna.tsinghua.edu.cn/simple
    trusted-host = pypi.tuna.tsinghua.edu.cn

    当然也可以选其他源:

    1
    2
    3
    4
    5
    阿里云:http://mirrors.aliyun.com/pypi/simple/
    中国科技大学:https://pypi.mirrors.ustc.edu.cn/simple/
    豆瓣(douban):http://pypi.douban.com/simple/
    清华大学:https://pypi.tuna.tsinghua.edu.cn/simple/
    中国科学技术大学:http://pypi.mirrors.ustc.edu.cn/simple/
  4. 安装git, 安装完成后, 最好是有本地翻墙, 设置git代理, 不然下载可能出现问题

    1
    2
    git config --global https.proxy http://127.0.0.1:1080
    git config --global http.proxy http://127.0.0.1:1080
  5. 进入stable-diffusion-webui目录, 打开launch.py

    在下面位置添加一行输出

    1
    2
    3
    4
    def run(command, desc=None, errdesc=None, custom_env=None, live=False):
    print("run:", command) # 添加此行
    if desc is not None:
    print(desc)
  6. 运行webui.bat, 它会自动下载需要的组件.

    如果遇到它输出卡了很久或者失败, 找到我们设置的run:输出, 手动执行一下看看问题在哪.

    默认它会先git下载需要的库到repositories目录里, 然后才下载python的库, 为了提高操作速度, 可以在它下载git的时候另起一个终端执行python -m pip install -r requirements_versions.txt --prefer-binary下载所需的库.

    如果显卡的内存比较低, 打开webui-user.bat, 在 COMMANDLINE_ARGS= 后添加 --lowvram(显卡是2GB显存), 或者--medvram(4GB - 6GB显存), 然后运行webui-user.bat而非webui.bat. 参考

    出现以下信息代表正常执行, 可以在浏览器访问它了

    1
    2
    3
    4
    5
    Model loaded in 13.9s (load weights from disk: 0.1s, create model: 0.6s, apply weights to model: 8.6s, apply half(): 1.2s, move model to device: 1.3s, load textual inversion embeddings: 1.9s).
    run: git rev-parse HEAD
    Running on local URL: http://127.0.0.1:7860

    To create a public link, set `share=True` in `launch()`
  7. 访问http://127.0.0.1:7860:

    1678413027084

tag指南

tag规则

(tag)表示强调tag, ((tag))可以像这样嵌套多个括号, 强调更高, 但其实还不如写数值, 比如(tag:1.2), 就是强调1.2倍, 当然也可以是小于1来减弱.

tag1|tag2 表示混合1:1使用, 1girl,red|blue hair, long hair就是说红蓝长发的女孩

[tag]就是减弱tag

[tag1:tag2:n], 如果n为正整数, 就是在n步前用tag1, n步后用tag2, 如果<1的小数, 就是百分比

[tag1|tag2] 表示这是混合物. [cow|horse|cat|dog] in a field就是先朝着像牛努力,再朝着像马努力,再向着猫努力,再向着狗努力,再向着马努力

tag越靠前, 权重越大. tag越多, 每个的权重就越小. 如果拼写错误, 将会理解成字母.

<lora:theovercomer8sContrastFix_sd15:0.6> 这种就是选择了模型后, 自动填入的, :表示强调程度,

参考文件, 来自B站up主PiPI哈皮.

tag进阶

参考: Stable Diffusion使用入门与提示词技巧

推荐的tag顺序是: 描述画质的词, 画面主要内容的词

提高画质

1
best quality, ultra-detailed, masterpiece, finely detail, highres, 4k, 8k wallpaper, extremely clear, ultra-detailed unity 8k wallpaper, dreamlike

画质负面词

1
2
3
(worst quality:2), (low quality:2), (normal quality:2), lowres
以下的是text inversion, 需要在civitai下载
EasyNegative,ng_deepnegative_v1_75t

保真

1
realistic, photo-realistic,vivid

提高元素质量

1
2
3
4
beautiful detailed eyes, detailed facial features, detailed clothes features
highly detailed skin
extremely delicate and beautiful girls

后面的名词也可以换成其他的

人物负面词

1
mutated hands and fingers,deformed, bad anatomy, disfigured, poorly drawn face, mutation, extra limb, ugly, poorly drawn hands, missing limb, floating limbs, disconnected limbs, malformed hands, out of focus, long neck, long body, skin blemishes,acnes(粉刺), skin spots(皮肤斑点), age spot(老年斑)

人物描述词

1
2
smile, puffy eyes(眼袋 卧蚕?),skin tight(紧致),shiny(光泽) skin,slender(纤细),slim
bangs(刘海),

手的负面词

1
((poorly drawn hands)),more than 1 left hand, more than 1 right hand, short arm, (((missing arms))), bad hands,missing fingers,(extradigit),(fewer digits),mutated hands,(fused fingers),(too many fingers),sharp fingers,wrong figernails,long hand,double middle finger,index fingers together,missing indexfinger,interlocked fingers,pieck fingers,sharp fingernails,(steepled fingers),x fingers,((curled fingers)),(no finger gaps),interlocked fingers,fingers different thickness,cross fingers,poor outline,big fingers,finger growth,outline on body,outline on hair,out line on background,more than one hands,fuse arm,fuse elbow,more than two arm,more than two elbow

视角和视线

1
2
3
4
5
6
7
8
9
10
dynamic angle
from above 俯视
from below 仰视
wide shot 广角
Aerial View 鸟瞰
looking at viewer
looking at another
looking away
looking back
looking up

身体

1
2
3
full body shot 全身
half body shot,cowboy shot 半身
close-up shot 近身

光线

1
2
3
4
dynamic lighting 动态光
cinematic lighting 电影光
professional lighting
soft lighting, radiosity

画风

1
2
sketch 素描
one-hour drawing challenge 手绘风

身体状态

1
2
3
blush(脸红)
wet sweat(大汗)
flying sweatdrops (飞汗 )

姿势

1
2
3
4
5
hands on 例hands on own face, hands on feet, hands on breast 
kneeling 跪着
hand between legs
hair flip 撩发
skirt flip 撩衣

推荐的获取tag的网站

Lexica 有图片和prompt

pixiv ai图片分享

civitai里面的每一个模型的图片都有人分享, 通过PNG Info获取prompt

aitag 一个tag网站

技巧

获取AI图的信息

如果看上了一个ai图片, 找到原图, 把图放到webui的PNG info里, 可以读取生成时的参数, 不过小心网络图片压缩导致的信息丢失.

另外, 由于模型的本地文件名决定了某些tag的名称, 所以如果你下载模型的时候没有使用默认名称, 就需要知道它具体用了什么模型, 改成正确的名字.

此外, text inversion在被使用的时候, 是没办法和普通tag做区分的, 如果发现奇怪的名词tag, 那大概率是text inversion. 可以在civitai里搜索它.

模型训练

StableDiffusion/NAI DreamBooth自训练全教程

模型推荐

https://civitai.com/models/13941/epinoiseoffset 提高对比度的Noise Offset的Lora模型

教程推荐

AI绘画教程:从入门到放弃(xiaobai)

插件推荐

Booru tag autocompletion, 自动补全tag

在线体验服务

huggingface可以提供名为Space的虚拟机服务, 上面有很多免费的各种服务, 可以通过这些免费的服务来跑 AI出图 的demo. 缺点就是速度慢, 而且没办法灵活运用插件, 只能跑着玩.

比如如下几个服务:

controlnet

https://huggingface.co/spaces/hysts/ControlNet

stable-diffusion-webui

https://huggingface.co/spaces/jackli888/stable-diffusion-webui

常见错误

  1. No module ‘xformers’. Proceeding without it.

    对于低端显卡, 倒是没什么影响, 但是高端显卡, 可能需要解决一下

  2. ModuleNotFoundError: No module named ‘basicsr.version’

    先重新运行python -m pip install -r requirements_versions.txt --prefer-binary, 再打开stable-diffusion-webui\venv\pyvenv.cfg , 修改 include-system-site-packages = true , 再重新运行webui.bat即可. 参考

  3. Expected all tensors to be on the same device, but found at least two devices, cpu and cuda:0! (when checking argument for argument index in method wrapper__index_select)

    去掉webui-user.bat的 --medvram

  4. RuntimeError: CUDA out of memory. Tried to allocate 30.00 MiB (GPU 0; 4.00 GiB total capacity; 1.7 GiB already allocated; 0 bytes free; 2.30 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation.

    显卡内存不足, 在webui-user.bat COMMANDLINE_ARGS= 添加--lowvram, 使用webui-user.bat启动

其他错误参考

关键名词解释

来源

模型仓库

常见的模型下载仓库为以下几种,点击可直接前往仓库地址:

  • HuggingFace:Stable Diffusion、ControlNet的官方仓库。
  • Civitai:里面多是Lora或其它NSFW等模型的仓库。
  • Discord:公共聊天软件,如果有需要可行前往搜索相应频道。
  • TG:公共聊天软件,如果有需要可行前往搜索相应频道。
  • Reddit:公共交流社区,如果有需要可行前往搜索相应频道。

在HuggingFace仓库中下载所需的模型时,将会看到各种各样格式的文件。对于一般的使用者来说,仅下载Stable Diffusion的常用CKPT格式模型文件即可。

模型种类

大模型

大模型特指标准的latent-diffusion模型。拥有完整的TextEncoderU-NetVAE

由于想要训练一个大模型非常困难,需要极高的显卡算力,所以更多的人选择去训练小型模型。

CKPT

CKPT格式的全称为CheckPoint(检查点),完整模型的常见格式,模型体积较大,一般单个模型的大小在7GB左右。

文件位置:该模型一般放置在*\stable-diffusion-webui\models\Stable-diffusion目录内。

小模型

小模型一般都是截取大模型的某一特定部分,虽然不如大模型能力那样完整,但是小而精,因为训练的方向各为明确,所以在生成特定内容的情况下,效果更佳。

常见微调模型:Textual inversion (Embedding)HypernetworkVAELoRA等,下面一一进行介绍。

VAE

全称:VAE全称Variational autoencoder。变分自编码器,负责将潜空间的数据转换为正常图像。

后缀格式:后缀一般为.pt格式。

功能描述:类似于滤镜一样的东西,他会影响出图的画面的色彩和某些极其微小的细节。大模型本身里面自带 VAE ,但是并不是所有大模型都适合使用VAE,VAE最好搭配指定的模型,避免出现反效果,降低生成质量。

使用方法:设置 -> Stable-Diffusion -> 模型的 VAE (SD VAE),在该选项框内选择VAE模型。

文件位置:该模型一般放置在*\stable-diffusion-webui\models\VAE目录内。

Embedding

常见格式为ptpngwebp格式,文件体积一般只有几KB。

风格模型,即只针对一个风格或一个主题,并将其作为一个模块在生成画作时使用对应TAG在Prompt进行调用。

使用方法:例如用数百张海绵宝宝训练了一个Embedding模型,然后将该模型命名为HMBaby,在使用AI绘图时加载名称为HMBaby的Embedding模型,在使用Promat时加入HMBaby的Tag关键字,SD将会自动调用该模型参与AI创作。

文件位置:该模型一般放置在*\stable-diffusion-webui\embeddings目录内。

Hypernetwork

一般为.pt后缀格式,大小一般在几十兆左右。这种模型的可自定义的参数非常之多。

使用方法:使用方法:在SD的文生图或图生图界面内的生成按钮下,可以看到一个红色的图标,该图标名为Show extra networks(显示额外网络),点击该红色图标将会在本页弹出一个面板,在该面板中可以看到Hypernetwork选项卡

文件位置:该模型一般放置在*\stable-diffusion-webui\models\hypernetworks目录内。

LoRA

LoRA(Low-Rank Adaptation of Large Language Models)的模型分两种,一种是基础模型,一种是变体。

目前最新版本的Stable-diffusion-WebUI原生支持Lora模型库,非常方便使用。

使用方法:在SD的文生图或图生图界面内的生成按钮下,可以看到一个红色的图标,该图标名为Show extra networks(显示额外网络),点击该红色图标将会在本页弹出一个面板,在该面板中可以看到Lora选项卡,在该选项卡中可以自由选择Lora模型,点击想要使用的模型将会自动在Prompt文本框中插入该Lora模型的Tag名称。

基础模型

名称一般为chilloutmix*,后缀可能为safetensors或CKPT。

基础模型存放位置:*\stable-diffusion-webui\models\Stable-diffusion目录内。

变体模型

变体模型存放位置:*\stable-diffusion-webui\models\Lora目录内。

模型后缀解析

格式 描述
.ckpt Pytorch的标准模型保存格式,容易遭受Pickle反序列化攻击。
.pt Pytorch的标准模型保存格式,容易遭受Pickle反序列化攻击。
.pth Pytorch的标准模型保存格式,容易遭受Pickle反序列化攻击。
.safetensors safetensors格式可与Pytorch的模型相互格式转换,内容数据无区别。
其它 webui 特殊模型保存方法:PNG、WEBP图片格式。

Safetensors格式

  • Safetensors格式所生成的内容与ckpt等格式完全一致(包括NFSW)。
  • Safetensors格式拥有更高的安全性,
  • Safetensors比ckpt格式加载速度更快
  • 该格式必须在2023年之后的Stable Diffusion内才可以使用,在此之间的SD版本内使用将无法识别。
  • Safetensors格式由Huggingface推出,将会逐渐取代ckpt、pt、pth等格式,使用方法上与其它格式完全一致。【该详细的说明文章:*.safetensors (github.com)

模型训练

Embedding (Textual inversion)

可训练:画风√ 人物√ | 推荐训练:人物

配置要求:显存6GB以上。

训练速度:中等 | 训练难度:中等

综合评价:☆☆☆

Hypernetwork

可训练:画风√ 人物√ | 推荐训练:画风

配置要求:显存6GB以上。

训练速度:中等 | 训练难度:难

综合评价:☆☆

评价:非常强大的一种模型,但是想训练好很难,不推荐训练。

LoRA

可训练:画风? 人物√ 概念√ | 推荐训练:人物

配置要求:显存8GB以上。

训练速度:快 | 训练难度:简单

综合评价:☆☆☆☆

评价:非常好训练 好出效果的人物训练,配置要求低,图要求少。

备注:LoRA 本身也应该归类到 Dreambooth,但是这里还是分开讲。

Dreambooth / Native Train

可训练:画风√ 人物√ 概念√ | 推荐训练:Dreambooth 推荐人物,Native Train 推荐画风

配置要求:显存12GB以上。

训练速度:慢 | 训练难度:可以简单可以很难

综合评价:☆☆☆☆☆

评价:微调大模型,非常强大的训练方式,但是使用上会不那么灵活,推荐训练画风用,人物使用 LoRA 训练。

DreamArtist

显存要求6GB(4GB应该也可以),只需要(也只能)使用一张图完成训练,一般用于训练人物(画风没法抓住主次),优点是训练要求极低,成功率高,缺点是容易过拟合,并且不像Embedding可以跨模型应用,这个训练时使用什么模型应用时就要用什么,哪怕调一下CLIP参数生成结果都会完全跑飞。推荐每250步保存模型,后期用X/Y图脚本进行挑选。

模型后缀

仓库内一般存在多个模型文件,文件名后缀各不相同,这里简单介绍下文件名常见后缀及其含义:

ControlNet

ControlNet比之前的img2img要更加的精准和有效,可以直接提取画面的构图,人物的姿势和画
面的深度信息等等。有了它的帮助,就不用频繁的用提示词来碰运气,抽卡式的创作了。

instruct-pix2pix

在 stable-diffusion-webui 中的img2img专用模型 自然语言指导图像编辑 生成速度极快 ,仅需要几秒的时间。

FP16、FP32

代表着精度不同,精度越高所需显存越大,效果也会有所提升。

512|768

代表着默认训练分辨率时512X512还是768X768,理论上默认分辨率高生成效果也会相应更好。

inpaint

代表着是专门为imgtoimg中的inpaint功能训练的模型,在做inpaint时效果会相对来说较好。

depth

代表此模型是能包含处理图片深度信息并进行inpainting和img2img的

EMA

模型文件名中带EMA一般意味着这是个用来继续训练的模型,文件大小相对较大

与之相比,正常的、大小相当较小的那个模型文件是为了做推理生成的

对于那些有兴趣真正理解发生了什么的人来说,应该使用EMA模型来进行推理

小模型实际上有EMA权重。而大模型是一个 “完整版”,既有EMA权重,也有标准权重。因此,如果你想训练这个模型,你应该加载完整的模型,并使用use_ema=False。

EMA权重

就像你作为一个学生在接受训练时,也许你会在最后一次考试表现较差,或者决定作弊并记住答案。所以一般来说,通过使用考试分数的平均值,你可以更好地了解到学生的表现,

由于你不关心幼儿园时的分数,如果你只考虑去年的分数(即只用一组最近的实际数据值来预测),你会得到MA(moving average 移动平均数). 而如果你保留整个历史,但给最近的分数以更大的权重,则会得到EMA(exponential moving average 指数移动平均数)。

这对具有不稳定训练动态的GANs来说是一个非常重要的技巧,但对扩散模型来说,它其实并不是那么重要。

VAE

VAE模型文件并不能和正常模型文件一样独立完成图片生成。