YOLO 算法的自定义数据集制作及模型训练方法(附代码)

本文章主要涉及以下工作:
   (1)详细介绍了怎样制作YOLO的自定义数据集以及如何使用自定义数据集训练YOLO模型。
   (2)对YOLOv5、YOLOv6、YOLOv7、YOLOv8进行了部分修改,能够适配自定义数据集进行训练。
   (3)提供了各YOLO算法的目标检测模型的预训练权重。
   (4)提供了项目的 Python 代码以及相应的使用文档。
如果文章有用,欢迎各位→点赞👏 + 收藏💞 + 留言🔔 😁🌹🌹
项目代码:YOLO-Datasets-And-Training-Methods
如果项目代码有用,请给Github项目star一下,谢谢啦 😁🌹🌹

1. 制作自定义数据集

(1)采集数据

(2)安装并启动标注工具

  • 打开终端,输入以下命令完成标注工具 labelimg 的安装。

    pip install labelimg -i https://pypi.tuna.tsinghua.edu.cn/simple
    
  • 在终端输入 labelimg,启动 labelimg,出现如下所示的界面。

在这里插入图片描述

(3)配置标注工具

  • View 菜单中找到 Auto Save mode,点击 Auto Save mode 将标注过程设置成自动保存模式

在这里插入图片描述

  • 设置数据集格式,选择 PascalVOC

在这里插入图片描述

(4)标注数据

  • 建议YOLO的自定义数据集设置成如下的目录结构。其中 YoloDataSets 为数据集的根目录,images 文件夹内放置待标注的图片,Annotations 文件夹内放置标注工具生成的标签。

    YoloDataSets/
     |——————images/
     |        └——————1.jpg
     |        └——————2.jpg  
     |        └——————3.jpg
     |        └——————...
     |——————Annotations/
     |        └——————1.xml
     |        └——————2.xml  
     |        └——————3.xml
     |        └——————...
    
  • 点击 Open Dir 选择 images 文件夹,打开待标注的图片。

  • 点击 Change Save Dir 选择 Annotations 文件夹,将标签保存在 Annotations 文件夹。

  • 开始标图,详细过程如下。

在这里插入图片描述

(5)将VOC格式数据集转换成YOLO格式数据集

  • 将标注好的数据集按以下结构保存。

    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                    ···                ···             ····                   ['','',···]
    
  • 各参数含义如下。

    • yoloversion : YOLO的版本,这里可供选择 YOLOv5、YOLOv6、YOLOv7、YOLOv8

    • trainval_percent : 训练集和验证集的总占比,即 1-trainval_percent 为测试集占比

    • train_percent : 训练集在训练集和验证集中的占比

    • mainpath : 自定义数据集的根目录

    • classes : 待检测标签的名称,请按照示例以列表的格式填写

2. 训练YOLO算法

(1)YOLOv5的训练方法

  • 在终端输入如下命令,进入 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
    
  • 官方提供的目标检测预训练权重如下。

    Modelsize
    (pixels)
    mAPval
    50-95
    mAPval
    50
    Speed
    CPU b1
    (ms)
    Speed
    V100 b1
    (ms)
    Speed
    V100 b32
    (ms)
    params
    (M)
    FLOPs
    @640 (B)
    YOLOv5n64028.045.7456.30.61.94.5
    YOLOv5s64037.456.8986.40.97.216.5
    YOLOv5m64045.464.12248.21.721.249.0
    YOLOv5l64049.067.343010.12.746.5109.1
    YOLOv5x64050.768.976612.14.886.7205.7
    YOLOv5n6128036.054.41538.12.13.24.6
    YOLOv5m6128051.369.388711.16.835.750.0
    YOLOv5l6128053.771.3178415.810.576.8111.4
    YOLOv5x6
    + [TTA]
    1280
    1536
    55.0
    55.8
    72.7
    72.7
    3136
    -
    26.2
    -
    19.4
    -
    140.7
    -
    209.8
    -

(2)YOLOv6的训练方法

  • 在终端输入如下命令,进入 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               
    
  • 官方提供的目标检测预训练权重如下。

    ModelSizemAPval
    0.5:0.95
    SpeedT4
    trt fp16 b1
    (fps)
    SpeedT4
    trt fp16 b32
    (fps)
    Params
    (M)
    FLOPs
    (G)
    YOLOv6-N64037.577911874.711.4
    YOLOv6-S64045.033948418.545.3
    YOLOv6-M64050.017522634.985.8
    YOLOv6-L64052.89811659.6150.7
    YOLOv6-N6128044.922828110.449.8
    YOLOv6-S6128050.39810841.4198.0
    YOLOv6-M6128055.2475579.6379.5
    YOLOv6-L6128057.22629140.4673.4

(3)YOLOv7的训练方法

  • 在终端输入如下命令,进入 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              
    
  • 官方提供的目标检测预训练权重如下。

    ModelTest SizeAPtestAP50testAP75testbatch 1 fpsbatch 32 average time
    YOLOv764051.4%69.7%55.9%161fps2.8ms
    YOLOv7-X64053.1%71.2%57.8%114fps4.3ms
    YOLOv7-W6128054.9%72.6%60.1%84fps7.6ms
    YOLOv7-E6128056.0%73.5%61.2%56fps12.3ms
    YOLOv7-D6128056.6%74.0%61.8%44fps15.0ms
    YOLOv7-E6E128056.8%74.4%62.1%36fps18.7ms

(4)YOLOv8的训练方法

  • 在终端输入如下命令,进入 yolov8 文件夹。

    cd yolov8
    
  • 将转换后的数据集放在 yolov8 的根目录下。

  • 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']
    
  • 在终端运行如下命令,参数按实际情况进行调整。

    yolo task=detect mode=train model=yolov8n.yaml data=YoloDataSets/data.yaml batch=28 epochs=300 imgsz=640 workers=32 device=0
                                      yolov8s.yaml
                                      yolov8m.yaml
                                      yolov8l.yaml
                                      yolov8x.yaml
    
  • 官方提供的目标检测预训练权重如下。

    Modelsize
    (pixels)
    mAPval
    50-95
    Speed
    CPU ONNX
    (ms)
    Speed
    A100 TensorRT
    (ms)
    params
    (M)
    FLOPs
    (B)
    YOLOv8n64037.380.40.993.28.7
    YOLOv8s64044.9128.41.2011.228.6
    YOLOv8m64050.2234.71.8325.978.9
    YOLOv8l64052.9375.22.3943.7165.2
    YOLOv8x64053.9479.13.5368.2257.8

3. 参考资料

[1] YOLOv5 官方代码 v7.0
[2] YOLOv6 官方代码 v0.3.0
[3] YOLOv7 官方代码 v0.1
[4] YOLOv8 官方代码 v0.0.0

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值