为什么Python的splitfolders无法将数据集拆分为训练集和测试集文件夹?
问题排查与解决方案
1. 路径大小写匹配问题
你代码中写的输入路径是zz/、输出路径是res,但你实际数据集存放在ZZ文件夹、期望输出到Res文件夹:Windows系统不区分路径大小写,但Mac/Linux系统严格区分,路径不匹配会导致库找不到输入目录,自然不会生成拆分结果。
修正路径写法,确保和实际文件夹名完全一致:
input_folder = "ZZ/" output = "Res"
2. 输入目录结构不符合要求
split-folders 默认要求输入根目录下存放按类别划分的子文件夹,子文件夹内存放对应类别的图片,结构示例如下:
ZZ/ ├─ 猫/ │ ├─ 1.bmp │ ├─ 2.bmp └─ 狗/ ├─ 3.bmp └─ 4.bmp
如果你的所有.bmp图片直接存放在ZZ根目录下,没有子类别文件夹,库会识别不到有效数据,不会执行拆分操作。
解决方案:
- 如果是单类别数据集:在
ZZ下新建一个任意名称的子文件夹(比如all),把所有.bmp图片移到这个子文件夹里即可 - 如果是多类别数据集:按类别新建子文件夹,把对应图片归类到子文件夹中
3. 补充运行日志排查问题
在拆分代码中添加verbose=True参数,运行时会打印详细处理日志,可以直接看到是路径错误、还是无有效文件的问题:
splitfolders.ratio(input_folder, output, seed=1337, ratio=(.75, .25), verbose=True)
注意:你当前传入的ratio=(.75, .25)对应拆分出train(训练集)和val(验证集)两个文件夹,如果需要生成test(测试集)文件夹,要把参数改成ratio=(0.75, 0, 0.25),三个值分别对应训练集、验证集、测试集的占比
4. 其他常见问题排查
- 升级split-folders到最新版本,避免旧版本兼容bug:在Anaconda对应环境的终端执行
pip install --upgrade split-folders - 检查文件夹读写权限:如果
ZZ或Res文件夹在系统受保护目录(比如C盘Program Files),需要给Python运行权限,或者把文件夹移到普通用户目录下操作 - 确认你的
.bmp文件后缀名是小写的.bmp,如果是大写.BMP,旧版本split-folders可能识别不到,统一改成小写后缀即可
内容的提问来源于stack exchange,提问作者Fatema Sultana
相关产品推荐
相关产品推荐

