yolov8数据集划分代码
时间: 2025-03-06 14:48:26 浏览: 78
### YOLOv8 数据集划分 示例代码
对于使用YOLOv8进行数据集划分的任务,通常会采用Python脚本来随机分配图像文件到不同的子集中,比如训练集、验证集以及测试集。下面提供一段用于实现这一功能的Python代码示例:
```python
import os
import random
from shutil import copyfile
def split_dataset(image_dir, label_dir, output_dir, train_ratio=0.7, val_ratio=0.2, test_ratio=0.1):
"""
将给定目录下的图片和标签按照指定比例划分为训练集、验证集和测试集。
参数:
image_dir (str): 图片所在的路径.
label_dir (str): 对应标签文件(.txt)所在路径.
output_dir (str): 输出结果保存位置.
train_ratio (float): 训练集所占的比例,默认为 0.7.
val_ratio (float): 验证集所占的比例,默认为 0.2.
test_ratio (float): 测试集所占的比例,默认为 0.1.
返回值:
None
"""
# 创建目标文件夹
dirs = ['train/images', 'val/images', 'test/images',
'train/labels', 'val/labels', 'test/labels']
for d in dirs:
full_path = os.path.join(output_dir, d)
if not os.path.exists(full_path):
os.makedirs(full_path)
images = [f for f in os.listdir(image_dir) if f.endswith('.jpg') or f.endswith('.png')]
total_images = len(images)
indices = list(range(total_images))
random.shuffle(indices)
num_train = int(train_ratio * total_images)
num_val = int(val_ratio * total_images)
train_indices = indices[:num_train]
val_indices = indices[num_train:num_train + num_val]
test_indices = indices[num_train + num_val:]
sets = [('train', train_indices), ('val', val_indices), ('test', test_indices)]
for set_name, idxs in sets:
for i in idxs:
img_file = images[i]
lbl_file = os.path.splitext(img_file)[0] + '.txt'
src_img = os.path.join(image_dir, img_file)
dst_img = os.path.join(output_dir, set_name, 'images', img_file)
src_lbl = os.path.join(label_dir, lbl_file)
dst_lbl = os.path.join(output_dir, set_name, 'labels', lbl_file)
copyfile(src_img, dst_img)
copyfile(src_lbl, dst_lbl)
if __name__ == '__main__':
IMAGE_DIR = './path/to/images' # 替换为实际图片存储路径
LABEL_DIR = './path/to/labels' # 替换为实际标签存储路径
OUTPUT_DIR = './output/dataset_split'
split_dataset(IMAGE_DIR, LABEL_DIR, OUTPUT_DIR)
```
此段代码实现了对输入的数据集按一定比例进行拆分,并将对应的图片及其标签分别复制到相应的子文件夹中[^1]。
阅读全文
相关推荐


















