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. 标注数据集
-
创建目录结构
mkdir custom_dataset cd custom_dataset mkdir images labels
images/
:存放.jpg
或.png
图片labels/
:存放 labelImg 生成的.txt
标注文件
-
使用 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.py 或 val.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. 预防措施
- 不要移动虚拟环境目录
创建后保持路径不变。 - 使用完整命令激活环境
确保通过source
或.
激活:source ~/yolov5/yolov5_env/bin/activate
- 检查 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文件,很重要!
至此,训练成功运行!