温馨提示:文章内容完整但是过长,由于前后内容有关联,读者学习可以多开几个浏览器分屏有助于定位

目录

目标检测理论部分:

1.目标检测介绍

2.YOLOv5的检测原理

3.目标检测的意义

4.目标检测的应用场景

5.先行知识储备

(1)NMS非极大值抑制

(2)网络爬虫

(3)streamlit

(4)损失函数

(5)各评估指标

(6)开源数据集介绍

(7)深度学习框架的理解

(8)混淆矩阵、mr曲线

(9)标签文件理解

(10)labelimg数据分析

(11)Requirements.txt指导模块

(12)fun-turing

(13)Fusing layers...

(14)F1曲线

6.目标检测相关论文

7.网络结构

目标检测实操部分:

1.GitHub介绍

2.为什么要用官方开源的项目来实现任务而不自己实现?

3.yolov5项目阅读理解(GitHub)

运行脚本参数解析,数据曲线分析,模型分析等

4.任务流程

(0)确定任务

(1)理解原理

(2)选择算法

(3)研究论文

(1)数据采集+数据标注+数据预处理

(2)训练、验证及数据分析

(3)测试、评估

模型转换代码使用

(5)部署

5.本人说明

6.永久源码地址

7.如何修改成自己的项目

(1)数据集文件夹

(2)两个yaml文件

(3)爬虫脚本

(4)批量图片重命名脚本

(5)streamlit命令里的参数

(6)命令行

9.个人心得体会


目标检测理论部分:

1.目标检测介绍(哪些算法,趋势)

目标检测(Object Detection)的任务是找出图像中所有感兴趣的目标(物体),确定它们的类别和位置,是计算机视觉领域的核心问题之一。由于各类物体有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具有挑战性的问题。

什么是物体(物体的定义):
图像(或者视频)中存在的对象,但是能检测哪些物体会受到人为设定限制。
目标检测中能检测出来的物体取决于当前任务(数据集)需要检测的物体有哪些。假设我们的目标检测模型定位是检测动物(例如,牛、羊、猪、狗、猫五种),那么模型对任何一张图片输出结果不会输出鸭子、鹅、人等其他类型结果。

什么是位置(位置的定义):
                目标检测的位置信息一般有2种格式(以图片左上角为原点(0,0)):

极坐标表示:(xmin,ymin,xmax,ymax)
                xmin,ymin:x,y坐标的最小值
                xmax,ymax:x,y坐标的最大值

中心点坐标:(x_center,y_center,w,h)
                x_center,y_center:目标检测框的中心点坐标
                w,h:目标检测框的宽,高

(原文链接:https://blog.csdn.net/AugustMe/article/details/107778518)

例:
        假设一张图片是100*800,所有这些坐标都是构建在像素层面上:


中心点坐标结果为:

计算机视觉中关于图像识别有四大类任务:

(1)分类-Classification:解决“是什么?”的问题,即给定一张图片或一段视频判断里面包含什么类别的目标。

(2)定位-Location:解决“在哪里?”的问题,即定位出这个目标的的位置。

(3)检测-Detection:解决“在哪里?是什么?”的问题,即定位出这个目标的位置并且知道目标物是什么。

(4)分割-Segmentation:分为实例的分割(Instance-level)和场景分割(Scene-level),解决“每一个像素属于哪个目标物或场景”的问题。

所以,目标检测是一个分类、回归问题的叠加。

2.YOLOv5的检测原理

YOLO算法原理讲解(通俗易懂版)_哔哩哔哩_bilibili

3.目标检测的意义

目标检测是计算机视觉领域的一个重要任务,其主要目的是从图像或视频中自动识别和定位出感兴趣的物体。目标检测在很多领域都有着广泛的应用和意义,例如: 自动驾驶:无人驾驶汽车需要快速准确地检测和识别道路上的各种交通标志、车辆、行人等物体信息,以实现智能导航和自主避障。 安防监控:通过对安防摄像头拍摄到的图像进行目标检测,可以及时发现并报警处理异常情况,提高安全性能。 工业制造:利用目标检测技术可以对生产流程中的产品、设备、零部件等进行质量检测和异常监测,提高生产效率。 医学影像:医学图像中包含丰富的信息,通过目标检测技术可以快速准确地定位和识别病变区域,为医生提供更精细的诊断和治疗指导。 无人机巡检:无人机配备目标检测技术可以对建筑、设施、线路等进行智能化巡检和维护,提高效率和安全性。因此,目标检测技术在实际应用中具有重要的意义和价值,可以帮助我们更好地理解场景信息,从而提高生产效率、减少安全风险、改善生活质量等方面发挥作用。    因此,目标检测技术在实际应用中具有重要的意义和价值,可以帮助我们更好地理解场景信息,从而提高生产效率、减少安全风险、改善生活质量等方面发挥作用。

4.目标检测的应用场景

​编辑

5.先行知识储备

(1)NMS非极大值抑制

(2)网络爬虫

(3)streamlit

(4)损失函数

(5)各评估指标

(6)开源数据集介绍

1. PASCAL VOC

VOC数据集是目标检测经常用的一个数据集,自2005年起每年举办一次比赛,最开始只有4类,到2007年扩充为20个类,共有两个常用的版本:2007和2012。学术界常用5k的train/val 2007和16k的train/val 2012作为训练集,test 2007作为测试集,用10k的train/val 2007+test 2007和16k的train/val 2012作为训练集,test2012作为测试集,分别汇报结果。

2. MS COCO

COCO数据集是微软团队发布的一个可以用来图像recognition+segmentation+captioning 数据集,该数据集收集了大量包含常见物体的日常场景图片,并提供像素级的实例标注以更精确地评估检测和分割算法的效果,致力于推动场景理解的研究进展。依托这一数据集,每年举办一次比赛,现已涵盖检测、分割、关键点识别、注释等机器视觉的中心任务,是继ImageNet Challenge以来最有影响力的学术竞赛之一。

相比ImageNet,COCO更加偏好目标与其场景共同出现的图片,即non-iconic images。这样的图片能够反映视觉上的语义,更符合图像理解的任务要求。而相对的iconic images则更适合浅语义的图像分类等任务。

COCO的检测任务共含有80个类,在2014年发布的数据规模分train/val/test分别为80k/40k/40k,学术界较为通用的划分是使用train和35k的val子集作为训练集(trainval35k),使用剩余的val作为测试集(minival),同时向官方的evaluation server提交结果(test-dev)。除此之外,COCO官方也保留一部分test数据作为比赛的评测集。

3. Google Open Image

Open Image是谷歌团队发布的数据集。最新发布的Open Images V4包含190万图像、600个种类,1540万个bounding-box标注,是当前最大的带物体位置标注信息的数据集。这些边界框大部分都是由专业注释人员手动绘制的,确保了它们的准确性和一致性。另外,这些图像是非常多样化的,并且通常包含有多个对象的复杂场景(平均每个图像 8 个)。

4. ImageNet

ImageNet是一个计算机视觉系统识别项目, 是目前世界上图像识别最大的数据库。ImageNet是美国斯坦福的计算机科学家,模拟人类的识别系统建立的。能够从图片识别物体。ImageNet数据集文档详细,有专门的团队维护,使用非常方便,在计算机视觉领域研究论文中应用非常广,几乎成为了目前深度学习图像领域算法性能检验的“标准”数据集。ImageNet数据集有1400多万幅图片,涵盖2万多个类别;其中有超过百万的图片有明确的类别标注和图像中物体位置的标注。

五、常用图像标注工具

(7)深度学习框架的理解

(8)混淆矩阵、mr曲线

(9)标签文件理解

(10)labelimg数据分析

https://download.csdn.net/download/weixin_46412999/87708379

(11)Requirements.txt指导模块

(12)fun-turing

(13)Fusing layers...

(14)F1曲线

横轴是模型对于预测结果的置信度(confidence),纵轴是F1分数的曲线表明在不同的置信度阈值下,模型的分类性能如何。通过分析该曲线,可以选择一个合适的置信度阈值来平衡模型的召回率和精确率,并达到最佳的F1分数。当置信度阈值较高时,模型仅会保留它非常自信的预测结果,这意味着模型会过滤掉一些真实的正例(false negatives),从而导致召回率下降,同时精确率可能会提高。反之,当置信度阈值较低时,模型会更多地接受不太自信的预测结果,包括那些错误的预测结果(false positives),这样精确率就会降低,但召回率可能会提高。因此,对于曲线上的某个点,我们可以根据任务需求选择相应的置信度阈值,以获得较好的F1分数。如果任务需要准确识别所有正例,则应选择较低的置信度阈值;如果任务需要高精度的检测结果,则应选择较高的置信度阈值。

(15)如何链接远程摄像头

https://download.csdn.net/download/weixin_46412999/87708406

6.目标检测论文

目前官方没有发布YOLOv5论文,技术原理参考YOLOv1-4

  1. YOLOv1: "You Only Look Once: Unified, Real-Time Object Detection" 论文链接:https://arxiv.org/abs/1506.02640

  2. YOLOv2: "YOLO9000: Better, Faster, Stronger" 论文链接:https://arxiv.org/abs/1612.08242

  3. YOLOv3: "YOLOv3: An Incremental Improvement" 论文链接:https://arxiv.org/abs/1804.02767

  4. YOLOv4: "YOLOv4: Optimal Speed and Accuracy of Object Detection" 论文链接:https://arxiv.org/abs/2004.10934

7.网络结构

参考链接:

第六篇—YOLOv5网络结构(YOLOv5专题) - 哔哩哔哩

  • BackboneNew CSP-Darknet53
  • NeckSPPFNew CSP-PAN
  • HeadYOLOv3 Head

YOLOv5需要经过Backbone、Neck、Head这三个组成部分是因为:

  1. Backbone:负责提取图像特征,将输入图片转化为高维特征表示。在YOLOv5中使用的是CSPDarknet53作为骨干网络(backbone),其可以有效地提取图像特征。

  2. Neck:负责进一步处理从骨干网络输出的特征,以便于后续的目标检测。在YOLOv5中使用的是FPN(Faster R-CNN)的变体,即PAN(Path Aggregation Network)。

  3. Head:负责生成最终的目标检测结果,包括目标的位置和类别等信息。在YOLOv5中使用的是YOLOv4 head的改进版SPP(Spatial Pyramid Pooling) head。

Backbone骨干网络

Backbone骨干网络主要作用是提取图片的特征,并不断缩小特征图,Backbone包含了CBL模块、Focus模块、CSP模块和SPP模块。

(1)CBL模块

CBL为标准卷积模块,包括普通卷积层Conv、批量归一化层BN和LeakyReLU激活函数层,如下图所示:

(2)Focus模块

Focus模块是对图片进行切片操作,具体操作是在一张图片中每隔一个像素取一个值,类似于邻近下采样,可以得到四张采样图片,四张图片互补,图片内容差不多,但是整体操作没有信息丢失。Focus将图片H*W空间维度的信息转换到了Channel通道维度,H和W均减为原来一半,Channel扩充为原来四倍,然后将新图片经过一次卷积操作,得到没有信息丢失情况下的二倍下采样特征图,切片操作如下图所示:

切片操作

Focus模块如下图所示:

Focus模块

(3)CSP模块

CSP模块包括CSP1_X模块和CSP2_X模块,两者都借鉴了CSPNet网络结构,CSP1_X模块和CSP2_X模块如下图所示:

CSP1_X模块

CSP2_X模块

可见,ResUnit模块的shortcut参数设置为True,就是CSP1_X模块的组件;设置成False,就是CSP2_X模块的组件

(4)SPP模块

SPP(Spatial Pyramid Pooling)模块称为空间金字塔池化模块,通过引入不同的池化核来提取特征图中不同大小目标的特征,SPP模块如下图所示:

Neck颈部结构

Neck颈部结构主要实现浅层图形特征和深层语义特征的融合。在卷积神经网络的浅层,网络提取的是一些像颜色、轮廓、纹理和形状等简单的特征,属于图形特征;随着网络的不断加深,神经网络会将这些特征不断融合、升维,产生新的特征,属于语义特征。总之,图形特征来自卷积神经网络浅层,只是简单的图形,语义信息较少;而语义特征来自卷积神经网络的深层,语义信息丰富,但却缺少局部细节特征信息。Neck包含了自顶向下的FPN模块和自底向上的PAN模块,其中,FPN是自顶向下,将深层的语义特征传递到浅层,增强了语义信息,不过对浅层的定位信息没有传递;PAN是对FPN的补充,在FPN的后面添加了一个自底向上的金字塔结构,将浅层的强定位特征传递到深层,FPN和PAN又被称为“双塔战术”,FPN如下图(a)所示,PAN如下图(b)所示。

YOLOv5的FPN和PAN结构:

YOLOv5的FPN和PAN结构

Head头部结构

YOLOv5输出为255*H*W、255*2H*2W和255*4H*4W三个特征图,尺寸最小的255*H*W负责检测大目标,255*2H*2W负责检测中目标,尺寸最大的255*4H*4W负责检测小目标,通道数255=3*(5+80),其中,3表示3个Anchor,5表示四个位置信息(x,y,w,h)和一个置信度confidence(表示当前网格中可能存在物体的概率),80表示COCO数据集80个类别的概率,具体通道信息的表示如下图所示。

YOLOv5输出255*H*W、255*2H*2W和255*4H*4W三个特征图,每个特征图都有三个Anchor,一共有9个Anchor。其中,尺寸最小的255*H*W因为负责检测大目标,所以对应的Anchor相对较大;尺寸最大的255*4H*4W负责检测小目标,所以对应的Anchor相对较小,YOLOv5中的Anchor如下:

Anchor可视化:

Anchor可视化

目标检测实操部分:

1.GitHub简介

它不仅是个巨大的和世界性的Git仓库托管服务平台,还是团队协作或多人协作开发的好帮手。在这里,你能找到你感兴趣的项目代码仓库,从而解决你学习和工作的需求,另一方面,它还可以让你与世界各地的开发人员协同开发和交流你们所感兴趣的项目!
在这里,不只是GitHub的世界,还是一个追求社会化编程,开源思想的世界,能在从中不断学习和成长!

总的来说,国内外的编程人员将项目编写完后就会公布在平台上,它收集了各种语言各种项目的代码供大家使用和分享。

2.为什么要用官方开源的项目来做目标检测?

使用官方开源项目进行目标检测有以下几个优势:

  1. 高效性:官方开源项目通常经过了大量的测试和优化,并且被广泛应用于实际场景中,因此能够保证高效、稳定地完成任务。

  2. 开发速度快:使用已有的开源项目可以大大缩短开发周期,从而快速实现目标检测功能。

  3. 学习成本低:在使用官方开源项目时,开发人员可以参考其文档、示例代码和社区支持等资源,从而更容易学习和理解相关技术知识。

  4. 社区支持强大:许多官方开源项目都有庞大的社区支持,这意味着开发人员可以获得来自社区的技术支持、问题解答和新功能推介等帮助。

  5. 可扩展性高:官方开源项目通常是模块化设计,以便开发人员可以添加自己的想法和创新。同时,由于是开源项目,也可以通过贡献代码来增强功能和性能。

自己编写的目标检测项目的劣势:

  1. 算法模型:自身精力有限,项目是一个团队合作的过程,特别是一个人编写,而官方开源项目通常会选择性能较好、经过大量验证的算法,或者是其改进版本。其次自身能力有限,官方的项目都是经过科学家,研究员研究出来的,而一般的程序编写者很难达到。

  2. 代码质量:官方开源项目通常由专业的团队或者是社区共同维护,代码质量和功能都经过了严格测试和优化;而自己编写的项目可能存在一些代码逻辑上的错误或者性能瓶颈。

  3. 开发周期:自己编写的项目需要从头开始搭建,并且需要处理各种问题和难点,所需的时间和精力都比较大;而使用官方开源项目可以节省大量的开发时间和精力,缩短开发周期。

  4. 社区支持:官方开源项目通常有着庞大的社区支持,用户可以得到来自社区的技术支持和问题解答等帮助;而自己编写的项目通常不会得到这样的帮助和支持。

因此,使用官方开源项目可以获得更好的算法模型、数据集以及代码质量,并且缩短开发周期,与此相比,使用官方开源项目可以更快、更便捷地实现目标检测,并且具有较高的稳定性和可扩展性。

2.解析YOLOv5的GitHub项目

项目地址:https://github.com/ultralytics/yolov5/tree/v6.2

进入项目,对于YOLOv5,可以发现作者发布了10个版本的项目。项目的使用方法和项目介绍都可以通过作者发布的README.md文件去了解,这也是这个文件的主要功能。README.md文件一般在项目的根目录下,项目路径的其他文件夹下也会存在REAMD.md文件,这就是对项目中一些针对性的功能说明了。

我们以6.2版本为例做出自己的目标检测任务。首先我们能通过网页看到6.2版本的

更新时间是在2022/8/17,整个项目用到的python语言占98.5%。

进入README.md,开始了解并使用项目。

下面我会对每个小节的知识点进行讲解:

 COCO数据集是什么,为什么作者要用它进行YOLOv5训练?

COCO 数据集是一种广泛用于目标检测、分割和关键点检测等计算机视觉任务的大规模数据集,由微软亚洲研究院(Microsoft Research Asia)开发和维护。COCO 数据集收集了各类真实场景下的图像,并为图像中的目标提供了精确的边界框、分割掩码和关键点坐标等注释信息。

COCO 数据集的特点包括:

  1. 规模大:包含超过 330,000 张图像和 2.5 万个类别。
  2. 多样性:包含多种类别的目标,如人、动物、交通工具等,以及多种不同场景和背景下的图像。
  3. 精度高:每个目标都有非常准确的注释,包括边界框、分割掩码和关键点信息。

对于使用 YOLOv5 进行目标检测训练,COCO 数据集是一个非常好的选择。因为 YOLOv5 是一种基于单阶段检测器的目标检测算法,其在训练时需要大量且高质量的标注数据来训练目标检测网络,在这方面 COCO 数据集既具备了大规模数据集的优势,同时又能够提供较为精确的目标注释信息,因此,使用 COCO 数据集进行 YOLOv5 的训练可以获得更好的模型性能和泛化能力。

Install(安装): 

首先我们需要安装虚拟环境,创建时指定python>=3.7,pytorch>=1.7.建议不要太高,太高也会报错,我最开始使用的torch1.13降低到1.7才能使用。关于如何安装环境请看上一篇语义分割安装环境模块详细讲解。

虚拟环境(Virtual Environment)是一种在单个计算机上创建多个独立的 Python 运行环境的技术。虚拟环境允许用户在不同的项目中使用不同版本的 Python 解释器和第三方库,以避免出现版本冲突和依赖问题。虚拟环境实际上是一种完全独立的 Python 运行环境,它与其他虚拟环境和全局 Python 环境相互隔离。在每个虚拟环境中,用户可以安装和使用不同版本的 Python 解释器和第三方库,并且这些库仅在当前环境中可见,不会影响其他虚拟环境或全局环境。进入虚拟环境后,用户可以使用 pip 命令安装所需的 Python 包和库。当用户完成当前项目的开发后,可以通过 deactivate 命令退出虚拟环境。总之,虚拟环境是一种非常有用的技术,它可以帮助 Python 开发者更好地管理和维护项目的依赖关系,以避免出现版本冲突和依赖问题。可以形象的理解为不同房间放不同物品,房间就是虚拟环境,物品就是项目。

git clone https://github.com/ultralytics/yolov5 

Git是一种分布式版本控制系统,用于管理和跟踪软件开发过程中的代码版本和变更历史。Git可以帮助软件团队协同工作,保持代码的稳定性和可靠性,并方便地进行代码回滚、合并和分支等操作。该命令是git命令,是从github网址中下载该项目,一般电脑没有git模块,需要下载。一般也不需要特意下载git,我们通过主界面的右上角绿色的code按钮就能下载源码。

pip install -r requirements.txt  # 安装

改命令是作者将项目所需要的所有环境模块封装到txt文本,我们只需要下载就行。下载前提是进入到该项目的环境中,并且进入到该文件的目录下。

Inference(推理): 

推理即预测,使用训练好所得到的模型对未知数据进行推理预测(test测试集)。有两种推理方法:PyTorch Hub推理和使用detect.py推理。一般使用detect.py,即运行脚本推理。生成的结果保存在./runs/detect下

它们的区别在于:

  1. YOLOv5 PyTorch Hub推理是利用PyTorch Hub提供的模型进行推理,可以直接调用模型进行预测,detect.py则是通过运行源代码自己训练模型并进行推理。

  2. YOLOv5 PyTorch Hub推理不需要安装额外的依赖项或下载模型文件,可以直接在脚本中调用模型进行推理。而detect.py需要先下载模型文件,并安装相应的依赖项才能进行推理。

  3. 在使用YOLOv5 PyTorch Hub推理时,可以使用不同的模型版本(如不同的网络结构、预训练权重等),而detect.py则只能使用当前版本的模型进行推理。

总之,两种方法都是使用YOLOv5模型进行目标检测推理的方式。但是PyTorch Hub推理更加方便快捷,而detect.py则可以更加灵活地控制模型和参数。--source指定参数值,其他参数依次类推。

python detect.py --source 0  # 网络摄像头

参数说明:

  • weights:模型权重文件路径,默认值为'yolov5s.pt'
  • source:输入数据路径,可以是文件、文件夹、URL或glob格式,如果值为0,则表示使用摄像头输入
  • data:数据集配置文件路径,可选,默认值为'coco128.yaml'
  • imgsz:推理时图像的尺寸,用(h, w)表示,默认值为[640]
  • conf-thres:置信度阈值,当检测分数高于此阈值时才认为该目标存在,默认值为0.25
  • iou-thres:非极大值抑制(NMS)的IoU阈值,用于去除重叠较多的检测框,默认值为0.45
  • max-det:每张图像最多允许检测到的目标个数,默认值为1000
  • device:运行设备,可以是CPU或GPU,如果是GPU,则可以指定GPU编号,默认值为空字符串(即自动选择)
  • view-img:是否显示检测结果图像,默认为False
  • save-txt:是否将结果保存为txt文件,默认为False
  • save-conf:是否在保存结果时同时保存置信度,默认为False
  • save-crop:是否保存裁剪的预测框,默认为False
  • nosave:是否不保存图像或视频,默认为False
  • classes:指定需要检测的类别,可以是单个类别编号或多个类别编号,例如--classes 0或--classes 0 2 3
  • agnostic-nms:是否使用无类别NMS(即将所有类别视为同一类别进行NMS),默认为False
  • augment:是否使用数据增强进行推断,默认为False
  • visualize:是否可视化特征地图,默认为False
  • update:是否更新所有模型,默认为False
  • project:保存结果的目录路径,默认为'runs/detect'
  • name:保存结果的文件名,默认为'exp'
  • exist-ok:是否允许覆盖已有的结果文件夹,默认为False
  • line-thickness:绘制边框时的线条粗细,默认为3
  • hide-labels:是否隐藏标签,默认为False
  • hide-conf:是否隐藏置信度,默认为False
  • half:是否使用FP16半精度进行推断,默认为False
  • dnn:是否使用OpenCV DNN进行ONNX模型推断,默认为False

Training(训练): 

python train.py --data coco.yaml --cfg yolov5n.yaml --weights '' --batch-size 128yolov5s                                64yolov5m                                40yolov5l                                24yolov5x                                16

参数说明:

  • weights:初始化权重文件路径,默认值为'yolov5s.pt'。填写空则表示从零开始训练模型
  • cfg:模型配置文件路径,默认为空字符串
  • data:数据集配置文件路径,默认值为'coco128.yaml'
  • hyp:超参数配置文件路径,默认值为'hyp.scratch-low.yaml'
  • epochs:训练轮数,默认值为300
  • batch-size:每个GPU上的批处理大小,默认值为16,-1表示自动调节批处理大小
  • imgsz:训练和验证时的图像尺寸,默认值为640像素
  • rect:是否进行矩形训练,默认为False
  • resume:是否从最近的训练中恢复训练,默认为False
  • nosave:是否只保存最终的检查点文件,默认为False
  • noval:是否只在最后一个epoch进行验证,默认为False
  • noautoanchor:是否禁用自动Anchor,默认为False
  • evolve:是否进行超参数进化,默认为False,如果指定参数,则会进行x代进化
  • bucket:gsutil储存桶名称,默认为空字符串
  • cache:缓存图片方式,可以是"ram"(默认)或"disk",也可以不指定
  • image-weights:是否对图片使用加权选择进行训练,默认为False
  • device:运行设备,可以是CPU或GPU,如果是GPU,则可以指定GPU编号,默认值为空字符串(即自动选择)
  • multi-scale:是否变化图像尺寸+/-50%,默认为False
  • single-cls:将多类别数据视为单类别进行训练,默认为False
  • optimizer:优化器类型,可以是'SGD'、'Adam'或'AdamW'之一,默认为'SGD'
  • sync-bn:是否使用SyncBatchNorm,在DDP模式下可用,默认为False
  • workers:dataloader最大工作线程数,默认为8,在DDP模式下是每个RANK的最大工作线程数。
  • project:保存结果的目录路径,默认为'runs/train'
  • name:保存结果的文件名,默认为'exp'
  • exist-ok:是否允许覆盖已有的结果文件夹,默认为False
  • quad:是否使用四路dataloader,默认为False
  • cos-lr:是否使用cosine lr scheduler,默认为False
  • label-smoothing:标签平滑系数,默认为0.0
  • patience:EarlyStopping的等待轮数(没有改善的轮数),默认为100
  • freeze:冻结层级列表,默认为[0],其中0表示不冻结任何层,10表示冻结骨干网络,[0, 1, 2]表示冻结前三层
  • save-period:每隔x轮保存一次检查点文件(如果小于1则禁用此功能),默认为-1
  • local_rank:DDP参数,不要修改
  • entity:W&B实体名称,默认为None
  • upload_dataset:是否上传数据到W&B,默认为False,如果指定参数,则会上传验证集数据
  • bbox_interval:设置bounding-box图像日志记录间隔,默认为-1
  • artifact_alias:数据集工件版本号默认为"latest"

如果横轴是300,纵轴分别是GIoU、Objectness、Classification、Precision和Recall的四个模型,表示对这四个模型在训练过程中不同指标损失的变化进行了可视化。val GIoU、val Objectness、val Classification、val Precision和val Recall表示在测试集上的指标。以下是每个指标的分析:GIoU:广义交并比(Generalized Intersection over Union),用于计算目标检测中检测框与真实框之间的相似程度。曲线图上的值表示模型使用GIoU作为损失函数的相对训练损失大小。可以通过比较四个模型的GIoU值,判断它们的相对表现和收敛速度,如果一个模型的GIoU值下降较快或者一直徘徊在某个水平,可能需要进一步探索,尝试更改超参数或调整网络结构等。Giou(Generalized Intersection over Union)和IoU(Intersection over Union)都是目标检测任务中常用的衡量检测框和真实框之间相似程度的指标,它们的区别在于计算方式不同。IoU计算两个框的交集面积与并集面积之比;Giou计算两个框的交集面积与并集面积之比,并考虑了外接矩形面积及其对角线长度;Giou除了考虑框的重叠情况,还考虑了框的大小差异。两者的计算方式有所不同,并且Giou在计算时考虑了框的大小差异。在许多目标检测任务中,使用Giou作为损失函数比IoU更有效。Objectness:该指标表示模型对物体存在性的预测准确度。随着训练epoch数的增加,模型应该能够更好地区分图像中存在的物体和背景,并提高对物体存在性的正确预测率。因此,曲线图上Objectness的值应该随着训练epoch数的增加而上升,如果一个模型的Objectness值没有明显提高,则说明该模型可能存在欠拟合问题,可以增加训练数据量或者调整网络结构进行优化。其值越接近1表示模型对图像中存在物体的预测越准确。Objectness从0.060开始下降到0.040,这可能意味着模型在训练过程中对图像中存在物体的预测准确率有所提高。通常情况下,随着训练的进行,模型应该能够更好地区分图像中存在的物体和背景,并提高对物体存在性的正确预测率。因此,如果Objectness的值开始下降,可能是因为模型逐渐学习了如何区分物体和背景。但需要注意的是,如果Objectness持续下降并最终趋于0,则可能意味着模型存在欠拟合问题,无法准确地检测物体。在这种情况下,可以尝试增加训练数据量、调整网络结构等操作来改善模型性能。Classification:该指标表示模型对不同物体类别的分类准确度。曲线图上的值表示模型在训练过程中相对损失大小。通常情况下,随着训练epoch数的增加,模型应该能够更好地区分不同的物体类别,并提高分类准确率。如果一个模型的分类指标停滞不前,则可能需要考虑增加训练数据量或者增加正则化项等操作。Precision和Recall:这两个指标都用于评估模型的检测性能。Precision表示模型对预测为阳性(即存在物体)的图像中真实物体的比例,Recall表示模型成功检测出的正样本数量与总正样本数之比。曲线图上的值表示模型在训练过程中的平均精度(AP)大小。模型的检测性能应该随着训练epoch数的增加而逐渐提升,因此曲线图上的Precision和Recall值应该随着训练epoch数的增加而上升。如果某个模型的Precision和Recall值没有明显提高,则说明该模型可能存在欠拟合问题,可以增加训练数据量或者尝试增加网络宽度等操作。

Tutorials(教程):