前言
Stable Diffusion 是一个开源的潜空间扩散模型(Latent Diffusion Model),主要用来根据文字生成图像(文生图),也可以在已有图片的基础上重绘(图生图)、局部重绘(inpainting)等。它的权重公开,在一张消费级显卡上就能本地运行,这也是它火起来的主要原因。
本文介绍 Stable Diffusion 的基本原理,以及如何在本地部署 WebUI 生成第一张图。
Stable Diffusion 是什么
扩散模型
扩散模型的思路很简单:训练时,不断往图片上加噪声,直到变成一片纯噪声,然后训练一个神经网络去学习“每一步该去掉多少噪声”。生成时反过来,从一张随机噪声开始,一步一步去噪,最终“还原”出一张图。
为什么叫“潜空间”
直接在像素上做几十步去噪,计算量非常大。Stable Diffusion 的做法(来自论文 High-Resolution Image Synthesis with Latent Diffusion Models)是:先用一个 VAE 把图像压缩到一个小得多的潜空间(latent space)里,在潜空间里完成去噪,最后再用 VAE 的解码器还原成像素图像。这样显存和算力需求就降到了普通显卡能承受的范围。
文字是怎么起作用的
提示词(prompt)先经过文本编码器(如 CLIP 的文本编码器)变成向量,在每一步去噪时作为条件输入去噪网络(U-Net),引导去噪往“符合描述”的方向走。整体流程如下:
几个组件对应到日常使用里:
| 组件 | 作用 | 你会接触到的地方 |
|---|---|---|
| 文本编码器 | 把 prompt 变成向量 | 提示词、负面提示词 |
| U-Net(去噪网络) | 在潜空间里逐步去噪 | 采样步数、采样器、CFG |
| VAE | 潜空间 ↔ 像素图像 | 可单独更换 VAE 文件 |
| 随机噪声 | 生成的起点 | 种子(Seed) |
平时下载的“模型”(checkpoint,
.safetensors文件)通常就是把以上几部分的权重打包在一起。
本地部署 Stable Diffusion WebUI
最流行的图形界面是 AUTOMATIC1111/stable-diffusion-webui(下文简称 WebUI),打开浏览器就能用。
硬件要求
- 显卡:官方推荐 NVIDIA 显卡。显存 4GB 左右可以借助
--medvram/--lowvram参数跑起来,8GB 及以上体验会好很多;SDXL 这类更大的模型对显存要求更高。AMD 显卡、Intel 显卡、Apple Silicon 也有对应的安装说明,但兼容性和速度不如 NVIDIA。 - 硬盘:程序本身加上依赖要占用不少空间,单个模型文件通常就有几个 GB,建议预留几十 GB。
- 网络:首次启动会自动下载 PyTorch 等依赖,需要能正常访问 GitHub 和 PyPI。
Windows
安装 Python,版本以 WebUI 的 README 为准(README 推荐 3.10.x,过新的 Python 可能装不上对应的 PyTorch),安装时勾选 Add Python to PATH;
安装 Git;
克隆仓库:
1git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git在资源管理器里以普通用户(不要用管理员)身份双击运行
webui-user.bat。
Linux
安装依赖(以 Debian / Ubuntu 为例,其他发行版见 README):
1sudo apt install wget git python3 python3-venv libgl1 libglib2.0-0克隆仓库并启动:
1 2 3git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git cd stable-diffusion-webui ./webui.sh
macOS(Apple Silicon)
步骤和 Linux 类似,同样是克隆仓库后运行 ./webui.sh,需要先用 Homebrew 装好依赖,具体见官方 wiki 的 Installation on Apple Silicon。
首次启动
第一次运行会自动创建 Python 虚拟环境、安装 PyTorch 等依赖,耗时较长,耐心等待。看到类似下面的输出后,用浏览器打开地址即可:
| |
启动参数
启动参数写在 webui-user.bat(Windows)或 webui-user.sh(Linux / macOS)的 COMMANDLINE_ARGS 里,例如:
| |
| |
常用的几个:
| 参数 | 作用 |
|---|---|
--medvram / --lowvram | 降低显存占用(速度会变慢),显存小时使用 |
--xformers | 启用 xformers 加速注意力计算(NVIDIA 显卡) |
--listen | 监听 0.0.0.0,允许局域网内其他设备访问 |
--api | 开启 API,方便用脚本调用 |
--listen会把 WebUI 暴露到局域网,不要在公网服务器上裸开。
下载模型
WebUI 本身不等于模型,需要把模型文件(checkpoint)放到:
| |
推荐从 Hugging Face 上 Stability AI 的官方仓库下载,例如 SDXL 基础模型 stabilityai/stable-diffusion-xl-base-1.0 里的 sd_xl_base_1.0.safetensors。部分新模型需要登录 Hugging Face 并同意许可协议后才能下载。
放好之后,点 WebUI 左上角模型下拉框旁的刷新按钮,就能选到它了。
其他类型的文件也有各自的目录:
| 类型 | 目录 |
|---|---|
| Checkpoint 主模型 | models/Stable-diffusion/ |
| VAE | models/VAE/ |
| LoRA | models/Lora/ |
优先选择
.safetensors格式。老的.ckpt格式基于 Python pickle,加载时有执行恶意代码的风险,来路不明的.ckpt不要用。
生成第一张图
打开 txt2img(文生图)标签页,界面上主要是这些参数:
| 参数 | 说明 | 建议 |
|---|---|---|
| Prompt(提示词) | 想要画面里出现什么,用英文短语、逗号分隔效果最好 | 主体 + 细节 + 风格,例如 a cat sitting on a windowsill, sunset, watercolor |
| Negative prompt(负面提示词) | 不想出现什么 | 如 blurry, lowres, watermark |
| Sampling steps(采样步数) | 去噪的步数 | 20~30 一般就够,太多收益很小 |
| Sampling method(采样器) | 每一步怎么去噪的算法 | Euler a、DPM++ 2M 等都是常用选择 |
| CFG Scale | 生成结果有多“听”提示词的话 | 常用 5~8;太高画面容易过饱和、崩坏 |
| Seed(种子) | 初始噪声的随机数 | -1 表示随机;固定种子 + 同样参数可以复现同一张图 |
| Width / Height | 图片尺寸 | 贴近模型训练分辨率:SD 1.5 约 512×512,SDXL 约 1024×1024 |
填好提示词,点右上角 Generate,几秒到几十秒后就能看到结果,生成的图片默认保存在 outputs/ 目录下。
图生图
img2img 标签页可以上传一张图片作为起点,其他参数和文生图基本一致,多了一个 Denoising strength(重绘幅度):数值越低越接近原图,越高改动越大。在 img2img 里还能用 Inpaint 只重绘涂抹的区域。
可选:ComfyUI
ComfyUI 是另一个很流行的前端,用节点 + 连线的方式搭建生成流程(工作流)。上手比 WebUI 陡一些,但流程完全透明、灵活,对新模型的支持通常也很快。
新手推荐直接使用官方的 桌面版,Windows 上也有便携版可以下载;
手动安装:克隆仓库,按 README 安装对应显卡的 PyTorch 后执行:
1 2pip install -r requirements.txt python main.py默认在
http://127.0.0.1:8188打开。模型放在
ComfyUI/models/checkpoints/下。也可以在 ComfyUI 的extra_model_paths.yaml里配置,直接复用 WebUI 的模型目录,不用存两份。
总结
- Stable Diffusion 是在潜空间里做去噪的扩散模型,主要用来文生图、图生图;
- 本地部署推荐 WebUI:克隆仓库,运行
webui-user.bat/webui.sh,自动安装依赖; - 模型从 Hugging Face 官方仓库下载,放进
models/Stable-diffusion/; - 先用默认参数出图,再逐个调整提示词、步数、CFG、种子,感受每个参数的影响。