Stable Diffusion LoRA 训练:参数、显存与数据集实战
2026/9/18 17:11:06 网站建设 项目流程

LoRA 这个词在 Stable Diffusion 圈子里早就不算新鲜了,但每隔一段时间就会有人问:为什么我训出来的 LoRA 一挂上去画面就糊?为什么别人的 LoRA 一个词就能触发,我的得写一整段提示词?为什么同样的参数,别人 12G 显存能跑,我 24G 反而爆了?这些问题背后其实不是玄学,而是几个具体环节没对齐——数据集、打标方式、网络维度、学习率、以及训练分辨率和推理分辨率之间的匹配关系。这篇内容我打算把 LoRA 从原理到落地整条链路拆开讲一遍,包括 WebUI 和 ComfyUI 两条使用路线的差异、训练参数的取值逻辑、显存到底被谁吃掉了、以及我这两年实际训了几十个模型之后总结出来的排查清单。不管你是刚装好 Stable Diffusion 想试着自己训一个角色 LoRA 的新手,还是已经能跑通流程但效果一直不稳定的老玩家,应该都能从里面找到能直接抄的部分。

1. LoRA 到底是什么:先搞清楚它解决的是哪个问题

1.1 全量微调为什么在消费级设备上根本走不通

要理解 LoRA 的价值,得先知道它替代的是什么。早期要让 Stable Diffusion 学会一个新概念,主流做法是全量微调,也就是把 UNet 里全部约 8.6 亿个参数(SD1.5)或者 25 亿个参数(SDXL)全部拿出来重新训练一遍。这个方案在效果上确实是最彻底的,但代价极其夸张。

训练时每个参数不只要存自己的权重,还要存梯度、以及优化器状态。用最常见的 AdamW 优化器,每个参数需要额外维护一阶动量和二阶动量两份 fp32 数据。算一笔账:8.6 亿参数,权重 fp16 占 2 字节,梯度 fp16 占 2 字节,两份优化器状态 fp32 各占 4 字节,加起来是 12 字节每参数,也就是大约 10GB 起步。这还只是静态占用,训练过程中前向传播产生的中间激活值会随着 batch size 和分辨率线性增长,512 分辨率下再吃掉几个 GB 很正常。SDXL 就更不用说了,直接翻三倍。

所以全量微调在单卡消费级显卡上基本没有可行性,而 LoRA 的出现把这件事的门槛从"租服务器"降到了"家里那台游戏本也能跑"。

1.2 低秩分解:LoRA 真正做的事

LoRA 全称是 Low-Rank Adaptation,翻译过来叫低秩自适应。它的核心假设是:模型在适配一个新概念时,权重的变化量 ΔW 其实并不需要那么高的自由度,它可以被一个低秩矩阵很好地近似。

具体做法是,冻结原始权重 W0 不动,在旁边挂两条细长的小矩阵 A 和 B。假设原始权重矩阵是 d×k 的大小,A 就是 r×k,B 是 d×r,其中 r 是一个很小的数字,常见取值 4 到 128。前向计算变成 h = W0·x + (B·A)·x × (α/r),其中 α 是缩放系数。

关键在于 B 被初始化为全零,A 用随机高斯初始化,所以训练刚开始时 B·A 恒等于零,模型输出和原始底模完全一致。这意味着 LoRA 训练是从"零扰动"开始的,不会像全量微调那样一开始就把底模学崩。随着训练进行,B·A 逐步学到那个"概念方向"。

参数量上的差距有多夸张:如果原矩阵是 768×768,也就是 59 万个参数,取 r=16 后,A 是 16×768,B 是 768×16,加起来才 2.4 万个参数,压缩了 24 倍。实际训出来的 LoRA 文件通常只有 20MB 到 200MB,而底模动辄 2GB 到 7GB,比例关系一目了然。

1.3 用生活化的方式理解:给底模贴便签

我给不太熟悉这块的朋友打过这样一个比方:底模是一位画了几百万张画的老画师,他什么都会画,但你让他画"你家那只特定花纹的猫",他只能画出笼统的猫。全量微调相当于把这位画师关起来重新上三年学,学费贵、风险高、还可能把原来会的都忘了。

LoRA 相当于在他画桌上贴了一张便签,上面写着"画猫的时候,耳朵尖加一撮白毛,尾巴短一点,眼睛偏琥珀色"。画师还是那个画师,能力没变,只是在特定触发条件下会参考这张便签。便签可以有好几张,也可以随手撕掉——这正是 LoRA 最大的工程优势:可插拔、可叠加、可调权重、可随时移除。

代价是便签的表达能力有限,如果概念太复杂(比如要学一整套全新的画风体系),LoRA 会力不从心,这时候才需要考虑全量微调或者更高容量的适配方案。

1.4 LoRA、Embedding、Hypernetwork 的分工

同一个生态里还有另外两种常见的轻量微调方式,很多人容易混。Textual Inversion 训出来的 Embedding 只有几十 KB,它做的事是往提示词词表里塞一个新词向量,本质上是"教模型认识一个新词"。它擅长捕捉整体风格倾向,但很难精确控制人物长相,因为文本编码器能承载的信息量本来就有限。

Hypernetwork 走的是另一条路,让一个小网络去动态修改 UNet 的权重,效果介于两者之间,现在用得比较少了。LoRA 兼顾了文件体积和表现力,是目前最主流的选择。

实际项目里我经常三个一起用:Embedding 定基调,LoRA 定人物或画风,再配合 ControlNet 定构图。

2. 环境准备和版本搭配:这里踩的坑比训练本身还多

2.1 WebUI 和 ComfyUI 两条路线怎么选

Stable Diffusion 主界面这条传统路线胜在直观,装完打开就能看到一堆滑块和输入框,LoRA 放在 models/Lora 目录下,在提示词里写<lora:文件名:权重>就能触发,学习成本极低。缺点是工作流不够灵活,多个 LoRA 叠加时的权重调整比较粗糙,批量任务也不好编排。

ComfyUI 是节点式的,一开始看着像电路图,劝退不少人。但一旦用顺了就会发现它在可控性上是碾压级的——因为节点连线本质上是在显式声明数据流,你能清楚看到 LoRA 分别对 model 和 clip 两个输出做了什么,能精确控制它在流程里的位置。做批量出图、参数扫描、多模型对比时,ComfyUI 的效率优势非常明显。

我的建议是:先装 WebUI 跑通一次完整的训练到出图链路,把参数和概念摸熟;等你开始觉得"我想同时试三组权重看看差别"的时候,再切 ComfyUI。不要一上来就啃节点,容易在半路放弃。

2.2 依赖版本和显存底线的实测数据

这块是新手翻车最集中的地方。常见的整合包已经帮你把 Python、PyTorch、CUDA 版本配好了,如果要用整合包就尽量别手动去升级里面任何一个组件,很容易出现"昨天还能跑今天就不认显卡了"的情况。

如果你要自己搭环境,几条硬性要求:PyTorch 和 CUDA 版本必须匹配,显卡驱动版本要高于 CUDA 要求的下限;xformers 能装就装,它对显存的节省非常实在,大致能降 20% 到 30% 的峰值占用;如果 xformers 装不上,退回到 PyTorch 自带的 SDPA 注意力实现也能用,只是慢一点。

关于显存底线,我把自己和身边人实测的数据整理成了一张表:

训练目标最低可跑显存舒适显存关键开关
SD1.5 LoRA,512 分辨率6GB8GBgradient_checkpointing + fp16
SD1.5 LoRA,768 分辨率8GB12GB上述 + cache_latents
SDXL LoRA,1024 分辨率12GB16GB 到 24GB上述 + AdamW8bit + 分块 VAE
9B 级大模型 LoRA,1024 分辨率16GB24GB 及以上fp8 底模 + 8bit 优化器 + 梯度检查点

以 9B 参数量的模型为例做个估算:底模用 fp8 加载大约占 9GB,LoRA 本身的可训练参数只有几十 MB 到几百 MB,优化器状态撑死 1GB 到 2GB,真正吃显存的大头是激活值。1024 分辨率、batch size 为 1 的情况下,开启梯度检查点后激活值大约 4GB 到 8GB,这样总算下来 16GB 能勉强起来,24GB 才算稳。如果关掉梯度检查点,显存需求直接翻倍还多,基本就没法在单卡上玩了。

注意:8bit 优化器省下的是优化器状态那份显存,不是激活值。很多人以为开了 8bit 就能降一半显存,实际只降了百分之十几,真正的大头还得靠梯度检查点和降低分辨率来压。

2.3 训练器选型

目前主流是 kohya_ss 这套脚本,它的参数覆盖最全,社区资料也最多,几乎所有教程里的参数名都能对得上。秋叶整合包这类一键包在它基础上做了中文界面和预设,对新手非常友好,缺点是遇到问题时你不容易定位到底是哪一层出了状况。

我的做法是:新手阶段用一键包快速出成果建立信心,同时把生成的命令行参数打印出来看一眼,理解每个数字代表什么;等要精细调优了,切换到原版脚本,直接写配置文件。

配置文件长这样,是 toml 格式:

[model] pretrained_model_name_or_path = "/models/sd_xl_base_1.0.safetensors" v2 = false v_parameterization = false [network] network_module = "networks.lora" network_dim = 32 network_alpha = 16 [optimizer] optimizer_type = "AdamW8bit" learning_rate = 1e-4 unet_lr = 1e-4 text_encoder_lr = 1e-5 lr_scheduler = "cosine" lr_warmup_steps = 100 max_grad_norm = 1.0 [training] output_dir = "/output" output_name = "my_lora_v1" save_model_as = "safetensors" max_train_epochs = 12 save_every_n_epochs = 2 mixed_precision = "fp16" gradient_checkpointing = true xformers = true cache_latents = true cache_text_encoder_outputs = true seed = 42 clip_skip = 2 min_snr_gamma = 5 noise_offset = 0.03

启动的时候用:

accelerate launch --num_cpu_threads_per_process=8 sdxl_train_network.py \ --config_file=my_lora.toml

这套配置在 16GB 显存的卡上跑 1024 分辨率、batch 1 是稳的,可以作为起点,然后根据你的素材量调 epoch 数。

3. 数据集准备:决定成品好坏的 70% 在这里

3.1 素材数量、分辨率和构图

训练效果的上限基本由数据集决定,参数只是让你更接近这个上限。关于数量,我的经验是角色类 LoRA 准备 20 到 40 张高质量图就够,画风类需要 50 到 150 张。少于 15 张很容易出现"只会画某个角度",多于 200 张则在训练时间和过拟合风险上不划算。

分辨率方面有个原则:训练分辨率必须和素材的实际内容分辨率匹配。如果你把一堆 512×512 的图强行拉到 1024 去训 SDXL,模型学到的是"放大后的模糊感",出图就会发虚。反过来,用 1024 的素材去训 SD1.5 的 512,会被裁切或压缩,细节反而丢失。

构图上一定要有变化。我见过太多人拿了 30 张全部是正面半身照的素材去训,结果出来的 LoRA 只会画正面半身,一旦提示词写"背影"或者"全身远景"就崩得很难看。理想的数据集应该覆盖不同角度(正、侧、四分之三侧)、不同景别(特写、半身、全身)、不同表情、不同光照,甚至包括一两张被部分遮挡的。

3.2 打标:工具出初稿,人工做终审

打标是很多人偷懒的地方,也是最容易埋雷的地方。目前常用的自动打标工具主要有三类:BLIP 系列擅长生成自然语言描述句,WD 系列标签器擅长输出逗号分隔的关键词,还有较新的多模态描述模型能生成更细致的句子。

我的流程是这样的:先用关键词标签器跑一遍,拿到一份覆盖度很广的标签集;然后手工过一遍,把和目标概念无关的标签删掉。这一步特别关键。

举个例子,你要训的是某个角色,如果 30 张素材里有 25 张是白底,自动打标很可能给每张都打上white background。训练完之后你出图时会发现,不管怎么写提示词,背景都泛白——因为模型把"白底"和"触发词"绑定在一起了。解决办法就是把这些背景标签全部删掉,让背景信息不被写进标注。

反过来,有些标签是必须保留的,比如角色的发色、瞳色、服装特征。如果这些标签被写进标注,模型会认为"这些特征是可变的、由提示词控制的",于是它只学剩下的部分,导致你需要写很长一段提示词才能还原角色。如果你希望角色特征被硬绑定在触发词上,那就应该把这些描述性标签删掉。

3.3 触发词设计和目录结构

触发词的作用是给这个概念一个唯一的入口。要选一个在底模词表里几乎不出现的字符串,比如ohwx stylesks person这类,或者干脆自造一个无意义单词。绝对不要用beautiful girl这种底模已经理解得很好的词,那样触发器会失效,因为你没法区分"模型本来就会画美少女"和"模型学会了你给的概念"。

数据集目录结构上,kohya 这套脚本的标准做法是一个文件夹放图,同名 txt 放标注,然后在配置里声明重复次数:

[[datasets]] resolution = 1024 batch_size = 1 enable_bucket = true min_bucket_reso = 512 max_bucket_reso = 1536 bucket_reso_steps = 64 [[datasets.subsets]] image_dir = "/train/my_character" num_repeats = 10 caption_extension = ".txt" class_tokens = "ohwx"

num_repeats这个参数的含义是每张图在每个 epoch 里被重复训练的次数。总训练步数的计算方式是:图片数量 × 重复次数 × epoch 数 ÷ batch size。比如 30 张图、重复 10 次、训 10 个 epoch、batch 为 1,总步数就是 3000 步。这个数字心里要有,后面判断学习率是否合理全靠它。

3.4 正则化图像:不是必须,但有时很有用

正则化图像的做法是准备一批"同类但不是目标概念"的图,配上不含触发词的标注,让模型在学习新概念的同时看到反例,从而抑制概念渗透。

比如你要训一个特定角色,可以拿一批其他人物图作为正则项。这样模型会区分"这是我要的角色"和"这是普通人",减少 LoRA 一挂上去就把所有图都染上相同脸型的问题。

代价是训练时间翻倍,数据准备也麻烦。我的建议是:先不搞正则化跑一版,如果发现概念渗透严重(比如画别的角色也长着目标角色的脸),再加。不要一开始就上,会拖慢整个调试循环。

4. 训练参数逐个拆解:每个数字背后的理由

4.1 network_dim 和 network_alpha 怎么定

network_dim就是前面说的秩 r,决定 LoRA 的容量。数值越大能装下的信息越多,文件越大,过拟合风险也越高。经验取值:简单画风 8 到 16,普通角色 16 到 32,细节丰富的复杂角色或者需要精确还原的场景 64 到 128。

network_alpha是缩放系数。它和 dim 的关系有个简单记忆法:alpha 等于 dim 的一半时,学习率基本按你设置的来;alpha 等于 dim 时,实际生效的学习率会被放大;alpha 远小于 dim 时相当于降低了学习率。

社区里流传的alpha = dim / 2是个非常稳的默认,我大部分项目都用这个比例,16 对 8、32 对 16、64 对 32,几乎不需要调。只有当素材特别少、容易过拟合时,我会把 alpha 再压低一点,相当于给学习率加一道保险。

4.2 学习率和调度器的搭配逻辑

学习率是训练里最敏感的参数。太高会导致 loss 震荡、出图直接崩成色块;太低则训了几千步还是没变化,白白浪费时间。

SD1.5 的推荐范围是 UNet 1e-4 到 5e-4,文本编码器 1e-5 到 5e-5。SDXL 通常比 SD1.5 略保守,UNet 常在 1e-4 附近,文本编码器更低。这里有个原则:文本编码器比 UNet 敏感得多,宁低勿高。因为它直接影响词向量的语义,一旦被学坏,整个提示词系统的响应都会变得莫名其妙。

调度器决定了学习率随训练进程怎么变化。cosine是最常见的,学习率从设定值平滑衰减到接近零,适合大多数场景。constant保持恒定,适合步数很少的短训练。cosine_with_restarts会周期性地把学习率拉回去再衰减,适合素材差异大、概念复杂的情况,但会拉长收敛时间。

lr_warmup_steps是预热步数,让学习率从零慢慢升到设定值,避免一开始就用大学习率把还没稳定的 LoRA 权重带偏。一般设总步数的 3% 到 5%,几百步以内。

4.3 batch size、梯度累积和显存换算

batch size 就是一次喂给模型几张图。显存不够时最直接的做法是降到 1,然后用梯度累积来弥补。gradient_accumulation_steps = 4的意思是累积 4 次前向后才更新一次权重,效果上等价于 batch size 为 4,但显存占用只有 1 的量级。代价是速度慢,因为多了三次前向计算。

这套组合策略让 8GB 显存也能训出不错的结果,只是时间成本上去了。我在 12GB 卡上训一个 30 张素材的角色 LoRA,SDXL 1024 分辨率、batch 1、2000 步,大概要 40 分钟到一个小时,这个时间尺度是可以接受的。

另外几个省显存的开关值得单独说:cache_latents = true会把 VAE 编码结果缓存到内存或磁盘,避免每步重复编码图像,既省显存又快;cache_text_encoder_outputs = true同理,但它和训练文本编码器是冲突的,如果你要同时训 TE,这个开关必须关掉。

4.4 一份参数对照速查表

参数保守取值激进取值说明
network_dim16(角色)/ 8(画风)64 到 128容量越大越容易过拟合
network_alphadim/2dim影响实际学习率
unet_lr1e-45e-4超出 5e-4 极易训崩
text_encoder_lr1e-55e-5宁低勿高
lr_schedulercosinecosine_with_restarts长训练用 cosine
max_train_epochs8 到 1220配合重复次数看总步数
min_snr_gamma5关闭提升细节稳定性
noise_offset0.030.05改善明暗分布
clip_skip21SD1.5 惯例用 2

5. 训练过程监控:怎么看懂那些数字

5.1 loss 曲线的正确读法

很多人盯着 loss 数字看,觉得降得越低越好,其实不是。LoRA 训练的 loss 从 0.2 降到 0.08 是正常轨迹,降到 0.02 反而危险,说明模型在死记硬背训练集,泛化能力会崩。

我看 loss 主要看三件事:一是下降趋势是否平滑,如果出现剧烈锯齿说明学习率太高或者 batch 太小;二是下降是否在某个点停滞,停滞太久可能是容量不够或者标注有问题;三是有没有异常尖峰,偶发的尖峰可能是某张素材分辨率异常导致的。

更可靠的判断标准是看采样图。训练脚本通常支持每隔 N 步出一张测试图,我会用固定的提示词和固定种子,观察同一张图随训练步数的变化过程。这个过程的直观程度远超任何数字。

5.2 采样出图的节奏安排

比较经济的做法是每 500 步出一个采样,用两组提示词:一组包含触发词,一组不包含。对比这两组图就能判断概念是否被正确绑定了。理想的中间状态是,包含触发词的图明显呈现目标特征,不包含触发词的图保持底模原有风格。

如果发现不管写不写触发词,图都变成了目标角色的样子,那说明概念渗透已经发生,需要降低训练量或者加强标注区分度。

5.3 过拟合和欠拟合的识别特征

欠拟合的表现是:触发词起效很弱,需要写很长一段提示词才能勉强还原;不同种子出图差异极大,特征不稳定;细节如发饰、纹样基本还原不出来。

过拟合的表现则相反:出图千篇一律,构图高度雷同,几乎和训练集某张图一模一样;画面出现明显的伪影、色块、糊边;一旦换个场景提示词,画面就崩;训练时 loss 低到 0.03 以下。

这两种情况的应对方式是反向的:欠拟合就加步数、加维度、加学习率;过拟合就减步数、减维度、加强打标区分度,或者用多个 checkpoint 里靠前的那一版。

我个人的习惯是每个 epoch 都存一个 checkpoint,最后横向对比,通常最好的版本在倒数第二三个,而不是最后一个。

6. 推理端使用:权重调到多少才合适

6.1 权重区间和分层权重的思路

在提示词里挂 LoRA 时,权重是核心变量。对于训练良好的角色 LoRA,0.6 到 0.8 是常用区间;0.5 以下效果太弱,1.0 以上容易画面崩坏。画风类 LoRA 通常可以给到 0.8 到 1.2,因为画风对结构的破坏性小。

分层权重是进阶玩法。核心思路是 LoRA 对 UNet 不同层的修改,其影响是不一样的:浅层主要影响构图和轮廓,中层影响纹理和细节,深层影响语义和风格。通过给不同层设置不同倍率,可以实现"只借这个 LoRA 的纹理,不要它的构图"这种精细操作。

实践中我常用的一招是:当两个 LoRA 冲突导致画面扭曲时,把其中一个的浅层权重降到 0.3 到 0.5,深层保持 0.8,往往能在保留风格的同时让构图恢复正常。

6.2 多个 LoRA 叠加时的冲突处理

同时挂三个以上 LoRA,冲突几乎是必然的。原因不复杂,每个 LoRA 都在用自己的方向修改同一批权重,方向不一致时就会互相拉扯,表现为色彩失真、线条混乱或者主体消失。

处理顺序建议这样来:先把所有权重压到 0.4 到 0.5,确认画面结构正常,然后逐个往上加,每次只加一个,观察变化。如果加到某个 LoRA 时画面开始崩,就把它的权重压回去,或者改成分层模式只保留深层。另外,避免同时使用两个都训练了文本编码器的 LoRA,因为 TE 部分的叠加冲突比 UNet 严重得多。

6.3 ComfyUI 里的节点连接方式

在 ComfyUI 里,LoRA 是通过专门的加载节点实现的,它有两个输入输出对:一个是 model,一个是 clip。MODEL 从底模走进来,切过 LoRA 节点后输出给采样器;CLIP 从底模走进来,切过 LoRA 节点后输出给文本编码节点。

这里有个容易搞错的地方:如果你把 LoRA 节点接在文本编码之后,CLIP 那一侧就失效了,等于只应用了 UNet 部分的 LoRA。位置必须放在最前面,紧贴底模加载节点。

多 LoRA 就是串联多个这样的节点。要做权重扫描对比,可以用批量节点把一个权重值列表喂进去,让它自动跑出多张图,效率比手动改参数高得多。

6.4 和其他控制模块的联合使用

LoRA 负责"是什么",ControlNet 负责"怎么摆",这两者是互补的。做角色类项目时,我一般会同时挂一个姿态 ControlNet 来锁定构图,然后让 LoRA 决定长相和服装细节。这样出的图既有个性又可控。

人脸身份保持类的模块和 LoRA 也存在叠加空间:前者锁定五官比例,后者提供风格化处理。这种组合的调参顺序是先把身份模块调到稳定,再加入 LoRA 并保持低权重,否则容易两边互相干扰,出来的脸既不像参考人也不像 LoRA 角色。

7. 常见问题速查与排查路径

训练和使用的坑比较集中在几个地方,我把遇到频率最高的整理成表,按现象倒查原因:

现象可能原因排查动作
挂了 LoRA 但画面完全没变化触发词漏写,或权重过低,或文件没被正确加载查看生成信息的元数据,确认 LoRA 名字是否出现在提示词解析结果里
出图直接崩成色块噪点权重给到 1.2 以上,或训练本身已过拟合权重降到 0.6 试一次,换别的 epoch checkpoint
画面整体发糊训练分辨率与推理分辨率不匹配,或 VAE 用了不对的版本检查训练 log 里的 resolution,确认推理分辨率接近;SD1.5 建议换用主流微调 VAE
只会画某个角度数据集角度覆盖不足补充侧脸、背影、远景素材,重新训练
换个场景提示词就崩概念渗透过度,训练集背景标签没清理重做打标,删掉背景和光照相关标签
训练时显存溢出分辨率、batch、激活值超标开梯度检查点、开 xformers、降分辨率、用 8bit 优化器
loss 一直不降学习率过低,或标注与图像不对应学习率提到 5e-4 试跑;逐张检查标注文件与图片是否配对错位
叠加两个 LoRA 后色彩失真权重叠加过量,或两个 LoRA 都改了文本编码器各自权重降到 0.4,或改用只训 UNet 的版本
出图人脸每张都不一样训练步数不足,或数据集人脸特写太少增加重复次数,补充正面清晰肖像
训练速度异常慢没开 xformers,或 cache 未启用确认日志里 xformers 是否生效,开启 cache_latents

除了表里这些,还有两个容易被忽略的点。第一是文件命名,LoRA 文件名里尽量别用中文和空格,某些加载路径解析会出问题,用的是纯英文加下划线最稳。第二是元数据,训练时建议开启存储元数据,这样后续能通过读取文件头知道当时用的什么底模、什么参数,方便复现——我吃过一次亏,半年前的模型参数全忘了,只能整批重训。

8. 我自己踩过的几个坑和几个顺手的小技巧

说几个常规教程里不太提的细节。第一,不要迷信社区里流传的万能参数。我早期完全照搬某套"角色 LoRA 神级配置",结果因为我的素材是插画风格而对方是真人照片,出来的效果差得离谱。参数永远要结合素材特性调整,先跑一条 500 步的短链路看方向,比一次性跑 5000 步然后发现全废划算得多。

第二,素材质量的重要性远超数量。我曾经用 60 张带水印、压缩痕迹明显的图训过一次,结果 LoRA 把水印当成了角色特征,出图必带一块模糊的角落。后来精简到 25 张干净图,效果立刻上来了。选图时把每张图放大到 200% 看一眼,能省下几小时的训练时间。

第三,训练日志一定要存。脚本默认会在输出目录写 log,很多人训完就删了。等你想复现或者对比不同参数的效果时,没有日志基本等于从零开始。我现在会用一个记事本记录每次训练的日期、素材集版本、关键参数和主观评分,几个月后回过头看,这份记录的价值比模型本身还大。

第四,测试 LoRA 时固定种子。同一个种子、同一套提示词,只改 LoRA 权重,这样你看到的差异才是权重带来的,而不是随机种子的波动。这个习惯能让你对参数的敏感度快速建立起来。

最后提一个扩展方向:等你把单模型 LoRA 训熟了,可以试试训一个"对比用"的负向 LoRA——专门训一个你明确不想要的特征,然后挂负权重来压制它。这个技巧在处理顽固的画面瑕疵时意外地好用。

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

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

立即咨询