目标检测:Yolov5训练自己的数据集(完整版)

利用Yolov5训练自己的数据集,我们主要做以下工作:

一、源码克隆和环境依赖

 (一)源码克隆

       YOLOv5的代码是开源的,因此我们可以从github上克隆其源码。我们利用yolov5.5分支来作为讲解。这里不再详细介绍,将代码下载下来,至此整个项目就已经准备好了。接下来我们准备运行环境。

(二)环境依赖

本教程使用环境:

  • torch: 2.0.0
  • python: 3.8
  • yolov5 v6.0

        这边要想成功运行YOLOv5代码,必须安装必要的依赖库文件。库文件要求,在源码中已经给出,我们按照下面操作执行就可以了。打开requirements.txt这个文件,可以看到里面有很多的依赖库和其对应的版本要求。我们打开pycharm的命令终端,在中输入如下的命令,就可以安装了。

pip install -r requirements.txt -i  https://pypi.tuna.tsinghua.edu.cn/simple

         至此,深度学习的环境和依赖包就都结束了。因为本教程主详细讲解训练自己的数据集,避免篇幅过多,因此这里不详细说明了。

二、模型训练

当我们准备好必要的运行环境、代码和自己的数据集后,接下来就要替换自己的数据集,进行模型训练

(一) 修改配置文件

       预训练模型和数据集都准备好了,就可以开始训练自己的yolov5目标检测模型了,训练目标检测模型需要修改两个yaml文件中的参数。一个是data目录下的相应的yaml文件,一个是model目录文件下的相应的yaml文件。

       修改data目录下的相应的yaml文件。找到目录下的voc.yaml文件。建议都使用绝对路径,不容易出错.
train:是上文所提到的训练train的图片
val:是上文提到的验证集valid的图片
nc:是标签的数目
name:是标签的名字,数字从0开始

88b077255dca45b09f6901f8c023b189.jpeg

(二)修改train.py文件

        主要修改的:
       weights:权重文件路径,看你想使用的yolov5的什么模型有s,l,n,x这样的,选其中一个就行。运行之后会自动下载,如果下载的比较慢,可以自己从网上查找
cfg:存储模型结构的配置文件,一般不用管。如果有报错说这里有错误的话,你就找你用的什么模型,在models文件夹里找到对应的.yaml文件。改一下对应的nc。就是你的标签有多少。

data:存储训练、测试数据的文件。就是上文中提到的修改的.yaml文件
epochs:指的就是训练过程中整个数据集将被迭代(训练)了多少次,显卡不行你就调小点。
workers:线程数。默认是8。

6d9f9005ecb242bb84f4af9be4e6fc58.jpeg

(三)修改detect.py(推理)文件

        等到数据训练好了以后,就会在主目录下产生一个run文件夹,在run/train/exp/weights目录下会产生两个权重文件,一个是最后一轮的权重文件,一个是最好的权重文件,一会我们就要利用这个最好的权重文件来做推理测试。除此以外还会产生一些验证文件的图片等一些文件。

        找到主目录下的detect.py文件,打开该文件。然后找到主函数的入口,这里面有模型的主要参数。模型的主要参数解析如下所示。

f __name__ == '__main__':
"""
--weights:权重的路径地址
--source:测试数据,可以是图片/视频路径,也可以是'0'(电脑自带摄像头),也可以是rtsp等视频流
--output:网络预测之后的图片/视频的保存路径
--img-size:网络输入图片大小
--conf-thres:置信度阈值
--iou-thres:做nms的iou阈值
--device:是用GPU还是CPU做推理
--view-img:是否展示预测之后的图片/视频,默认False
--save-txt:是否将预测的框坐标以txt文件形式保存,默认False
--classes:设置只保留某一部分类别,形如0或者0 2 3
--agnostic-nms:进行nms是否也去除不同类别之间的框,默认False
--augment:推理的时候进行多尺度,翻转等操作(TTA)推理
--update:如果为True,则对所有模型进行strip_optimizer操作,去除pt文件中的优化器等信息,默认为False
--project:推理的结果保存在runs/detect目录下
--name:结果保存的文件夹名称
"""
    parser = argparse.ArgumentParser()
    parser.add_argument('--weights', nargs='+', type=str, default='yolov5s.pt', help='model.pt path(s)')
    parser.add_argument('--source', type=str, default='data/images', help='source')  # file/folder, 0 for webcam
    parser.add_argument('--img-size', type=int, default=640, help='inference size (pixels)')
    parser.add_argument('--conf-thres', type=float, default=0.25, help='object confidence threshold')
    parser.add_argument('--iou-thres', type=float, default=0.45, help='IOU threshold for NMS')
    parser.add_argument('--device', default='', help='cuda device, i.e. 0 or 0,1,2,3 or cpu')
    parser.add_argument('--view-img', action='store_true', help='display results')
    parser.add_argument('--save-txt', action='store_true', help='save results to *.txt')
    parser.add_argument('--save-conf', action='store_true', help='save confidences in --save-txt labels')
    parser.add_argument('--nosave', action='store_true', help='do not save images/videos')
    parser.add_argument('--classes', nargs='+', type=int, help='filter by class: --class 0, or --class 0 2 3')
    parser.add_argument('--agnostic-nms', action='store_true', help='class-agnostic NMS')
    parser.add_argument('--augment', action='store_true', help='augmented inference')
    parser.add_argument('--update', action='store_true', help='update all models')
    parser.add_argument('--project', default='runs/detect', help='save results to project/name')
    parser.add_argument('--name', default='exp', help='save results to project/name')
    parser.add_argument('--exist-ok', action='store_true', help='existing project/name ok, do not increment')
    opt = parser.parse_args()

 这里需要将刚刚训练好的最好的权重传入到推理函数中去。然后就可以对图像视频进行推理了。

parser.add_argument('--weights', nargs='+', type=str, default='runs/train/exp/weights/best.pt', help='model.pt path(s)')

对图片进行测试推理,将如下参数修改成图片的路径,然后运行detect.py就可以进行测试了。

 parser.add_argument('--source', type=str, default='000295.jpg', help='source') 

推理测试结束以后,在run下面会生成一个detect目录,推理结果会保存在exp目录下。如图所示。

图片的推理结果如下所示。效果还是很不错的。

  至此yolov5训练自己的模型就完全搞定了。

三、训练结果讲解

       模型训练结束以后,在run下面会生成一个train目录,推理结果会保存在exp目录下。如图所示。

从上述图片中可以看到的信息是:
我总共训练了200次,共花费3.739个小时。
最新的训练结果是:last.pt,文件位置如图所示,文件大小是27.4MB
最好的训练结果是:best.pt,文件位置如图所示,文件大小是27.4MB
结果保存在runs/train/exp14
打开该文件,如下图所示

40b33d8dac3241c689354a3d4bee9148.jpeg

(一)深入了解文件含义:损失函数、mAP可视化结果

这个图片内有YOLOv5的损失,其中损失分为三种

定位损失box loss: YOLO V5使用 GIOU Loss作为bounding box的损失,Box推测为GIoU损失函数均值,box loss的值越小框的位置越准
置信度损失obj loss: 推测为目标检测loss均值,值越小目标检测的越准
分类损失cls loss: 推测为分类loss均值,值越小预测的类别越准
val/boxloss: 验证集bounding box损失
val/obj loss: 验证集目标检测loss均值
val/cls loss: 验证集分类loss均值,我训练时只有person这一类,所以为0【单类别这个值都是0】
mAP@0.5:0.95: 表示在不同的10U阈值(从0.5到0.95,步长为0.05)(0.5、0.55、0.6、0.65、0.7、0.75、0.8、0.85、0.9、0.95)上的mAP
mAP@0.5: 表示阈值大于0.5的平均mAP

9f542107f3c94b1c99ab7527d8ef98cf.png

(二)影响mAP的因素    

        mAP(Mean Average Precision)是用于评估目标检测模型性能的重要指标之一,它考虑了模型在所有类别上的准确率和召回率的平均值。以下是影响mAP指标的一些重要因素:

1. 目标检测算法的准确性:目标检测算法本身的准确性对mAP指标的影响非常大。准确性包括模型对目标的识别能力和定位能力。

2. 模型的训练数据质量:训练数据的质量直接影响了模型的泛化能力和性能。更丰富、更多样化的训练数据通常可以提高模型的mAP指标。

3. 超参数调优:模型的超参数设置(如学习率、批量大小、优化器等)会影响模型的收敛速度和性能,进而影响mAP指标。

4. 数据增强策略:合适的数据增强策略(如随机裁剪、旋转、缩放等)可以增加训练数据的多样性,有助于提高模型的泛化能力和mAP指标。

5. 先验框(Anchor Boxes)的设置:一些目标检测模型(如YOLO和SSD)使用先验框来预测目标的位置和类别,先验框的设置会影响模型的检测精度和mAP指标。

6. 后处理策略:目标检测模型通常会在预测后进行后处理,如非极大值抑制(NMS)等,以过滤重叠的边界框。后处理策略的设计会影响模型的准确性和mAP指标。

综上所述,mAP指标受到多种因素的影响,包括模型本身的设计、训练数据的质量、超参数设置以及数据增强和后处理策略等。

有需要的同学私信滴滴我哦,绝对物美价廉。

更多项目《》

推荐项目:

1.基于Yolo系列模型的安全帽检测

2.基于Yolov5模型的水果检测(含界面)

3.基于Yolov7模型的火焰检测(含警示提醒)

4.基于Yolov8模型的鱼种类检测

5.基于Yolo模型的鱼种类检测

6.基于目标检测模型的葡萄检查、葡萄叶病虫害检测

7.基于Yolov5模型的课堂环境检测

8.基于Yolo系列模型的肺炎检测

9.基于Yolo系列模型的草莓检测

10.基于Yolo系列模型的玉米植株病虫害检测

11.基于Yolov5+DeepSORT行人、车辆追踪检测

12.基于openpose模型的姿态识别

13.基于Yolo模型的口罩检测

14.基于Yolo模型的疲劳驾驶检测

15.基于Yolo模型的车距、车速检测

16.基于Yolo模型的船舶、交通标志、昆虫检测等

以上仅为常见项目,更多项目和数据集获得请私聊。

2a5a955f59d2427494d3f8febb564a65.jpegc1509f716d7946d98ecb3ff744fae4d3.jpeg57205ce98bfb4c8bb81a02908c037d33.jpeg96af513fe0a443e1b5d31445942c15cf.jpeg06e9cddf4b054102845b7e92ae85ca3a.jpeg

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值