AI绘画这一年进展飞快,Stable Diffusion作为开源方案已经非常成熟了。本地部署一套,体验从文字到图片的全流程。
Diffusion原理简述
Stable Diffusion的核心思想是扩散过程:
前向过程(加噪):对一张真实图片逐步加入高斯噪声,经过足够多步后,图片变成纯噪声。这个过程是确定性的。
反向过程(去噪):训练一个神经网络(U-Net),学习如何从噪声中逐步还原出图片。模型学会了在每个噪声级别下如何"去一点噪声"。
文本引导:通过CLIP文本编码器将提示词(prompt)转为向量,在去噪的每一步都用这个向量引导生成方向,确保生成内容和文字描述一致。
Latent空间:SD不在像素空间直接操作(太慢),而是先用VAE将图片编码到低维的latent空间做扩散,最后再解码回像素空间。所以叫Latent Diffusion。
这个设计让SD能在消费级显卡上运行——latent空间的计算量比像素空间小得多。
WebUI安装(AUTOMATIC1111)
AUTOMATIC1111的stable-diffusion-webui是目前最主流的SD前端,功能最全。
环境要求:
- NVIDIA显卡,显存至少4GB(推荐8GB以上)
- Python 3.10.6
- Git
安装步骤(Windows):
- 安装Python 3.10.6(注意勾选Add to PATH)
- 安装Git
- 克隆仓库并运行:
打开命令行,执行clone命令拉取仓库,进入目录后运行webui-user.bat。首次运行会自动下载依赖和默认模型(SD 1.5),大约需要下载4-5GB的数据,耐心等待。
Linux安装类似,运行webui.sh即可。
启动成功后浏览器打开http://127.0.0.1:7860,就能看到WebUI界面。
模型下载:除了默认的SD 1.5,推荐从Civitai下载社区训练的模型。比较受欢迎的有Realistic Vision(写实)、DreamShaper(风格化)、Anything(二次元)等。模型文件(.safetensors)放到models/Stable-diffusion目录下。
基本参数
WebUI界面上有几个核心参数需要理解:
Sampling Steps(采样步数):去噪的步数,通常20-30就够了。步数太少图片质量差,太多收益递减且耗时增加。
CFG Scale(引导系数):控制图片和提示词的贴合程度。7-11是常用范围。太低图片和文字关系不大,太高图片会出现过饱和、失真的情况。
Sampler(采样器):去噪的算法。常用的有:
- Euler a:速度快,效果好,适合入门
- DPM++ 2M Karras:质量高,是当前社区主流选择
- DDIM:确定性采样,同样的seed和参数得到完全相同的结果
Seed(随机种子):控制初始噪声。同样的seed+参数+提示词会生成相同的图。设为-1是随机。找到好图后记录seed可以微调。
分辨率:SD 1.5训练在512x512上,所以这个分辨率效果最好。可以用其他比例(512x768竖图),但不建议直接生成高分辨率(容易出双头)。先生成512再用高清修复(Hires fix)放大。
LoRA模型
LoRA(Low-Rank Adaptation)是在基础模型上做的轻量微调,通常只有几十到几百MB。用来给基础模型添加特定的风格、角色或概念。
使用方式:LoRA文件(.safetensors)放到models/Lora目录,在提示词中用<lora:文件名:权重>触发。比如:
a girl in a garden, <lora:detail_enhancer:0.6>, masterpiece, best quality
权重0-1之间,通常0.5-0.8效果最好。权重太高容易过拟合。
多个LoRA可以叠加使用,但要注意总权重不宜太高,风格冲突时效果会变差。
提示词技巧
提示词是和SD交互的核心手段。几个要点:
正向提示词(Prompt):描述你想要什么。结构一般是"主体 + 环境 + 风格 + 质量词"。
a girl reading a book in a cozy library, warm lighting, soft shadows,
oil painting style, masterpiece, best quality, highly detailed
反向提示词(Negative Prompt):描述你不想要什么。通用模板:
lowres, bad anatomy, bad hands, text, error, missing fingers,
extra digit, cropped, worst quality, low quality, blurry, watermark
权重控制:用括号调整关键词权重。(keyword:1.3)增加权重,(keyword:0.7)降低权重。每层括号默认乘以1.1。
分步提示词:用[from:to:step]语法在不同步数切换关键词。[cat:dog:0.5]表示前50%步数画猫,后50%步数画狗。
BREAK:用BREAK分隔不同的概念,防止语义混淆。当提示词很长时有用。
ControlNet简介
ControlNet是SD生态中最重要的扩展之一。它让你可以用额外的条件引导生成——线稿、深度图、姿势骨架等。
主要模式:
- Canny:检测边缘线条,控制生成图的轮廓
- OpenPose:人体姿势骨架,控制人物的姿态
- Depth:深度图,控制画面的空间层次
- Scribble:手绘涂鸦,根据粗略的涂鸦生成精细图像
- IP-Adapter:用一张参考图控制生成风格
比如你画一个简单的火柴人姿势,ControlNet OpenPose模式可以让SD按照这个姿势生成一个精美的人物图。这大大提高了生成的可控性。
安装ControlNet扩展:在WebUI的Extensions标签页搜索sd-webui-controlnet安装,然后下载对应的模型文件放到extensions/sd-webui-controlnet/models目录。
显存优化
8GB显存基本够用,4GB需要做一些优化:
- 启动参数加
--medvram或--lowvram:将部分计算转移到内存 - 使用
--xformers:开启内存优化的注意力计算 - 生成分辨率不要太高,先512再放大
- 批量大小设为1
如果用AMD显卡,可以尝试DirectML后端,但效果和兼容性不如CUDA。
总结
Stable Diffusion本地部署的门槛已经很低了,有张4GB以上显存的N卡就能玩。理解了基本参数、提示词写法和LoRA使用后,就能生成质量不错的图片了。ControlNet进一步解锁了精确控制的能力。剩下的就是多实验、调参数、找到适合自己需求的工作流。