Plane Helper
详情
下载文件
关于此版本
模型描述
介绍 Plane Helper!这是一个多概念 LyCORIS(训练为 LoHa),适用于 v2.1。Plane Helper 在约 2300 张来自 71 种不同飞机的图像上进行了训练。我想与任何有兴趣了解如何在复杂概念上训练多概念 LoHa 的人分享我的训练过程。这绝非科学性研究,而是为了帮助那些可能正面临与我相同障碍的人们。
数据集:
我创建了一个数据表,其中包含本模型中的所有 71 种飞机类型及其对应的关键词标记,可在此查看:
https://docs.google.com/spreadsheets/d/1N7o4pc9mGyYSYIoeD4fU_WpO_2tL_JfKDETOJPVQw18/edit?usp=sharing
该项目始于发现 v2.1 在处理飞机图像时表现极差:机翼位置总是错误,或出现多余机翼,细节也非常不足,有时甚至只是一团尖锐几何形状。我决定对此做些改进。于是我先收集了大约 130 张外观酷炫的飞机图片,通过批处理标注工具进行图像描述生成。使用 Kohya 训练后,我发现无论怎么训练,问题依旧存在。我意识到问题在于我包含了太多不同对象,而没有区分它们,仅统称为“飞机”或“喷气机”,这混淆了 LoHa。因此,我决定明确每种飞机的类型,并将它们的名称注入到各自的描述中。
我对飞机了解不多,但我希望 v2.1 能生成出色的飞机图像。因此,将每张图片上传至 image.google.com 进行识别的过程虽然繁琐,却是必要的。最终,我确定了 71 种不同的飞机类型。我没有只挑选两种就草草结束,而是想深入了解这种 LoHa 类型模型的构成,于是继续扩充数据集,为每种飞机类型至少收集 30 张图像,并将它们全部训练进一个 LoHa 中。有些飞机类型我无法找到 30 张高质量图片,但我仍将其保留在数据集中,因为最终目标是训练一个通用飞机模型,保留这些少数类型或许有助于提升整体效果。到完成这一步时,我总共拥有约 2300 张图像,涵盖 71 种飞机类型,全部整齐归类于各自的文件夹中。接下来是描述生成阶段。
使用 Captionr 进行批处理标注后,我为每种飞机类型在谷歌上搜索并制作了一个 Excel 表格,记录飞机名称及其简要但详细的描述。然后,我逐个将文件夹导入 Dataset Tag Editor 插件,清理描述内容,并将 Excel 表中制作的关键词标记注入到每个描述中。我还为倾转旋翼飞机添加了两个调试标记:“CHV3CPlane” 和 “CHV3CTiltRotor”(因为它们的形状差异很大),并将其加入每个描述中。这些调试标记在生成独特飞机图像时也非常有效。我还启用了加权描述功能,使这些调试标记和飞机类型标识符都带有权重。例如,一个描述可能看起来像这样:
"(Hawker Hunter), transonic jet-powered fighter aircraft, Hawker Aircraft, Royal Air Force (RAF), Avon turbojet engine, swept wing, (CHV3CPlane), a plane is flying in the air, swiss, low level, man, viewed in profile from far away, switzerland, illustration, overhead"。
经过漫长而耐心的测试过程后,我终于得到了一个足够优质的训练数据集。
重复次数:
我最初将每个文件夹的重复次数设为 5,但由于不同飞机类型的图像数量不同,我进行了粗略平衡:图像数量较多的类型使用 5 次重复,图像较少的类型则使用 10 至 15 次重复。
训练方法:
我以一种非传统的方式进行该项目。由于数据集如此庞大,我自然遇到了过拟合问题。对于 LoHa,推荐的网络维度(dim)是 8,但我将其改为 32,以提供更多训练空间。我尝试了多个阶段,寻找最佳设置,以在过拟合前实现更多训练轮次。原始源模型为 v2-1_768-ema-pruned,但每次训练后,我会将上一轮训练的 LoHa 合并到 v2-1_768-ema-pruned 中,并将该合并模型作为下一轮训练的源模型。其理论依据是:模型能从上一轮训练中获得额外知识,从而获得一点先发优势。这一理论仍需更多测试,最好在较小数据集上进行。每次训练后,我还会将上一轮的源模型与新合并的源模型再次合并,作为下一轮的源模型。同时,我使用 Extract LyCORIS LoCON 从中提取一个 LoRA。本模型正是由四个不同训练轮次(均基于同一 71 种飞机数据集)的 LoHa 合并后提取而成。
训练参数:
我不会深入讨论训练参数的细节,而是直接分享本项目中我找到的最佳设置,并推荐以下三份更详尽的指南:
THE OTHER LoRA TRAINING RENTRY
LoRA Training Guide
RFKTR's in-depth guide to Training high quality models
https://civitai.com/articles/397
我的参数配置:
{
"LoRA_type": "LyCORIS/LoHa",
"adaptive_noise_scale": 0,
"additional_parameters": "",
"block_alphas": "",
"block_dims": "",
"block_lr_zero_threshold": "",
"bucket_no_upscale": true,
"bucket_reso_steps": 64,
"cache_latents": true,
"cache_latents_to_disk": false,
"caption_dropout_every_n_epochs": 0.0,
"caption_dropout_rate": 0,
"caption_extension": ".txt",
"clip_skip": "1",
"color_aug": false,
"conv_alpha": 1,
"conv_alphas": "",
"conv_dim": 4,
"conv_dims": "",
"decompose_both": false,
"dim_from_weights": false,
"down_lr_weight": "",
"enable_bucket": true,
"epoch": 20,
"factor": -1,
"flip_aug": true,
"full_fp16": false,
"gradient_accumulation_steps": 2.0,
"gradient_checkpointing": true,
"keep_tokens": "0",
"learning_rate": 0.0001,
"logging_dir": "",
"lora_network_weights": "",
"lr_scheduler": "cosine",
"lr_scheduler_num_cycles": "",
"lr_scheduler_power": "",
"lr_warmup": "10",
"max_data_loader_n_workers": "4",
"max_resolution": "768,768",
"max_timestep": 1000,
"max_token_length": "150",
"max_train_epochs": "",
"mem_eff_attn": true,
"mid_lr_weight": "",
"min_snr_gamma": 5,
"min_timestep": 0,
"mixed_precision": "bf16",
"model_list": "custom",
"module_dropout": 0,
"multires_noise_discount": 0,
"multires_noise_iterations": 0,
"network_alpha": 4,
"network_dim": 32,
"network_dropout": 0,
"no_token_padding": false,
"noise_offset": 0,
"noise_offset_type": "Original",
"num_cpu_threads_per_process": 4,
"optimizer": "AdamW8bit",
"optimizer_args":
"output_dir": "",
"output_name": "",
"persistent_data_loader_workers": false,
"pretrained_model_name_or_path": "",
"prior_loss_weight": 1.0,
"random_crop": false,
"rank_dropout": 0,
"reg_data_dir": "",
"resume": "",
"sample_every_n_epochs": 0,
"sample_every_n_steps": 0,
"sample_prompts": "",
"sample_sampler": "euler_a",
"save_every_n_epochs": 1,
"save_every_n_steps": 0,
"save_last_n_steps": 0,
"save_last_n_steps_state": 0,
"save_model_as": "safetensors",
"save_precision": "bf16",
"save_state": true,
"scale_v_pred_loss_like_noise_pred": true,
"scale_weight_norms": 0,
"sdxl": false,
"sdxl_cache_text_encoder_outputs": false,
"sdxl_no_half_vae": false,
"seed": "",
"shuffle_caption": true,
"stop_text_encoder_training": 0,
"text_encoder_lr": 5e-05,
"train_batch_size": 2,
"train_data_dir": "",
"train_on_input": false,
"training_comment": "",
"unet_lr": 8e-05,
"unit": 1,
"up_lr_weight": "",
"use_cp": false,
"use_wandb": false,
"v2": true,
"v_parameterization": true,
"vae_batch_size": 0,
"wandb_api_key": "",
"weighted_captions": true,
"xformers": true
}




















