Stable Diffusion本地部署:AI绘画入门

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):

  1. 安装Python 3.10.6(注意勾选Add to PATH)
  2. 安装Git
  3. 克隆仓库并运行:

打开命令行,执行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进一步解锁了精确控制的能力。剩下的就是多实验、调参数、找到适合自己需求的工作流。