Bootstrap

【YOLO系列复现】二、基于YOLOv6的目标检测:YOLOv6训练自己的数据集(史诗级详细教程)

 官方模型:YOLOv6/README_cn.md at main · meituan/YOLOv6

目录

1、模型和环境准备

1.1 模型下载

1.2 依赖环境安装

1.3 权重文件下载

1.4 环境测试

2、配置文件和数据集准备

2.1 准备数据集

2.2 配置文件准备

2.3 BUG修改

 3、模型训练

3.1 模型训练

3.2 训练结果介绍        

(1). best_ckpt.pt

(2). last_ckpt.pt

(3)区别总结

4、模型评估与推理

4.1 模型评估

4.2 模型推理

参数详解


1、模型和环境准备

1.1 模型下载

        首先要做的是将yolov6模型克隆到本地,yolov6模型官网:YOLOv6,你可以点击里面进去下载到本地,也可以 通过git clone的方式下载到本地,如下:

git clone https://github.com/meituan/YOLOv6
  • 通过git clone的方式下载到本地: 

下载到本地后,有一个YOLOv6文件夹,如上。

1.2 依赖环境安装

终端指令进入到YOLOv6文件夹下载,进行依赖包按,如下:

cd YOLOv6
pip install -r requirements.txt
  • 安装如下图: 

1.3 权重文件下载

依赖环境安装完成后,进行模型权重文件下载,yolov6的权重文件有多个版本。

进入这个地址下载权重:YOLOv6,找到如下Benchmark模块,如下:

        需要用什么模型,就点击对应的模型直接进行下载,例如我用的是yolov6s.pt,即我下载的YOLOv6-S,每一个模型都有自己的特点,详细介绍在下面。

        YOLOv6 是一种高效的实时目标检测模型,提供了多种预训练权重模型,每个模型都有其特定的特点和应用场景。以下是 YOLOv6 提供的一些常见预训练权重模型及其主要区别:

模型特点和区别:

1.YOLOv6-N (Nano)

(1)特点

  • 推理速度极快,但在精度上有一定牺牲。
  • 极其轻量级的模型,适合资源极度受限的设备。

(2)适用场景:物联网设备、低功耗嵌入式系统等。

(3)权重文件yolov6n.pt

2.YOLOv6-S (Small)

(1) 特点

  • 较小的模型大小,适合资源受限的设备。
  • 推理速度较快,精度较高。

(2) 适用场景

  • 移动设备、嵌入式系统等对模型大小和推理速度有较高要求的场景。

(3) 权重文件yolov6s.pt

3.YOLOv6-M (Medium)

(1) 特点

  • 模型大小介于 Small 和 Large 之间。
  • 精度和速度的平衡较好。

(2) 适用场景

  • 一般用途的目标检测任务,既需要一定的精度又需要较快的推理速度。

(3) 权重文件yolov6m.pt

4.YOLOv6-L (Large)

(1) 特点

  • 较大的模型大小,具有更高的精度。
  • 推理速度相对较慢。

(2) 适用场景

  • 高精度要求的任务,如安全监控、医学影像分析等。

(3) 权重文件yolov6l.pt

5.YOLOv6-N6 (Nano with 1280x1280 input)

(1) 特点

  • 极轻量级模型,但输入分辨率提高到 1280x1280,提高了精度。
  • 推理速度仍然较快。

(2) 适用场景

  • 需要在资源受限设备上获得更高精度的场景。

(3) 权重文件yolov6n6.pt

6.YOLOv6-S6 (Small with 1280x1280 input)

(1) 特点

  • 较小的模型大小,输入分辨率提高到 1280x1280,提高了精度。
  • 推理速度较快。

(2) 适用场景

  • 需要在移动设备上获得更高精度的场景。

(3) 权重文件yolov6s6.pt

7.YOLOv6-M6 (Medium with 1280x1280 input)

(1) 特点

  • 模型大小介于 Small 和 Large 之间,输入分辨率提高到 1280x1280,提高了精度。
  • 精度和速度的平衡较好。

(2) 适用场景

  • 一般用途的目标检测任务,需要更高的精度。

(3) 权重文件yolov6m6.pt

8.YOLOv6-L6 (Large with 1280x1280 input)

(1) 特点

  • 较大的模型大小,输入分辨率提高到 1280x1280,具有最高的精度。
  • 推理速度最慢。

(2) 适用场景

  • 需要最高精度的场景,如科学研究、高精度工业检测等。

(3) 权重文件yolov6l6.pt

选择合适的模型

选择合适的 YOLOv6 模型取决于您的具体需求:

  • 资源限制:如果设备资源有限,选择 Nano 或 Small

  • 精度要求:如果需要高精度,选择 Large 或 L6

  • 速度要求:如果需要快速推理,选择 Nano 或 Small

  • 通用用途:如果需要平衡精度和速度,选择 Medium 或 M6

在YOLOv6目录下新建一个weights文件夹,把下载的权重模型放到该文件夹下:

1.4 环境测试

环境部署准备好之后,执行推理,测试环境是否部署成功。

在YOLOv6目录下运行如下代码:

 python tools/infer.py 
  • 运行截图: 

        可以看到推理结果存放到runs/inference/exp文件夹下的,即进入该文件夹下(/YOLOv6/runs/inference/exp/images/),可以看到如下推理结果,表示环境准备成功,接下来就可以进行模型训练了。 

2、配置文件和数据集准备

2.1 准备数据集

        YOLOv6 支持多种格式的数据集,可以YOLO、COCO、VOC等格式的数据集,本次实验我采用的YOLO格式的数据集,YOLO数据集制作参考:数据标注,参考这篇文章的的“一、数据标注篇”下的“2、数据标注与处理”的“2.1 图像标注部分”,将图片和标注文件,按照如下结构进行放置:

datasets/
├── images/
│   ├── train/
│   │   ├── image1.jpg
│   │   ├── image2.jpg
│   │   └── ...
│   ├── val/
│   │   ├── image1.jpg
│   │   ├── image2.jpg
│   │   └── ...
│   └── test/
│       ├── image1.jpg
│       ├── image2.jpg
│       └── ...
├── labels/
│   ├── train/
│   │   ├── image1.txt
│   │   ├── image2.txt
│   │   └── ...
│   ├── val/
│   │   ├── image1.txt
│   │   ├── image2.txt
│   │   └── ...

2.2 配置文件准备

        我的实验基于牛马的目标检测,故我的数据是牛和马的数据集,因此我的目标检测的类别是2,对应的标签名称为:cow(牛)、马(horse)。

在如下路径下配置文件:/YOLOv6/data/dataset.yaml,配置文件修改如下:

2.3 BUG修改

        YOLOv6模型还是有一个BUG的,不知道是,什么时候可以修复,就是模型训练的时候找不到YOLOv6模型,实验的时候,这一步可以先跳过,直接去训练,如果训练不报这个错误的话就不用管。

        如果训练报错,说找不到什么文件的话,就将下列代码复制到YOLOv6/tools/目录下的train.py的文件里,目的是将YOLOv6 的路径添加到train.py文件中,如下图:

import sys
sys.path.insert(0, '/mnt/workspace/YOLO系列/YOLOv6')

(注意“YOLOv6路径选择自己所放文件的绝对路径,例如我的YOLOv6文件是下载到/mnt/workspace/YOLO系列/路径下的,故我的路径是:/mnt/workspace/YOLO系列/YOLOv6”)

 3、模型训练

3.1 模型训练

环境、依赖、数据集、配置文件等准备好后,接下来就是进行模型训练。

  • 模型训练:
python tools/train.py --batch 32 --epochs 30 --conf configs/yolov6s_finetune.py --data data/dataset.yaml --fuse_ab 
  • 参数详解:

1.--batch 32

  • 说明:设置批量大小(batch size)。
  • 作用:批量大小决定了每次前向传播和反向传播处理的样本数量。较大的批量大小可以利用 GPU 的并行计算能力,但会占用更多的内存。
  • 默认值:通常默认值为 16 或 32,具体取决于硬件配置。

2.--epochs 30

  • 说明:设置训练的轮数(epochs)。
  • 作用:每个 epoch 表示整个训练数据集被遍历一次。增加 epochs 数量可以提高模型的训练效果,但也可能增加过拟合的风险。
  • 默认值:通常默认值为 100 或更高,具体取决于任务的复杂性和数据集的大小。

3.--conf configs/yolov6s_finetune.py

  • 说明:指定配置文件的路径。
  • 作用:配置文件包含模型的架构、优化器设置、学习率调度等重要参数。yolov6s_finetune.py 是一个用于微调的配置文件。
  • 默认值:没有默认值,必须指定。

4.--data data/dataset.yaml

  • 说明:指定数据集配置文件的路径。
  • 作用:数据集配置文件定义了训练、验证和测试数据集的路径以及类别信息。dataset.yaml 文件通常包含图像路径和标签路径。
  • 默认值:没有默认值,必须指定。

5.--fuse_ab

  • 说明:启用融合操作(fuse operation)。
  • 作用:融合操作可以优化模型的性能,特别是在推理阶段。--fuse_ab 参数通常用于优化模型的卷积层。
  • 默认值:通常默认情况下不启用,需要手动添加此参数。

模型训练过程如下:

模型训练完成: 

3.2 训练结果介绍        

        上图可以看出模型训练完成后,将训练的结果存放到runs/train/exp目录下,进入到该目录下,如下: 

该目录下有一个weights权重文件,里面存放的训练好的模型权重:

        在 YOLOv6 模型训练过程中,通常会生成多个权重文件,其中最常见的两个是 best_ckpt.ptlast_ckpt.pt。这两个文件有不同的用途和含义:

(1). best_ckpt.pt

  • 说明:这是在整个训练过程中表现最好的模型权重文件。
  • 选择标准:通常根据验证集上的某个评估指标(如 mAP,即平均精度均值)来选择最佳模型。当某个 epoch 的验证集性能达到最优时,模型的权重会被保存为 best_ckpt.pt
  • 用途:用于最终的模型部署和测试。因为这是在验证集上表现最好的模型,所以通常会选择它作为最终模型。

(2). last_ckpt.pt

  • 说明:这是训练结束时最后一个 epoch 的模型权重文件。
  • 选择标准:无论最后一个 epoch 的验证集性能如何,都会保存这个模型的权重。
  • 用途:用于继续训练或进行进一步的微调。如果训练过程中断,可以使用 last_ckpt.pt 从最后一个 epoch 继续训练。

(3)区别总结

  • 最佳性能 vs 最新状态
    • best_ckpt.pt 是在验证集上表现最好的模型,通常用于最终的模型部署和测试。
    • last_ckpt.pt 是训练结束时的最新模型,通常用于继续训练或微调。

        综上所述,best_ckpt.pt是训练过程中表现最好的模型,故后续的模型评估和模型推理部署都用改模型。

4、模型评估与推理

4.1 模型评估

接下来是用训练好的最佳的权重模型best_ckpt.pt模型进行模型评估:

python tools/eval.py --data data/dataset.yaml --batch 32 --weights ./runs/train/exp1/weights/best_ckpt.pt --task val

参数详解:

(1)--data  data/dataset.yaml

  • 说明:指定数据集配置文件的路径。
  • 作用:数据集配置文件定义了训练、验证和测试数据集的路径以及类别信息。dataset.yaml 文件通常包含图像路径和标签路径。

(2)--batch 32

  • 说明:设置批量大小(batch size)。
  • 作用:批量大小决定了每次前向传播处理的样本数量。较大的批量大小可以利用 GPU 的并行计算能力,但会占用更多的内存。

(3)--weights runs/train/exp1/weights/best_ckpt.pt

  • 说明:指定模型权重文件的路径。
  • 作用:模型权重文件包含训练好的模型参数。在这里,您指定了 best_ckpt.pt 文件,这是在验证集上表现最好的模型权重。

(4)--task val

  • 说明:指定任务类型。
  • 作用val 表示在验证集上进行评估。其他可能的值包括 test(在测试集上进行评估)。

(5)模型评估过程截图示例:

如上图,模型评估后结果存放到runs/val/exp目录下,进入到该目录就可以看到模型评估的结果了。

4.2 模型推理

接下来是模型推理,模型推理如下:

python tools/infer.py  --weights ./runs/train/exp1/weights/best_ckpt.pt --source  ./data/datasets/images/test

参数详解

(1)--weights runs/train/exp1/weights/best_ckpt.pt

  • 说明:指定模型权重文件的路径。
  • 作用:模型权重文件包含训练好的模型参数。在这里,您指定了 best_ckpt.pt 文件,这是在验证集上表现最好的模型权重。

(2)--source data/datasets/images/test

  • 说明:指定输入数据的路径。
  • 作用:输入数据可以是单个图像文件、目录中的多个图像文件或视频文件。在这里,您指定了一个包含测试图像的目录。

 (3)模型推理过程如下:

        模型预测成功后,如上图,预测结果存放到runs/inference/exp目录下,进入该目录,就可以看到预测的结果,预测的结果部分示例如下: 

 

 

;