Dataset Preparation Deletes Data

用户在 Kohya SS 的 WebUI 中点击 "Prepare training data" 按钮,用于格式化图片目录(如将图片整理为 img/_ 结构)。执行后工具显示 "completed",但用户的原始图片数据被删除,且无日志输出。随后

Dataset Preparation Deletes Data

Dataset Preparation Deletes Data

快速结论:该问题发生在使用 Kohya SS 的 Dataset Preparation 工具准备训练数据时,工具会因路径冲突(源路径与目标路径相同或嵌套)而误删用户的原始图片数据。优先排查:确保训练图片源路径与准备工具计算出的目标路径不重合。

问题场景

用户在 Kohya SS 的 WebUI 中点击 “Prepare training data” 按钮,用于格式化图片目录(如将图片整理为 img/<repeats>_<instance> <class> 结构)。执行后工具显示 “completed”,但用户的原始图片数据被删除,且无日志输出。随后尝试启动 LoRA 训练时,因图片缺失导致训练失败,WebUI 卡在 “Training has ended” 状态,需强制退出。

报错原文

Completed

Training has ended

工具未输出实质性错误信息,仅显示 “completed”(准备完成后没有任何状态反馈)和 “Training has ended”(训练结束)。实际数据丢失发生在准备阶段。

原因分析

问题根源在于 Dataset Preparation 工具的实现中存在多个安全缺失:

  • 路径冲突时直接删除:目标路径如果已经存在,工具会先执行 shutil.rmtree() 删除整个目标目录,再执行 shutil.copytree() 从源目录复制。当源目录与目标目录重合时(例如用户重复运行准备,源路径指向已格式化好的 img/<n>_… 文件夹),rmtree 会删掉唯一的图片副本,随后 copytree 因源路径不存在而失败。
  • 嵌套路径导致递归复制:当源目录(如 …/img)位于目标路径的父目录时,copytree 会递归复制自身,最终耗尽磁盘空间。
  • 缺少前置验证:工具在删除或复制之前,未检查:源目录是否存在;解析后的源路径与目标路径是否相同;源路径是否嵌套在目标路径下(或反之)。
  • 无 Gradio 状态输出:准备按钮没有绑定 Gradio 状态输出组件,因此验证失败或提前返回时,UI 仍显示 “completed”(看起来执行成功),实际数据已损坏或丢失。

环境排查

  • 确认 Kohya SS 版本(建议更新到最新版,该 Issue 已在 2026-07-10 关闭,修复应已包含在后续版本中)
  • 检查用户是否在 Dataset Preparation 中设置了与目标路径相同或嵌套的源路径(例如源路径 = /home/user/dataset/img,目标路径 = /home/user/dataset/img/10_cat,这种情况源路径是目标路径的父目录)
  • 确认训练图片目录下是否存在 img/reg/ 等子目录(这些目录可能是准备工具自动创建的)

解决步骤

  1. 备份原始数据:在执行任何准备操作前,始终备份训练图片的原始目录。手工将图片分开存放,不要依赖工具自动迁移。
  2. 避免路径冲突:确保 Dataset Preparation 中设置的源路径(Training images folder)与工具自动计算的目标路径不重叠。工具的目标路径由以下部分组成:destination/img/<repeats>_<instance> <class>。如果用户将源路径设置为 destination/imgdestination,就会触发路径冲突。
  3. 手动准备目录结构:不使用自动准备功能,手工创建 img/(训练图片)和 reg/(正则化图片,可选)目录,并按照 Kohya SS 要求的命名格式放置图片(如 100_cat 表示重复100次的猫图文件夹)。
  4. 更新到最新版本:拉取 Kohya SS 的最新更新(Issue #3436 已关闭,修复应已合并)。
  5. 检查状态输出:如果更新后仍遇到问题,检查 Git 日志或讨论区确认 Dataset Preparation 是否已增加 Gradio 状态输出组件(如 Markdown 或 Textbox),以便用户能直接看到成功或拒绝原因。
  6. 针对训练卡住问题:如果 WebUI 在训练失败后卡住(显示 “Training has ended” 但界面仍认为在训练),需在终端中强制退出(通常用 Ctrl+C 或关闭终端窗口),然后重新启动 Kohya SS。

验证方法

  • 重新执行 Dataset Preparation 前,先检查日志输出,确认工具已新增路径冲突检测(如 “Source and destination paths cannot be the same” 或 “Destination is nested under source” 等拒绝消息)
  • 确保工具不再自动删除任何文件/目录,仅当验证通过且目标路径不存在时才创建目录并复制图片
  • 确认准备按钮的 Gradio 界面中有了状态输出字段(如一个文本区域显示结果),不再只显示 “completed”
  • 测试重复运行:准备完成后,再次点击 “Prepare training data”,应该看到明确的拒绝消息(如 “Target already exists, refuses to overwrite”),而不是自动删除后重建
  • 训练时,确认图片文件夹结构正确且训练可正常启动

参考来源

bmaltais/kohya_ss #3436

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

celebrityanime
celebrityanime
文章: 13139

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注