只需几张照片,Stable Diffusion WebUI Forge 就能帮你炼出专属 Textual Inversion 概念令牌
2026/9/13 5:31:27 网站建设 项目流程

只需几张照片,Stable Diffusion WebUI Forge 就能帮你炼出专属 Textual Inversion 概念令牌

【免费下载链接】stable-diffusion-webui-forge项目地址: https://gitcode.com/GitHub_Trending/st/stable-diffusion-webui-forge

Stable Diffusion WebUI Forge 的 Textual Inversion(文本嵌入)训练,让你不用碰模型权重,只用 5~20 张图就能把"你的风格 / 你的角色"变成一个专属词。训练完你会得到一个.pt小文件,往提示词里一写<my_style>,生成的每张图都带上这个概念。本文带你从建向量到出图,完整走一遍。

开始前的 3 件事

动手之前把这三件事搞定,后面一路顺:

  • 环境:克隆仓库git clone https://gitcode.com/GitHub_Trending/st/stable-diffusion-webui-forge,装好依赖后能正常启动 WebUI,并加载一张基础模型(SD1.5 / SDXL 均可,后文以常见参数为例)。
  • 数据:建一个dataset文件夹,放5~20 张训练图,统一裁成512×512。每张图配一句描述,例如a photo of [V] style,其中[V]是占位符,训练时会被你的嵌入名替换——这是整个方法的标准写法,别省。
  • 概念速览:Textual Inversion 一句话解释——给模型词典里加一个新单词,再教它认识这个单词。模型本体权重一个字不动,只是多了一个可训练的小向量,训练完的嵌入就是那个向量。

手把手:从建模型到出图

1. 建一个初始向量

打开 WebUI 的Train标签页,在嵌入创建区填三项:

字段怎么填为什么
嵌入名称my_style,只用字母、数字、下划线它就是提示词里的令牌名,特殊字符会被自动剔除
初始化文本与目标相近的短语,如oil painting给向量一个靠谱的起点,收敛更快更稳
向量数单一概念选 1,复杂风格选 4向量越多容量越大,但更难训到位

界面入口在 modules/textual_inversion/ui.py,它最终调用 modules/textual_invector/textual_inversion.py 里的create_embedding(第 254 行):生成一个全零占位向量,若给了初始化文本,就把该文本经 CLIP 编码出的向量逐条拷进去,随后以[名称].pt落盘到embeddings/目录。核心只有几行:

vec = torch.zeros((num_vectors_per_token, embedded.shape[1]), device=devices.device) if init_text: for i in range(num_vectors_per_token): vec[i] = embedded[i * int(embedded.shape[0]) // num_vectors_per_token]

2. 训练参数怎么填

创建完成后,训练参数区照这张表填,新手直接抄作业:

参数建议值一句话说明
学习率0.005初始值,后续不降就往下调
训练步数1000~3000按图片数量增减,宁少勿多
批次大小1~4跟着显存走,爆了就降到 1
梯度累积4显存不足时的"等效大批次"手段

实际训练由 modules/textual_inversion/textual_inversion.py 的train_embedding接管:读图、前向、更新那个向量、周期性存预览与进度,一气呵成。

3. 跑起来,盯着 loss

Train Embedding。训练期间关注实时损失值:它应该逐步下滑,稳定后最好压在0.05 以下。中途停掉或正常跑完,.pt都会自动写回embeddings/目录——中断也不怕白跑。

4. 出图之后

在生成界面直接把令牌写进提示词:

a photo of <my_style> landscape with mountains

出图满意?收工。不满意?分两种情况:

  • 像,但没学到:样本太少或步数不够 → 补图(多角度、多光照),步数加到 2000 以上;
  • 不像,像初始化文本了:说明初始化词带偏了 → 换一个更贴切的初始化短语重训,同时检查图片里光照、构图是否一致。

它到底在背后做了什么

跑完再回头拆原理,会清晰很多。

一个占位向量如何变成"单词"create_embedding生成的.pt文件里存着 token 映射(string_to_token*指向 token 265)、向量本体、名称、训练步数和所用检查点名。生成时,WebUI 在分词阶段把<my_style>换成这个占位 token,于是提示词里的它不再是普通文字,而是一个被训练过的向量。

谁负责加载与注册。modules/textual_inversion/textual_inversion.py 里的Embedding类(第 36 行)管理单个嵌入的向量、步数与哈希;EmbeddingDatabase类(第 108 行)则是"数据库",它会监控embeddings目录的变更,发现文件动了就自动重扫注册(load_textual_inversion_embeddings,第 205 行)——所以你把.pt拖进目录,不重启也能用。

一个文件兼容四种格式load_from_file(第 154 行)按扩展名分发:

elif ext in ['.BIN', '.PT']: data = torch.load(path, map_location="cpu") elif ext in ['.SAFETENSORS']: data = safetensors.torch.load_file(path, device="cpu")

除了.pt/.bin/.safetensors,还支持 PNG / WEBP / JXL / AVIF 图片——数据直接藏在图片元数据里(编码解码逻辑在 modules/textual_inversion/image_embedding.py)。好处是嵌入可以当图片转发,一眼看到长什么样,方便分享。

辅助工具。图片尺寸和焦点不一致会拖慢收敛,modules/textual_inversion/autocrop.py 的智能裁剪能把每张训练图规整成统一构图;想批量回归验证效果,可用 scripts/prompts_from_file.py 从文件读提示词批量出图。

调优与排错一本通

症状 → 原因 → 动作,按图索骥:

现象多半是该做的动作
显存爆了(OOM)批次开大了batch 降到 1、开梯度累积;关训练预览图;必要时启用 Low VRAM 模式
loss 一直不降学习率不对先减半试 0.0025,再配合步数微调
生成结果不像描述初始化文本带偏换更贴切的初始化短语,重新创建向量
只认训练图、换个场景就崩过拟合减少训练步数、增加正则化(regularization)样本
概念和背景混在一起训练图背景太杂用 modules/textual_invector/autocrop.py 自动裁剪统一焦点,或手动抠图
临时文件占满磁盘训练缓存未清清理临时文件,如rm -rf tmp/*

进阶玩法与方向

  • 批量管理嵌入EmbeddingDatabase的扫描机制天然支持多嵌入共存,一次加载整目录;
  • 批量验证:配合 scripts/prompts_from_file.py,训练一版、批量出一组图做 A/B 对比;
  • 和 LoRA 结合:嵌入是"加一个词",LoRA 是"改一摊权重"。想更精细地微调参数,可以看 packages_3rdparty/webui_lora_collection,两条路线可以叠加使用;
  • 下一步探索:风格嵌入与物体嵌入混合训练(同一向量同时学"画风 + 角色")、给数据集做自动标注以降低人工成本。

现在就去

一套流程记住就行:几张图 + 一个下午 = 一个只属于你的概念令牌;训出来的.pt丢进任何一台 WebUI Forge 的embeddings/目录,别人也能直接用。打开 Train 标签页,创建你的第一个嵌入吧。

【免费下载链接】stable-diffusion-webui-forge项目地址: https://gitcode.com/GitHub_Trending/st/stable-diffusion-webui-forge

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询