logo

从零开始:使用LabelImg标注数据集并划分训练集与验证集以应用于YOLOv5

作者:起个名字好难2024.08.16 15:09浏览量:225

简介:本文介绍如何使用LabelImg工具标注自定义图像数据集,并详细步骤划分这些数据为训练集和验证集,最后展示如何将这些数据应用到YOLOv5目标检测模型中。适合初学者和非专业人士理解并实践。

引言

在计算机视觉领域,尤其是目标检测任务中,高质量的数据集是训练出优秀模型的关键。YOLOv5作为目前流行的实时目标检测框架,其性能很大程度上依赖于训练数据的多样性和标注的准确性。本文将指导你如何使用LabelImg这一开源工具来标注自己的数据集,并合理地划分这些数据为训练集和验证集,以便后续用于YOLOv5的训练。

一、安装LabelImg

首先,你需要下载并安装LabelImg。LabelImg是一个图形界面的图像标注工具,支持PASCAL VOC和YOLO等格式的标注文件。

  1. 下载LabelImg:可以从GitHub(https://github.com/tzutalin/labelImg)上下载适用于你操作系统的安装包或源代码。
  2. 安装:根据你的系统环境,按照LabelImg提供的指南进行安装。

二、使用LabelImg标注数据集

  1. 打开LabelImg:启动LabelImg应用。
  2. 加载图像:点击“Open Dir”选择你的图像文件所在的文件夹。
  3. 开始标注:使用鼠标绘制矩形框,并在弹出的对话框中输入类别名称(确保事先定义好所有类别)。
  4. 保存标注:完成标注后,点击“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))

  1. # 同时确保XML文件也被复制(如果它们在同一目录下)
  2. xml_file = file.replace('.jpg', '.xml').replace('.png', '.xml').replace('.jpeg', '.xml')
  3. if os.path.exists(os.path.join(source_folder, xml_file)):
  4. 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

相关文章推荐

发表评论

活动