当前位置: 首页 > news >正文

YOLOv5 上使用 **labelImg** 标注并训练自己的数据集

要在 YOLOv5 上使用 labelImg 标注并训练自己的数据集,按照以下步骤操作:
“文后有执行出现错误提示的解决方案,建议首先阅读此部分”

1. 安装 labelImg(标注工具)

方法 1:pip 安装(推荐)

pip install labelImg  # 安装
labelImg  # 运行

方法 2:源码安装

git clone https://github.com/HumanSignal/labelImg.git
cd labelImg
pip install -r requirements.txt
pip install pyqt5  # 确保 GUI 依赖
python labelImg.py  # 运行

📌 注意

  • 标注格式选择 YOLO(默认生成 .txt 文件)。
  • 快捷键:
    • W:画框
    • Ctrl + S:保存
    • A/D:切换图片

2. 标注数据集

  1. 创建目录结构

    mkdir custom_dataset
    cd custom_dataset
    mkdir images labels
    
    • images/:存放 .jpg.png 图片
    • labels/:存放 labelImg 生成的 .txt 标注文件
  2. 使用 labelImg 标注

    • 打开 labelImg,选择 Open Dir 加载 images/ 文件夹。
    • 标注后,保存到 labels/(确保每张图片对应一个 .txt 文件)。

3. 准备 YOLOv5 数据集格式

YOLOv5 要求数据集按如下结构组织:

custom_dataset/
├── images/
│   ├── train/  # 训练图片
│   └── val/    # 验证图片
├── labels/
│   ├── train/  # 训练标签
│   └── val/    # 验证标签

(可选)拆分训练集/验证集

使用脚本自动划分(示例):

import os
import random
from sklearn.model_selection import train_test_split# 设置路径
image_dir = "custom_dataset/images"
label_dir = "custom_dataset/labels"
images = [f for f in os.listdir(image_dir) if f.endswith('.jpg')]# 按 8:2 划分训练集和验证集
train_images, val_images = train_test_split(images, test_size=0.2, random_state=42)# 创建子目录
os.makedirs(f"{image_dir}/train", exist_ok=True)
os.makedirs(f"{image_dir}/val", exist_ok=True)
os.makedirs(f"{label_dir}/train", exist_ok=True)
os.makedirs(f"{label_dir}/val", exist_ok=True)# 移动文件
for img in train_images:os.rename(f"{image_dir}/{img}", f"{image_dir}/train/{img}")os.rename(f"{label_dir}/{img.replace('.jpg', '.txt')}", f"{label_dir}/train/{img.replace('.jpg', '.txt')}")for img in val_images:os.rename(f"{image_dir}/{img}", f"{image_dir}/val/{img}")os.rename(f"{label_dir}/{img.replace('.jpg', '.txt')}", f"{label_dir}/val/{img.replace('.jpg', '.txt')}")

4. 创建 YOLOv5 数据集配置文件

yolov5/data/ 下新建 custom.yaml,内容如下:

# custom.yaml
train: ../custom_dataset/images/train/
val: ../custom_dataset/images/val/# 类别数
nc: 2  # 修改为你的类别数量
names: ['class1', 'class2']  # 修改为你的类别名称

📌 示例:

  • 如果标注的是 ,则 nc: 2, names: ['cat', 'dog']

5. 训练自定义模型

cd yolov5
python train.py --img 640 --batch 16 --epochs 100 --data data/custom.yaml --weights yolov5s.pt
  • --img 640:输入图像尺寸
  • --batch 16:批次大小(根据 GPU 显存调整,CPU 可设为 --batch 4
  • --epochs 100:训练轮次
  • --weights yolov5s.pt:预训练模型(可选 yolov5n.pt 更轻量)

6. 测试训练结果

6.1 使用验证集测试

python val.py --weights runs/train/exp/weights/best.pt --data data/custom.yaml

6.2 检测单张图片

python detect.py --weights runs/train/exp/weights/best.pt --source ../custom_dataset/images/val/example.jpg

结果保存在 runs/detect/exp/


7. 常见问题

Q1: 标注文件格式是否正确?

检查 labels/ 下的 .txt 文件内容格式应为:

<class_id> <x_center> <y_center> <width> <height>

例如:

0 0.5 0.5 0.2 0.3  # 类别 0,中心点 (0.5,0.5),宽高占比 0.2 和 0.3

Q2: 训练时显存不足?

降低 --batch 大小(如 --batch 4),或使用更小模型(如 --weights yolov5n.pt)。

Q3: 如何提高精度?

  • 增加训练数据(至少每类 100~200 张图)。
  • 调整超参数(如 --epochs 300)。
  • 使用数据增强(YOLOv5 默认启用)。

总结

步骤关键操作
1. 标注数据使用 labelImg 生成 YOLO 格式标注
2. 组织数据集images/labels/ 划分训练/验证集
3. 配置 YAML定义 custom.yaml 指定路径和类别
4. 训练模型运行 train.py 选择合适参数
5. 测试模型使用 detect.pyval.py 验证效果

按此流程即可完成自定义数据训练!

“训练过程中问题解决”

问题1:运行
cd yolov5
python train.py --img 640 --batch 16 --epochs 100 --data data/custom.yaml --weights yolov5s.pt
提示:

训练自定义模型提示以下错误:
train: weights=yolov5s.pt, cfg=, data=data/custom.yaml, hyp=data/hyps/hyp.scratch-low.yaml, epochs=100, batch_size=16, imgsz=640, rect=False, resume=False, nosave=False, noval=False, noautoanchor=False, noplots=False, evolve=None, evolve_population=data/hyps, resume_evolve=None, bucket=, cache=None, image_weights=False, device=, multi_scale=False, single_cls=False, optimizer=SGD, sync_bn=False, workers=8, project=runs/train, name=exp, exist_ok=False, quad=False, cos_lr=False, label_smoothing=0.0, patience=100, freeze=[0], save_period=-1, seed=0, local_rank=-1, entity=None, upload_dataset=False, bbox_interval=-1, artifact_alias=latest, ndjson_console=False, ndjson_file=False
github: skipping check (offline), for updates see https://github.com/ultralytics/yolov5
YOLOv5 🚀 v7.0-422-g2540fd4c Python-3.8.10 torch-2.4.1+cu121 CPUhyperparameters: lr0=0.01, lrf=0.01, momentum=0.937, weight_decay=0.0005, warmup_epochs=3.0, warmup_momentum=0.8, warmup_bias_lr=0.1, box=0.05, cls=0.5, cls_pw=1.0, obj=1.0, obj_pw=1.0, iou_t=0.2, anchor_t=4.0, fl_gamma=0.0, hsv_h=0.015, hsv_s=0.7, hsv_v=0.4, degrees=0.0, translate=0.1, scale=0.5, shear=0.0, perspective=0.0, flipud=0.0, fliplr=0.5, mosaic=1.0, mixup=0.0, copy_paste=0.0
Comet: run 'pip install comet_ml' to automatically track and visualize YOLOv5 🚀 runs in Comet
TensorBoard: Start with 'tensorboard --logdir runs/train', view at http://localhost:6006/Dataset not found ⚠️, missing paths ['/home/sj/yolov5/custom_dataset/images/val']
Traceback (most recent call last):File "train.py", line 988, in <module>main(opt)File "train.py", line 690, in maintrain(opt.hyp, opt, device, callbacks)File "train.py", line 205, in traindata_dict = data_dict or check_dataset(data)  # check if NoneFile "/home/sj/yolov5/utils/general.py", line 565, in check_datasetraise Exception("Dataset not found ❌")
Exception: Dataset not found ❌

解决方案:
没有进行训练集和验证集分割,直接运行上述的分割.py文件即可,我是没有运行,所以才导致这个错误。

问题2:
运行分割.py后,提示没有找到python3路径,具体提示:
运行拆分训练集/验证集,提示:
from sklearn.model_selection import train_test_split
ModuleNotFoundError: No module named ‘sklearn’

解决方案:
这个错误表明你的虚拟环境 yolov5_env 的 Python 路径出现了问题,导致 pip 无法正确执行。以下是完整的解决方案:


1. 问题原因

错误信息显示:

/home/sj/yolov5/yolov5_env/bin/pip:/home/sj/yolov5/yolov5_env/bin/python3:解释器错误: 没有那个文件或目录

说明虚拟环境的 python3 解释器路径损坏或丢失,可能的原因包括:

  • 虚拟环境创建后,Python 被移动或删除。
  • 系统环境变量冲突。
  • 虚拟环境未正确激活。

2. 解决方案

方法 1:重建虚拟环境(推荐)

直接删除旧环境并新建:

# 删除旧环境
rm -rf ~/yolov5/yolov5_env# 创建新环境(确保使用正确的 Python 版本)
python3 -m venv ~/yolov5/yolov5_env# 激活环境
source ~/yolov5/yolov5_env/bin/activate# 重新安装依赖
pip install scikit-learn torch torchvision
方法 2:修复现有虚拟环境

如果不想重建,可以手动修复解释器路径:

# 查找系统 Python3 路径
which python3  # 例如输出 /usr/bin/python3# 修改虚拟环境的 Python 软链接
ln -sf /usr/bin/python3 ~/yolov5/yolov5_env/bin/python3# 重新激活环境
source ~/yolov5/yolov5_env/bin/activate

3. 验证修复

# 检查虚拟环境 Python 和 pip 是否正常
which python  # 应指向虚拟环境路径
which pip     # 应指向虚拟环境路径# 测试安装
pip install scikit-learn -i https://pypi.tuna.tsinghua.edu.cn/simple

4. 预防措施

  1. 不要移动虚拟环境目录
    创建后保持路径不变。
  2. 使用完整命令激活环境
    确保通过 source. 激活:
    source ~/yolov5/yolov5_env/bin/activate
    
  3. 检查 Python 版本一致性
    创建虚拟环境时显式指定 Python 版本:
    python3.8 -m venv yolov5_env  # 例如强制使用 3.8
    

问题3:
再次运行分割py文件提示:FileNotFoundError: [Errno 2] No such file or directory: ‘custom_dataset/images’

确保jpg图片都位于./custom_dataset/images下
确保txt图片都位于./custom_dataset/labels下

labelImg标注保存的*.xml.txt,yolo是不识别的,后续再训练需要严格保存成 *.txt文件,很重要!

至此,训练成功运行!

http://www.lryc.cn/news/611809.html

相关文章:

  • PyTorch生成式人工智能——Hugging Face环境配置与应用详解
  • 【32】C++实战篇—— m行n列的坐标点,求每行相邻点X差值dX,每列相邻点y差值dY,并以矩阵形式左端对齐
  • 远程连接----ubuntu ,rocky 等Linux系统,WindTerm_2.7.0
  • Spring选择哪种方式代理?
  • 阿里云DMS Data Copilot——高效智能的数据助手,助力企业实现数据驱动的未来
  • 深入理解 Maven POM 文件:核心配置详解
  • Jenkinsfile各指令详解
  • Java学习第一百零九部分——Jenkins(一)
  • 基于通用优化软件GAMS的数学建模和优化分析
  • AlphaEarth模型架构梳理及借鉴哪些深度学习领域方面的思想
  • React:受控组件和非受控组件
  • WebStorm转VSCode:高效迁移指南
  • 前端开发_怎么禁止用户复制内容
  • vue3 el-dialog自定义实现拖拽、限制视口范围增加了拖拽位置持久化的功能
  • 【前端开发】三. JS运算符
  • 2.6 sync
  • vue3 find 数组查找方法
  • JSON巴巴 - 专业JSON格式化工具:让任何JSON都能完美格式化
  • Excel将整列值转换为字符串
  • Git 乱码文件处理全流程指南
  • 通过最严时序标准,再登产业图谱榜首,TDengine 时序数据库在可信数据库大会荣获双荣誉
  • Apache Flink 的详细介绍
  • 时序数据库的发展现状与未来趋势
  • Excel单元格设置下拉框、选项背景
  • 【OSCP】- Monitoring 靶场学习(Proving Grounds Play)
  • SpringBoot 整合Langchain4j 对接主流大模型实战详解
  • 科技云报到:Agent应用爆发,谁成为向上托举的力量?
  • 第一章-网络信息安全概述
  • 数据赋能(381)——数据挖掘——支持异类数据库
  • C语言的数组与字符串练习题2