YOLO 划分数据集(训练集、验证集、测试集)_如何将yolo数据集分开训练集验证集测试集

构建IT学习体系:从零到精通的在线资源与社区,

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

    train_label_dir = Data + '/labels/train'
    val_label_dir = Data + '/labels/val'
    # test\_label\_dir = Data + '/labels/test'

    # 创建文件夹
    os.makedirs(train_img_dir)
    os.makedirs(train_label_dir)
    os.makedirs(val_img_dir)
    os.makedirs(val_label_dir)
    # os.makedirs(test\_img\_dir)
    # os.makedirs(test\_label\_dir)

except:
    print('文件目录已存在')

train, val = split_list
all_img = os.listdir(img_path)
all_img_path = [os.path.join(img_path, img) for img
<think>我们正在处理用户的问题:如何使用LabelImg划分训练集测试集,并使用YOLO深度学习模型训练和验证目标检测模型。 根据用户提供的引用和问题,我们可以分解为以下步骤: 1. 使用LabelImg进行数据标注(生成YOLO格式的标注) 2. 划分训练集验证集测试集 3. 准备YOLO模型训练所需的配置文件 4. 训练YOLO模型 5. 验证模型性能 注意:用户提到已经有一个数据集(2339张图像)并按类别分类存储,且已有YOLO格式的标注文件。但用户现在想使用LabelImg,可能是想重新标注或划分数据集?实际上,如果已有YOLO格式的标注,我们可以直接进行划分。 然而,用户明确要求使用LabelImg划分数据集。LabelImg本身是一个标注工具,它可以用来标注图像并生成YOLO格式的标签(.txt文件)。但划分数据集(如训练集验证集)通常不是由LabelImg完成的,而是通过脚本实现的。 因此,我们调整步骤: 1. 如果还没有标注,则使用LabelImg进行标注(生成YOLO格式的标签)。 2. 使用脚本划分数据集训练集验证集测试集)。 3. 配置YOLO模型(这里以YOLOv5为例)。 4. 训练模型。 5. 验证模型。 引用[3]中提到了一种划分数据集的方法:在VOCdevkit目录下生成images和labels文件夹,并分别有train和val子文件夹。我们可以借鉴这种方法。 具体步骤: 步骤1:使用LabelImg标注图像(如果尚未标注) - 安装LabelImg:`pip install labelImg` - 启动:`labelImg` - 设置标注格式为YOLO(在菜单栏选择格式) - 打开图像目录,进行标注,保存的标签为.txt文件(与图像同名,放在同一目录或不同目录,但通常建议图像和标签分开存放,如images和labels目录) 步骤2:划分数据集(假设所有图像和对应的标签已经准备好) - 通常,我们会将数据集随机划分训练集验证集测试集(例如70%训练,20%验证,10%测试)。 - 我们可以编写一个Python脚本来实现。 示例脚本(划分数据集): 1. 创建以下目录结构: dataset/ images/ image1.jpg image2.jpg ... labels/ image1.txt image2.txt ... 2. 然后,将划分后的数据集分别放入训练集验证集测试集。 注意:YOLOv5要求的数据集结构如下: yolov5/ ├── data/ │ └── custom_data/ # 自定义数据集 │ ├── images/ │ │ ├── train/ # 存放训练集图片 │ │ └── val/ # 存放验证集图片 │ └── labels/ │ ├── train/ # 存放训练集标签 │ └── val/ # 存放验证集标签 步骤3:编写一个Python脚本来划分数据集(例如,80%训练,20%验证,或者也可以留一部分测试集) 示例脚本(data_split.py): ```python import os import random import shutil # 设置随机种子 random.seed(42) # 原始图像和标签路径 image_dir = 'dataset/images' label_dir = 'dataset/labels' # 目标目录(YOLOv5格式) dest_dir = 'yolov5/data/custom_data' os.makedirs(os.path.join(dest_dir, 'images', 'train'), exist_ok=True) os.makedirs(os.path.join(dest_dir, 'images', 'val'), exist_ok=True) os.makedirs(os.path.join(dest_dir, 'labels', 'train'), exist_ok=True) os.makedirs(os.path.join(dest_dir, 'labels', 'val'), exist_ok=True) # 获取所有图像文件名(不带扩展名) all_images = [os.path.splitext(file)[0] for file in os.listdir(image_dir) if file.endswith('.jpg')] # 打乱 random.shuffle(all_images) # 划分比例 train_ratio = 0.8 val_ratio = 0.2 train_count = int(len(all_images) * train_ratio) train_images = all_images[:train_count] val_images = all_images[train_count:] # 复制训练集 for img_base in train_images: # 复制图像 shutil.copy(os.path.join(image_dir, img_base+'.jpg'), os.path.join(dest_dir, 'images', 'train', img_base+'.jpg')) # 复制标签 if os.path.exists(os.path.join(label_dir, img_base+'.txt')): shutil.copy(os.path.join(label_dir, img_base+'.txt'), os.path.join(dest_dir, 'labels', 'train', img_base+'.txt')) # 复制验证集 for img_base in val_images: shutil.copy(os.path.join(image_dir, img_base+'.jpg'), os.path.join(dest_dir, 'images', 'val', img_base+'.jpg')) if os.path.exists(os.path.join(label_dir, img_base+'.txt')): shutil.copy(os.path.join(label_dir, img_base+'.txt'), os.path.join(dest_dir, 'labels', 'val', img_base+'.txt')) print("数据集划分完成!") ``` 步骤4:准备YOLOv5配置文件 - 在yolov5/models/目录下选择一个模型配置文件(如yolov5s.yaml) - 创建数据配置文件(在yolov5/data/目录下,例如custom_data.yaml) 示例custom_data.yaml: ```yaml # 训练和验证数据路径 train: data/custom_data/images/train val: data/custom_data/images/val # 类别数 nc: 2 # 根据你的类别数修改,例如洪水滑坡检测可能只有两类:洪水和滑坡 # 类别名称 names: ['flood', 'landslide'] # 根据你的类别名称修改 ``` 步骤5:训练模型 - 安装YOLOv5所需环境:`pip install -r requirements.txt` - 运行训练命令: ```bash python train.py --img 640 --batch 16 --epochs 100 --data data/custom_data.yaml --cfg models/yolov5s.yaml --weights yolov5s.pt ``` - 参数说明: --img: 输入图像尺寸 --batch: 批次大小(根据GPU显存调整) --epochs: 训练轮数 --data: 数据配置文件路径 --cfg: 模型配置文件路径 --weights: 预训练权重 步骤6:验证模型 - 训练完成后,模型权重保存在runs/train/exp/weights/best.pt - 使用验证集进行验证: ```bash python val.py --data data/custom_data.yaml --weights runs/train/exp/weights/best.pt --img 640 ``` - 也可以使用测试集(如果划分测试集)进行测试。 步骤7:使用模型进行推理 - 使用训练好的模型对单张图像或视频进行预测: ```bash python detect.py --source test.jpg --weights runs/train/exp/weights/best.pt ``` 注意:以上步骤假设用户已经安装了YOLOv5环境。如果没有,请先克隆YOLOv5仓库并安装依赖。 引用说明: [^1]:用户提供的引用1,关于YOLOv5用于洪水滑坡检测,但我们这里主要关注数据准备和训练流程。 [^2]:介绍了一阶段目标检测算法,包括YOLO系列,说明YOLO是高效的一阶段检测器。 [^3]:提供了数据集格式转换和划分的方法,我们参考了其目录结构。 因此,我们按照上述步骤即可完成使用LabelImg(用于标注)和YOLOv5进行训练和验证的全过程。 相关问题: 1. 如何评估YOLO模型的性能指标(如mAP)? 2. 训练YOLO模型时如何调整超参数以提高精度? 3. 如何解决目标检测中类别不平衡的问题?</think>### 使用LabelImg划分数据集并训练YOLO模型指南 #### 1. **使用LabelImg标注数据** - **安装LabelImg**: ```bash pip install labelImg labelImg # 启动工具 ``` - **标注流程**: 1. 点击"Open Dir"加载图像文件夹 2. 设置标注格式为YOLO(菜单栏 → Format → YOLO) 3. 绘制边界框并输入类别名称 4. 自动生成`.txt`标签文件(与图像同名),格式为: `[class_id] [x_center] [y_center] [width] [height]` 坐标值为归一化后的相对值(0-1) #### 2. **划分数据集** 假设原始结构: ``` dataset/ ├─ images/ # 原始图像 └─ labels/ # LabelImg生成的YOLO标签 ``` 使用Python脚本划分(示例): ```python import os import random from sklearn.model_selection import train_test_split # 配置路径 image_dir = "dataset/images" label_dir = "dataset/labels" output_dir = "yolo_dataset" # 创建目录 os.makedirs(f"{output_dir}/images/train", exist_ok=True) os.makedirs(f"{output_dir}/images/val", exist_ok=True) os.makedirs(f"{output_dir}/labels/train", exist_ok=True) os.makedirs(f"{output_dir}/labels/val", exist_ok=True) # 获取所有图像文件名(不含扩展名) all_files = [f.split(".")[0] for f in os.listdir(image_dir)] train_files, val_files = train_test_split(all_files, test_size=0.2, random_state=42) # 80%训练, 20%验证 # 复制文件到目标目录 def copy_files(file_list, split_type): for file in file_list: shutil.copy(f"{image_dir}/{file}.jpg", f"{output_dir}/images/{split_type}") shutil.copy(f"{label_dir}/{file}.txt", f"{output_dir}/labels/{split_type}") copy_files(train_files, "train") copy_files(val_files, "val") print(f"数据集划分完成!训练集: {len(train_files)}张, 验证集: {len(val_files)}张") ``` #### 3. **配置YOLO训练环境** 1. 克隆YOLOv5仓库: ```bash git clone https://github.com/ultralytics/yolov5 pip install -r yolov5/requirements.txt ``` 2. 创建数据集配置文件`data.yaml`: ```yaml train: yolo_dataset/images/train val: yolo_dataset/images/val nc: 2 # 类别数量(根据实际修改) names: ["flood", "landslide"] # 类别名称(根据实际修改) ``` #### 4. **训练模型** ```bash python yolov5/train.py \ --img 640 \ # 输入图像尺寸 --batch 16 \ # 批次大小 --epochs 100 \ # 训练轮数 --data data.yaml \ # 数据集配置 --cfg yolov5s.yaml \ # 模型架构(可选yolov5s/m/l/x) --weights yolov5s.pt # 预训练权重 ``` #### 5. **验证与推理** - **验证模型性能**: ```bash python yolov5/val.py \ --weights runs/train/exp/weights/best.pt \ --data data.yaml \ --task test ``` 输出指标:mAP@0.5, Precision, Recall等[^2] - **单张图像推理**: ```bash python yolov5/detect.py \ --weights best.pt \ --source test_image.jpg \ --conf 0.25 # 置信度阈值 ``` #### 关键注意事项 1. **标签一致性**:确保每个图像都有对应的`.txt`标签文件(空标签也需保留空文件) 2. **数据增强**:YOLO自动启用Mosaic等增强,可在`train.py`中调整参数 3. **超参数调优**:修改`hyp.scratch.yaml`调整学习率、优化器等[^1] 4. **模型选择**: - **YOLOv5s**:速度最快,精度较低 - **YOLOv5x**:速度慢,精度最高 > 训练过程实时监控:访问 `http://localhost:6006` 查看TensorBoard日志(自动生成在`runs/train`目录) --- ### 相关问题 1. **如何解决YOLO训练中的类别不平衡问题?** 2. **训练时出现过拟合有哪些应对策略?** 3. **如何将YOLO模型部署到移动设备或嵌入式系统?** 4. **除了mAP,还有哪些指标能全面评估目标检测模型性能?** 5. **如何利用迁移学习提升小数据集的训练效果?** [^1]: 参考YOLO实战应用案例中的超参数调整方法 [^2]: 目标检测评估指标详见YOLO系列算法文献 [^3]: 数据集格式转换参考VOCdevkit标准结构
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值