跳到正文
Learn Everything
返回

FLUX LoRA 学会了画花,为什么没有学会六个代号?

编辑文章

系列总纲 · 上一篇:DDPM 与生成修复 · 下一篇:六个新词向量

当生成图已经足够漂亮,实验反而更容易被误读。输入六个不同的花卉代号,模型每次都画出漂亮的花;LoRA 的测试 MSE 也下降。可把六张图排在一起,就会发现它们并没有对应六种花。

第三轮实验从 MNIST 小模型走到了完整的 FLUX.2 Klein 4B 文生图管线,完成自然花名适配和任意代号学习。第四轮先冻结模型、逐项更换文字条件,再做三对高噪声采样分布训练。最终结论是:这套 LoRA 配方能改变花卉外观,却没有建立可靠的新代号对应;提高高噪声比例的方案也没有通过继续投入的门槛。

这个任务的潜在业务背景是商品代号、内部素材标签或个性化概念的控制。名称与视觉概念如果没有稳定绑定,生成系统即使提供高清、漂亮的图,也不能可靠执行产品要求。本项目用六类已知花卉作为教学代理,没有开展真实商品生产或客户评测。

完整模型中,文字和图片在哪里相遇

实验使用 FLUX.2 Klein base 4B 与 蒸馏版 Klein 4B,固定到各自公开 revision,校验官方文件大小和 SHA。基础版作为适配对象,蒸馏版另做少步采样和 adapter 迁移观察,两者权重不同。

文字先经过 Qwen3 编码器,提取第 9、18、27 层隐藏状态并拼接成 7,680 维条件序列。图片经过 VAE posterior mode 编码,将 32 通道潜变量按 2×2 patch 组合,并使用预训练 BN 统计归一化。图像 Transformer 在带噪 latent 与文字条件上预测速度;本检查点配置包含 5 个双流块和 20 个单流块。它不是将整段提示压成一个花卉类别 ID,再交给分类器画图。

FLUX.2 Klein 的文字编码、图片潜变量、图像 Transformer 与 LoRA 注入位置

图 1:训练照片提供真实 latent,文字提供条件,LoRA 改变图像 Transformer 中指定投影的低秩更新。VAE 和 Qwen3 冻结。模型结构与接口以本项目固定的配置及 Diffusers v0.37.0 训练源码 为准,不把别的 FLUX 版本细节混入这一实验。

这里的 Flow 时间约定与上一篇 Tiny Flow 相反:

sigma = 0: clean image latent
sigma = 1: Gaussian noise
xt = (1 - sigma) * clean + sigma * noise
target_velocity = noise - clean
sampling: move from sigma 1 toward 0

训练一次随机取一个 sigma,回归这个时刻的速度;生成则从噪声逐步积分到图片 latent,逆归一化并解码。我们使用连续均匀 sigma 作为教学适配设置,不声称复刻了基础模型的大规模预训练配方。

LoRA 将线性映射改写为 W(x) + (alpha/r) * B(A(x)),冻结 W,学习 A、B。rank 越大,可训练参数通常越多,但“参数多”并不等于“类别更准确”;本实验会直接出现相反例子。它节省优化器状态,基础权重和激活仍然占显存。LoRA 原论文

先不训练:步数、蒸馏与 guidance 的真实差别

第三轮锁定六条原创提示,覆盖颜色、数量、空间关系、招牌文字、自然场景与水彩风格;每条用 seed17/29。基础版比较 4/20/50 步、CFG4,另有 20 步 CFG1;蒸馏版比较 1/4/8 步 CFG1,共 84 张 512×512 图。

检查点与设置每图中位秒数
蒸馏版,1 步,CFG10.086
蒸馏版,4 步,CFG10.215
蒸馏版,8 步,CFG10.388
基础版,4 步,CFG40.388
基础版,20 步,CFG41.774
基础版,50 步,CFG44.387
基础版,20 步,CFG10.911

文字表示预先缓存,时间不含下载、模型加载和文字编码;全部原始计时包含首次样本开销,没有删去慢样本。H100 上同一进程顺序运行,也不是严格服务性能基准。

固定 seed17 的三只鸭子与 OPEN TODAY 招牌,分别比较基础版 4、20、50 步和蒸馏版 4 步

图 2:上排提示为“三只黄色橡皮鸭排在蓝色架子上”;下排要求招牌精确写 OPEN TODAY。四列使用同一 seed,右列换了蒸馏检查点及其推荐式 guidance 设置,因此它是检查点比较,只有前三列构成同一基座的步数对照。

Case 1:文字渲染。 基础版 4 步的招牌出现多重、破碎文字,20 和 50 步的本样本更清楚。它说明少步求解在这一基础检查点上可能不足,但不能推导每一张 50 步图都比 20 步好。蒸馏版 4 步可以得到清楚文字,因为它的权重已改变,不能把这个结果写成“只换采样器就能提速八倍”。

Case 2:数量与结构。 在图 2 的这一个 seed 下,三种基础步数都能看见三只鸭子,主体正确并不意味着材质、边缘和空间关系完全相同。我们还发现 guidance 变化比主体分类分数更容易暴露问题:

同一基础版、20 步与 seed17,仅 guidance 从 1 改为 4 时的三只鸭子提示

图 3:左图可见鸭子外形粘连与变形,右图三只主体分离更清楚。此图没有为每个外形打人工分,说明的是固定 case 中的条件遵从与形态变化,不是整批质量排名。

主体识别很粗。即使某个图像编码器能把两图都判为“鸭子”,它也可能漏掉粘连、数量或错误文字。之后的花卉评价也必须保留这一边界。

自然花名 LoRA:目标函数确实改善,任务收益没有统一改善

数据来自 Oxford Flowers102 官方照片与划分,选择 pink primrose、balloon flower、fire lily、sunflower、rose、passion flower。每类官方 train10、val10、test 按图像编号取前20,共 60/60/120 张。预处理固定居中裁方并缩到 512×512,不使用测试图生成 caption。

这个任务属于对现有视觉先验的适配,无法确认公开照片是否已出现于基础模型预训练。train/val/test 隔离指的是本次适配阶段。

五个 LoRA 都训练 300 次更新,batch1、学习率1e-4。每100步在固定验证照片、噪声与 sigma0.25/0.5/0.75 上测 MSE,从第0步到第300步中选择最低者,随后报告独立测试。

变体可训练参数测试速度 MSECLIP 花类吻合SigLIP2 花类吻合
基座00.71739010/1210/12
rank8,seed17983,0400.71589811/1210/12
rank8,seed29983,0400.71583510/1210/12
rank32,seed173,932,1600.7157748/127/12
rank8 allstream5,898,2400.71251610/129/12
rank8,循环错配花名983,0400.7158549/129/12

MSE 是120张独立测试照片、每图三个固定时刻的速度误差;类别吻合来自每组12张新生成花卉图,两项统计对象不同。两评估器使用已固定的文字分类表示。真实持出花卉上的校准准确率接近饱和,仍不能保证生成图像上同样可靠。

allstream 的测试 MSE 改善最多,降幅约0.68%,生成类别却没有最好。rank32 参数更多,代理反而下降。更值得注意的是循环错配花名:它也获得几乎相同的 MSE 改善。

Case 3:错配监督。 如果训练图是玫瑰、caption 却固定循环到另一类,模型仍可通过带噪图像学习花卉域内统计并降低速度误差。MSE 在“看着一张已有花图去噪”时测量的能力,不等于“没有图片,只给文字从噪声画指定花”的能力。错配仍改善,足以否定“只要 MSE 下降,就证明文字类别学对了”的解释。

把已有花名换成任意代号

看到自然名称任务接近饱和之后,第三轮追加六个代号 zxflw01–zxflw06,与六类照片一一对应。数据不变,花也不是新发现的类别,只是请求它们的符号变了。

五个配置均 rank16、alpha16、allstream、600更新,共11,796,480个可训练参数:纯代号 seed17/29、50%代号与50%自然名混合 seed17/29,以及固定循环错配代号 seed17。根据“代号与自然名称验证 MSE 均值”选择 checkpoint,生成每配置24张,加基座共144张。

纯代号 seed17 的测试代号 MSE 从0.717487变为0.713661,自然名从0.717390变为0.713608。两个目标几乎一样地改善;但12张代号输出只得到 CLIP2/12、SigLIP2 1/12,与可靠的六类绑定相去甚远。

第三轮任意代号实验的完整固定 seed2027 联系图

图 4:行对应六个目标类,列对应基座与不同训练方案。比较同一列中的六行,观察代号变化有没有真正改变花类。图中呈现的是固定生成 seed,评价表另包含第二个 seed,不能把两者混为不同训练重复。

Case 4:外观变化与映射失败。 有的 adapter 把六个代号都画成相近花型,有的把它们整体转向另一种颜色或排列。它确实影响了生成器,却没有按请求区分六类。类似情形在业务上可能表现为“SKU 变了,商品样式没变”,不能以画面漂亮掩盖映射错误。

混合 seed17 的自然名生成代理达到12/12,而纯代号 seed17为9/12;seed29 没有重现同样优势。混合两组只有293/295次代号曝光,纯代号组有600次,抽图 RNG 也没有逐步配平。因此不能把这一差距单独归因于防遗忘,更不能等同于 DreamBooth 的基座先验保持。

第四轮冻结诊断:模型究竟有没有读到文字

“代号没学会”有几种可能:输入被截断,缓存误用,不同代号被编码成完全相同向量,或下游能感知不同向量却没有学到正确对应。它们需要不同的修复,因此我们先不训练。

四组冻结权重:基座、纯代号 seed17、混合 seed17、错配 seed17。取原验证集每类前两张,共12张照片,两个固定噪声,sigma0.1/0.3/0.5/0.7/0.9,每张同时配六代号、六自然名和空条件。共6,240个前向条件样本,形成960条归纳记录;独立照片只有12张,绝不是6,240张新测试图。

主诊断量为:

condition_gap =
mean(MSE under five wrong class conditions)
- MSE under the correct class condition

差距为正,表示正确条件在这张带噪照片上更有帮助。我们同时保存空条件误差、正确条件在六候选中的排序、条件改变后的预测变化。

不同噪声比例下,代号与自然花名的条件差距、排序以及预测变化

图 5:代号与自然名上方面板的纵轴尺度不同,不能只看线条高度比较强弱;下方面板是带噪照片条件排序或向量变化,并非生成准确率。区间来自12张旧验证照片的探索性重采样。

入口审计确认:每条完整模板有32个有效token,没有被512长度截断;第13号位置的代号token发生变化,缓存表示两两不同。全序列余弦接近0.999,是因为共享模板及填充位置占多数;变化位置的相似度较低。因此“向量很相似”不足以证明模型看不到差别。

在 sigma0.9,基座自然花名条件差距为+0.009532,正确条件排第一的比例62.50%;代号差距为-0.000185,排序16.67%。更换代号确实改变预测向量,缺少的是正确绑定。自然花名在 sigma0.5 的差距仅+0.000119,说明噪声较强时文字帮助更显著,但这一观察不能保证提高高噪声训练比例就有效。

只改变噪声分布,实际结果是什么

基于上述观察,我们锁定三对训练 seed61/73/89,每组600更新:

A: sigma ~ Uniform(0, 1)
B: with probability 0.5, sigma ~ Uniform(0, 1)
   otherwise, sigma ~ Uniform(0.7, 0.95)

训练图片顺序、adapter 初始化、基础高斯噪声流按同一 seed 配对;图片 RNG、sigma RNG 和噪声 RNG 分开。两分支初始完整张量 hash 相同,图片 ID 每步一致,第1/300/600步噪声指纹相同。这样能把“多换了样本”从解释中排除。

唯一的干预是实际 sigma 分布,仍用不加权速度 MSE。因此改变的是优化目标的期望分布,不是同一目标下的纯方差缩减。这也是本项目提出的探索方案,没有把它称为官方推荐。

固定取第600步,生成前锁定一个模板、六类别、三个新 seed6201/6202/6203,代号与自然名分别生成,每模型36张,七个配置共252张。它比最初候选设计规模小,没有多模板泛化实验。

高噪声配对训练固定 seed6201 的六代号输出,覆盖基座和全部六个 adapter

图 6:每列换 adapter,每行换目标类。列内六行依然很接近,训练经常把整体外观改变了,却没有把六个符号分开。这里展示全部固定面板,目标类别由行标签给出。

相同基座、adapter 与 seed6201,改用正确自然花名后的输出

图 7:自然花名比任意代号更能引起目标结构变化,但局部外观仍会随 adapter 改变。自然名保持与代号获取是两项成绩,不宜只展示其中更好的一个。

Case 5:同一 adapter 的六代号。 seed61 的均匀组常输出黄白花型,高噪混合组更多输出紫花;seed73 两组也有明显外观差别。但在各自列中,从 primrose 请求换到 sunflower,请求类别没有形成稳定区别。这种列间变化证明 adapter 在工作,列内同质说明任务还没完成。

训练 seedCLIP 代号正确数SigLIP2 代号正确数CLIP 自然名正确数SigLIP2 自然名正确数
61,均匀→混合2→13→315→1416→14
73,均匀→混合3→43→316→1416→14
89,均匀→混合3→33→415→1415→15

每格分母18。预定门槛为代号至少提升10个百分点、自然名下降不超过5个百分点,同一训练 seed 在两评估器都满足,至少2/3 seed通过。18张的小面板里,多对1张仅5.56个百分点;至少需要多对2张,而自然名少对1张已超出容许下降。

三对训练 seed 的代号正确数与提前锁定的实用继续门槛

图 8:两评估器中最大的代号提升都只有一张。三个训练 seed 的联合通过数为0/3;原型和ridge敏感性分析也为0/3,没有更换主指标来挽救结论。

干预确实执行了:混合组选择高区间分支的步数为301/282/315;实际 sigma≥0.7 的步数由均匀组173/192/178增至379/370/403。失败不能归因于“高噪声没有真的增加”,但它也不能唯一说明是哪种条件学习瓶颈。

怎样把负结果变成下一轮的输入

迭代完成的内容支持的判断
第三轮冻结生成84张基础版/蒸馏版多设置图片同基座步数变化与换权重必须分开
第三轮自然名适配五组 LoRA、独立目标 MSE、168张采样更小回归误差没有统一变成任务收益
第三轮代号追加五组600更新、144张生成当前配方没有建立六代号映射
第四轮冻结干预6,240前向条件样本,12独立照片文字入口可区分;自然语义高噪帮助更大
第四轮配对训练六组、3,600更新、252张图增加高噪比例的联合门槛0/3失败

六组训练循环合计635.71秒,峰值 PyTorch allocated 8.03 GiB;252次缓存文字到图像的采样合计499.68秒。它们不含模型加载、旧缓存制作等全部开销,不能用来承诺端到端成本。两种 sigma 分布下的平均训练 loss 也不能直接排名。

这次决策是停止扩大这一噪声重配方的训练量,转向条件输入本身。下一篇会把可训练位置移到六个新 token 的输入向量,先检查反向路径和持久化,再检验新模板。它是一个已经实际运行的新实验,不意味着我们提前认定它一定成功。

本文图片是原创结构图和冻结结果中的真实生成图,不含复制论文插图。数值可沿 runs/round3/image/results/analysis、runs/diagnostic_round/image/conditions 和 runs/diagnostic_round/image/noise_training 的逐图记录复算。所谓未通过门槛只适用于这批六类照片、提示、种子和预算,不等于证明所有高噪训练或所有 FLUX 条件适配无效。


编辑文章
分享这篇文章:

上一篇
只训练 15,360 个参数:六个新 token 能否控制冻结的 FLUX?
下一篇
从碎笔画到完整数字:用实测理解 DDPM、U-Net、潜空间与 Flow