目标检测算法YOLOv5简介

      没有关于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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

STM32的TIM输入捕获和PWMI详解

系列文章目录 STM32单片机系列专栏 C语言术语和结构总结专栏 文章目录 1. IC输入捕获 2. 频率测量 3. 主模式、从模式、触发源选择 4. 输入捕获基本结构 5. PWMI模式 6. 代码示例 6.1 PWM.c 6.2 PWM.h 6.3 IC.c 6.4 IC.h 6.5 完整工程文件 输出比较可以看下面这篇…

ORAN C平面优化

使用section扩展6的C平面优化 在时域和频域中,都可以使用section扩展6进行非连续PRB分配。Section扩展6有两个位掩码:symbolMask和rbgMask。使用symbolMask可以选择一个slot内任意的symbol子集。使用rbgMask可以选择startPrbc和(startPrbc …

Android版本依赖Version catalog

曾经我们使用config.gradle文件进行版本依赖配置,然后在project的build.gradle.kts中使用如下方式引入: apply(from "./config.gradle") 缺点:在project的module中引用无任何提示,无法跳转到指定引用 一、创建versio…

Go-变量

可以理解为一个昵称 以后这个昵称就代指这些信息 var sg string "czy" 声明赋值 package mainimport "fmt"func main() {var sg string "陈政洋"fmt.Println(sg)var age int 73fmt.Println(age)var flag bool truefmt.Println(flag) } …

服务网关GateWay原理

文章目录 自动装配核心类GatewayAutoConfigurationDispatcherHandler请求处理阶段apply方法httpHandler#handle方法WebHandler#handle方法DispatchHanlder#handle方法第一步 getHandler获取请求映射第二步 invokeHandler 请求适配第三步 handleResult请求处理总结 上一篇博文我…

【刷题篇】回溯算法floodfill(七)

文章目录 1、太平洋大西洋水流问题2、扫雷游戏3、衣橱整理 1、太平洋大西洋水流问题 有一个 m n 的矩形岛屿,与 太平洋 和 大西洋 相邻。 “太平洋” 处于大陆的左边界和上边界,而 “大西洋” 处于大陆的右边界和下边界。 这个岛被分割成一个由若干方形…

Python 全栈体系【四阶】(三十九)

第五章 深度学习 八、目标检测 3. 目标检测模型 3.2 YOLO 系列 3.2.4 YOLOv4(2020 年 4 月) YOLOv4 将最近几年 CV 界大量的研究成果集中在一套模型中,从检测速度、精度、定位准确率上有了明显改善(相对于 YOLOv3&#xff0c…

基于Springboot的家具网站

基于SpringbootVue的家具网站设计与实现 开发语言:Java数据库:MySQL技术:SpringbootMybatis工具:IDEA、Maven、Navicat 系统展示 用户登录 首页 商家 家具信息 家居资讯 后台管理 后台首页 用户管理 商家管理 家具类型管理 家具…

ASV1000视频监控平台:通过SDK接入海康网络摄像机IPC

目录 一、为何要通过SDK接入海康网络摄像机 (一)海康网络摄像机的SDK的功能 1、视频采集和显示 2、视频存储 3、视频回放 4、报警事件处理 5、PTZ控制 6、自定义设置 7、扩展功能 (二)通过SDK接入的好处(相对…

JavaEE初阶-多线程易忘点总结

文章目录 1.PCBPID文件描述符表内存指针状态上下文优先级记账信息tgid 2.线程与进程的区别3.sleep和interrupt方法的关系变量终止线程interrupt方法终止线程 4.线程状态5.出现线程不安全的原因线程在系统中是随即调度,抢占式执行的。多个线程修改同一个变量线程针对…

Adobe 更新 Firefly Image 3 图像生成模型

一个工具或者模型,对于初次使用的人来说,易用性和超出预期的效果很能吸引使用者,suno和mj在这方面我感觉确实不错,第一次使用感觉很惊艳。 Adobe 更新 Firefly Image 3 图像生成模型,我用了mj的提示词,最后…

列转行(spark 与presto语法)

一、Presto 语法 原始数据: 期望数据: 代码: SELECT info, value FROM ( select 张三 as name,18 as age,男 as gender,清华 as schoolunion allselect 李四 as name,18 as age,男 as gender,清华 as school ) as a CROSS JOIN UNNEST(…

关于YOLO8学习(六)安卓部署ncnn模型--图片检测

前文 关于YOLO8学习(一)环境搭建,官方检测模型部署到手机 关于YOLO8学习(二)数据集收集,处理 关于YOLO8学习(三)训练自定义的数据集 关于YOLO8学习(四)模型转换为ncnn 关于YOLO8学习(五)安卓部署ncnn模型–视频检测 简介 前文第五章,讲述了部署自定义模型后,进…

Java--方法的使用

1.1什么是方法 方法顾名思义就是解决问题的办法,在程序员写代码的时候,会遇到很多逻辑结构一样,解决相同问题时,每次都写一样的代码,这会使代码看起来比较绒余,代码量也比较多,为了解决这个问题…

分拣机器人也卷的飞起来了

导语 大家好,我是智能仓储物流技术研习社的社长,老K。专注分享智能仓储物流技术、智能制造等内容。 新书《智能物流系统构成与技术实践》 智能制造-话题精读 1、西门子、ABB、汇川:2024中国工业数字化自动化50强 2、完整拆解:智能…

foobar2000 for Mac:卓越音乐播放器

当您在寻找一款音质卓越、功能丰富的音频播放器时,foobar2000 for Mac无疑是您的首选。它拥有简洁明了的界面设计,易于上手,同时支持多种音频格式,让您无需担心兼容性问题。 foobar2000 for Mac v2.6.4免激活版下载 foobar2000 fo…

匹配网络(Matching Networks)和原型网络(Prototypical Networks):区别详解

匹配网络(Matching Networks)和原型网络(Prototypical Networks) 匹配网络与原型网络:区别详解匹配网络(Matching Networks)核心特点:应用场景: 原型网络(Pro…

威尔科克森秩和检验 (Wilcoxon rank-sum test)-- 代码实现

⚠申明: 未经许可,禁止以任何形式转载,若要引用,请标注链接地址。 全文共计3077字,阅读大概需要3分钟 🌈更多学习内容, 欢迎👏关注👀【文末】我的个人微信公众号&#xf…

设计模式之业务代表模式

在编程江湖的风雨中漂泊多年,每当我遇到那些错综复杂的业务逻辑和系统交互,总有一个模式像一位忠诚的骑士,默默守护着我的代码城堡,那就是——业务代表模式(Business Delegate Pattern)。它不是最耀眼的明星…

一键实现在VS Code中绘制流程图

VS Code是一款常用的IDE,受到许多用户的欢迎和喜爱。而其较为出众的一点,就是较好的可拓展性,即丰富的插件应用,这些应用可以极大地提高生产效率,并优化日常使用。 流程图是一种直观的图示方法,可以用简明…