🧠 第七章 绘画模型训练:创意生成与视觉设计
📄 一句话概括

32 张图的标签体检:151 个标签、唯一 9 个、单图最少 1 个最多 8 个。 最要命的是带触发词的只有 29 张,漏了 3 张。 漏触发词的图,训完喊它没反应,而且全程不报错。

📝 本节和前面几节的关系

上一节把图整理干净了。 这一节给每张图配文本——标签的质量,直接决定这个 LoRA 能不能被「叫出来」。

一、标签是 LoRA 的说明书

训练时模型学的不是「这张图好看」,而是「这张图 ↔ 这串标签」的对应关系。 标签就是你给模型写的说明书。 写多了会抢概念: 每张图都写 1girl, portrait, long hair, blue eyes, smile, outdoors, tree, sky, 模型会把注意力分散到这些词上,你真正想让它学的那个风格反而学不进去。 写少了学不到:只写 portrait,模型不知道这张图和别的肖像有什么区别。 经验区间:单图 5 到 15 个标签。 画风 LoRA 取下限,人物 LoRA 取中上限(因为人物要区分发型、瞳色、服装这些具体属性)。

二、触发词:一个词的开关

触发词(trigger word)是你自己起的、词表里原本没有的词,比如 mystyle、ohwx、zkz_style。 它的作用是当开关:调图时写这个词,才唤起你训的这个东西。 规则只有一条,但是硬的:每张图的标签里都必须包含触发词。 漏一张会怎样?那张图在训练时学到的信号是「这个风格和触发词无关」——它在反向拆你的开关。 漏得越多,开关越弱。漏到三成,触发词基本就失效了。 Demo 里 32 张漏了 3 张(9%),已经足以让触发词的效果明显打折。 而这件事不会有任何报错:文件都在、训练也跑完了、样图也出了,只是你调用的时候喊不动它。

三、密度与长尾

把 32 张图的标签统计出来:

标签 出现次数 占比
portrait 32 21.2%
1girl 31 20.5%
simple background 30 19.9%
mystyle(触发词) 29 19.2%
long hair 10 6.6%
blue eyes 7 4.6%
hat 6 4.0%
car 4 2.6%
Car 2 1.3%
前四行是「底座标签」:几乎每张都有,它们描述的是「这是个什么类型的图」,
不是「这个 LoRA 有什么特色」。这四个占了全部标签的八成,但它们几乎不携带风格信息。
后两行是长尾:car 和 Car 加起来 6 次,还被拆成了两个词。
出现不到 3 次的标签,模型学不会,还会稀释别的概念。处理办法是删掉,
或者合并到一个更通用的词上。
car 和 Car 那条特别值得看:
SD 的词表对大小写不敏感,但你的统计脚本敏感。 于是统计上它们算两个,
你会误判「这是两个长尾标签」,实际上是一个中间频次的标签。

四、WD 标签器的用法,和生成之后必做的一件事

WD 标签器(WD14 Tagger)是一个多标签图像分类器,输出 danbooru 风格的英文标签。 它替代的是「一张张手打标签」这件苦活。 📋 实操清单: 在训练器的「WD 标签器」页填图片目录 → 选模型(wd14-convnextv2-v2 是常用档)→ 阈值填 0.35 → 勾上「追加触发词」并填入你的触发词 → 点开始。 阈值是唯一的旋钮:调高标签变少(漏标),调低标签变多(噪声)。0.35 是社区常用起点, 然后看结果再调。 🐍 沙箱等价物:这一节没法装 WD 标签器(要下模型), 所以 Demo 做的是「生成之后的那一步」——体检。真实流程里,标签器跑完立刻就接着跑这段脚本。 体检四件事,缺一不可:① 每张图必含触发词;② 单图标签数落在 3 到 15; ③ 唯一标签数别太少(少于 20 个说明区分度不够);④ 出现不到 3 次的长尾清掉。

五、动手 Demo:标签体检:32 张图 151 个标签,触发词漏了 3 张

造 32 张图的标签集(大部分带触发词,故意让 3 张漏掉、1 张只剩一个标签, 并混入 car 与 Car 两种写法),统计标签总数、唯一标签数、单图标签数的分布、每个标签的出现次数, 以及带触发词的张数和长尾标签的个数。

TRIG = u"mystyle"
for i in range(32):
    tags = [TRIG, u"1girl", u"portrait", u"simple background"]
    if i == 9:
        tags = [u"1girl", u"portrait"]              # 漏了触发词
    if i == 21:
        tags = [t for t in tags if t != TRIG]       # 漏了触发词
    if i == 28:
        tags = [u"portrait"]                       # 只剩一个标签
    raw.append(tags)

for tags in raw:
    per.append(len(tags))
    for t in tags:
        cnt[t] = cnt.get(t, 0) + 1
tail = [k for k, v in cnt.items() if v < 3]

实跑输出:

--------------------------------------------------------------------
标签体检:32 张图 151 个标签,触发词漏了 3 张
--------------------------------------------------------------------
  图片数                   32 张
  标签总数                 151 个
  唯一标签                 9 个
  单图标签数               1 / 5 / 8
  带触发词                 29 张

  标签                出现次数   占全部标签
  ----------------------------------------
  portrait                  32        21.2%
  1girl                     31        20.5%
  simple background         30        19.9%
  mystyle                   29        19.2%
  long hair                 10         6.6%
  blue eyes                  7         4.6%
  hat                        6         4.0%
  car                        4         2.6%
  Car                        2         1.3%

  几个要看的数:**单图标签数最少 1 个、中位 5 个、最多 8 个**。
  中位数是数据集的「密度」。SD 训练一般 5 到 15 个标签比较舒服。
  **少于 3 个标签的图,模型学不到东西,还容易被当成噪声。**
  长尾标签(出现不到 3 次)有 1 个:Car。
  **它们每个只出现一两次,模型学不会,还会稀释别的概念。**
  注意 `car` 和 `Car` 被算成两个标签——**SD 的词表对大小写不敏感,但你的统计脚本敏感。**
  最重要的一个数:**带触发词的只有 29 张,也就是漏了 3 张。**
  触发词是 LoRA 的「开关」。**哪张图没写,训练时就会学到「这个风格和那个词无关」。**
  结果是你调用时喊它没反应。**这个错最难查,因为文件都能训完。**
  校验规则只有一条:**每张图的标签里必须包含触发词。**一行代码,能省掉一整轮返工。

done -> _out_39j.txt

先看单图标签数那一行:1 / 5 / 8,也就是最少 1 个、中位 5 个、最多 8 个。 中位 5 落在「5 到 15」的下沿——这份数据偏稀,还勉强及格。 那个「最少 1 个」就是第 29 张(i == 28),只写了 portrait。 只有一个标签的图,模型基本学不到东西,还容易被当成噪声。 长尾只有一个 Car(出现 2 次)。 注意 car 出现 4 次不算长尾,Car 出现 2 次算——同一个概念被大小写劈成了两半, 统计脚本认为是两个,训练时的词表认为是同一个。 最下面是结论:带触发词的 29 张,漏了 3 张。这三张里两张是「漏写」, 一张是「整段标签只剩一个」。它们都能训完,都不会报错。 所以打标签这件事的验收标准应该只有一条: 每张图的标签里必须包含触发词,用一行代码断言。assert all(TRIG in t for t in raw) —— 一行, 省掉一整轮返工。

30 秒实验

  1. 把「每张随机丢 30% 标签」模拟成标签器的低阈值,看单图标签数掉到多少、有多少张低于 3 个。 阈值调低不是更全,是更脏。
  2. 把 car 和 Car 统一成小写再统计,看唯一标签数和长尾各变多少。 唯一数从 9 掉到 8,长尾从 1 个变 0 个——一次归一化就清干净了。
  3. 给漏触发词的那 3 张补上 mystyle 重跑,看表格哪一行变了。 只有「带触发词」那一行从 29 变 32,其余全不动。

常见误区

  1. 「标签越多越好」。标签会抢概念,单图 5 到 15 个,画风取下限。
  2. 「触发词写不写都行」。漏一张,那张图就在反向拆开关。漏到三成,触发词基本失效。
  3. 「大小写不影响统计」。训练词表不敏感,统计脚本敏感,会误判出多余的长尾标签。
自测三问(点开对答案) 1. 触发词的作用是什么? —— 它是词表里原本没有的一个词,当作开关用。每张图都带,调图时写它才唤起这个 LoRA。 2. 单图标签多少个合适? —— 5 到 15 个。画风 LoRA 取下限,人物 LoRA 取中上限。少于 3 个基本学不到东西。 3. WD 标签器生成完还要做什么? —— 体检:每张必含触发词、单图标签数在 3 到 15、唯一标签数别太少、出现不到 3 次的长尾清掉。

图和标签都齐了,最后一步是把这些路径填进配置。而配置里最难发现的错,是那些「不报错」的错。

相关笔记