Lab @8 : lr-gotcha - concept of getting caught when being naughty
详情
下载文件
模型描述
免责声明
本LoRA系列将提供一些中间训练实验性LoRA,用于分享LoRA训练的学习经验。
这些LoRA将以前缀 *BAD* 标记。它们不会专门提供运行后生成的图像。
如果您感兴趣,可以下载并尝试查看其表现,或参考附录中的某些基准内容。
引言
此LoRA的概念为:一个女孩做调皮的事却被男友/丈夫抓到。
切换到正确的模型
/model/1277670/janku-v30-noobai-eps-rouwei-nsfw-illustrious-xl
lab_8_11, lab_8_12,
- 在此基础模型上训练,几乎所有生成图像均未出现混乱。
更新日志
250427
Lab_8_12 已更新(基础模型为 Janku v3)
使用修正的正则化图像集重新训练LoRA
结果:生成更加稳定
哦,我知道为什么一开始这么混乱了……!!(如果您有兴趣训练自己的LoRA,可以参考此LoRA的发现,了解我所犯的错误:/model/1493162/lab-10-nude-pantyhose-natural-pantyhose-with-cotton-or-shiny-controlling)
发现
数据预处理:单行标题格式至关重要(文档如此说明,结果也确实显示了差异)
触发词:“inset”标签能有效捕捉目标概念,精准选择很重要(这意味着,挑选更合适的触发词以引导训练是相当重要的)
正则化:简单且高质量的图像效果最佳;复杂图像会让AI难以理解
正则化标题:我们确实需要它们(我检查了sd-script的Python脚本,它确实对正则化图像集的标题进行了处理。有趣的是,我发现sd-script文档称我们不需要正则化标题?也许它指的是类别训练LoRA)可使用自动打标签(0.4阈值即可)
数据集质量:精心筛选的高质量集合(28张图像),这是利用SD自身生成高质量图像的好方法(始终为您的数据集和正则化集启用高分辨率修复和adetailer修复)
基础模型:janku v3 产生更稳定的输出,且瑕疵更少
通用训练信息
注:基础信息可参考 lab_8_1(几乎相同)
Lab 1 - 初始设置
基础模型:wai v13
数据集:5张图片(24次重复 × 8轮)
触发词:lr-gotcha, split frame
标题:单行
正则化:无
备注:初次尝试
Lab 2 - 扩展数据集并出现错误
基础模型:wai v13
数据集:8张图片(24r × 8ep),新数据集
触发词:lr-gotcha, comic
标题:多行(格式错误)
正则化:无
备注:后来发现标题格式错误
Lab 3 - 带正则化的基础训练
基础模型:wai v13
数据集:8张图片(24r × 8ep)
触发词:lr-gotcha, 1boy in frame
标题:单行(已修正)
正则化:lab_8_3_reg(1girl正常,1girl被抓住)
备注:首次成功实现正则化
Lab 4 - 更换触发词并出现倒退
基础模型:wai v13
数据集:8张图片(24r × 8ep)
触发词:lr-gotcha, one inset boy
标题:多行(倒退)
正则化:同Lab 3
备注:错误地恢复为多行标题格式
Lab 5 - 修正标题格式
基础模型:wai v13
数据集:8张图片(24r × 8ep)
触发词:lr-gotcha, one inset boy
标题:单行(再次修正)
正则化:同Lab 3
备注:重新确立正确的标题格式
Lab 6 - 关键发现(“inset”标签)
基础模型:wai v13
数据集:8张图片(24r × 8ep)
触发词:lr-gotcha, inset
标题:单行
正则化:lab_8_3_reg + 1boy pointing
备注:“inset”标签被证明有效,质量显著提升
Lab 7 - 复杂正则化实验
基础模型:wai v13
数据集:8张图片(24r × 8ep)
触发词:lr-gotcha, inset
标题:单行
正则化:由数据集标签脚本生成
备注:复杂正则化图像导致质量下降
Lab 8 - 移除正则化标题
基础模型:wai v13
数据集:8张图片(24r × 8ep)
触发词:lr-gotcha, inset
标题:单行
正则化:同Lab 7,无标题
备注:结果仍不理想
Lab 9 - 单独打标签尝试
基础模型:wai v13
数据集:8张图片(24r × 8ep)
触发词:lr-gotcha, inset
标题:单行
正则化:同Lab 7,单独打标签
备注:复杂的程序化正则化生成不稳定
Lab 10 - 突破:质量提升
基础模型:wai v13
数据集:28张图片(8r × 8ep),精心筛选
触发词:lr-gotcha, inset
标题:单行
正则化:脚本生成的简单图像(6类)
备注:高质量数据集 + 简单正则化图像 = 成功
Lab 11 - 基础模型验证
基础模型:janku v3
数据集:28张图片(8r × 8ep),同Lab 10
触发词:lr-gotcha, inset
标题:单行
正则化:同Lab 10
备注:janku v3 产生更稳定的结果
训练过程概览
启动:基本设置
操作:使用
wai illustrious v13模型进行初始训练,数据集较小(5张图像),特定触发词(lr-gotcha, split frame),正确格式的单行标题,无正则化图像。发现:提供了起点,但缺乏高质量、可控LoRA所需的复杂性(如正则化)。
早期步骤:扩展数据集与关键预处理错误
- 操作:扩大数据集(8张图像),更改触发词(
lr-gotcha, comic)。
- 操作:扩大数据集(8张图像),更改触发词(
基础:引入正则化与正确数据处理
- 操作:引入第一组正则化图像(
lab_8_3_reg)。关键性地修正了Lab 2中的标题格式错误,确保标签以逗号分隔并位于单行。更改触发词(lr-gotcha, 1boy in frame)。
- 操作:引入第一组正则化图像(
实验:新触发词,意外倒退
- 操作:将触发词更改为
lr-gotcha, one inset boy。但错误地恢复为多行标题,而非必需的单行格式。使用与Lab 3相同的正则化。
- 操作:将触发词更改为
纠正:重新确立正确标题格式
操作:修正Lab 4的错误,确保标题正确格式化为单行、逗号分隔。保留触发词(
lr-gotcha, one inset boy)和上一步的正则化。发现:强调了遵循技术要求(如标题格式)对有效训练的重要性。
关键发现:“inset”触发词
操作:基于观察或假设,将触发词改为
lr-gotcha, inset。略微扩展了正则化集。发现:“inset”标签被证明对捕捉预期视觉概念有效。这一发现标志着LoRA生成目标风格能力的提升,证明了精确触发词的重要性。正则化集是否合适?质量明显提升。
实验:自动化、复杂的正则化图像生成
操作:实施一种新颖的正则化策略,使用脚本。脚本通过将数据集图像标签(排除触发词)输入基础模型来生成正则化图像,保留原始标题。
发现:此方法生成的正则化图像过于复杂,导致不稳定和LoRA性能差。
改进复杂正则化(移除标题)
操作:仍使用Lab 7的复杂正则化图像,移除其所有关联文本标题,假设标题可能引入噪音。
发现:正则化图像的标题确实重要。
改进复杂正则化(逐项打标签)
- 操作:继续使用脚本生成的复杂正则化图像(来自Lab 7)。尝试通过为每张正则化图像单独应用自动打标签(阈值0.4)进行改进。
突破:数据集质量与简化正则化的协同效应
操作:对数据集进行重大升级——扩展至28张图像,通过基础模型生成并人工编辑(Photoshop)精心挑选/生成。同时简化正则化方法,使用脚本创建6类高质量、简单构图图像,并进行后处理(高分辨率修复、adetailer)。
发现:高质量、针对性的训练数据 与 高质量、相关但简单的正则化图像相结合,是实现期望LoRA质量的关键。
使用更优基础模型(
janku v3)验证操作:复制Lab 10的成功配置(精选数据集、简化正则化、
inset触发词),但改用janku v3基础模型。发现:
janku v3模型相比前一基础模型,提升了输出稳定性并减少了图像瑕疵。(但我目前尚不清楚原因)
初始步骤 — Lab 8_1(基础训练参数与目标)
目标与发现
目标
这是首次训练,目标是快速检查SD模型是否能学习到大致概念。
- 答案是:能,但不如我预期的好。
数据集来源方法:
首先,使用基础模型生成2张图片:1个女孩惊讶 + 1个男孩指向
使用Photoshop合成分屏图像(注意:本版本未处理为
inset,而是将女孩图像对半分割,男孩置于中间)
发现
混乱的布局导致LoRA在使用时产生非逻辑的局部构图。
尽管其他局部区域(若逻辑合理)“质量良好”,但此实验阶段LoRA的整体价值很低。
这证实了我制作的数据集至少具有合理的质量。
如果图像数量较少,尝试使用基础模型已“理解”的标签来引导LoRA训练,而不是使用它不熟悉的标签。
- 我偶然发现“inset”标签更合适。
在此阶段的数据集中,图像结构为:上(1girl)、中(1boy)、下(1girl)。由于它们完全分离(我的猜测),模型在LoRA训练期间无法很好地关联上下部分,因此在生成分屏图像时,上下部分常看起来像来自两张不同图像。
- 这也是我专注于“inset”的原因。inset不会完全分离整体图像中的主要背景,使模型能更好地将“背景”作为一个整体学习。
训练参数
# Model & Data
pretrained_model_name_or_path="... /wai_i13.safetensors"
# image count = 5 pics
train_data_dir="... /lora_lab_8_1_gotcha/dataset"
# reg image count = 0
reg_data_dir=""
# Training
max_train_epochs=8
train_batch_size=1
seed=1861
resolution="832,1280"
max_bucket_reso=1280
min_bucket_reso=256
bucket_reso_steps=64
bucket_no_upscale=true
enable_bucket=true
cache_latents_to_disk=true
persistent_data_loader_workers=true
shuffle_caption=true
caption_extension=".txt"
keep_tokens=2
max_token_length=225
# LoRA Network
network_module="networks.lora"
network_dim=16
network_alpha=8
# Optimizer & LR
learning_rate=0.0001
unet_lr=0.0001
text_encoder_lr=0.00001
optimizer_type="AdamW8bit"
lr_scheduler="cosine_with_restarts"
lr_warmup_steps=0
lr_scheduler_num_cycles=1
# Precision & Device
mixed_precision="bf16"
xformers=true
lowram=true
# Saving & Logging
save_model_as="safetensors"
save_precision="fp16"
save_every_n_epochs=2
log_with="tensorboard"
log_prefix="lora_lab_8_1_gotcha--"
output_name="lora_lab_8_1_gotcha"
# Loss
prior_loss_weight=1

