按照ade20k数据集格式进行训练集、验证集和测试集划分数据集的python代码
时间: 2024-05-09 13:20:33 浏览: 158
这里提供一个简单的代码示例,假设我们的数据集存储在一个文件夹中,每个子文件夹代表一个类别,文件名即为图像的ID。
```python
import os
import random
# 数据集根目录
data_root = 'path/to/dataset'
# 所有类别
class_names = ['class1', 'class2', 'class3', ...]
# 划分比例
train_ratio = 0.7
val_ratio = 0.2
test_ratio = 0.1
# 创建保存划分结果的文件夹
os.makedirs('path/to/save/splits', exist_ok=True)
# 遍历所有类别
for class_name in class_names:
# 获取该类别下所有图像的ID
img_ids = os.listdir(os.path.join(data_root, class_name))
num_imgs = len(img_ids)
# 打乱顺序
random.shuffle(img_ids)
# 划分数据集
train_ids = img_ids[:int(num_imgs * train_ratio)]
val_ids = img_ids[int(num_imgs * train_ratio):int(num_imgs * (train_ratio + val_ratio))]
test_ids = img_ids[int(num_imgs * (train_ratio + val_ratio)):]
# 保存划分结果
with open(f'path/to/save/splits/{class_name}_train.txt', 'w') as f:
f.write('\n'.join(train_ids))
with open(f'path/to/save/splits/{class_name}_val.txt', 'w') as f:
f.write('\n'.join(val_ids))
with open(f'path/to/save/splits/{class_name}_test.txt', 'w') as f:
f.write('\n'.join(test_ids))
```
在执行完上述代码后,你会得到每个类别的训练集、验证集和测试集的ID列表,这些列表存储在以类别名为前缀的文件中,可以用于后续的数据加载。
阅读全文