Stable Diffusion踩坑实录

前言

Stable Diffusion目前的生态演化得比较复杂,虽说有A1111做的WebUI,但我作为使用者有时候用起来也一头雾水,总之希望写一些使用中遇到的问题和技巧,以免未来重蹈覆辙吧(当然能帮到其他人的话那就更好了)。

安装部署

Windows上已经有Stable Diffusion整合包了,功能也比较全,直接安装即可,此处简单写一下Linux环境下的WebUI部署方法。

  1. 克隆WebUI仓库,在Shell中运行如下代码:
1
git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui

注意

可预先设置一下Git HTTP代理,假设你的代理服务器在http://proxy.server:7890,执行

1
2
git config --global http.proxy http://proxy.server:7890
git config --global https.proxy http://proxy.server:7890
  1. 移至仓库目录,进行依赖安装:
1
2
cd stable-diffusion-webui
./webui.sh

注意

可以预先设置Shell的HTTP代理,沿用上文的代理服务器,则可执行

1
2
3
4
http_proxy=http://proxy.server:7890
https_proxy=$http_proxy
HTTP_PROXY=$http_proxy
HTTPS_PROXY=$http_proxy
  1. 不出意外的话在经过漫长的等待后就可以访问一个localhost的网页了。

  2. 检查WebUI成功部署后,可以退出进程,重新将进程在后台执行:

1
2
source ./venv/bin/activate
nohup python launch.py &

注意

可以将上述代码保存在start_server.sh之类的shell脚本文件中,以便后续重复启动。

注意

可以在第二行的python命令中添加命令行参数 ,常用的如下:

  • --listen 侦听0.0.0.0网段,暴露给公网。
  • --port PORT 侦听PORT端口,改成你想要的端口号。
  • --device-id DEVICE_ID 使用DEVICE_ID对应的CUDA设备。
  • --opt-sdp-attention 使用PyTorch 2.0时可以调用,加速推理、减少VRAM占用。
  • --xformers 使用xformers加速推理、减少VRAM,与上一项二选一即可。
  • --medvram 将推理分成三部分放入VRAM处理,用时间换空间,显存低于6GB可尝试。
  • --lowvram 进一步降低VRAM消耗。

基本使用

要生成质量尚可的结果,一般而言有如下步骤:

  1. 以低分辨率、低采样步数使用Stable Diffusion生成草稿图。
  2. 将草稿图使用Upscaler超采样得到高分辨率草稿图。
  3. 将高分辨率草稿图导入img2img,以高分辨率、高采样步数使用Stable Diffusion生成精细大图。

其中,后两步可直接由txt2img标签页的Hires. fix选项一键完成。此外,还有其他常用细节控制方法:

  • ControlNet:利用一张辅助图片帮助模型生成大致相似的形状、动作等。
  • Inpaint:对生成图片进行微调,可以处理一些错误细节。
  • LoRA:使用图片数据集进行风格微调,可以实现轻量级的风格迁移。
  • Textual Inversion:训练特定的Embedding,帮助生成或者排除指定的主题。

Stable Diffusion基础模型

首先你需要有一个基本的Stable Diffusion模型。可以从Civitai 下载一个你喜欢的、标签为CHECKPOINT的模型,其文件后缀名通常为ckptsafetensors,直接放入models/Stable-diffusion文件夹里。

注意

文件夹里所有的模型都会被新版WebUI识别,并且可以在左上角进行切换。如果你没找到,建议用git pull更新一下WebUI仓库,或者重新搞吧。

Upscaler

Latent系列Upscaler是可以直接使用的,因为他只是改了Stable Diffusion内的latent维度。

我尝试了SwinIR、Swin2SR这两个Upscaler,只需要像基础模型一样放入对应的文件夹即可。SwinIR是放到models/SwinIR里。

ControlNet

ControlNet插件可以直接在Extension标签页里安装,点击AvailableLoad from按钮,找到sd-webui-controlnet安装,在Installed里应用并重启UI即可。

ControlNet模型文件可以去Huggingface之类的地方下载,放在extensions/sd-webui-controlnet/models里。

LoRA

LoRA模型文件可以在Civitai 下载,放入models/LoRA文件夹里。

使用的时候在prompt中添加一项<lora:filename:weight>即可(filename即为你下载的LoRA模型文件名,weight为权重)。

Textual Inversion

Embedding文件通常是ptsafetensors文件,放在embeddings文件夹里。

使用时直接在prompt里添加对应文件名的一项即可,如果成功会在生成图片后,下方文字部分提示使用的Embedding。

VAE

VAE可以作为Stable Diffusion基础模型的附属模型放在它旁边(一般会在文件名里多一个.vae),但是也可以下载单独的模型放在models/VAE里。

记得在WebUI Settings - Stable Diffusion - SD VAE里选择你要的VAE模型。

注意

如果你的图片生成出来灰蒙蒙的,饱和度和对比度低,很可能是因为没有使用VAE模型。去找找你基础模型对应的VAE模型文件,或者下一个通用的放到VAE文件夹里使用。