从前缀为bothFireAndSmoke的jpg数据集中,随机且不重复地将10000张图片复制到train文件夹、2000张图片复制到val文件夹、2000张图片复制到test文件夹
时间: 2024-09-06 19:07:35 浏览: 42
2000张yolo算法水果检测数据集
要从名为"bothFireAndSmoke"的jpg数据集中随机且不重复地分配图片到train、val和test文件夹,可以采用以下步骤:
1. 首先,确认你有"bothFireAndSmoke"jpg数据集的完整路径。假设它位于`data/bothFireAndSmoke/`。
```shell
# 假设data/bothFireAndSmoke目录下有.jpg文件
images_dir = "data/bothFireAndSmoke/*.jpg"
```
2. 使用Python的`random.sample()`函数从图片集合中选择不重复的样本。这个函数会返回一个新的列表,其中包含了指定数量的随机元素,且不会改变原始集合[^1]。
```python
from random import sample
# 设置每个子集的大小
train_count = 10000
val_count = 2000
test_count = 2000
# 读取所有图片文件名
image_files = sorted(os.listdir(images_dir))
# 分配图片到各个文件夹
train_files = sample(image_files, train_count)
val_files = sample(set(image_files).difference(train_files), val_count) # 确保val文件没有与train重叠
test_files = set(image_files).difference(train_files.union(val_files)) # 计算剩余的图片作为test
# 将图片移动到对应文件夹
for file in train_files:
src_path = os.path.join(images_dir, file)
dst_path_train = os.path.join("train", file)
shutil.move(src_path, dst_path_train)
for file in val_files:
src_path = os.path.join(images_dir, file)
dst_path_val = os.path.join("val", file)
shutil.move(src_path, dst_path_val)
for file in test_files:
src_path = os.path.join(images_dir, file)
dst_path_test = os.path.join("test", file)
shutil.move(src_path, dst_path_test)
```
记得在运行此脚本之前,确保train、val和test文件夹已经存在,并导入必要的库(如`os`, `shutil`)[^2]。
阅读全文