目标检测之yolov5训练自己数据集(v6.0)(代码片段)

看星星的月儿 看星星的月儿     2023-02-17     729

关键词:

一、源码下载及requirments

源码下载地址:https://github.com/ultralytics/yolov5 (持续更新中)
本人所用环境如下:
pytorch:1.8(因为cuda版本用了pytorch1.8)
cuda:10.1
Python:3.8
官方要求:Python>=3.6.0 并且PyTorch>=1.7,并通过pip安装requirements.txte文件。

$ git clone https://github.com/ultralytics/yolov5
$ cd yolov5
$ pip install -r requirements.txt

二、准备自己的数据集

因为学长已经将数据集和标注好的txt文件直接发给了我,所以如何标注数据集这里就不详细介绍了。
总之就是要把你的图像数据转换成yolo.txt文件的形式,就是把将每个xml标注提取bbox信息为txt格式,文件的每一行作为一个目标的信息,从左到右依次是(class, X_center, Y_center, width, height)。

参考如下:https://github.com/ultralytics/yolov5/wiki/Train-Custom-Data#2-create-labels

在yolov5目录下创建Adata文件夹(名字可以自定义),要注意的是yolov5曾经的版本和最新的不同,最新版本目录结构要求如下,将之前标注好的txt文件和图片划分为训练集和验证集后放到对应目录下:

  • Adata
    • images # 存放图片
      • train # 存放训练集图片
      • val #存放验证集图片
    • labels # 存放图片对应的yolo_txt文件
      • train # 存放训练集标注好的文件
      • val #存放验证集标注好的文件
trainval = random.sample(list_index, num * trainval_percent)

三、配置文件

yolov5是个集成好的目标检测框架,根据自己整理好的数据集来修改其中配置。

1. 数据集的配置

在yolov5目录下的data文件夹下新建一个c.yaml文件(可以自定义命名),用来存放训练集和验证集的划分文件(train和val文件夹的路径),这两个文件夹就是通过我们上述标注和划分得到的,然后是目标的类别数目和具体类别列表,c.yaml内容如下(可以参考官方数据集data/coco128.yaml的格式):

2. 预训练模型的配置

预训练模型主要是先验框和权重文件的配置。

最新版的yolov5会自动使用kmeans算出anchors的取值。如果想要自己生成先验框可使用kmeans算法聚类生成新anchors。

选择一个你需要的模型,在yolov5目录的model文件夹下是模型的配置文件,v6.0版本为我们提供n、s、m、l、x五个版本,模型架构的增大,模型也更为复杂,训练时间也会增大。我这里采用了yolov5m.yaml,只用修改nc为自己的类别数。
如果anchors是重新生成的,也需要修改,根据anchors.txt 中的 Best Anchors 修改。

如下面一个例子:

至此,配置已经定义完成,然后就是训练模型。

三、训练模型

3.1 训练

在train.py中进行如下几个参数的修改:

部分参数解释如下:

  • weights:加载的权重文件的路径(预训练模型的权重文件会在训练前自动下载并加载)
  • cfg:模型配置文件,backbone网络结构等内容
    顺便说一句,我看了一下yolo.py的源码,发现yolov5是把配置模型文件加载进去,然后解析模型的网络结构并构建。(也就是说你可以自己定义backbone,当然如果你有能力你的性能超过它!!!哈哈哈)
  • data:数据集配置文件的路径
  • hyp:超参数文件的路径(后面调参可能会用)
  • epochs:训练总轮次(默认300)
  • batch-size:批次大小(看你自己电脑运行能力)
  • evolve:是否进行超参数进化,默认False
  • device:训练的设备,cpu;0(表示一个gpu设备cuda:0);0,1,2,3(多个gpu设备)

主要用到的参数如上。然后进行训练。

#前台运行
python train.py  --device '0'     # 0号GPU
# 如果上述参数的default都已经输入可以不用带--后缀参数

#后台运行
nohup python -u train.py > log_t.txt 2>&1

根据自己的硬件配置修改参数,训练好的模型会被保存在yolov5目录下的runs/exp/weights/last.pt和best.pt,(多次训练会保存为exp2.3.4等形式),详细训练数据和结果图会保存在runs/exp/文件中,包括confusion_matrix(混合矩阵)、f1-score、设置的超参数等等,可以详细看看来判断模型的表现。

我通过查看log文件发现,yolov5最新版会在训练的最后自动进行验证,所以可以直接通过验证后的模型表现来进行相应的调参。

log文件如下:

3.3 训练可视化

利用tensorboard可视化训练过程,执行下列命令,可以打开tensorboard的相关网站查看即时的训练日志。(图网截屏了,自己体会哈)

tensorboard --logdir=runs

四、模型验证

看了一些博客和教程,发现最新版的yolov5已经没有了test.py,而变成了val.py。

评估模型好坏就是在有标注的测试集或者验证集上进行模型效果的评估,在目标检测中最常使用的评估指标为mAP。

在val.py文件中指定数据集配置文件和训练结果模型,将训练生成的最优权重路径导入模型,进行验证,如下所示:

运行代码和训练一样:

#前台运行
python val.py  --device '0'     # 0号GPU
# 如果上述参数的default都已经输入可以不用带--后缀参数

#后台运行
nohup python -u val.py > log_v.txt 2>&1

调参在data/hyps下的hyp.finetune.yaml或者hyp.scratch.yaml进行超参数调优,可自行选择,hyp.scratch.yaml是针对官方给出的coco数据集最优化的参数。(我这里因为模型在我的数据集上表现的非常好,所以没有进行长时间调参)

五、模型推理

最后,模型在没有标注的数据集上进行推理,在detect.py文件中指定数据图片和模型的路径,其他参数(置信度object confidence threshold、交并比IOU threshold for NMS、save_txt选项用于生成结果的txt标注文件等),如下:

推理完毕后,在runs文件夹下会生成detect文件夹,其中会生成数据集的检测信息以及目标框的置信比。如果不指定save_txt则只会生成结果图像,如果指定了save_txt,每个txt会生成一行一个目标的信息,信息包括(class, xcenter, ycenter, w, h),后面四个为bbox位置,均为归一化数值。

总结

YOLOv5训练自己的数据集整个过程:制作数据集----模型训练----模型验证----模型推理阶段已全部完成。

深度学习目标检测---使用yolov5训练自己的数据集模型(windows系统)(代码片段)

...看一些视频教程和一些前辈的博客,实现了深度学习目标检测--使用yolov5网络训练自己的数据集并实现了对目标的识别。这篇博客我也是参考别人的博客教程,复现了使用yolov5训练自己的数据集,我呢主要是想记录下... 查看详情

深度学习目标检测:yolov5实现车辆检测(含车辆检测数据集+训练代码)(代码片段)

深度学习目标检测:YOLOv5实现车辆检测(含车辆检测数据集+训练代码) 目录YOLOv5实现车辆检测(含车辆检测数据集+训练代码)1.前言2.车辆检测数据集说明(1)车辆检测数据集(2)自定义数据集3.基于YOLOv5... 查看详情

深度学习目标检测:yolov5实现车辆检测(含车辆检测数据集+训练代码)(代码片段)

深度学习目标检测:YOLOv5实现车辆检测(含车辆检测数据集+训练代码) 目录YOLOv5实现车辆检测(含车辆检测数据集+训练代码)1.前言2.车辆检测数据集说明(1)车辆检测数据集(2)自定义数据集3.基于YOLOv5... 查看详情

深度学习训练营之yolov5训练自己的数据集(代码片段)

...ceRTX3070LaptopGPU准备好数据集我这里采用的数据集是经典的目标检测算法当中的一个数据集,这里附上链接:文件提取:链接:https://pan.baidu.com/s/1SuNxOTCgrQlqXWK_cRzCZQ提取码:0909文件夹下内容:划分数据集运行如下命令进行数据集... 查看详情

深度学习目标检测:yolov5实现红绿灯检测(含红绿灯数据集+训练代码)(代码片段)

深度学习目标检测:YOLOv5实现红绿灯检测(含红绿灯数据集+训练代码)1.前言本篇博客,我们将手把手教你搭建一个基于YOLOv5的红绿灯目标检测项目。目前,基于YOLOv5s的红绿灯检测精度平均值mAP_0.5=0.93919,mAP_0... 查看详情

深度学习目标检测:yolov5实现红绿灯检测(含红绿灯数据集+训练代码)(代码片段)

深度学习目标检测:YOLOv5实现红绿灯检测(含红绿灯数据集+训练代码)1.前言本篇博客,我们将手把手教你搭建一个基于YOLOv5的红绿灯目标检测项目。目前,基于YOLOv5s的红绿灯检测精度平均值mAP_0.5=0.93919,mAP_0... 查看详情

用yolov5ds训练自己的数据集——同时检测和分割(代码片段)

...sklr/yolov5ds关于作者:CSDN:MidasKing的博客_CSDN博客-目标检测,python,opencv领域博主GitHub:midasklr(github.com) 参考博文:yolov5ds/READMECH.mdatmain·midasklr/yolov5ds(github.com)​​​​​​Yolov5同时进行目标检测和分割分割_MidasKing... 查看详情

用yolov5ds训练自己的数据集,注意点!

...割_2021黑白灰的博客-CSDN博客_yolov5图像分割Yolov5同时进行目标检测和分割分割_LeeCW2022的博客-CSDN博客_yolov5分割这两篇文章当参考,但是中间的问题多多。    首先,训练参数的设置,按照黑白灰大佬的 查看详情

深度学习和目标检测系列教程17-300:3个类别面罩检测类别数据集训练yolov5s模型(代码片段)

@Author:RunsenYOLO是目前最火爆的的计算机视觉算法之一,今天使用的数据集来源:https://www.kaggle.com/andrewmvd/face-mask-detection这是数据集可以创建一个模型来检测戴口罩、不戴口罩或不正确戴口罩的人。该数据集包含... 查看详情

机器学习笔记-在vehicles数据集上训练yolov5目标检测器(代码片段)

一、yolov5源码下载 https://github.com/ultralytics/yolov5https://github.com/ultralytics/yolov5     下图显示了五种YOLOv5变体,从为在移动和嵌入式设备上运行而构建的最微型YOLOv5nano模型开始,到另一端的YOLOv5XLarge。我们这里将使用基... 查看详情

yolov5详细解读(代码片段)

YOLOV5检测算法详解学习前言本文主要是对基于深度学习的目标检测算法进行细节解读,以YOLOV5为例;基于深度学习的目标检测整体流程基于深度学习的目标检测主要包括训练和测试两个部分。训练阶段训练的目的是利用... 查看详情

yolov5训练coco128数据集和测试与检测(代码片段)

...,起源于微软2014年的MicrosoftCOCO数据集,主要用于目标检测,图像分割,姿态估计等,共有80个类MSCOCO是具有80个类别的大规模数据集,其数据分为三部分:训练、验证和测试,每部分分别包含118287,5... 查看详情

yolov5训练coco128数据集和测试与检测(代码片段)

...,起源于微软2014年的MicrosoftCOCO数据集,主要用于目标检测,图像分割,姿态估计等,共有80个类MSCOCO是具有80个类别的大规模数据集,其数据分为三部分:训练、验证和测试,每部分分别包含118287,5... 查看详情

yolov5训练自己的数据集(缺陷检测分类——看了就懂系列)(代码片段)

这里记录一下将yolov5用于训练自己的数据集,这里v5的github地址Environment本文是直接pipinstall-rrequirement.txt直接安装成功,如果不容易成功,就一个个安装即可。如果出现报错,多关注一下torch的版本即可。Datapreparati... 查看详情

行人检测(人体检测)2:yolov5实现人体检测(含人体检测数据集和训练代码)(代码片段)

行人检测(人体检测)2:YOLOv5实现人体检测(含人体检测数据集和训练代码)目录行人检测(人体检测)2:YOLOv5实现人体检测(含人体检测数据集和训练代码)1.前言2.人体检测数据集说明(1)人体检测数据集(2)... 查看详情

智能驾驶车牌检测和识别《yolov5实现车牌检测(含车牌检测数据集和训练代码)》(代码片段)

智能驾驶车牌检测和识别(二)《YOLOv5实现车牌检测(含车牌检测数据集和训练代码)》目录智能驾驶车牌检测和识别(二)《YOLOv5实现车牌检测(含车牌检测数据集和训练代码)》1.前言2.车牌检... 查看详情

yolov5实现佩戴安全帽检测和识别(含佩戴安全帽数据集+训练代码)(代码片段)

...)1.前言2.佩戴安全帽检测和识别的方法(1)基于目标检测的佩戴安全帽识别方法(2)基于头部检测+佩戴安全帽分类识别方法3.佩戴安全帽数据集说明(1)佩戴 查看详情

手把手教你使用yolov5训练自己的目标检测模型-口罩检测-视频教程(代码片段)

手把手教你使用YOLOV5训练自己的目标检测模型大家好,这里是肆十二(dejahu),好几个月没有更新了,这两天看了一下关注量,突然多了1k多个朋友关注,想必都是大作业系列教程来的小伙伴。既然有... 查看详情