YOLOv5目标检测算法——通俗易懂的解析

article/2025/8/24 17:42:42

目录

  • YOLOv5目标检测算法
    • 前沿
    • 一.网络结构
    • 1.1.Backbone
    • 1.2.Neck
    • 1.3.Head
    • 二.数据增强
      • 2.1.Mosaic
      • 2.2.Copy paste
      • 2.3.Random affine
      • 2.4.Mixup
      • 2.5.Albumentation
      • 2.6.Augment HSV
      • 2.7.Random horizontal flip
    • 三.训练策略
      • 3.1.Multi-scale training
      • 3.2.Auto anchor
      • 3.3.Warmup and Cosine
      • 3.4.EMA
      • 3.5.Mixed presion
      • 3.5.Evolve hype-parameters
    • 四.损失函数

YOLOv5目标检测算法

前沿

  前四篇文章我们讲了下关于YOLOv1YOLOv2YOLOv3YOLOv4的原理,有不懂的小伙伴可以回到前面再看看:

  • YOLOv1目标检测算法——通俗易懂的解析
  • YOLOv2目标检测算法——通俗易懂的解析
  • YOLOv3目标检测算法——通俗易懂的解析
  • YOLOv4目标检测算法——通俗易懂的解析
      这篇文章我们来介绍下YOLOv5算法的理论部分,看下YOLOv5又做了哪些改进。前面重复过好几次了,YOLOv3后面的一系列YOLO算法都是基于YOLOv3的一些小改动,核心还都是YOLOv3算法。YOLOv5也是代码先于论文推出,各位小伙伴们可能会在网上看到不少YOLOv5的版本讲解都会有一些小的不同,并且YOLOv5的官网现在针对YOLOv5也推出了不少版本。在我写这篇博文的时候就已经推出了YOLOv56.2版本了,不过本博文仍然按照6.1的版本,个位小伙伴们看的YOLOv5如果不是6.1版本可能会有些出入的地方,但问题不大。YOLOv5的官方代码地址如下:YOLOv5。
      我们先来看张图,先看下YOLOv5的性能。可以看到速度和mAP都已经很高了。
    在这里插入图片描述
      接下来我们来介绍下YOLOv5。本文主要从YOLOv5的网络结构,数据增强,训练策略,以及损失函数等方面去介绍,其他部分跟前面YOLOv1-v4算法重复的地方不在赘述。

一.网络结构

  下面先放着一张噼里啪啦大佬绘制的YOLOv5(6.1)版本的网络结构图。可以看到跟YOLOv4的整体结构看着还是很相似的,整体上没太大变化。
在这里插入图片描述

1.1.Backbone

改进版的Darknet53

1.2.Neck

SPP换成了SPPFPAN换成了CSP-PAN

1.3.Head

Head仍然是YOLOv3head结构。
注意:
  Focus被换成 6 × 6 6\times6 6×6大小的卷积层,功能相同,只不过 6 × 6 6\times6 6×6卷积效率更高。看下面的图,是不是很熟悉,Focus模块跟YOLOv2里面的Fine-Grained Features很像。
首先将宽高变为原来一半,通道翻倍。

在这里插入图片描述
  下面在看一个SPPF。在讲SPPF之前我们先回顾下SPP,之前讲的SPP是将输入的多个特征层并行的通过大小不同的maxpool2d,然后再跟原是输入的特征concat。但是SPPF是怎么做的呢?SPPF是将输入的特征串行的通过maxpool2d。最后再做concat拼接。你有没有疑问,为什么一定要串行呢,并行为什么没有串行好呢?因为两个 5 × 5 5\times5 5×5大小的maxpool2d串行一块等价于一个 9 × 9 9\times9 9×9maxpool2d。如果是三个 5 × 5 5\times5 5×5maxpool2d串行一块的话就等价于一个 13 × 13 13\times13 13×13maxpool2d。这样的话是不是直接通过串行maxpool2d就可以实现并行maxpool2d实现的功能。是不是提高了效率,降低了计算参数。
在这里插入图片描述
在这里插入图片描述

二.数据增强

  上面介绍了网络结构的部分的改进,下面我们再来介绍下数据增强部分。

2.1.Mosaic

  Mosaic数据增强,这个已经讲烂掉了,不再过多赘述。

2.2.Copy paste

  用一句话概括他,就是把一张图像的目标抠出来粘贴到另一张图像上。需要注意的是数据集必须要有实例分割的标签。

2.3.Random affine

  随机仿射变换,如旋转,平移等。

2.4.Mixup

  简言之就是将两幅图像按照一定的比例混合成一张新的图像。

2.5.Albumentation

  Albumentation是一个比较强大的数据增强库,关于Albumentation更详细的介绍可以参考我的另一篇博文:pytorch结合albumentations在图像分割中的应用。

2.6.Augment HSV

  随机调整色调,饱和度和明度。

2.7.Random horizontal flip

  随机水平翻转。

  上面介绍了一些关于YOLOv5的数据增强的方法,下面我们在来看下YOLOv5使用的一些训练策略。仅仅介绍YOLOv5里面用到的一些典型的训练策略。

三.训练策略

  • Multi-scale training
  • Auto anchor
  • Warmup and Cosine LR scheduler
  • EMA
  • Mixed presion
  • Evolve hype-parameters

3.1.Multi-scale training

  对训练数据集按照 0.5 − 1.5 × 0.5-1.5\times 0.51.5×的不同尺度进行训练,随机取值只取32的整数倍。

3.2.Auto anchor

  重新根据自己的数据集聚类生成相应尺寸的anchor

3.3.Warmup and Cosine

  Warmup表示在训练的初期将学习率从一个比较小的值慢慢生长为我们设置的学习率。Cosine LR scheduler表示以cos的形式慢慢降低学习率。

3.4.EMA

  将学习率加上一个动量

3.5.Mixed presion

  混合精度训练,可以参考apex的使用。

3.5.Evolve hype-parameters

  超参数,大神可以自己炼丹。

  上面讲了数据增强,训练策略,下面我们再来看下YOLOv5的损失函数。

四.损失函数

  YOLOv5的损失函数主要包含三个部分:分类损失,目标损失,定位损失。分类损失和目标损失采用的都是BCE loss,定位损失采用的是CIoU loss。不懂CIoU损失的可以移步到我的另一篇博文:IoU的进化之路。在目标损失里面使用的是obj损失,obj指的是网络预测的目标边界框与GroundCIoU,这里计算所有样本的obj损失。我们之前在讲YOLOv3YOLOv4计算目标损失的时候都是anchor里面是否有目标,有目标就将其设置为1,没目标就将其设置为0YOLOv5里面使用的是CIoU,计算所有样本的obj损失。
L o s s = λ 1 L c l s + λ 2 L o b j + λ 3 L l o c Loss = \lambda_{1}L_{cls}+\lambda_{2}L_{obj}+\lambda_{3}L_{loc} Loss=λ1Lcls+λ2Lobj+λ3Lloc
  下面我们再来看下平衡不同尺度损失,针对三个预测特征层 ( P 3 , P 4 , P 5 ) (P_{3},P_{4},P_{5}) (P3,P4,P5)上的obj损失采用不同的权重,用来预测不同尺寸大小的目标。基本上跟前面讲的损失函数大差不差。
L o b j = 4.0 L o b j s a m l l + 1.0 L o b j m e d i u n + 0.4 L o b j l a r g e L_{obj}=4.0L_{obj}^{samll}+1.0L_{obj}^{mediun}+0.4L_{obj}^{large} Lobj=4.0Lobjsamll+1.0Lobjmediun+0.4Lobjlarge
消除Grid敏感度
  下面我们再来讲下消除Grid敏感度的问题。在YOLOv5里面作者做了两个变化,其中一个我们在YOLOv4里面讲过。不懂的可以跳转到YOLOv4目标检测算法——通俗易懂的解析里面的Eliminate grid sensitiy小节查看。另一个改进是对 b w = p w e t w , b h = p h e t h b_{w}=p_{w}e^{t_{w}},b_{h}=p_{h}e^{t_{h}} bw=pwetw,bh=pheth的改进,将之前的 b w = p w e t w , b h = p h e t h b_{w}=p_{w}e^{t_{w}},b_{h}=p_{h}e^{t_{h}} bw=pwetw,bh=pheth改进为:
b w = p w ( 2 σ ( t w ) ) 2 b h = p h ( 2 σ ( t h ) ) 2 b_{w}=p_{w}(2\sigma(t_{w}))^{2}\\ b_{h}=p_{h}(2\sigma(t_{h}))^{2} bw=pw(2σ(tw))2bh=ph(2σ(th))2
  观察修改之前和修改之后的函数表达式可以刚发现,修改之前的 b w 和 b h b_{w}和b_{h} bwbh是不受限制的,就有可能会出现梯度爆炸的情况,就有可能出现损失为None和训练不稳定的情况。而修改之后的 b w 和 b h b_{w}和b_{h} bwbh则被限制在了(0,4)之间,就不会出现计算损失为None和训练不稳定的情况。

匹配正样本
  下面我们再来讲下匹配正样本的内容。内容基本上跟之前在YOLOv3/v4里面讲的一样,在此我们只讲下不同的地方。不同之处就在于anchor模板和GT进行匹配的过程。在YOLOv4里面是将GT和每个anchor模板的左上角对齐,然后计算IoU,如果IoU大于所设置的阈值,就将GT分配给所对应的模板。但是在YOLOv5里面是先计算GT和每个模板的宽度比值和高度比值。然后再分别计算 r w 和 1 r w r_{w}和\frac{1}{r_{w}} rwrw1的最大值, r h 和 1 r h r_{h}和\frac{1}{r_{h}} rhrh1 r w m a x 和 r h m a x r_{w}^{max}和{r_{h}^{max}} rwmaxrhmax的最大值。公式如下:
r w = w g t / w a t r h = h g t / h a t r w m a x = m a x ( r w , 1 r w ) r h m a x = m a x ( r h , 1 r h ) r m a x = m a x ( r w m a x , r h m a x ) r_{w}=w_{gt}/w_{at}\\ r_{h}=h_{gt}/h_{at}\\ r_{w}^{max}=max(r_{w},\frac{1}{r_{w}})\\ r_{h}^{max}=max(r_{h},\frac{1}{r_{h}})\\ r^{max}=max(r_{w}^{max},r_{h}^{max}) rw=wgt/watrh=hgt/hatrwmax=max(rw,rw1)rhmax=max(rh,rh1)rmax=max(rwmax,rhmax)
其他部分同YOLOv4
  至此,YOLOv1-YOLOv5的理论部分已经完结了,欢迎各位大佬的支持,同时欢迎个位大佬提出批评指正。


http://chatgpt.dhexx.cn/article/8UIXFj8G.shtml

相关文章

目标检测算法(YOLOv3)

目标检测算法(YOLOv3) YOLOv3在YOLOv2的基础上,改良了网络的主干,利用多尺度特征图进行检测,改进了多个独立的Logistic regression分类器来取代softmax来预测类别分类. 论文题目:YOLOv3: An Incremental Improvement 主干网络 YOLOv3提出了新的主干网络: Darknet…

最新目标检测算法回顾2022笔记

目标检测算法回顾2022笔记[附PPT] 总目录篇章1:目标检测的应用与需求篇章2:目标检测的定义与挑战篇章3:目标检测损失函数的进展篇章4:目标检测IOU的发展历程篇章5:目标检测评价指标及数据集[篇章6: 目标检测…

目标检测算法——YOLOV7——详解

1、主要贡献 主要是现有的一些trick的集合以及模块重参化和动态标签分配策略,最终在 5 FPS 到 160 FPS 范围内的速度和准确度都超过了所有已知的目标检测器。 当前目标检测主要的优化方向:更快更强的网络架构;更有效的特征集成方法&#xff1…

3D点云目标检测算法综述

一、概述 在3D点云目标检测领域,对于数据输入的处理一般有三种: 多视角。将三维点云投射到多个二维平面形成图像 体素,voxel,将三维点云切割成多个小块,这些小块就叫体素,类似像素。这是最自然的一种想法…

传统目标检测算法

目标分类:给一张图片,分类 目标检测:给一张图片,找到目标,并用矩形框画出 分类是对一幅图整体,检测是更进一步,找出一幅图中一部分。一般检测以分类为基础, 目标检测就是找出图像中…

目标检测算法基础

人脸检测算法综述 0 前言1 人脸检测算法难点2 人脸检测算法流程2.1 选择检测窗口2.2 提取图像特征2.3 设计分类器2.3.1 AdaBoost2.3.2 SVM分类器2.3.3 决策树与随机森林 3 人脸检测算法3.1 传统的人脸检测算法3.2 深度学习3.2.1 基于候选框的二阶段检测算法3.2.2 直接预测结果框…

目标检测算法回顾之传统算法

传统的目标检测算法 总体回顾基于特征基于分割 一般流程经典算法HarrAdaboost流程Harr特征Adaboost算法 HOG SVM概述方法HOG特征的优缺点 DPMDPM特征DPM流程 DPM vs HOG 总结 说明:本文仅供学习 虽然传统的目标检测方法现在比较少用,但我们认为有必要了…

目标检测算法发展综述

目标检测算法 一、目标检测算法二、目标检测算法存在的问题三、目标检测算法的基本流程四、传统的目标检测算法 1.Viola-Jones(VJ人脸检测算法)2.HOG SVM(行人检测,使用Opencv实现)3.DPM(物体检测&#xf…

目标检测算法研究

1、目标检测基本介绍 1.1、项目结构 1.2、目标检测的算法分类 1.2.1两步走的目标检测:先进行区域推荐、而后进行目标分类 代表算法 :R-CNN、 SPP-net、Fast-R-CNN、Faster R-CNN 1.2.2、端到端的目标检测:采用一种网络一步到位 代表&#x…

目标检测算法分类

目标检测算法分类: 1、两步走的目标检测:先找出候选的一些区域,再对区域进行调整分类 代表:R-CNN、SPP-net、Fast R-CNN、Faster R-CNN 2、端到端的目标检测:采用一个网络一步到位,输入图片,输…

目标检测算法

目标检测算法 一、目标检测算法二、目标检测算法存在的问题三、目标检测算法的基本流程四、传统的目标检测算法1.Viola-Jones(VJ人脸检测算法)2.HOG SVM(行人检测,使用Opencv实现)3.DPM(物体检测&#xff…

目标检测总结:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD

目标检测总结:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD 转自:七月在线实验室 一、目标检测常见算法 object detection,就是在给定的图片中精确找到物体所在位置,并标注出物体的类别。所以,object detection要解…

目标检测算法总结

一、基于候选区域的目标检测器 滑动窗口检测器 根据滑动窗口从图像中剪切图像块,把图像块处理成固定大小。随后输入CNN分类器中,提取特征。最后使用SVM分类器识别种类,并且用线性回归器得到边框。 选择性搜索selective search 首先将每个…

万字长文详解目标检测算法,超大超全(2022最新)

摘要 1 概述 2 目标检测回顾 2.1 two-stage 2.2 one-stage 3 目标检测配方 3.1 基础概念 3.1.1 损失函数 3.1.2 Anchor-based 和 Keypoint-based 3.1.3 NMS 3.2 目标检测中的挑战 4 目标检测中的Head 4.1 ThunderNet 4.2 You Only Look Once(YOLO) 4.3 Single Sh…

常见经典目标检测算法

1、目标检测基本概念 1.1 什么是目标检测 目标检测(Object Dectection)的任务是找出图像中所有感兴趣的目标(物体),确定他们的类别和位置。 1.2 目标检测要解决的核心问题 除图像分类外,目标检测要解决的核心问题是&#xff1a…

目标检测的各种算法总结

这里是引用腾讯云博客文章:一文读懂目标检测:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD 文章目录 一、目标检测常见算法二、传统的目标检测算法2.1 从图像识别的任务说起2.2 物体检测(Object Detection) 三、候选区域/窗 深度…

【NLP】预训练模型——GPT1

背景 废话不多说,先把三篇论文链接放出来:GPT1:Improving Language Understanding by Generative Pre-Training、GPT2:Language Models are Unsupervised Multitask Learners、GPT3:Language Models are Few-Shot Learners。李沐老师也在B站上放了介绍G…

ResNet50修改网络适应灰度图片并加载预训练模型

此博文是修改https://blog.csdn.net/jiacong_wang/article/details/105631229 这位大大的博文而成的,自己根据自己的情况稍微加了点东西 要修改的地方有4处 1.修改网络第一层,把3通道改为1 法一:直接在定义网络的地方修改 self.conv1 nn.…

TD-LTE R8 预编码学习笔记

预编码: MIMO系统中,当发射端通过某种方式获得一定的CSI(瞬时值,短期或中长期统计信息),就能通过一定的预处理方式对各个数据流加载的功率,速率乃至发射方向进行优化,并通过预处理在…

Task2-基于MobileaNet的预训练模型优化

##项目背景 mobilenet_v2_0.75_224 预训练模型是基于224224的训练集图片训练而来,需要通过imagenet 100M数据集把模型训练成适用于448448的预训练模型 ##思考的问题 1、预训练模型怎么使用和导入 2、如何在服务器上训练 3、如何把训练集弄出来 4、如何评价训练效果…