--- 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数。