目标检测算法YOLOv5简介

news2024/5/18 15:50:24

      没有关于YOLOv5的直接论文,YOLOv5由Ultralytics维护,源码见:https://github.com/ultralytics/yolov5 ,于2020年6月发布v1.0版本,最新发布版本为v7.0,License为AGPL-3.0.

      以下内容主要来自:

      1. Ultralytics官网:https://docs.ultralytics.com/yolov5/

      2. SF-YOLOv5: A Lightweight Small Object Detection Algorithm Based on Improved Feature Fusion Mode:https://www.mdpi.com/1424-8220/22/15/5817

      YOLOv5在算法设计上延续了YOLO系列的一贯思想:即通过输入层(Input)对待检测图像进行处理,发送到主干网络(Backbone)进行特征提取。主干网络获得不同尺寸的特征图,然后通过特征融合网络(Neck)融合这些特征,最终生成三个特征图P3、P4、P5(在YOLOv5中,维度用80*80, 40*40, 20*20的大小来表示)分别检测图片中的小、中、大目标。将三个特征图发送到预测头(Head)后,使用预设的先验锚点对特征图中的每个像素进行置信度计算和边界框回归,从而获得多维数组(BBoxes)包括目标类别、类别置信度、框坐标、宽度和高度信息。通过设置相应的阈值(confthreshold,objthreshold)过滤数组中的无用信息,并进行非极大值抑制(NMS)处理,即可输出最终的检测信息。将输入图片转换为BBox的过程称为推理过程,后续的阈值和NMS操作称为后处理(post-processing)。后处理不涉及网络结构。YOLOv5的默认推理过程可以用下图表示:

      YOLOv5旨在实时提供高速、高精度的检测结果。YOLOv5基于PyTorch构建YOLOv5模型有五个版本,分别是YOLOv5n、YOLOv5s、YOLOv5m、YOLOv5l和YOLOv5x,如下图所示:YOLOv5x和YOLOv5x6等较大的模型几乎在所有情况下都会产生更好的结果,但参数更多,需要更多CUDA内存来训练,并且运行速度更慢。对于移动部署,我们建议使用YOLOv5s/m,对于云部署,我们建议使用YOLOv5l/x。

      YOLOv5的配置文件不在采用.cfg格式,而是采用.yaml格式,如YOLOv5l:https://github.com/ultralytics/yolov5/blob/master/models/yolov5l.yaml

      一般来说,YOLOv5的网络结构是指Backbone和Neck:

      1.Backbone:YOLOv5的主干网络如下图所示,主要结构是多个CBS(Conv + BatchNorm + SiLU)模块和C3模块的堆叠,最后连接一个SPPF模块。CBS模块用于辅助C3模块进行特征提取,而SPFF模块增强了Backbone的特征表达能力。

      因此,在YOLOv5的主干网络中,最重要的一层是C3模块。C3的基本思想来自CSPNet(跨阶段部分网络)。C3实际上可以看作是CSPNet的具体实现。YOLOv5采用CSPNet的思想构建C3模块,既保证了Backbone具有优秀的特征提取能力,又遏制了Backbone中梯度信息重复(duplication)的问题。

      2.Neck:在Neck,YOLOv5使用了FPN和PAN的方法,如下图所示:FPN的基本思想是对特征提取网络经过多次卷积下采样操作生成的输出特征图(C3、C4和C5)进行上采样,生成多个新的特征图(P3、P4和P5)用于检测不同尺度的目标

      FPN的特征融合路径(feature fusion path)是自上而下的。在此基础上,PAN重新引入了一种新的自下而上的特征融合路径,进一步增强了对不同尺度目标的检测精度。

      YOLOv5 v6.0/6.1各个版本的差异可以通过对比.yaml文件来查看

      1.模型结构:YOLOv5的架构由三个主要部分组成:模型的结构如下图所示:高清图见:https://docs.ultralytics.com/yolov5/tutorials/architecture_description/#1-model-structure

      (1).Backbone:这是网络的主体。对于YOLOv5,主干网络是使用新的CSP-Darknet53结构设计的,该结构是对先前版本中使用的Darknet架构的修改。

      (2).Neck:该部分连接Backbone和Head。在YOLOv5中,使用了SPPF和新的CSP-PAN结构

      (3).Head:这部分负责生成最终的输出。YOLOv5使用YOLOv3 Head来实现此目的。

      与之前的版本相比,YOLOv5引入了一些细微的变化:

      (1).早期版本中的Focus结构已替换为6*6 Conv2d结构。这一变化提高了效率。

      (2).SPP结构被SPPF取代。这种改变使处理速度提高了一倍以上。

      2.数据增强技术:YOLOv5采用各种数据增强技术来提高模型的泛化能力并减少过拟合(overfitting)。这些技术包括:

      (1).Mosaic Augmentation:一种图像处理技术,将四张训练图像组合成一张,鼓励(encourage)目标检测模型更好地处理各种对象尺度和平移。

      (2).Copy-Paste Augmentation:一种创新的(innovative)数据增强方法,可以从图像中复制随机补丁(patches)并将其粘贴到另一个随机选择的图像上,从而有效地生成新的训练样本。

      (3).Random Affine Transformations:包括图像的随机旋转、缩放、平移和剪切。

      (4).MixUp Augmentation:一种通过对两个图像及其相关标签进行线性组合来创建合成图像的方法。

      (5).Albumentations:一个强大的图像增强库,支持多种增强技术。

      (6).HSV Augmentation:随机更改图像的色相、饱和度和明度。

      (7).Random Horizontal Flip:一种随机水平翻转图像的增强方法。

      3.训练策略:YOLOv5应用了多种复杂的训练策略来增强模型的性能。包括:

      (1).Multiscale Training: 在训练过程中,输入图像在原始尺寸的0.5至1.5倍范围内随机重新缩放。

      (2).AutoAnchor:此策略优化先前的锚框,以匹配自定义数据中真实框的统计特征。

      (3).Warmup and Cosine LR Scheduler:一种调整学习率以增强模型性能的方法。

      (4).Exponential Moving Average(EMA):一种使用过去步骤(past steps)的参数平均值来稳定训练过程并减少泛化误差的策略。

      (5).Mixed Precision Training:一种以半精度格式执行运算的方法,可减少内存使用并提高计算速度。

      (6).Hyperparameter Evolution:一种自动调整超参数以实现最佳性能的策略。

      4.额外特性

      (1).Compute Losses:YOLOv5中的损失计算为三个单独损失分量的组合:

      1).Classes Loss(BCE Loss):二元交叉熵损失(Binary Cross-Entropy loss),测量分类任务的误差。

      2).Objectness Loss(BCE Loss):另一种二元交叉熵损失,计算检测目标是否存在于特定网格单元中的误差。

      3).Location Loss(CIoU Loss):完整的IoU损失,测量网格单元内目标定位的误差。

      (2).Balance Losses:三个预测层(P3、P4、P5)的目标性损失的加权不同。平衡权重分别为[4.0, 1.0, 0.4]。这种方法确保不同尺度的预测对总损失有适当的贡献(contribute)。

      (3).Eliminate Grid Sensitivity(消除网格敏感性):与早期版本的YOLO相比,YOLOv5架构对框预测策略做了一些重要的改变。在YOLOv2和YOLOv3中,使用最后一层的激活直接预测框坐标。然而,在YOLOv5中,预测框坐标的公式已被更新,以降低网格敏感性并防止模型预测无界框尺寸。

      (4).Build Targets:YOLOv5中的构建目标过程对于训练效率和模型精度至关重要。它涉及将真实框分配给输出map中适当的网格单元,并将它们与适当的锚框进行匹配。此过程遵循以下步骤:

      1).计算真实框尺寸与每个锚模板尺寸的比率。

      2).如果计算出的比率在阈值内,则将真实框与相应的锚点进行匹配。

      3).将匹配的锚点分配给适当的单元格,请记住,由于修改后的中心点偏移,真实框可以分配给多个锚点。因为中心点偏移范围从(0, 1)调整为(-0.5, 1.5)。GT Box可以分配给更多的anchor。

      这样,构建目标过程可确保在训练过程中正确分配和匹配每个真实目标,从而使YOLOv5能够更有效地学习目标检测任务。

      总之,YOLOv5代表了实时目标检测模型发展的重要一步。通过整合各种新功能、增强功能和训练策略,它在性能和效率上超越了YOLO系列之前的版本。YOLOv5的主要增强功能包括使用动态架构(dynamic architecture)、广泛的数据增强技术、创新的训练策略,以及计算损失和构建目标过程的重要调整。所有这些创新都显着提高了目标检测的准确性和效率,同时保留了YOLO模型的标志----高速度。

      GitHub:https://github.com/fengbingchun/NN_Test

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1641536.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MyScaleDB:SQL+向量驱动大模型和大数据新范式

大模型和 AI 数据库双剑合璧,成为大模型降本增效,大数据真正智能的制胜法宝。 大模型(LLM)的浪潮已经涌动一年多了,尤其是以 GPT-4、Gemini-1.5、Claude-3 等为代表的模型你方唱罢我登场,成为当之无愧的风口…

【R语言数据分析】卡方检验

目录 交叉卡方检验 配对卡方检验 趋势卡方检验 交叉卡方检验 交叉卡方表用于比较组间“率”的差异。适用于分类型变量,被检验的分类变量应该是无序分类变量,分组变量可以是有序分组也可以是无序分组。比如比较两种药物治疗某个疾病的效率,…

Bartender 5 - MacBook菜单栏图标管理软件

当 macOS 桌面图标太多时,既不美观又经常会相互遮盖,非常影响操作。 苹果现在还把「刘海屏」发扬光大,MacBook 的菜单栏是越来越不方便了! 如果你希望 Mac 的菜单栏干净清爽、又方便易用,那「Bartender 5」你一定要试…

第15章 基于规格说明的测试技术

一、概述 (一)依据 《软件需求规格说明书》以及对应的模型或用户需求。 (二)特点 不考虑内部结构和内部特征 (三)测试用例满足的标准 利用黑盒测试技术导出测试用例 (四)测试…

基于 Wireshark 分析 ICMP 协议

一、ICMP 协议 ICMP(Internet Control Message Protocol)即互联网控制报文协议,是TCP/IP协议簇的一个子协议。它主要用于在IP主机、路由器之间传递控制消息,这些消息涉及网络是否通畅、主机是否可达、路由是否可用等关于网络本身…

2024年北京高校后勤餐饮博览会|北京餐饮展览会

高联采高校后勤餐饮博览会 暨第25届北京高校后勤餐饮联合招标采购大会 同期举办:中国北京餐饮供应链博览会 主 题: 因为FOOD校园GOOD / 同创高校大舞台共享精彩高联采 时 间:2024年9月21日-22日 地 点:中国国际展览中心&…

利用大模型提升个性化推荐的异构知识融合方法

在推荐系统中,分析和挖掘用户行为是至关重要的,尤其是在美团外卖这样的平台上,用户行为表现出多样性,包括不同的行为主体(如商家和产品)、内容(如曝光、点击和订单)和场景&#xff0…

【Hadoop】--基于hadoop和hive实现聊天数据统计分析,构建聊天数据分析报表[17]

目录 一、需求分析 1、背景介绍 2、目标 3、需求 4、数据内容 5、建库建表 二、ETL数据清洗 1、数据问题 2、需求 3、实现 4、扩展概念:ETL 三、指标计算 1、指标1:统计今日消息总量 2、指标2:统计每小时消息量、发送量和接收用…

python学习笔记----面向对象(十)

一、什么是类 类是一个抽象的模板,用于创建具体的实例。可以将类理解为一个蓝图,它定义了一系列对象共有的属性(数据)和方法(函数)。类是对一组具有相同属性和功能的对象的抽象。例如,你可以定…

FIFO Generate IP核使用——Native读写接口信号详解

Native FIFO接口信号是用于FIFO IP核与外部电路进行通信的信号。当FIFO支持独立的写和读时钟时,这些信号可以包括标准端口和可选端口。 1 当FIFO具有独立时钟时的接口信号 当FIFO具有独立的时钟时,其接口信号会相应地有所变化。特别是关于复位信号rst…

政安晨:【Keras机器学习示例演绎】(三十二)—— 在 Vision Transformers 中学习标记化

目录 导言 导入 超参数 加载并准备 CIFAR-10 数据集 数据扩增 位置嵌入模块 变压器的 MLP 模块 令牌学习器模块 变换器组 带有 TokenLearner 模块的 ViT 模型 培训实用程序 使用 TokenLearner 培训和评估 ViT 实验结果 参数数量 最终说明 政安晨的个人主页&…

Ubuntu TeamViewer安装与使用

TeamViewer是一款跨平台的专有应用程序,允许用户通过互联网连接从全球任何地方远程连接到工作站、传输文件以及召开在线会议。它适用于多种设备,例如个人电脑、智能手机和平板电脑。 TeamViewer在交通不便或偏远地区使用电脑问题时,将发挥重…

从零开始搭建Springboot项目脚手架1:新建项目

1、技术栈 SpringBoot 3.2.5: 2、 新建项目 使用SpringInitializr 选择Lombok、Configuration Processor、Spring Web,同时IDEA也要安装Lombok插件 删除多余的Maven目录、Maven文件,把HELP.md改成README.md。 当然前提是已经安装好Maven和配…

论文辅助笔记:Tempo之modules/prompt.py

1 get_prompt_param_cls 2 get_prompt_value 3 Prompt 类 3.1 _init_weights 3.2 forward

Windows设置Redis为开机自启动

前言 Redis作为当前最常用的当前缓存技术,基本上Web应用中都有使用。所以,每次我们在本地启动项目前,都必须将Redis服务端启动,否则项目就会启动失败。但是,每次都要去启动Redis就很麻烦,有没有办法做到开…

向量体系结构(5):步幅集中一分散

笔记来源《计算机体系结构 量化研究方法》 回答上一篇最后留下的问题 向量体系结构:向量执行时间-CSDN博客 (1)如何有效向量化多维矩阵运算? (2)向量处理器如何高效处理稀疏矩阵? 步幅 步…

一文了解python机器学习Sklearn

1.3 安装和配置Sklearn 要使用Sklearn库,首先需要安装Python和相应的库。在本教程中,我们将使用Python 3.x版本。可以使用以下命令安装Sklearn库: pip install scikit-learn安装完成后,可以在Python代码中导入Sklearn库&#xf…

WIN10 anaconda 安装 CondaError: Run ‘conda init‘ before ‘conda activate‘

1 下载 https://www.anaconda.com/download/success 2 安装 3 修改环境变量 安装后修改环境变量 4 winrun 进入命令窗口 输入cmd 输入 conda info 5 创建 虚拟环境 conda create -n yolov8 python3.8 -y 6 CondaError: Run ‘conda init’ before ‘conda activate’ c…

架构每日一学 2:架构师六个生存法则之一:架构必须有且仅有一个目标(一)

本文首发于公众号:腐烂的橘子 为什么有的架构活动没有正确的目标? 在每个架构活动启动之前,必须有且仅有一个正确的目标,这是架构设计的起点[1]。何为正确?正确就是要与公司的战略目标相匹配。否则系统会变得复杂和无…

基于Spring Boot的医疗服务系统设计与实现

基于Spring Boot的医疗服务系统设计与实现 开发语言:Java框架:springbootJDK版本:JDK1.8数据库工具:Navicat11开发软件:eclipse/myeclipse/idea 系统部分展示 医疗服务系统首页界面图,公告信息、医疗地图…