Stable Diffusion WebUI Forge 自定义模型训练:4 步把几张图变成 AI 的"新单词"(Textual Inversion 完整实操指南)
【免费下载链接】stable-diffusion-webui-forge项目地址: https://gitcode.com/GitHub_Trending/st/stable-diffusion-webui-forge
本文带你走一遍 Stable Diffusion WebUI Forge 自定义模型训练:从准备几张图片,到训练出一个能在提示词里直接调用的文本嵌入(Textual Inversion),你会拿到四步动手流程、参数设置表和一份翻车急救清单。
60 秒看懂原理:给模型加新单词,而不是换脑子
文本嵌入(Textual Inversion,相当于给模型"背一个新单词")不动原模型的权重,只往文本编码器里加几组可训练的向量。模型遇到你的占位符时,就查这组向量,新概念从此有了着落。
类比一下:这就像在词典里新增一个同音字,不用重印整本书,只需要给这个字配一个"读法"。底层做的事,就是训练一组可替换的向量。
上面这张就是嵌入训练完成后的效果:提示词里的<rick>会被替换成那组训练好的向量,输出的角色因此稳定出现。
动手:从备料到出图
整个 WebUI Forge 训练嵌入的流程,可以拆成四个能独立做完的动作。先说明一点:Forge 走轻量化路线,本仓库内置训练页已被注释(modules/textual_inversion/ui.py整文件都是注释),训练入口建议挂一个社区训练扩展,或直接调用源码里的create_embedding;向量生成、存储、加载、注入的完整链路都在仓库里,下面按链路讲。
备料:同一主体的 5-20 张图 + 一个占位符
你要做的:准备一个小数据集,并给新概念定好占位符。
- 拿到项目:
git clone https://gitcode.com/GitHub_Trending/st/stable-diffusion-webui-forge- 建一个文件夹,放 5-20 张同一主体的图:角度、光照有变化,尺寸统一裁成 512x512
- 每张图配一份提示词(同名
.txt),文字里必须带同一个占位符,例如a photo of sktest dog;占位符建议用随机字符串,避免撞上模型已会的英文单词
判断做对了:随便抽几张提示词都含同一个占位符,图片尺寸全部是 512x512,主体在画面中占比一致。
建嵌入:用"锚点词"初始化向量
你要做的:生成初始向量,落盘成.pt文件。
- 选一个和目标概念语义接近的初始化文本(锚点词):训练一只特定狗,就用
dog起步 - 设定每个 token 的向量数:单一主体选 1,复杂风格选 4
- 执行创建后,
embeddings/目录会多出一个名字.pt文件,向量由锚点词编码而来
判断做对了:embeddings/里出现你的.pt文件;重启 WebUI 后日志会列出已加载的嵌入名,你的新词在列。
跑训练:一套不翻车的文本嵌入训练参数设置
你要做的:把数据集喂进训练循环,盯着 Loss 走。
以下这组参数是安全起步值:
| 参数 | 推荐值 | 一句话说明 |
|---|---|---|
| 学习率 | 0.005 | 起步值,过大概念会漂移 |
| 训练步数 | 1000-3000 | 按样本量线性放大 |
| Batch size | 1 | 显存吃紧先设 1,富余再加大 |
| 向量数 | 1 | 复杂风格可上调到 4 |
| 正则化图片 | 0-5 张 | 通用同概念图,抑制过拟合 |
| 自动裁剪 | 开 | 参照autocrop逻辑把主体裁正 |
判断做对了:Loss 从 0.5 以上逐步降,降到 0.05 附近并走平;训练结束或中断时,嵌入文件会随当前步数自动保存。
验证:出图时提示词怎么写
你要做的:回生成页调用这个新单词,看它到底记住了什么。
- 单向量嵌入直接把名字写进提示词:
a photo of sktest in the snow - 多向量嵌入用尖括号包起来:
<my_style> - 换几个 seed 各出几张,重点看主体特征是否稳定复现
判断做对了:出图主体与训练样本一致,而不是回退成锚点词的样子;生成参数里也能看到嵌入名,说明注入链路走通了。
翻车急救:Loss 不下降、显存爆掉,先看这 4 个症状
遇到文本嵌入 Loss 不下降怎么办,大概率落在这几条里。
症状:训练刚启动就报显存不足。原因:预览图生成占用了显存,或 batch 过大。修复:batch size 设 1,关掉训练预览图生成,重跑。
症状:Loss 卡在 0.3 左右,半天不动。原因:学习率偏小,或数据集里图片质量参差。修复:学习率上调一档(如 0.01),并把所有样本统一到 512x512 同一构图。
症状:出图长得像锚点词,不像你的概念。原因:步数不够,新概念还没盖过锚点词。修复:续训 500 步;开了优化器状态保存的话,.optim文件能让续训接着上次的进度走。
症状:生成主体永远是同一个姿势。原因:过拟合到训练样本。修复:加正则化图片,或减少步数、扩充数据集。
源码地图:训练链路落在哪几个文件
modules/textual_inversion/textual_inversion.py— 嵌入向量的存储、.pt/.safetensors/ PNG 多格式加载与模型注入modules/textual_inversion/image_embedding.py— 嵌入数据藏进 PNG 元数据的读写逻辑,方便分享modules/textual_inversion/autocrop.py— 训练图片的自动裁剪modules/sd_hijack.py— 持有嵌入数据库实例,负责模型加载时的嵌入装载embeddings/— 嵌入文件默认存放目录,也是接收别人分享文件的落点
下一步玩什么
- 给嵌入配一个 LoRA 做混合训练:LoRA 管整体结构,嵌入管占位符,两者能在同一条提示词里叠加使用,相关网络实现在
packages_3rdparty/webui_lora_collection/。 - 用
scripts/prompts_from_file.py批量跑提示词文件做回归测试,参数每次改动前后对比同一批出图。
【免费下载链接】stable-diffusion-webui-forge项目地址: https://gitcode.com/GitHub_Trending/st/stable-diffusion-webui-forge
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考