---
datasets:
- MutsumiLab/Lumina_sft_dataset
viewer: false
---
# Lumina SFT - 训练笔记
### **数据集概览**
* **总数据量**: **215万** 张图。
* **主要来源**:
* **Danbooru全家桶**: 用了全量的基于Danbooru tag的抽取。
* **多人图专项**: 专门选了 **58万** 张带原标的多人图进行匹配。(基于yolo+tagger+原标三者一致)
* **新图补充**: 数据同步到ID `9803999` (和Starry7.2一样,懒得再更新了 )。
* **Gelbooru增补**: 加了一批 `gelbooru_20250526_add_1280px` 的图(主要补缺的tag)。
---
### **Caption构造策略**
这是一个混合策略,为了让模型既能理解自然语言也能精确解析tag。
* **42.8%** 的概率使用 **自然语言(NL)**描述(从五种模板里随机挑一种)。
* **57.2%** 的概率使用 **XML格式的标签**。
#### **XML Tag 结构**
Tag被塞进一个XML结构里,主要是为了让模型学会区分不同类型的标签(作者、角色、作品等)。
有80%概率是正常结构,即
```xml
1girl
artist_name
character_name
series_name
blue hair, long hair, school uniform, sky
safe
highres, 2025
```
* **一个关键的随机化**: 全局有 **50%** 的概率,某个分类(比如``)是空的,这个标签也会被保留下来(``)
* 另一半概率则会直接省略空标签。这么做是为了防止模型对固定的标签顺序产生依赖。(这个设置对所有类别同时起效,即要么全丢,要么全有)
#### **20%概率特殊模式:画师风格强化 (Artist Focus Mode)**
这是一个为了强化风格学习的特殊模式,有 **20%** 的概率触发:
* 在这种模式下,**作者标签会被单独拎出来**,放在 `` 标签里。
* **所有其他的标签** (角色、通用、元数据等) 会被揉成一团,变成一个不带分类的、用逗号分隔的普通字符串。
* 目的:强迫模型将 `` 标签里的内容识别为画风的关键指令。
```xml
artist_name
anything tag list
```
---
---
#### **1. 标签分组处理**
我把所有标签分成了三组,区别对待:
* **A组 (核心主体)**: `special` (构图), `characters` (角色), `artists` (作者)。这是图里最关键的信息。
* **B组 (背景和通用特征)**: `copyright` (版权/原作), `general` (通用描述)。
* **C组 (元数据)**: `meta`, `year`, `quality`, `rating`。
#### **2. 随机丢弃与组合**
生成最终caption的过程充满了随机性:
* **A组内部**:
* 有 **80%** 的概率会做“**标签推导丢弃**”。比如有了 `hatsune miku` 这个角色tag,就按一定概率把 `vocaloid` 这种上级tag丢掉,强迫模型学习更本质的特征。
* 有 **5%** 的概率会极端到 **只保留special tag**(比如 `1girl`),人物的性别/数量。
* **B组处理**:
* `copyright` 标签 **75%的概率会被整个丢掉**。
* 和角色强相关的通用标签(比如角色的发色、服装)也有一半的概率被丢掉或部分丢掉,防止模型把角色和特定外观死记硬背。
* B组所有标签最后还有 **5%** 的概率被随机单个丢弃。
* **C组处理**:
* 元数据比较稳定,但也给了 **5%** 的随机单项丢弃概率。
* **最终组合**:
* A、B、C三组的最终顺序是**随机打乱**的。(注意,是分组打乱,组间并不合并。)
* 甚至有时候会故意不加B组或C组,比如有 **9%** 的概率最终caption**只包含A组**的核心内容。
* 最后,对整个caption还有 **30%** 的概率移除那些语义上重叠的标签。
### **其他细节**
* **分辨率标签**: 自动根据图片尺寸添加 `highres` (>=1MP) 或 `lowres` (<=0.6MP) 标签。
* **Token优化**: 所有tag里的 `_` 都会被替换成空格,主要是为了节约gemma2b模型的token数。