
npzファイルを画像として開こうとする
快速结论:该报错发生在 Kohya SD Scripts 使用 --cache_latents_to_disk 参数进行 LoRA 训练时,代码错误地将已缓存的 .npz 文件当作图像文件来读取。优先排查元数据(metadata)中是否缺少 image_size 字段,或者确认为脚本版本未包含修复提交 #2327。
问题场景
用户在 Kohya SD Scripts 的 LoRA 训练流程中,启用了 --cache_latents_to_disk 参数,同时使用了“ファインチューニング方式”(Fine-tuning mode)进行字幕(caption)处理。触发问题的工具为 anima_train_network.py 及相关 train_util.py 模块。
报错原文
ERROR Error loading file: D:\tools\fine\training_character_xl\HadukiIzuna\TV\HadukiIzuna_029_2048x3840_anima.npz
...
Traceback (most recent call last):
File ".../train_util.py", line 3066, in ...
...
PIL.UnidentifiedImageError: cannot identify image file
原因分析
可能原因有两个,均与 --cache_latents_to_disk 生成的 .npz 文件处理逻辑有关:
- 脚本在读取缓存时,将
.npz文件错误地当作图像文件(JPEG/PNG 等)进行加载,导致 PIL 无法识别。 - 元数据(metadata)中缺少
image_size字段,导致脚本在解码.npz缓存时出现判断错误,误触发图像加载流程。
环境排查
- 确认 sd-scripts 仓库版本:是否低于
#2327提交的修复版本。 - 检查训练脚本的调用参数是否包含
--cache_latents_to_disk以及--cache_latents。 - 查看训练元数据文件(通常为
.json或元数据字典)中是否包含"image_size"键。 - 确认 Python 版本(用户环境为 Python 3.12)及 Pillow 库是否正常。
解决步骤
- 尝试修复 1(官方修复):将 sd-scripts 仓库更新至包含
#2327修复提交的最新版本。该提交修复了元数据文件名缺少扩展名时的误操作问题。 - 尝试修复 2(用户已验证有效):在训练元数据中手动添加
"image_size"字段。例如,对于 512×512 的图像,在元数据字典中加入"image_size": [512, 512]注意:此操作为 Issue 用户实际验证有效的方法,但官方开发者表示“无image_size也应该能正常工作”,因此可优先尝试更新版本。 - 临时工作区:如果更新后问题依然存在,可以尝试清除已缓存的
.npz文件(默认位于缓存目录),重新生成缓存。 - 日志对比:如果问题仍然存在,请将错误日志与
#2327修复后的行为进行对比,确保遇到的错误类型一致(均为PIL.UnidentifiedImageError)。
验证方法
在应用上述任一修复后,重新运行相同的 LoRA 训练命令(保持 --cache_latents_to_disk 参数启动),确认训练过程中不再出现 PIL.UnidentifiedImageError 且能正常完成 latent 缓存阶段。如果使用修复 #2327,建议先删除旧的 .npz 缓存文件以确保完全重新生成。



