中文文档: README_CN.md | English Documentation: README.md
本项目主要完成了以下工作:
- 详细介绍了怎样制作YOLO的自定义数据集以及如何使用自定义数据集训练YOLO模型。
- 对YOLOv5、YOLOv6、YOLOv7、YOLOv8进行了部分修改,能够适配自定义数据集进行训练。
- 提供了各YOLO算法的目标检测模型的预训练权重。
- 如果使用 Intel RealSense 双目相机采集图像,可以查看 Images-Acquisition-With-RealSense。
-
安装Label Studio
Label Studio是一个功能强大的开源数据标注平台,支持多种数据类型的标注,相比传统标注工具具有以下优势:
- 基于Web界面,无需复杂安装配置
- 支持多人协作标注
- 内置质量控制和进度管理
- 支持多种导出格式(YOLO、COCO、VOC等)
- 活跃的社区支持和持续更新
pip install label-studio
-
启动Label Studio
label-studio
启动后会自动打开浏览器,访问 http://localhost:8080
-
创建项目并配置
- 创建新项目
- 上传您的图像数据
- 选择 "Computer Vision" -> "Object Detection with Bounding Boxes" 模板
- Label Studio会自动配置目标检测的标注界面
-
Label Studio的目标检测标注界面包含以下功能:
- 拖拽创建边界框
- 分配类别标签
- 键盘快捷键操作
- 自动保存标注结果
-
导出设置:
- 格式选择:YOLO格式
- 导出路径:项目设置中配置
-
Label Studio标注流程:
-
上传图像:在Label Studio项目中批量上传待标注的图像
-
开始标注:
- 选择图像进入标注界面
- 使用鼠标拖拽创建边界框
- 为每个边界框分配正确的类别标签
- 使用键盘快捷键提高标注效率
-
质量控制:
- 预览和编辑已标注的数据
- 支持多人协作标注
- 标注进度实时跟踪
-
-
导出标注数据:
完成标注后,在Label Studio中导出数据:
- 选择导出格式:YOLO或COCO格式
- 如果选择COCO格式,后续需要转换为YOLO格式
-
推荐目录结构:
YoloDataSets/ |——————images/ | └——————1.jpg | └——————2.jpg | └——————3.jpg | └——————... |——————Annotations/ (如果使用VOC/XML格式) | └——————1.xml | └——————2.xml | └——————3.xml | └——————...
-
如果Label Studio导出的是YOLO格式,可以直接使用,无需转换。
-
如果导出的是COCO或VOC格式,需要使用以下方法转换:
-
将标注好的数据集按以下结构保存。
YoloDataSets/ |——————images/ | └——————1.jpg | └——————2.jpg | └——————3.jpg | └——————... |——————Annotations/ | └——————1.xml | └——————2.xml | └——————3.xml | └——————...
-
在终端输入以下命令,运行 DataSet.py。
python DataSet.py --yoloversion yolov5 --trainval_percent 0.9 --train_percent 0.9 --mainpath YoloDataSets --classes ['dog','man'] yolov6 ··· ··· ···· ['','',···] yolov7 ··· ··· ···· ['','',···] yolov8 ··· ··· ···· ['','',···] yolov9 ··· ··· ···· ['','',···] yolov10 ··· ··· ···· ['','',···] yolov11 ··· ··· ···· ['','',···]
-
各参数含义如下。
-
yoloversion :
YOLO的版本,这里可供选择 YOLOv5、YOLOv6、YOLOv7、YOLOv8、YOLOv9、YOLOv10、YOLOv11 -
trainval_percent :
训练集和验证集的总占比,即 1-trainval_percent 为测试集占比 -
train_percent :
训练集在训练集和验证集中的占比 -
mainpath :
自定义数据集的根目录 -
classes :
待检测标签的名称,请按照示例以列表的格式填写
-
-
在终端输入如下命令,进入 yolov5 文件夹。
cd yolov5 -
将转换后的数据集放在 yolov5 的根目录下。
-
在 YoloDataSets 目录下添加 .yaml 配置文件 data.yaml ,内容和格式如下。
path : YoloDataSets train: train.txt val: val.txt test: test.txt # number of classes nc: 2 # class names names: ['dog','man'] -
在终端运行如下命令,参数按实际情况进行调整。
python train.py --data YoloDataSets/data.yaml --epochs 300 --weights yolov5n.pt --cfg model/yolov5n.yaml --batch-size 128 yolov5s.pt model/yolov5s.yaml 64 yolov5m.pt model/yolov5m.yaml 40 yolov5l.pt model/yolov5l.yaml 24 yolov5x.pt model/yolov5x.yaml 16 -
官方提供的目标检测预训练权重如下。
Model size
(pixels)mAPval
50-95mAPval
50Speed
CPU b1
(ms)Speed
V100 b1
(ms)Speed
V100 b32
(ms)params
(M)FLOPs
@640 (B)YOLOv5n 640 28.0 45.7 45 6.3 0.6 1.9 4.5 YOLOv5s 640 37.4 56.8 98 6.4 0.9 7.2 16.5 YOLOv5m 640 45.4 64.1 224 8.2 1.7 21.2 49.0 YOLOv5l 640 49.0 67.3 430 10.1 2.7 46.5 109.1 YOLOv5x 640 50.7 68.9 766 12.1 4.8 86.7 205.7 YOLOv5n6 1280 36.0 54.4 153 8.1 2.1 3.2 4.6 YOLOv5m6 1280 51.3 69.3 887 11.1 6.8 35.7 50.0 YOLOv5l6 1280 53.7 71.3 1784 15.8 10.5 76.8 111.4 YOLOv5x6
+ [TTA]1280
153655.0
55.872.7
72.73136
-26.2
-19.4
-140.7
-209.8
-
-
在终端输入如下命令,进入 yolov6 文件夹。
cd yolov6 -
将转换后的数据集放在 yolov6 的根目录下。
-
在 YoloDataSets 目录下添加 .yaml 配置文件 data.yaml ,内容和格式如下。
train: YoloDataSets/images/train # train images val: YoloDataSets/images/val # val images test: YoloDataSets/images/test is_coco: False # number of classes nc: 2 # class names names: ['dog','man'] -
在终端运行如下命令,参数按实际情况进行调整。
python tools/train.py --batch 64 --conf configs/yolov6s6_finetune.py --data YoloDataSets/data.yaml --epochs 300 --device 0 -
官方提供的目标检测预训练权重如下。
Model Size mAPval
0.5:0.95SpeedT4
trt fp16 b1
(fps)SpeedT4
trt fp16 b32
(fps)Params
(M)FLOPs
(G)YOLOv6-N 640 37.5 779 1187 4.7 11.4 YOLOv6-S 640 45.0 339 484 18.5 45.3 YOLOv6-M 640 50.0 175 226 34.9 85.8 YOLOv6-L 640 52.8 98 116 59.6 150.7 YOLOv6-N6 1280 44.9 228 281 10.4 49.8 YOLOv6-S6 1280 50.3 98 108 41.4 198.0 YOLOv6-M6 1280 55.2 47 55 79.6 379.5 YOLOv6-L6 1280 57.2 26 29 140.4 673.4
-
在终端输入如下命令,进入 yolov7 文件夹。
cd yolov7 -
将转换后的数据集放在 yolov7 的根目录下。
-
在 YoloDataSets 目录下添加 .yaml 配置文件 data.yaml ,内容和格式如下。
train: YoloDataSets/train.txt val: YoloDataSets/val.txt test: YoloDataSets/test.txt # number of classes nc: 2 # class names names: ['dog','man'] -
在终端运行如下命令,参数按实际情况进行调整。
# finetune p5 models python train.py --workers 8 --device 0 --batch-size 32 --data YoloDataSets/data.yaml --img 640 640 --cfg cfg/training/yolov7-custom.yaml --weights 'yolov7_training.pt' --name yolov7-custom --hyp data/hyp.scratch.custom.yaml # finetune p6 models python train_aux.py --workers 8 --device 0 --batch-size 16 --data YoloDataSets/data.yaml --img 1280 1280 --cfg cfg/training/yolov7-w6-custom.yaml --weights 'yolov7-w6_training.pt' --name yolov7-w6-custom --hyp data/hyp.scratch.custom.yaml -
官方提供的目标检测预训练权重如下。
Model Test Size APtest AP50test AP75test batch 1 fps batch 32 average time YOLOv7 640 51.4% 69.7% 55.9% 161fps 2.8ms YOLOv7-X 640 53.1% 71.2% 57.8% 114fps 4.3ms YOLOv7-W6 1280 54.9% 72.6% 60.1% 84fps 7.6ms YOLOv7-E6 1280 56.0% 73.5% 61.2% 56fps 12.3ms YOLOv7-D6 1280 56.6% 74.0% 61.8% 44fps 15.0ms YOLOv7-E6E 1280 56.8% 74.4% 62.1% 36fps 18.7ms
-
步骤1:拉取Ultralytics仓库
在项目根目录下执行以下命令,拉取最新的Ultralytics YOLO框架:
git clone https://github.com/ultralytics/ultralytics.git Ultralytics cd Ultralytics或者直接从官网下载:Ultralytics YOLO
-
步骤2:安装依赖
pip install ultralytics
或者安装完整依赖:
pip install -r requirements.txt
-
步骤3:准备数据集
将转换后的数据集放在 Ultralytics 文件夹下,并在 YoloDataSets 目录下添加 .yaml 配置文件 data.yaml ,内容和格式如下。
path : YoloDataSets # 注意:相对于Ultralytics文件夹的路径 train: train.txt val: val.txt test: test.txt # number of classes nc: 2 # class names names: ['dog','man'] -
步骤4:开始训练
方法一:使用Python API训练(推荐)
在Ultralytics文件夹中创建训练脚本 train_custom.py:
from ultralytics import YOLO # 加载模型 # YOLOv8: yolov8n.pt, yolov8s.pt, yolov8m.pt, yolov8l.pt, yolov8x.pt # YOLOv9: yolov9c.pt, yolov9e.pt # YOLOv10: yolov10n.pt, yolov10s.pt, yolov10m.pt, yolov10b.pt, yolov10l.pt, yolov10x.pt # YOLOv11: yolov11n.pt, yolov11s.pt, yolov11m.pt, yolov11l.pt, yolov11x.pt model = YOLO('yolov8n.pt') # 可替换为其他版本 # 训练模型 results = model.train( data='YoloDataSets/data.yaml', epochs=100, imgsz=640, batch=16, device=0, project='runs/train', name='custom_dataset' ) # 验证模型 metrics = model.val() print(f"mAP50-95: {metrics.box.map:.4f}")
运行训练:
python train_custom.py
-
方法二:使用命令行训练
# YOLOv8 系列 yolo task=detect mode=train model=yolov8n.pt data=YoloDataSets/data.yaml batch=16 epochs=300 imgsz=640 device=0 yolo task=detect mode=train model=yolov8s.pt data=YoloDataSets/data.yaml batch=16 epochs=300 imgsz=640 device=0 yolo task=detect mode=train model=yolov8m.pt data=YoloDataSets/data.yaml batch=16 epochs=300 imgsz=640 device=0 yolo task=detect mode=train model=yolov8l.pt data=YoloDataSets/data.yaml batch=16 epochs=300 imgsz=640 device=0 yolo task=detect mode=train model=yolov8x.pt data=YoloDataSets/data.yaml batch=16 epochs=300 imgsz=640 device=0 # YOLOv9 系列 yolo task=detect mode=train model=yolov9c.pt data=YoloDataSets/data.yaml batch=16 epochs=300 imgsz=640 device=0 yolo task=detect mode=train model=yolov9e.pt data=YoloDataSets/data.yaml batch=16 epochs=300 imgsz=640 device=0 # YOLOv10 系列 yolo task=detect mode=train model=yolov10n.pt data=YoloDataSets/data.yaml batch=16 epochs=300 imgsz=640 device=0 yolo task=detect mode=train model=yolov10s.pt data=YoloDataSets/data.yaml batch=16 epochs=300 imgsz=640 device=0 yolo task=detect mode=train model=yolov10m.pt data=YoloDataSets/data.yaml batch=16 epochs=300 imgsz=640 device=0 yolo task=detect mode=train model=yolov10b.pt data=YoloDataSets/data.yaml batch=16 epochs=300 imgsz=640 device=0 yolo task=detect mode=train model=yolov10l.pt data=YoloDataSets/data.yaml batch=16 epochs=300 imgsz=640 device=0 yolo task=detect mode=train model=yolov10x.pt data=YoloDataSets/data.yaml batch=16 epochs=300 imgsz=640 device=0 # YOLOv11 系列 yolo task=detect mode=train model=yolov11n.pt data=YoloDataSets/data.yaml batch=16 epochs=300 imgsz=640 device=0 yolo task=detect mode=train model=yolov11s.pt data=YoloDataSets/data.yaml batch=16 epochs=300 imgsz=640 device=0 yolo task=detect mode=train model=yolov11m.pt data=YoloDataSets/data.yaml batch=16 epochs=300 imgsz=640 device=0 yolo task=detect mode=train model=yolov11l.pt data=YoloDataSets/data.yaml batch=16 epochs=300 imgsz=640 device=0 yolo task=detect mode=train model=yolov11x.pt data=YoloDataSets/data.yaml batch=16 epochs=300 imgsz=640 device=0
-
项目结构说明:
完成上述步骤后,您的项目目录结构应该如下:
YOLO-Datasets-And-Training-Methods/ ├── assets/ ├── yolov5/ ├── yolov6/ ├── yolov7/ ├── Ultralytics/ # 新拉取的Ultralytics仓库 │ ├── ultralytics/ # 核心框架 │ ├── YoloDataSets/ # 您的数据集 │ │ ├── data.yaml # 数据集配置 │ │ ├── images/ │ │ ├── labels/ │ │ ├── train.txt │ │ ├── val.txt │ │ └── test.txt │ ├── train_custom.py # 您创建的训练脚本 │ └── runs/ # 训练结果 ├── DataSet.py └── README_CN.md -
重要提示:
- 所有YOLOv8/v9/v10/v11版本都使用相同的Ultralytics框架
- 支持直接使用预训练权重进行微调
- 可以通过修改
model参数选择不同的YOLO版本 - 训练方法和参数设置完全一致
- 建议在Ultralytics文件夹中进行所有训练操作
-
额外功能:
# 推理 model = YOLO('runs/train/custom_dataset/weights/best.pt') results = model('path/to/image.jpg') # 验证 metrics = model.val(data='YoloDataSets/data.yaml') # 导出 model.export(format='onnx') # 支持多种格式
-
官方提供的目标检测预训练权重如下(YOLOv8)。
Model size
(pixels)mAPval
50-95Speed
CPU ONNX
(ms)Speed
A100 TensorRT
(ms)params
(M)FLOPs
(B)YOLOv8n 640 37.3 80.4 0.99 3.2 8.7 YOLOv8s 640 44.9 128.4 1.20 11.2 28.6 YOLOv8m 640 50.2 234.7 1.83 25.9 78.9 YOLOv8l 640 52.9 375.2 2.39 43.7 165.2 YOLOv8x 640 53.9 479.1 3.53 68.2 257.8