1.介绍

1.1 概述

Stable Diffusion Web UI是一个基于Stable diffusion AI模型的AI绘画软件。它是一个多功能的AI绘画软件,支持以下几个功能:

  1. 用户可以输入一堆关键词或一句话来生成图片。
  2. 它使用了图像加噪去噪过程中的生成模型——Duffusion,能够在1000个步骤中将一张完全没有噪点的图像转化为一张充满噪点的无法辨认的图像。
  3. StableDiffusion是一种深度学习的文本到图像生成模型,而Stable Diffusion Web UI则是对该模型进行封装并提供可操作界面的工具软件。
  4. Stable Diffusion Web UI中,面部修复适用于画真人、三次元的场景,在画全身时尤为有用;高清修复可以让低分辨率的图片变得清晰;而调参区则可以帮助用户调整参数以满足不同的需求。

目前 AI 有两个主流的方向,一个是以 Stable Diffusion 为代表的 AI 图像生成领域,一个是 ChatGPT 为代表的大语言模型领域。

1.2 背景

Stable Diffusion (稳定扩散) 是一个扩散模型,2022年8月由德国CompVis协同Stability AIRunway发表论文,并推出相关程序。

同年,AUTOMATIC1111开发了图形化界面:「Stable Diffusion WebUI」,这是能用AI技术生成图片的开源软件,只要给定一组描述文本,AI就会开始绘图;亦能模仿现有的图片,生成另一张图片。

2.安装运行

本人电脑环境是: Mac Os,内存16G

2.1 安装依赖

# 至于如何Homebrew这里不在叙述
$ brew install cmake protobuf rust python@3.10 git wget

2.2 安装源码:方式一

➜ git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git
Cloning into 'stable-diffusion-webui'...
remote: Enumerating objects: 28076, done.
remote: Counting objects: 100% (41/41), done.
remote: Compressing objects: 100% (25/25), done.
remote: Total 28076 (delta 20), reused 30 (delta 16), pack-reused 28035
Receiving objects: 100% (28076/28076), 32.57 MiB | 11.53 MiB/s, done.
Resolving deltas: 100% (19652/19652), done.

2.3 安装源码:方式二

安装方式一对于一些朋友来说,可能会由于网络的限制,而无法正常下载,即便上面下载成功,在运行的时候,可能还需要下载依赖项目和模型,之后在运行过程中又是各种坑,为此会把项目和模型进行压缩放到阿里云盘,通过以下方式可以获取

微信搜索【猿码记】公众号,回复stable-diffusion-webui,即可获取完整代码

2.4 运行

➜  ./webui.sh
...
Python 3.11.4 (main, Jul 5 2023, 08:41:25) [Clang 14.0.6 ]
Version: v1.6.0-2-g4afaaf8a
Commit hash: 4afaaf8a020c1df457bcf7250cb1c7f609699fa7
Launching Web UI with arguments: --skip-torch-cuda-test --upcast-sampling --no-half --use-cpu interrogate
no module 'xformers'. Processing without...
No module 'xformers'. Proceeding without it.
Warning: caught exception 'Torch not compiled with CUDA enabled', memory monitor disabled
Loading weights [0873291ac5] from /Users/liuqh/ProjectItem/AiItem/stable-diffusion-webui/models/Stable-diffusion/AbyssOrangeMix2_nsfw.safetensors
Creating model from config: /Users/liuqh/ProjectItem/AiItem/stable-diffusion-webui/configs/v1-inference.yaml
Running on local URL: http://127.0.0.1:7860

不出意外的话(大部分都会出意外,短短一行启动代码,到处都是辛酸泪:joy:),运行成功会主动在浏览器打开下面页面

2.5 踩坑点

1.HTTP/2 stream 1 was not closed

# 报错信息如下
➜ git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git
Cloning into 'stable-diffusion-webui'...

fatal: unable to access 'https://github.com/AUTOMATIC1111/stable-diffusion-webui.git/': HTTP/2 stream 1 was not closed cleanly before end of the underlying stream

解决方法: 执行:git config --global http.version HTTP/1.1

2.RuntimeError: Couldn’t install requirements for CodeFormer

Installing requirements for CodeFormer
Traceback (most recent call last):
File "/Users/liuqh/ProjectItem/AiItem/stable-diffusion-webui/launch.py", line 48, in <module>
main()
File "/Users/liuqh/ProjectItem/AiItem/stable-diffusion-webui/launch.py", line 39, in main
prepare_environment()
File "/Users/liuqh/ProjectItem/AiItem/stable-diffusion-webui/modules/launch_utils.py", line 389, in prepare_environment
run_pip(f"install -r \"{os.path.join(repo_dir('CodeFormer'), 'requirements.txt')}\"", "requirements for CodeFormer")
File "/Users/liuqh/ProjectItem/AiItem/stable-diffusion-webui/modules/launch_utils.py", line 138, in run_pip
return run(f'"{python}" -m pip {command} --prefer-binary{index_url_line}', desc=f"Installing {desc}", errdesc=f"Couldn't install {desc}", live=live)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/liuqh/ProjectItem/AiItem/stable-diffusion-webui/modules/launch_utils.py", line 115, in run
raise RuntimeError("\n".join(error_bits))
RuntimeError: Couldn't install requirements for CodeFormer.
# 这里是生成后的运行脚本
Command: "/Users/liuqh/ProjectItem/AiItem/stable-diffusion-webui/venv/bin/python3" -m pip install -r "/Users/liuqh/ProjectItem/AiItem/stable-diffusion-webui/repositories/CodeFormer/requirements.txt" --prefer-binary

这里比较奇怪的是,生成的命令用的python3不是我本地的环境,它自己在项目里又创建了一个,然后就变成了/Users/liuqh/ProjectItem/AiItem/stable-diffusion-webui/venv/bin/python3,我这边的解决方法是,找到 stable-diffusion-webui/modules/launch_utils.py文件在138行,加上-i https://mirrors.aliyun.com/pypi/simple

3. RuntimeError: Input type (float) and bias type (c10::Half) should be the same

修改stable-diffusion-webui/webui-macos-env.sh,

# 把-no-half-vae改成 -no-half 
#export COMMANDLINE_ARGS="--skip-torch-cuda-test --upcast-sampling --no-half-vae --use-cpu interrogate"
export COMMANDLINE_ARGS="--skip-torch-cuda-test --upcast-sampling --no-half --use-cpu interrogate"

3.使用

3.1 生成图片

访问http://127.0.0.1:7860/

@注意:不指定端口的时候,如果上次的后台进程未能正常退出,再次打开端口会变

3.2 页面参数说明

  • Stable Diffusion checkpoint:选择具体的模型
  • Prompt:正向提示词,描述你想要的图片,比如:girl,long hair,black clothes,big eyes(长发黑衣服大眼睛的女孩)@注意:不支持中文
  • Negative prompt:反向提示次,不想要在图像中出现的词,比如:low quality(低质量)
  • Sampling Method :抽样法,常用于去噪,内置多种算法可供选择。比如DPM++ 2M Karras,可以很好地平衡了速度和质量。
  • Sampling Steps: 采样步骤数。虽然越多越好,但是值越大生成的时间越长。大部分情况选择:20 ~ 25
  • Width & Height:输出图像的大小长和宽。长宽也不是随意设置;目前使用 v1 模型时,至少将一变设置为 512。目前已知可选的组合有:512*512、512*768、768*512
  • Batch Count: 批次数量。
  • Batch size:每一批次要生成的图像数量。
  • CFG scale: 用于控制模型生成的图片,和提示词的符合度。默认为7,数值越小AI自由发挥的空间就越大,数值越大相对来说就越刻板(严格按照提示词);
  • Seed:指定一个随机种子,用于初始化图像生成过程。相同的种子值每次都会产生相同的图像集,这对于再现性和一致性很有用,如果将值设置为-1,则每次运行都会生成一个随机种子。
  • Hires.Fix: 高清修复,主要是提高生成的图像的分辨率,注意:开启后生成图片会很慢;其他选项说明:
    • Upscaler:指的是放大算法,内置了很多算法,其中R-ESRGAN 4x+:擅长写实图片、R-ESRGAN 4x+ Anime6B:擅长二次元图片
    • Hires setps:高清修复的步数和Sampling Steps代表的意义一样;
    • Denoising strength: 重绘幅度,AI的自由发挥空间,值越大AI就越放飞自我,值越小就越按照原图重绘;
    • Upscale by: 放大的倍数,和下面两个互斥;
    • Resize width to: 指的是把图片放大后,宽度的像素;
    • Resize height to: 指的是把图片放大后,高度的像素;

更多配置说明可参见文档: https://stable-diffusion.org.cn/t/topic/22

3.3 在线生图

如果你觉得本地部署太麻烦,又想体验下下生图,推荐使用这个网站:在线免费生成图片: www.liblib.ai

1.编写提示词

这里可以写中文,支持一键翻译成英文.

image-20231109150041304

2.设置参数

当勾选面部修复、高分辨率修复后,下面一些参数自动就会生成,无需再一一设置

3. 生成结果

跟本地部署的生成的相比果然清楚好多,侧面说明我们还不太会使用

4.启动参数

4.1 配置参数

-h, --help:显示帮助信息并退出。

--exit:安装后立即终止。

--data-dir:指定存储所有用户数据的基本路径,默认为"./"

--config:用于构建模型的配置文件路径,默认为 "configs/stable-diffusion/v1-inference.yaml"

--ckpt:稳定扩散模型的检查点路径;如果指定,该检查点将被添加到检查点列表并加载。

--ckpt-dir:稳定扩散检查点的目录路径。

--no-download-sd-model:即使没有找到模型,也不下载SD1.5模型。

--vae-dir:变分自编码器模型的路径。

--gfpgan-dir:GFPGAN目录。

--gfpgan-model:GFPGAN模型文件名。

--codeformer-models-path:Codeformer模型文件的目录路径。

--gfpgan-models-path:GFPGAN模型文件的目录路径。

--esrgan-models-path:ESRGAN模型文件的目录路径。

--bsrgan-models-path:BSRGAN模型文件的目录路径。

--realesrgan-models-path:RealESRGAN模型文件的目录路径。

--scunet-models-path:ScuNET模型文件的目录路径。

--swinir-models-path:SwinIR和SwinIR v2模型文件的目录路径。

--ldsr-models-path:LDSR模型文件的目录路径。

--lora-dir:Lora网络的目录路径。

--clip-models-path:CLIP模型文件的目录路径。

--embeddings-dir:用于文本逆向的嵌入目录,默认为 "embeddings"

--textual-inversion-templates-dir:文本逆向模板的目录。

--hypernetwork-dir:超网络目录。

--localizations-dir:本地化目录。

--styles-file:用于样式的文件名,默认为 "styles.csv"

--ui-config-file:用于UI配置的文件名,默认为 "ui-config.json"

--no-progressbar-hiding:不隐藏Gradio UI中的进度条(默认隐藏,因为在浏览器中使用硬件加速会降低机器学习速度)。

--max-batch-count:UI的最大批次计数值,默认为16。

--ui-settings-file:用于UI设置的文件名,默认为 "config.json"

--allow-code:允许从Web UI执行自定义脚本。

--share:使用Gradio的share=True,并使UI通过其网站访问(对我来说不起作用,但您可能会更幸运)。

--listen:使用0.0.0.0作为服务器名称启动Gradio,允许响应网络请求。

--port:使用给定的服务器端口启动Gradio,需要根/管理员权限才能使用1024以下的端口,默认为7860(如果可用)。 34. --hide-ui-dir-config:从Web UI中隐藏目录配置。

--freeze-settings:禁用编辑设置。

--enable-insecure-extension-access:无论其他选项如何,都启用扩展选项卡。

--gradio-debug:使用--debug选项启动Gradio。

--gradio-auth:设置Gradio身份验证,如 "username:password";或逗号分隔多个,如 "u1:p1,u2:p2,u3:p3"

--gradio-auth-path:设置Gradio身份验证文件路径,例如 "/path/to/auth/file",与--gradio-auth的格式相同。

--disable-console-progressbars:不在控制台输出进度条。

--enable-console-prompts:在使用txt2img和img2img生成时,在控制台打印提示。

--api:使用API启动Web UI。

--api-auth:设置API身份验证,如 "username:password";或逗号分隔多个,如 "u1:p1,u2:p2,u3:p3"

--api-log:启用所有API请求的日志记录。

--nowebui:仅启动API,不启动UI。

--ui-debug-mode:不加载模型以快速启动UI。

--device-id:选择要使用的默认CUDA设备(可能需要在此之前设置CUDA_VISIBLE_DEVICES=0,1等环境变量)。

--administrator:管理员权限。

--cors-allow-origins:以逗号分隔的列表形式允许的CORS来源(无空格)。

--cors-allow-origins-regex:以单个正则表达式的形式允许的CORS来源。

--tls-keyfile:部分启用TLS,需要--tls-certfile才能完全生效。

--tls-certfile:部分启用TLS,需要--tls-keyfile才能完全生效。

--server-name:设置服务器主机名。

--gradio-queue:使用Gradio队列;实验性选项;破坏重新启动UI按钮。

--skip-version-check:不检查torch和xformers的版本。

--no-hashing:禁用检查点的sha256哈希,以提高加载性能。

4.2 通用参数

--autolaunch:在启动时使用系统的默认浏览器打开WebUI URL。

--theme:在WebUI中使用指定的主题(“light”或“dark”)。如果未指定,则使用浏览器的默认主题。

--use-textbox-seed:在UI中使用文本框输入种子(没有上/下箭头,但可以输入长种子)。

--disable-safe-unpickle:禁用对PyTorch模型的恶意代码检查。

--ngrok:用于ngrok的自动令牌,是gradio --share的替代方案。

--ngrok-region:ngrok应该在其中启动的区域。

4.3 性能参数


--xformers:启用xformers以加速跨注意层。

--reinstall-xformers:强制重新安装xformers。在升级后使用,但升级后请移除,否则将一直重装xformers。

--force-enable-xformers:无论检查代码是否认为可以运行,都强制启用xformers的跨注意层;如果运行失败,请勿提交错误报告。

--opt-split-attention:强制启用Doggettx的跨注意层优化。默认情况下,对于启用CUDA的系统,此选项已开启。

--opt-split-attention-invokeai:强制启用InvokeAI的跨注意层优化。默认情况下,当CUDA不可用时,此选项已开启。

--opt-split-attention-v1:启用旧版本的分割注意力优化,该版本不会消耗所有可用的显存。

--opt-sub-quad-attention:启用内存高效的子二次交叉注意力层优化。

--sub-quad-q-chunk-size:子二次交叉注意力层优化使用的查询块大小。

--sub-quad-kv-chunk-size:子二次交叉注意力层优化使用的kv块大小。

--sub-quad-chunk-threshold:子二次交叉注意力层优化使用的显存使用率阈值。

--opt-channelslast:为4d张量启用备选布局,仅在具有Tensor核心的Nvidia显卡(16xx及更高版本)上可能导致更快的推理。

--disable-opt-split-attention:强制禁用跨注意层优化。

--disable-nan-check:不检查生成的图像/潜在空间是否包含nan值;在持续集成中运行时无需检查点。

--use-cpu:对指定模块使用CPU作为torch设备。

--no-half:不将模型切换为16位浮点数。

--precision:以此精度进行评估。

--no-half-vae:不将VAE模型切换为16位浮点数。

--upcast-sampling:向上采样。与 --no-half 无效。通常产生与 --no-half 类似的结果,但在使用较少内存的情况下性能更好。

--medvram:启用稳定扩散模型优化,牺牲一点速度以减少显存使用。

--lowvram:启用稳定扩散模型优化,牺牲大量速度以极低的显存使用。

--lowram:将稳定扩散检查点权重加载到显存而非RAM。

--always-batch-cond-uncond:禁用使用 --medvram 或 --lowvram 时为节省内存而启用的条件/无条件批处理。