从零开始:使用LabelImg标注数据集并划分训练集与验证集以应用于YOLOv5
2024.08.16 15:09浏览量:225简介:本文介绍如何使用LabelImg工具标注自定义图像数据集,并详细步骤划分这些数据为训练集和验证集,最后展示如何将这些数据应用到YOLOv5目标检测模型中。适合初学者和非专业人士理解并实践。
引言
在计算机视觉领域,尤其是目标检测任务中,高质量的数据集是训练出优秀模型的关键。YOLOv5作为目前流行的实时目标检测框架,其性能很大程度上依赖于训练数据的多样性和标注的准确性。本文将指导你如何使用LabelImg这一开源工具来标注自己的数据集,并合理地划分这些数据为训练集和验证集,以便后续用于YOLOv5的训练。
一、安装LabelImg
首先,你需要下载并安装LabelImg。LabelImg是一个图形界面的图像标注工具,支持PASCAL VOC和YOLO等格式的标注文件。
- 下载LabelImg:可以从GitHub(https://github.com/tzutalin/labelImg)上下载适用于你操作系统的安装包或源代码。
- 安装:根据你的系统环境,按照LabelImg提供的指南进行安装。
二、使用LabelImg标注数据集
- 打开LabelImg:启动LabelImg应用。
- 加载图像:点击“Open Dir”选择你的图像文件所在的文件夹。
- 开始标注:使用鼠标绘制矩形框,并在弹出的对话框中输入类别名称(确保事先定义好所有类别)。
- 保存标注:完成标注后,点击“Save”保存为XML文件。通常,这些文件会保存在与图像相同的目录下,或者你可以指定一个单独的文件夹来存储它们。
三、划分训练集和验证集
完成标注后,你需要将数据集划分为训练集和验证集。这可以通过编写简单的脚本来实现,或者使用现成的工具如split-folders。
使用Python脚本手动划分
这里提供一个简单的Python脚本示例,假设你的图像和XML文件都在同一个文件夹内,且文件名一一对应。
```python
import os
import shutil
定义源文件夹和目标文件夹
source_folder = ‘path_to_your_dataset’
train_folder = os.path.join(source_folder, ‘train’)
val_folder = os.path.join(source_folder, ‘val’)
假设80%的数据用于训练,20%用于验证
train_ratio = 0.8
获取所有图像文件
image_files = [f for f in os.listdir(source_folder) if f.endswith((‘.png’, ‘.jpg’, ‘.jpeg’))]
打乱顺序
import random
random.shuffle(image_files)
划分训练集和验证集
split_index = int(len(image_files) * train_ratio)
train_files = image_files[:split_index]
val_files = image_files[split_index:]
创建文件夹
if not os.path.exists(train_folder):
os.makedirs(train_folder)
if not os.path.exists(val_folder):
os.makedirs(val_folder)
复制文件
for file in train_files:
shutil.copy(os.path.join(source_folder, file), os.path.join(train_folder, file))
# 同时确保XML文件也被复制(如果它们在同一目录下)xml_file = file.replace('.jpg', '.xml').replace('.png', '.xml').replace('.jpeg', '.xml')if os.path.exists(os.path.join(source_folder, xml_file)):shutil.copy(os.path.join(source_folder, xml_file), os.path.join(train_folder, xml_file))
对验证集做同样的操作
for file in val_files:
shutil.copy(os.path.join(source_folder, file), os.path.join(val_folder, file))
xml_file = file.replace(‘.jpg’, ‘.xml’).replace(‘.png’, ‘.xml’).replace(‘.jpeg’, ‘.xml’)
if os.path.exists(os.path.join(source_folder, xml_file)):
shutil.copy(os.path.join(source_folder, xml

发表评论
登录后可评论,请前往 登录 或 注册