Kohya_SS工具集:数据处理与模型转换
【免费下载链接】kohya_ss 项目地址: https://gitcode.com/GitHub_Trending/ko/kohya_ss
Kohya_SS工具集提供了全面的图像标注、数据集平衡、模型提取与转换以及LoRA优化功能。本文详细介绍了图像标注工具的使用方法,包括基础标注、文件名标注、BLIP自动标注、WD14标签标注和手动标注工具;数据集平衡与预处理工具的工作原理和最佳实践;模型提取与转换工具的核心原理和功能;以及LoRA模型调整与优化工具的完整工作流程。
图像标注工具使用指南
在AI图像生成模型的训练过程中,高质量的图像标注是至关重要的环节。Kohya_SS工具集提供了多种强大的图像标注工具,从基础的批量标注到先进的AI自动标注,满足不同场景下的标注需求。本指南将详细介绍这些工具的使用方法、适用场景以及最佳实践。
标注工具概览
Kohya_SS提供了六种主要的图像标注工具,每种工具都有其特定的应用场景:
| 工具类型 | 核心功能 | 适用场景 | 优势 |
|---|---|---|---|
| 基础标注工具 | 批量添加相同标注 | 快速为大量图像添加统一描述 | 简单高效,支持前缀后缀 |
| 文件名标注工具 | 从文件名生成标注 | 文件名已包含描述信息的场景 | 自动化程度高,无需手动输入 |
| BLIP自动标注 | AI生成图像描述 | 需要详细自然语言描述的场景 | 生成自然流畅的英文描述 |
| BLIP2自动标注 | 改进版AI标注 | 需要更准确描述的复杂场景 | 支持更多参数调优 |
| WD14标签标注 | 标签式分类标注 | 需要结构化标签的场景 | 生成逗号分隔的标签列表 |
| 手动标注工具 | 交互式手动标注 | 需要精确控制标注质量的场景 | 支持快速标签选择和批量操作 |
基础标注工具使用详解
基础标注工具是最简单的标注方式,适用于为整个图像文件夹添加相同的描述文本。
# 基础标注命令行使用示例
python tools/caption.py /path/to/images \
--file_pattern "*.png, *.jpg, *.webp" \
--caption_text "beautiful landscape painting" \
--caption_file_ext ".txt" \
--overwrite
参数说明:
file_pattern: 匹配的图像文件扩展名caption_text: 要添加的标注文本caption_file_ext: 标注文件扩展名(默认为.txt)overwrite: 是否覆盖已存在的标注文件
GUI界面操作流程:
- 选择图像文件夹路径
- 设置标注文件扩展名(.txt、.cap、.caption)
- 输入标注文本内容
- 可选:添加前缀、后缀或替换文本
- 点击"Caption images"执行标注
文件名标注工具
当图像文件名已经包含描述信息时,可以使用此工具自动从文件名生成标注。
# 文件名标注示例
python tools/caption_from_filename.py /path/to/images \
--image_extension .jpg .png \
--text_extension .txt \
--output_directory /path/to/output
处理流程:
BLIP自动标注工具
BLIP(Bootstrapping Language-Image Pre-training)是先进的视觉-语言模型,能够生成高质量的自然语言图像描述。
命令行参数配置:
python -m kohya_gui.blip_caption_gui \
--batch_size 4 \
--num_beams 3 \
--top_p 0.9 \
--max_length 75 \
--min_length 10 \
--beam_search
参数优化建议:
| 参数 | 推荐值 | 作用说明 |
|---|---|---|
| batch_size | 2-8 | 批处理大小,根据GPU内存调整 |
| num_beams | 3-5 | 束搜索数量,影响生成质量 |
| top_p | 0.7-0.95 | 核采样参数,控制多样性 |
| max_length | 50-100 | 最大生成长度 |
| min_length | 5-15 | 最小生成长度 |
WD14标签标注工具
WD14(Waifu Diffusion 1.4)标签器专门针对动漫风格图像优化,生成结构化的标签列表。
高级配置选项:
# WD14标注配置示例
caption_images(
train_data_dir=image_folder,
caption_extension=".txt",
batch_size=8,
general_threshold=0.35, # 通用标签阈值
character_threshold=0.25, # 角色标签阈值
repo_id="SmilingWolf/wd-v1-4-convnextv2-tagger-v2",
recursive=True, # 递归处理子文件夹
undesired_tags="lowres, bad anatomy", # 排除的标签
caption_separator=", " # 标签分隔符
)
标签分类示例:
| 标签类别 | 示例标签 | 阈值建议 |
|---|---|---|
| 通用标签 | 1girl, solo, looking at viewer | 0.35 |
| 角色标签 | character_name, series_name | 0.25 |
| 质量标签 | masterpiece, best quality | 0.4 |
| 排除标签 | lowres, bad anatomy | 自定义 |
手动标注工具
手动标注工具提供交互式界面,适合需要精确控制的标注任务。
功能特性:
- 多图像同时显示(默认5张)
- 快速标签复选框选择
- 标签自动补全和排序
- 实时保存功能
- 分页浏览大量图像
操作界面布局:
标注工作流最佳实践
1. 预处理流程
2. 质量保证措施
- 使用
cleanup_captions.py工具清理重复和低质量标签 - 设置合适的标签阈值避免噪声
- 定期验证标注一致性
- 建立标注规范文档
3. 性能优化建议
- 根据GPU内存调整batch_size
- 使用ONNX格式加速WD14推理
- 启用递归处理处理嵌套文件夹
- 利用缓存机制减少重复计算
常见问题解决
标注文件不生成
- 检查图像文件夹权限
- 验证文件扩展名匹配
- 确认标注文本非空
标注质量不佳
- 调整BLIP生成参数
- 修改WD14标签阈值
- 添加排除标签列表
处理速度慢
- 减少batch_size
- 关闭beam_search(BLIP)
- 使用更小的模型版本
高级技巧
混合标注策略 结合多种工具的优势,例如先用WD14生成基础标签,再用BLIP添加详细描述,最后手动精修。
标签后处理
# 使用清理工具优化标注
python tools/cleanup_captions.py /path/to/captions \
--extension .txt \
--keywords "lowres bad_anatomy error"
批量重命名整合 将标注工具与文件管理工具结合,实现完整的预处理流水线。
通过合理选择和组合这些标注工具,您可以建立高效、高质量的图像标注流程,为后续的模型训练奠定坚实基础。记得根据具体的项目需求和资源情况,灵活调整工具参数和工作流程。
数据集平衡与预处理工具
在Kohya_SS工具集中,数据集平衡与预处理是模型训练前至关重要的步骤。这些工具专门设计用于优化训练数据集,确保模型能够从平衡且规范化的数据中学习,从而获得更好的训练效果和模型性能。
数据集平衡工具
Kohya_SS提供了一个强大的数据集平衡工具,位于kohya_gui/dataset_balancing_gui.py中。这个工具的核心功能是自动调整训练数据集中各个概念文件夹的重复次数,确保每个概念在训练过程中得到平等的使用。
工作原理
数据集平衡工具通过以下算法实现平衡:
核心代码实现
def dataset_balancing(concept_repeats, folder, insecure):
pattern = re.compile(r"^\d+_.+$")
for subdir in os.listdir(folder):
if pattern.match(subdir) or insecure:
# 计算当前子目录中的图像数量
image_files = [f for f in os.listdir(os.path.join(folder, subdir))
if f.endswith((".jpg", ".jpeg", ".png", ".gif", ".webp"))]
images = len(image_files)
# 计算重复次数
if not images == 0:
repeats = max(1, round(concept_repeats / images))
else:
repeats = 0
# 重命名文件夹
old_name = os.path.join(folder, subdir)
new_name = os.path.join(folder, f"{repeats}_{subdir}")
os.rename(old_name, new_name)
使用示例
假设我们有一个包含三个概念的数据集:
10_dog- 包含10张狗的图像5_cat- 包含5张猫的图像20_car- 包含20张汽车的图像
设置训练步数为1000步时,工具会自动计算每个概念的重复次数:
| 概念文件夹 | 图像数量 | 计算重复次数 | 新文件夹名 |
|---|---|---|---|
| 10_dog | 10 | 1000/10 = 100 | 100_dog |
| 5_cat | 5 | 1000/5 = 200 | 200_cat |
| 20_car | 20 | 1000/20 = 50 | 50_car |
这样确保每个概念在训练过程中都有相同的总训练步数。
图像分组与预处理工具
除了数据集平衡,Kohya_SS还提供了多个图像预处理工具,位于tools/目录下:
1. 图像分组工具 (group_images.py)
这个工具将图像按宽高比排序并分组,便于批量处理:
class ImageProcessor:
def group_images(self, images):
# 按宽高比排序图像
sorted_images = sorted(images, key=lambda path:
Image.open(path).size[0] / Image.open(path).size[1])
# 创建指定大小的组
groups = [sorted_images[i:i+self.group_size]
for i in range(0, len(sorted_images), self.group_size)]
return groups
2. 分桶裁剪工具 (crop_images_to_n_buckets.py)
这个工具将图像按宽高比分组到不同的桶中,并对每个桶内的图像进行统一裁剪:
def create_groups(sorted_images, n_groups):
"""创建指定数量的图像组"""
n = len(sorted_images)
size = n // n_groups
groups = [sorted_images[i * size : (i + 1) * size] for i in range(n_groups - 1)]
groups.append(sorted_images[(n_groups - 1) * size:])
return groups
3. 中心裁剪算法
def center_crop_image(image, target_aspect_ratio):
"""将图像中心裁剪到目标宽高比"""
height, width = image.shape[:2]
current_aspect_ratio = float(width) / float(height)
if current_aspect_ratio > target_aspect_ratio:
# 图像过宽,裁剪宽度
new_width = int(target_aspect_ratio * height)
x_start = (width - new_width) // 2
cropped_image = image[:, x_start:x_start+new_width]
else:
# 图像过高,裁剪高度
new_height = int(width / target_aspect_ratio)
y_start = (height - new_height) // 2
cropped_image = image[y_start:y_start+new_height, :]
return cropped_image
高级功能特性
权重系数支持
数据集平衡工具支持权重系数,可以在文件夹名前使用{weight}语法指定权重:
{2.5}my_concept # 该概念的重复次数将乘以2.5
{0.8}other_concept # 该概念的重复次数将乘以0.8
相关文件处理
预处理工具能够自动处理与图像相关的其他文件:
def copy_related_files(img_path, save_path):
"""复制与图像同名的所有相关文件"""
img_dir, img_basename = os.path.split(img_path)
img_base, img_ext = os.path.splitext(img_basename)
for filename in os.listdir(img_dir):
file_base, file_ext = os.path.splitext(filename)
if file_base == img_base and filename != img_basename:
# 复制标注文件、蒙版文件等
shutil.copy2(os.path.join(img_dir, filename),
os.path.join(save_dir, f"{save_base}{file_ext}"))
最佳实践指南
数据集准备流程
参数配置建议
| 参数类型 | 推荐值 | 说明 |
|---|---|---|
| 训练步数 | 1000-2000 | 每个概念的总训练步数 |
| 分组大小 | 8-16 | 图像处理时的批大小 |
| 分桶数量 | 4-8 | 宽高比分组数量 |
质量检查清单
在使用数据集平衡与预处理工具时,建议进行以下质量检查:
- 图像格式验证:确保所有图像为支持的格式(JPG、PNG、WEBP等)
- 命名规范检查:确认文件夹命名符合
数字_概念名格式 - 文件完整性:检查是否有损坏的图像文件
- 标注文件同步:确保标注文件与图像文件正确对应
通过这些工具的综合使用,可以显著提高Stable Diffusion模型训练的数据质量,为后续的模型训练奠定坚实的基础。正确的数据集预处理不仅能够提升训练效率,还能显著改善最终模型的生成质量。
模型提取与转换工具详解
Kohya_SS工具集提供了强大的模型提取与转换功能,这些工具能够帮助用户从训练好的模型中提取LoRA网络、转换模型格式以及分析模型差异。这些工具基于先进的奇异值分解(SVD)技术和深度学习模型处理技术,为用户提供了高效、精确的模型处理能力。
LoRA提取工具核心原理
LoRA(Low-Rank Adaptation)提取工具的核心基于奇异值分解技术,通过分析微调模型与基础模型之间的权重差异来提取低秩适配器。该过程涉及以下关键技术步骤:
奇异值分解(SVD)算法
LoRA提取的核心算法采用多种SVD策略来确定最优秩:
def index_sv_cumulative(S, target):
"""累积方差贡献率方法"""
original_sum = float(torch.sum(S))
cumulative_sums = torch.cumsum(S, dim=0) / original_sum
index = int(torch.searchsorted(cumulative_sums, target)) + 1
return max(1, min(index, len(S) - 1))
def index_sv_fro(S, target):
"""Frobenius范数方法"""
S_squared = S.pow(2)
S_fro_sq = float(torch.sum(S_squared))
sum_S_squared = torch.cumsum(S_squared, dim=0) / S_fro_sq
index = int(torch.searchsorted(sum_S_squared, target**2)) + 1
return max(1, min(index, len(S) - 1))
def index_sv_ratio(S, target):
"""奇异值比率方法"""
max_sv = S[0]
min_sv = max_sv / target
index = int(torch.sum(S > min_sv).item())
return max(1, min(index, len(S) - 1))
主要工具功能详解
1. extract_lora_from_models-new.py
这是新一代的LoRA提取工具,支持SD 1.5、SD 2.x和SDXL模型。该工具提供了以下核心功能:
主要参数配置:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
--dim | int | 128 | LoRA网络维度(秩) |
--conv_dim | int | 0 | 卷积层LoRA维度,0表示禁用 |
--clamp_quantile | float | 1.0 | 权重裁剪分位数 |
--min_diff | float | 0.01 | 最小差异阈值 |
--device | str | "cpu" | 计算设备 |
--save_precision | str | "fp16" | 保存精度 |
使用示例:
python tools/extract_lora_from_models-new.py \
--model_org base_model.safetensors \
--model_tuned finetuned_model.safetensors \
--save_to extracted_lora.safetensors \
--dim 64 \
--conv_dim 32 \
--device cuda
2. extract_model_difference.py
模型差异提取工具用于计算微调模型与基础模型之间的权重差异,支持多种数据格式:
功能特性:
- 支持safetensors格式的模型文件
- 自动处理形状和类型不匹配的层
- 支持float32、float16、bfloat16多种精度保存
- 生成完整的差异统计报告
输出统计示例:
Difference calculation complete.
512 layers successfully diffed.
15 layers unique to fine-tuned model (added as is).
8 common layers skipped (shape/type mismatch).
0 common layers had errors during diffing.
3. lcm_convert.py
潜在一致性模型转换工具,专门用于将普通模型转换为LCM(Latent Consistency Model)格式:
转换流程:
- 加载原始扩散模型pipeline
- 替换调度器为LCMScheduler
- 加载并融合LCM LoRA权重
- 转换并保存为兼容格式
支持模型类型:
- Stable Diffusion 1.5
- Stable Diffusion XL (SDXL)
- SSD-1B模型
GUI界面集成
Kohya_SS提供了直观的图形界面来操作这些工具:
LoRA提取界面功能
界面配置选项:
- 模型输入:支持基础模型和微调模型的选择
- 维度设置:网络秩(4-1024)和卷积维度(0-1024)
- 设备选择:CPU、CUDA或多GPU配置
- 精度控制:加载精度(fp16/bf16/float)和保存精度
- 高级参数:裁剪分位数、最小差异阈值
模型转换界面
模型转换工具支持多种格式转换:
支持的转换类型:
- Diffusers格式 ↔ 原始ckpt/safetensors格式
- 不同精度之间的转换(fp32/fp16/bf16)
- SD 1.5与SD 2.x模型互转换
- SDXL特定参数配置
技术实现细节
权重处理算法
LoRA提取使用先进的权重处理算法:
def _construct_lora_weights_from_svd_components(U, S, Vh, rank, clamp_quantile):
"""从SVD组件构建LoRA权重"""
S_k = S[:rank]
U_k = U[:, :rank]
Vh_k = Vh[:rank, :]
# 非负截断和平方根缩放
S_k_non_negative = torch.clamp(S_k, min=0.0)
s_sqrt = torch.sqrt(S_k_non_negative)
U_final = U_k * s_sqrt.unsqueeze(0)
Vh_final = Vh_k * s_sqrt.unsqueeze(1)
# 分位数裁剪
dist = torch.cat([U_final.flatten(), Vh_final.flatten()])
hi_val = torch.quantile(dist, clamp_quantile)
U_clamped = U_final.clamp(-hi_val, hi_val)
Vh_clamped = Vh_final.clamp(-hi_val, hi_val)
return U_clamped, Vh_clamped
性能优化策略
工具集采用了多种性能优化技术:
- 内存优化:支持分步加载和CPU卸载
- 计算加速:利用CUDA并行计算和混合精度
- 存储效率:智能选择保存格式和精度
- 批量处理:支持多模型批量提取操作
实际应用场景
场景一:风格化LoRA提取
从风格化微调模型中提取艺术风格LoRA,用于多种基础模型。
场景二:人物特征提取
提取特定人物特征的LoRA,实现人物一致性生成。
场景三:模型格式转换
将研究模型转换为生产环境可用格式,优化推理性能。
场景四:模型差异分析
分析不同训练阶段模型的权重变化,指导训练策略。
这些工具的组合使用为Stable Diffusion模型的精细化处理和优化提供了完整的工作流解决方案,极大地提高了模型开发和部署的效率。
LoRA模型调整与优化工具
Kohya_SS提供了一系列专业的LoRA模型调整与优化工具,这些工具涵盖了从模型提取、尺寸调整到验证的完整工作流程。这些工具通过直观的GUI界面和强大的后端算法,让用户能够高效地进行LoRA模型的后期处理和优化。
LoRA提取工具
LoRA提取是模型优化的基础步骤,Kohya_SS提供了多种提取工具来满足不同需求:
extract_lora_gui.py - 标准LoRA提取工具
def extract_lora(
model_tuned, # 已调优的模型路径
model_org, # 原始基础模型路径
save_to, # 保存路径
save_precision, # 保存精度 (float/fp16/bf16)
dim, # LoRA维度
v2, # SD v2模型标志
sdxl, # SDXL模型标志
conv_dim, # 卷积层维度
clamp_quantile, # 量化截断值
min_diff, # 最小差异阈值
device, # 计算设备
)
extract_lora_from_models-new.py - 增强版LoRA提取 这个工具使用更先进的算法从两个模型之间提取差异,生成高质量的LoRA权重。
LoRA尺寸调整工具
resize_lora.py - LoRA维度调整工具 这是Kohya_SS中最强大的LoRA优化工具之一,支持多种动态调整策略:
def resize_lora(
model, # 输入LoRA模型
new_rank, # 新维度
save_to, # 输出路径
save_precision, # 保存精度
device, # 计算设备
dynamic_method, # 动态调整方法
dynamic_param, # 动态参数
verbose, # 详细输出
)
支持的动态调整方法:
sv_ratio- 基于奇异值比率调整sv_cumulative- 基于累积奇异值调整sv_fro- 基于Frobenius范数调整
调整过程流程图:
LoRA验证工具
verify_lora_gui.py - LoRA模型验证工具
def verify_lora(
lora_model, # 待验证的LoRA模型
)
验证功能包括:
- 模型结构完整性检查
- 权重数值有效性验证
- 与基础模型兼容性检测
- 元数据完整性验证
LoRA合并工具
merge_lora_gui.py - 多LoRA模型合并工具 支持最多4个LoRA模型的比例混合:
def merge_lora(
sd_model, # 基础模型
sdxl_model, # SDXL模型标志
lora_a_model, # LoRA模型A
lora_b_model, # LoRA模型B
lora_c_model, # LoRA模型C
lora_d_model, # LoRA模型D
ratio_a, # 模型A混合比例
ratio_b, # 模型B混合比例
ratio_c, # 模型C混合比例
ratio_d, # 模型D混合比例
save_to, # 保存路径
precision, # 计算精度
save_precision, # 保存精度
)
高级优化功能
动态维度调整算法: resize_lora工具使用先进的SVD(奇异值分解)技术来智能调整LoRA维度:
def rank_resize(S, rank, dynamic_method, dynamic_param, scale=1):
# S: 奇异值矩阵
# 根据选择的方法计算新维度
if dynamic_method == "sv_ratio":
max_sv = S[0]
min_sv = max_sv / dynamic_param
new_rank = max(torch.sum(S > min_sv).item(), 1)
elif dynamic_method == "sv_cumulative":
new_rank = index_sv_cumulative(S, dynamic_param)
elif dynamic_method == "sv_fro":
new_rank = index_sv_fro(S, dynamic_param)
return new_rank
优化效果对比表:
| 优化方法 | 保持的信息量 | 计算复杂度 | 适用场景 |
|---|---|---|---|
| sv_ratio | 85-95% | 低 | 快速降维 |
| sv_cumulative | 90-98% | 中 | 平衡优化 |
| sv_fro | 95-99% | 高 | 高质量保持 |
使用示例
基本LoRA提取示例:
python tools/extract_lora.py \
--model_tuned tuned_model.safetensors \
--model_org base_model.safetensors \
--save_to extracted_lora.safetensors \
--dim 64 \
--save_precision fp16
高级维度调整示例:
python tools/resize_lora.py \
--model input_lora.safetensors \
--new_rank 32 \
--save_to resized_lora.safetensors \
--dynamic_method sv_cumulative \
--dynamic_param 0.95 \
--verbose
工具集成工作流
Kohya_SS的LoRA优化工具形成了一个完整的工作流:
这些工具的协同工作确保了LoRA模型的质量和性能,无论是从现有模型提取LoRA、调整模型尺寸,还是合并多个LoRA模型,都能获得最佳的效果。
总结
Kohya_SS工具集为Stable Diffusion模型的训练和优化提供了完整的解决方案。从高质量的数据标注到数据集平衡预处理,从精确的模型提取转换到LoRA模型的高级优化,这些工具的组合使用显著提高了模型开发和部署的效率。通过合理选择和配置这些工具,用户可以建立高效的工作流程,为模型训练奠定坚实基础,最终获得高质量的生成结果。
【免费下载链接】kohya_ss 项目地址: https://gitcode.com/GitHub_Trending/ko/kohya_ss
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



