乐趣区

关于深度学习:人工智能丹青圣手全平台原生Docker构建StableDiffusionWebui的AI绘画库教程

世间有限丹青手,遇上 AI 画不成。最近一段时间,可能所有人类画师都得收回一句“既生瑜,何生亮”的感叹,因为 AI 绘画通用算法 Stable Diffusion 未然超神,无需美术根底,也不必经久不息的刻苦练习,只须要一台电脑,人人都能够是丹青圣手。

本次咱们全平台构建基于 Stable-Diffusion 算法的 Webui 可视化图形界面服务,基于本地模型来进行 AI 绘画操作。

本地装置 Stable-Diffusion-Webui

如果零碎之前装置过 Python3.10 或者应用过 Pytorch 深度学习框架,那么举荐间接本地装置 Stable-Diffusion-Webui,因为 Stable-Diffusion 的外围依赖库也是 Pytorch。

首先拉取官网的我的项目:

git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git

随后进入我的项目的目录:

cd stable-diffusion-webui

官网文档倡议间接在目录中运行 shell 脚本:

./webui.sh

但事实上,shell 脚本很容易在过程中报错,该项目标外围代码其实是 launch.py,所以实践上,咱们只须要失常运行 launch.py 文件即可。

首先确保本机的 Python 版本号大于等于 3.10.9

对于 Python3.10 的装置,请移玉步至:一网成擒全端涵盖,在不同架构 (Intel x86/Apple m1 silicon) 不同开发平台 (Win10/Win11/Mac/Ubuntu) 上装置配置 Python3.10 开发环境,这里不再赘述。

另外确保 Pytorch 的版本号大于等于 13.1.0,对于 Pytorch,请移步:闻其声而知雅意,M1 Mac 基于 PyTorch(mps/cpu/cuda)的人工智能 AI 本地语音辨认库 Whisper(Python3.10)

随后装置相干的依赖库:

pip3 install -r requirements.txt  
pip3 install -r requirements_versions.txt

依赖文件中,有一个库可能会出问题,就是 GFPGAN,它是腾讯开源的人脸识别模块,这里举荐应用 GFPGAN 官方网站 (https://github.com/TencentARC/GFPGAN) 的装置形式:

# Install basicsr - https://github.com/xinntao/BasicSR  
# We use BasicSR for both training and inference  
pip install basicsr  
  
# Install facexlib - https://github.com/xinntao/facexlib  
# We use face detection and face restoration helper in the facexlib package  
pip install facexlib  
  
pip install -r requirements.txt  
python setup.py develop  
  
# If you want to enhance the background (non-face) regions with Real-ESRGAN,  
# you also need to install the realesrgan package  
pip install realesrgan

装置胜利后,最好验证一下:

➜  ~ python3  
Python 3.10.9 (main, Dec 15 2022, 17:11:09) [Clang 14.0.0 (clang-1400.0.29.202)] on darwin  
Type "help", "copyright", "credits" or "license" for more information.  
>>> import gfpgan  
>>>

所有依赖装置胜利后,就能够间接运行 launch.py 文件即可:

python3 launch.py

程序返回:

Python 3.10.9 (main, Dec 15 2022, 17:11:09) [Clang 14.0.0 (clang-1400.0.29.202)]  
Commit hash: 0cc0ee1bcb4c24a8c9715f66cede06601bfc00c8  
Installing requirements for Web UI  
Launching Web UI with arguments: --upcast-sampling --use-cpu interrogate  
Warning: caught exception 'Torch not compiled with CUDA enabled', memory monitor disabled  
No module 'xformers'. Proceeding without it.  
==============================================================================  
You are running torch 1.13.0.  
The program is tested to work with torch 1.13.1.  
To reinstall the desired version, run with commandline flag --reinstall-torch.  
Beware that this will cause a lot of large files to be downloaded, as well as  
there are reports of issues with training tab on the latest version.  
  
Use --skip-version-check commandline argument to disable this check.  
==============================================================================  
Loading weights [6ce0161689] from /Users/liuyue/wodfan/work/stable-diffusion-webui/models/Stable-diffusion/v1-5-pruned-emaonly.safetensors  
Creating model from config: /Users/liuyue/wodfan/work/stable-diffusion-webui/configs/v1-inference.yaml  
LatentDiffusion: Running in eps-prediction mode  
DiffusionWrapper has 859.52 M params.  
Applying cross attention optimization (InvokeAI).  
Textual inversion embeddings loaded(0):   
Model loaded in 8.2s (create model: 0.6s, apply weights to model: 5.0s, apply half(): 1.9s, move model to device: 0.5s).  
Running on local URL:  http://127.0.0.1:7860

Stable-Diffusion-Webui 服务会运行在零碎的 7860 端口上。

须要留神的是,如果本地零碎不反对 cuda 模式,须要批改运行命令:

python3 launch.py --skip-torch-cuda-test --upcast-sampling --use-cpu interrogate

这里应用 CPU 来进行模型训练。

另外如果是 M 系列的 Mac,其实是反对 MPS 模式的,但 Stable Diffusion 目前的最新版并不反对 MPS,所以须要独自设置环境变量,敞开 MPS 模式:

export PYTORCH_ENABLE_MPS_FALLBACK=1

最初拜访 http://127.0.0.1:7860 即可,本地构建 Stable-Diffusion-Webui 服务就实现了。

Docker 构建 Stable-Diffusion-Webui

如果不想太折腾,也能够应用 Docker 容器来构建 Stable-Diffusion-Webui,同样地,须要拉取线上的 Docker 配置文件我的项目:

git clone https://github.com/AbdBarho/stable-diffusion-webui-docker.git

随后进入我的项目的目录:

stable-diffusion-webui-docker

接着运行命令下载相干的依赖镜像:

docker compose --profile download up --build

下载实现后,运行命令构建容器:

docker compose --profile auto up --build

这里须要留神的是,模型数据和输入文件夹会以 /data 和 /output 的模式挂载到容器中,如果想在宿主机往容器内传入模型或者其余图片,须要写入我的项目中的 data 目录。

过程中,可能会报错:

Found no NVIDIA driver on your system

这是因为容器内找不到 NVIDIA 的显卡驱动。

这里须要独自再启动一个容器服务:

docker run -ti --runtime=nvidia -e NVIDIA_DRIVER_CAPABILITIES=compute,utility -e NVIDIA_VISIBLE_DEVICES=all allennlp/allennlp

总的来说,装置过程简略,然而调试比拟吃力,一旦启动出问题,就得进入容器外部批改代码,或者重复批改 Dockerfile 文件,所以 Docker 比拟适宜封装业务改变频繁的容器,而不是依赖环境繁多并且版本须要重复调整的场景。

Stable-Diffusion-Webui 图像绘制

配置好 Stable-Diffusion-Webui 环境之后,拜访 http://127.0.0.1:7860:

在 Prompt 文本框中填入疏导词:

Tall buildings, people bustling, heavy traffic, staggered light and shadow, the beauty of the city is conspicuous before.

随后点击右侧 Generate 生成按钮即可,这里疏导词的意思是:高楼林立,人群熙熙攘攘,车水马龙,光影交织,城市之美尽显眼前。

留神疏导词须要应用逗号分隔。

后端开始进行训练:

To create a public link, set `share=True` in `launch()`.  
100%|██████████████████████████████████████████████████████████████████████████████████████████████| 20/20 [00:24<00:00,  1.25s/it]  
Total progress: 100%|██████████████████████████████████████████████████████████████████████████████| 20/20 [00:19<00:00,  1.00it/s]  
100%|██████████████████████████████████████████████████████████████████████████████████████████████| 20/20 [00:34<00:00,  1.72s/it]  
Total progress: 100%|██████████████████████████████████████████████████████████████████████████████| 20/20 [00:22<00:00,  1.11s/it]  
100%|██████████████████████████████████████████████████████████████████████████████████████████████| 20/20 [00:22<00:00,  1.10s/it]  
Total progress: 100%|██████████████████████████████████████████████████████████████████████████████| 20/20 [00:20<00:00,  1.00s/it]  
100%|██████████████████████████████████████████████████████████████████████████████████████████████| 20/20 [00:22<00:00,  1.10s/it]  
Total progress: 100%|██████████████████████████████████████████████████████████████████████████████| 20/20 [00:22<00:00,  1.13s/it]  
100%|██████████████████████████████████████████████████████████████████████████████████████████████| 20/20 [00:22<00:00,  1.12s/it]  
Total progress: 100%|██████████████████████████████████████████████████████████████████████████████| 20/20 [00:21<00:00,  1.07s/it]  
100%|██████████████████████████████████████████████████████████████████████████████████████████████| 20/20 [00:21<00:00,  1.09s/it]  
Total progress: 100%|██████████████████████████████████████████████████████████████████████████████| 20/20 [00:19<00:00,  1.03it/s]  
100%|██████████████████████████████████████████████████████████████████████████████████████████████| 20/20 [00:20<00:00,  1.01s/it]  
Total progress: 100%|██████████████████████████████████████████████████████████████████████████████| 20/20 [00:19<00:00,  1.03it/s]  
100%|██████████████████████████████████████████████████████████████████████████████████████████████| 20/20 [00:20<00:00,  1.01s/it]  
Total progress: 100%|██████████████████████████████████████████████████████████████████████████████| 20/20 [00:19<00:00,  1.02it/s]  
100%|██████████████████████████████████████████████████████████████████████████████████████████████| 20/20 [00:22<00:00,  1.15s/it]  
Total progress: 100%|██████████████████████████████████████████████████████████████████████████████| 20/20 [00:21<00:00,  1.07s/it]  
100%|██████████████████████████████████████████████████████████████████████████████████████████████| 20/20 [00:21<00:00,  1.06s/it]  
Total progress: 100%|██████████████████████████████████████████████████████████████████████████████| 20/20 [00:20<00:00,  1.00s/it]

片刻之间,挥毫落纸如云烟。

遗憾的是,疏导词不反对中文,但能够配置权重,数值从 0.1~100,默认状态是 1, 低于 1 就是削弱,大于 1 就是增强:



(Tall buildings:1.1), people bustling(1.61),(heavy traffic:0.3),(staggered light and shadow:1.3)

Stable-Diffusion-Webui 也反对 Negative prompt(反向疏导词)。

就是用文字描述你不想在图像中呈现的货色:

对图片进行去噪解决,使其看起来更像你的提醒词;同样使其看起来更像你的反向提醒词。

同时察看正方向两者之间的差别,并利用它来产生一组对噪声图片的扭转,将最终后果移向前者而远离后者。

默认通用反向疏导词:

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,missing arms,long neck,  
Humpbacked,missing limb,too many fingers,  
mutated,poorly drawn,out of frame,bad hands,  
owres,unclear eyes,poorly drawn,cloned face,bad face

除了疏导词,还能够调整采样迭代步数(Sampling Steps)。

零碎先随机生成一个根底的图片,而后一步步的调整图片,向疏导词 Prompt 聚拢

Sampling Steps 参数就是通知人工智能,这样的步骤应该进行多少次。

次数越多,每一步训练也就越小越准确。当然了,老本也会越高,同时每一次训练的工夫也会成同比增长。

除了迭代步数,也能够自在地抉择采样办法(Sampling method)

也就是让 Stable-Diffusion-Webui 具体应用用什么算法来训练图片模型。

默认算法是 Euler a:富裕创造力,不同步数能够生产出不同的图片。然而超过 30 步左右根本就没有本质化的增益成果。

Euler 算法:最简略的算法,训练速度也是最快的。

LMS 算法:Euler 的延长算法,绝对更稳固一点,30 步就比较稳定了

PLMS:优化过的 LMS 算法

其余的一些参数:

生成批次 Batch count/n\_iter:同样的配置,循环跑几次

每批数量 Batch size:同时生成多少个图像,减少这个值能够并行运行,但也须要更多的显卡显存。

提醒词相关性 CFG Scale:图像与疏导词匹配水平。减少这个值将导致图像更靠近疏导词,但过高会让图像色调过于饱和。个别在 5~15 之间为好,7,9,12 是 3 个常见的设置值。

宽度 X 高度 Width X Height:单位是像素,适当减少尺寸,后盾会试图填充更多的细节进来。

Stable-Diffusion-Webui 定制化模型

Stable-Diffusion-Webui 默认下载的根底模型在我的项目目录的 models/Stable-diffusion 文件夹中:

/stable-diffusion-webui/models/Stable-diffusion

模型名称是 v1-5-pruned-emaonly.safetensors,体积是 4.27GB。

如果须要一些比拟有共性定制化模型,能够在 civitai.com 平台进行筛选和下载,须要留神的是,该平台上的模型泥沙俱下,参差不齐,不能说是叹为观止,但多多少少有点泥沙俱下的意思,所以最好不要在比拟正式的公共 (工作) 环境关上该平台,否则后果可能会令人十分难堪。

这里咱们抉择绝对比拟潮流的赛博朋克格调模型:synthwavepunk

将下载的模型放入 models/Stable-diffusion 目录。

随后重启 Stable-Diffusion-Webui 服务:

python3 launch.py --skip-torch-cuda-test --upcast-sampling --use-cpu interrogate

在页面表单中的 Stable Diffusion checkpoint 选项里抉择对应的模型:

疏导词:

concept art, 4k, intricate, pinup, a woman, beautiful face, embroidery, lace, hyper-realistic, highly detailed, octane render, concept art, smooth, 8k, dancing princess, snthwve style, nvinkpunk, by jeremy mann, by sandra chevrier, by dave mckean and richard avedon and maciej kuciara

训练后果:

好了,当初,你曾经通晓那些网络上的丑陋小姐姐是怎么生成的了。

结语

兴许咱们只是偶然被网络上那些酷炫而好奇的 AI 生成图所吸引,但如果你真的入手去搭建、调试、甚至开始训练属于本人的绘画模型,置信我,你马上就会深陷其中,不能自拔,AI 仿若能够满足你所有的空想,欲望满溢,又欲言又止,分寸把握之准确,妙入毫颠。什么?你还在玩那些无聊的电子游戏?置信我,Stable-Diffusion-Webui 才是最高级的精力享受,没有之一,也不可代替。

退出移动版