第1篇 目标检测概述 —(3)YOLO系列算法

news2024/12/23 11:00:50

前言:Hello大家好,我是小哥谈。YOLO(You Only Look Once)系列算法是一种目标检测算法,主要用于实时物体检测。相较于传统的目标检测算法,YOLO具有更快的检测速度和更高的准确率。YOLO系列算法的核心思想是将目标检测任务转化为一个回归问题,将图像划分为多个网格,并在每个网格中预测出目标的边界框和类别概率。YOLO通过在整个图像上进行单次前向传播,实现了实时检测。本节课就给大家重点介绍下YOLO系列算法,希望大家学习之后能够有所收获!🌈 

 前期回顾:

             第1篇 目标检测概述 —(1)目标检测基础知识

             第1篇 目标检测概述 —(2)目标检测算法介绍

             目录

🚀1.YOLO算法介绍

🚀2.开山之作:YOLOv1

💥💥2.1 简介

💥💥2.2 网络结构

💥💥2.3 实现方法

🚀3.优化改进:YOLOv2

💥💥3.1 简介

💥💥3.2 网络结构

💥💥3.3 训练策略

💥💥3.4 性能表现

🚀4.终局之战:YOLOv3

💥💥4.1 简介

💥💥4.2 网络结构

💥💥4.3 训练策略

💥💥4.4 性能表现

🚀5.大神接棒:YOLOv4

💥💥5.1 简介

💥💥5.2 网络结构

💥💥5.3 训练策略

💥💥5.4 性能表现

🚀6.巅峰之作:YOLOv5

💥💥6.1 简介

💥💥6.2 网络结构

💥💥6.3 训练策略

💥💥6.4 性能表现

🚀7.梅开二度:YOLOv8

💥💥7.1 简介

💥💥7.2 网络结构

💥💥7.3 性能表现

🚀1.YOLO算法介绍

YOLO(You Only Look Once)是一种目标检测算法,由Joseph Redmon等人于2016年提出。它的主要思想是将目标检测问题转化为一个回归问题,通过在图像上预测边界框和类别概率来检测目标。YOLO的主要特点是实时性高。相比于传统的目标检测方法,YOLO将整个图像作为输入,直接在一次前向传递中预测边界框和类别。YOLO的核心思想是将图像分割成网格,并在每个网格上预测边界框和类别。每个边界框由5个元素表示:x、y、w、h和置信度。其中,x和y表示边界框中心的坐标,w和h表示边界框的宽度和高度,置信度表示所检测物体的可信程度。

YOLO的核心网络结构包括特征提取层检测层特征提取层使用卷积神经网络来提取图像特征,而检测层将特征映射到不同尺度的网格,并预测每个网格单元中的边界框和类别概率。YOLO在速度方面具有显著优势,但在小目标检测方面表现较差。🌴

使用YOLO进行目标检测的过程如下:

  1. 将输入图像分割成固定大小的网格。
  2. 对每个网格预测边界框和类别。
  3. 根据预测结果筛选出置信度高的边界框。
  4. 通过非极大值抑制(NMS)去除重叠的边界框,得到最终的检测结果。

YOLO(You Only Look Once)算法相比其他目标检测算法有以下优势:

  1. 实时性能:YOLO算法通过将目标检测任务转化为一个回归问题,将图像分成多个网格,每个网格预测出固定数量的边界框和类别概率。这种设计使得YOLO能够在实时性要求较高的场景中运行,达到较高的检测速度。

  2. 全局信息:YOLO算法在整张图像上进行单次前向传播,同时预测多个目标。这使得它能够捕捉到全局的上下文信息,从而提高了检测的准确性。

  3. 多尺度特征:YOLO算法通过使用多个尺度的特征图来检测不同大小的目标。这种多尺度特征的使用使得算法能够更好地处理不同大小的目标,并且对于小目标的检测效果更好。

  4. 立体感:由于YOLO算法是基于全局的特征来进行目标检测的,因此它在保持目标形状和位置精度的同时,能够给人一种较强的立体感。

YOLO应用领域非常广泛。以下是一些常见的应用领域:

  1. 自动驾驶:YOLO算法可以用于实时检测和跟踪道路上的车辆、行人、交通标志等,为自动驾驶系统提供环境感知能力。

  2. 视频监控:YOLO算法可以用于实时监测视频中的人员、车辆、物体等,用于安防监控、行为分析等领域。

  3. 无人机:YOLO算法可以用于无人机的视觉导航与障碍物避障,帮助无人机识别和追踪目标。

  4. 工业质检:YOLO算法可以用于工业生产线上的产品质检,快速准确地检测产品中的缺陷和问题。

  5. 医疗影像:YOLO算法可以用于医学影像中的肿瘤检测、器官识别等任务,辅助医生进行诊断和治疗。

  6. 物体计数与统计:YOLO算法可以用于统计场景中特定物体的数量,例如人流量统计、车辆流量统计等。

  7. 虚拟现实与增强现实:YOLO算法可以用于虚拟现实和增强现实应用中的物体跟踪、场景理解等。

等等......🍉 🍓 🍑 🍈 🍌 🍐

说明:♨️♨️♨️

YOLO官网:YOLO: Real-Time Object Detection (pjreddie.com)


🚀2.开山之作:YOLOv1

💥💥2.1 简介

在YOLOv1提出之前,R-CNN系列算法在目标检测领域独占鳌头。R-CNN系列算法检测精度高,但是由于其网络结构是双阶段(two-stage)的特点,使得它的检测速度不能满足实时性,饱受诟病。为了打破这一僵局,设计一种速度更快的目标检测算法大势所趋。

2016年,Joseph Redmon、Santosh Divvala、Ross Girshick等人提出了一种单阶段(one-stage)的目标检测网络。它的检测速度非常快,每秒可以处理45帧图片,能够轻松地实现实时运行。由于其速度之快和其使用的特殊方法,作者将其取名为:You Only Look Once(也就是我们常说的YOLO的全称),并将该成果发表在了CVPR 2016上,从而引起了广泛地关注。

YOLO 的核心思想就是把目标检测转变成一个回归问题,利用整张图作为网络的输入,仅仅经过一个神经网络,得到bounding box(边界框) 的位置及其所属的类别。

说明:♨️♨️♨️

论文题目:《You Only Look Once: Unified, Real-Time Object Detection》

论文地址:  https://arxiv.org/abs/1506.02640

💥💥2.2 网络结构

YOLOv1网络借鉴了GoogLeNet分类网络结构,不同的是YOLOv1使用1x1卷积层3x3卷积层替代inception module。如下图所示,整个检测网络包括24个卷积层2个全连接层其中,卷积层用来提取图像特征,全连接层用来预测图像位置和类别概率值。

现在看来,YOLOv1的网路结构非常明晰,是一种传统的one-stage的卷积神经网络:

  • 网络输入:448×448×3的彩色图片。
  • 中间层:由若干卷积层和最大池化层组成,用于提取图片的抽象特征。
  • 全连接层:由两个全连接层组成,用来预测目标的位置和类别概率值。
  • 网络输出:7×7×30的预测结果。

💥💥2.3 实现方法

YOLOv1采用的是“分而治之”的策略,将一张图片平均分成7×7个网格,每个网格分别负责预测中心点落在该网格内的目标。回忆一下,在Faster R-CNN中,是通过一个RPN来获得目标的感兴趣区域,这种方法精度高,但是需要额外再训练一个RPN网络,这无疑增加了训练的负担。在YOLOv1中,通过划分得到了7×7个网格,这49个网格就相当于是目标的感兴趣区域。通过这种方式,我们就不需要再额外设计一个RPN网络,这正是YOLOv1作为单阶段网络的简单快捷之处!🔖

具体实现过程如下:

  1. 将一幅图像分成 S×S个网格(grid cell),如果某个 object 的中心落在这个网格中,则这个网格就负责预测这个object。
  2. 每个网格要预测 B 个bounding box,每个 bounding box 要预测 (x, y, w, h) 和 confidence 共5个值。
  3. 每个网格还要预测一个类别信息,记为 C 个类。
  4. 总的来说,S×S 个网格,每个网格要预测 B个bounding box ,还要预测 C 个类。网络输出就是一个 S × S × (5×B+C) 的张量。在实际过程中,YOLOv1把一张图片划分为了7×7个网格,并且每个网格预测2个Box(Box1和Box2),20个类别。所以实际上,S=7,B=2,C=20。那么网络输出的shape也就是:7×7×30。

说明:♨️♨️♨️

1. 由于输出层为全连接层,因此在检测时,YOLOv1训练模型只支持与训练图像相同的输入分辨率(可以通过reshape的方法把你的照片压缩或扩张成YOLO要求的尺寸)。

2. 虽然每个格子可以预测B个bounding box,但是最终只选择只选择IoU最高的bounding box作为物体检测输出,即每个格子最多只预测出一个物体。


🚀3.优化改进:YOLOv2

💥💥3.1 简介

作者动机:♨️♨️♨️

1.YOLOv1 速度还是不够快,更换了分类的网络结构。

2.YOLOv1 能检测的物体的种类不够多,提出的YOLO9000利用了分类的数据库使得能检测9000种物体。

3.YOLOv1 召回率低,利用了anchor box解决同一个bonding box 只能检测同一类物体的问题。

2017年,作者 Joseph Redmon Ali Farhadi 在 YOLOv1 的基础上,进行了大量改进,提出了 YOLOv2 ,重点解决YOLOv1召回率和定位精度方面的不足。YOLOv2 是一个先进的目标检测算法,比其它的检测器检测速度更快。除此之外,该网络可以适应多种尺寸的图片输入,并且能在检测精度和速度之间进行很好的权衡。相比于YOLOv1是利用全连接层直接预测Bounding Box的坐标,YOLOv2借鉴了Faster R-CNN的思想,引入Anchor机制。利用K-means聚类的方法在训练集中聚类计算出更好的Anchor模板,大大提高了算法的召回率。同时结合图像细粒度特征,将浅层特征与深层特征相连,有助于对小尺寸目标的检测。

YOLOv1和YOLOv2是两个不同版本的目标检测模型。它们之间的区别总结如下:

  1. 网络架构:YOLOv1使用一个单一的卷积神经网络(CNN)来同时预测边界框和类别,而YOLOv2采用了Darknet-19作为主干网络,并在其之上添加了额外的卷积层和特征金字塔网络。

  2. 特征提取:YOLOv1在最后一层使用全连接层来生成预测,而YOLOv2在特征图上进行多尺度预测。这种多尺度预测使得YOLOv2能够更好地捕捉不同尺度的目标。

  3. Anchor Boxes:YOLOv2引入了锚框(anchor boxes)的概念,通过在每个单元格上定义多个先验框,来预测不同尺度和长宽比的目标。这种方法使得YOLOv2能够更好地处理不同形状和大小的目标。

  4. 损失函数:YOLOv1使用平方误差来计算边界框坐标和类别的损失,而YOLOv2采用了适应性权重的交叉熵损失函数,以更好地处理类别不平衡问题。

  5. 训练策略:YOLOv2使用了分步训练策略。首先,使用较大的输入图像进行预训练,然后再用较小的输入图像进行微调。这种策略在提高模型性能的同时,还能提高模型的速度。

说明:♨️♨️♨️

论文题目:《YOLO9000: Better, Faster, Stronger》

论文地址:  https://arxiv.org/abs/1612.08242

💥💥3.2 网络结构

YOLOv2 采用 Darknet-19 作为特征提取网络,其整体结构如下:

这个网络结构的主要优势在于:

  • 没有全连接层,可以输入任意尺寸的图片。
  • 速度快,每2个卷积层之间用了1x1的卷积核来压缩模型。最后没用全链接层, 而是利用了avgpool。速度提升了。
  • 特点:每次pool尺寸减半,通道增加 一倍。

改进后的YOLOv2: Darknet-19,总结如下:

  • 与VGG相似,使用了很多3×3卷积核;并且每一次池化后,下一层的卷积核的通道数 = 池化输出的通道 × 2。
  • 在每一层卷积后,都增加了批量标准化(Batch Normalization)进行预处理。
  • 采用了降维的思想,把1×1的卷积置于3×3之间,用来压缩特征。
  • 在网络最后的输出增加了一个global average pooling层。
  • 整体上采用了19个卷积层,5个池化层。

💥💥3.3 训练策略

YOLOv2的训练策略主要包括以下几个步骤:

  1. 数据准备:首先需要准备训练数据集,包括图像和标注信息。标注信息通常包括物体的类别和边界框的位置。

  2. 网络初始化:使用预训练的卷积网络(如Darknet-19)作为特征提取器,然后添加额外的卷积层和全连接层来预测边界框的位置和类别。

  3. 损失函数:定义损失函数来度量预测和真实标注之间的差异。YOLOv2使用多任务损失函数,包括分类损失、边界框坐标损失和置信度损失。

  4. 训练过程:使用随机梯度下降(SGD)或其他相似的优化算法来最小化损失函数。在每个训练批次中,随机选择一批图像,并通过前向传播计算预测结果。然后使用反向传播更新网络参数。

  5. 数据增强:为了增加训练样本的多样性和鲁棒性,可以采用数据增强技术,如随机缩放、随机裁剪、随机旋转等。

  6. 迭代训练:重复执行步骤4和步骤5,直到达到预定的训练轮数或收敛条件。

  7. 推理阶段:在训练完成后,可以使用训练好的模型对新的图像进行目标检测。

💥💥3.4 性能表现

🍀(1)优点

  • 结果:相对v1 (更快、mAP更高)
  • 正负样本:引入Anchor和使用K-means聚类,提高了Recall。
  • Backbone:DarkNet-19,降低了计算量(更快)。
  • Neck:引入特征融合模块(passthrouch),融合细粒度特征。
  • 检测头:多尺度训练提高模型能力,实现了速度和精度的权衡。
  • 小技巧:引入BN,加速网络收敛;约束输出范围,训练更稳定;

🍀(2)缺点

  • Backbone 可持续优化。
  • Neck 可持续优化。
  • 只是单个检测头,小目标识别还不太好。
  • 损失函数可持续优化

🚀4.终局之战:YOLOv3

💥💥4.1 简介

作者动机:♨️♨️♨️

1.YOLOv2 小目标检测不大好,没做多尺度。

2.YOLOv2 损失函数有问题。

3.YOLOv2 anchorbox 应该每个ground truth只匹配一个先验框。

YOLOv3是一种基于深度学习的目标检测算法,它可以快速而准确地在图像中检测出多个目标。它是由Joseph Redmon和Ali Farhadi在2018年提出的,是YOLO(You Only Look Once)系列算法的第三个版本。YOLOv3算法使用了Darknet-53网络作为其主干网络,并且采用了多尺度预测和多个尺度的边界框来提高检测效果。🌿

与其他目标检测算法相比,YOLOv3具有以下特点:

  1. 快速:YOLOv3可以实现实时的目标检测,在CPU上的速度也相对较快。
  2. 准确:YOLOv3在保持速度的同时,也能保持较高的检测准确率。
  3. 多尺度:YOLOv3在不同的尺度上进行目标检测,可以更好地处理不同大小的目标。
  4. 多尺度边界框:YOLOv3在每个尺度上使用了多个不同大小的边界框,可以更好地适应不同形状的目标。

说明:♨️♨️♨️

论文题目:《YOLOv3: An Incremental Improvement》

论文地址:  https://pjreddie.com/media/files/papers/YOLOv3.pdf

💥💥4.2 网络结构

相比于YOLOv2的骨干网络,YOLOv3 进行了较大的改进。借助残差网络的思想,YOLOv3 将原来的 darknet-19 改进为darknet-53。论文中给出的整体结构如下:

Darknet-53主要由1×1和3×3的卷积层组成,每个卷积层之后包含一个批量归一化层和一个Leaky ReLU,加入这两个部分的目的是为了防止过拟合。卷积层、批量归一化层以及Leaky ReLU共同组成Darknet-53中的基本卷积单元DBL。因为在Darknet-53中共包含53个这样的DBL,所以称其为Darknet-53。

为了更加清晰地了解Darknet-53的网络结构,可以看下面这张图:

为了更好的理解此图,下面我将主要单元进行说明:

  • DBL: 一个卷积层、一个批量归一化层和一个Leaky ReLU组成的基本卷积单元。
  • res unit:输入通过两个DBL后,再与原输入进行add;这是一种常规的残差单元。残差单元的目的是为了让网络可以提取到更深层的特征,同时避免出现梯度消失或爆炸。
  • resn:其中的n表示n个res unit;所以 resn = Zero Padding + DBL + n × res unit 。
  • concat:将Darknet-53的中间层和后面的某一层的上采样进行张量拼接,达到多尺度特征融合的目的。这与残差层的add操作是不一样的,拼接会扩充张量的维度,而add直接相加不会导致张量维度的改变。
  • Y1、Y2、Y3:分别表示YOLOv3三种尺度的输出。

与Darknet-19对比可知,Darknet-53主要做了如下改进:

  • 没有采用最大池化层,转而采用步长为2的卷积层进行下采样。
  • 为了防止过拟合,在每个卷积层之后加入了一个BN层和一个Leaky ReLU。
  • 引入了残差网络的思想,目的是为了让网络可以提取到更深层的特征,同时避免出现梯度消失或爆炸。
  • 将网络的中间层和后面某一层的上采样进行张量拼接,达到多尺度特征融合的目的。

💥💥4.3 训练策略

YOLOv3是一种目标检测算法,它的训练策略通常包括以下几个步骤:

  1. 数据集准备:首先,需要收集并标注用于训练的图像数据集,确保数据集中包含所需目标的多个实例。然后,将标注信息转换为适合YOLOv3的格式,例如Darknet格式。

  2. 模型初始化:使用预训练的Darknet53模型作为初始模型,可以从Darknet官方网站下载预训练权重。这个模型是在大规模图像分类数据集上进行训练的,可以作为YOLOv3的基础模型。

  3. 进行训练:使用标注好的数据集对模型进行训练。训练过程通常分为两个阶段:先冻结部分网络层进行预热训练,然后解冻所有层进行完整训练。在预热训练阶段,可以设置较小的学习率,使得模型可以从预训练权重中继续学习。在完整训练阶段,可以选择较大的学习率来进一步微调模型。

  4. 调整超参数:YOLOv3有一些重要的超参数需要调整,例如学习率、批大小、迭代次数等。这些超参数的选择对模型的性能有很大影响,需要进行实验调整以获得最佳结果。

  5. 目标检测评估:在训练过程中,可以使用验证集对模型进行评估,计算模型在目标检测任务上的精度、召回率等指标。根据评估结果,可以进一步调整训练策略或者模型结构。

💥💥4.4 性能表现

🍀优点:

  • 高速度:YOLOv3相比其他目标检测算法,具有更快的检测速度。它使用了基于全卷积网络的设计,能够实现实时目标检测。
  • 高精度:YOLOv3在保持较快速度的同时,也能够提供较高的检测精度。它使用了多尺度特征融合和多层次预测等策略,提高了检测的准确性。
  • 多类别支持:YOLOv3能够同时检测多个类别的目标,并且支持大量的目标类别。它使用了全局目标信息和多个尺度的特征图进行检测,使得模型对于各种目标具有较好的适应性。

🍀缺点:

  • 相对于一些两步目标检测算法,如Faster R-CNN,YOLOv3在小目标检测上表现相对较差。它在检测小目标时容易出现精度下降的情况。
  • 相对于一些单阶段目标检测算法,如SSD,YOLOv3在定位精度上可能不如其准确。它使用了较粗粒度的划分来进行检测,可能导致目标边界定位不够准确。
  • YOLOv3的网络结构比较复杂,参数量较大,需要较高的计算资源和显存。这使得在一些资源受限的设备上难以实时应用。

🚀5.大神接棒:YOLOv4

💥💥5.1 简介

2020年,YOLO系列的作者Redmon在推特上发表声明,出于道德方面的考虑,从此退出CV界。听到此消息的我,为之震惊!本以为YOLOv3已经是YOLO系列的最终版本。没想到就在今年,Alexey Bochkovskiy等人与Redmon取得联系,正式将他们的研究命名为YOLOv4。

YOLOv4对深度学习中一些常用Tricks进行了大量的测试,最终选择了这些有用的Tricks:WRC、CSP、CmBN、SAT、 Mish activation、Mosaic data augmentation、CmBN、DropBlock regularization 和 CIoU loss。

YOLOv4在传统的YOLO基础上,加入了这些实用的技巧,实现了检测速度和精度的最佳权衡。实验表明,在Tesla V100上,对MS COCO数据集的实时检测速度达到65 FPS,精度达到43.5%AP。

YOLOv4的独到之处在于:

  • 是一个高效而强大的目标检测网咯。它使我们每个人都可以使用 GTX 1080Ti 或 2080Ti 的GPU来训练一个超快速和精确的目标检测器。这对于买不起高性能显卡的我们来说,简直是个福音!
  • 在论文中,验证了大量先进的技巧对目标检测性能的影响,真的是非常良心!
  • 对当前先进的目标检测方法进行了改进,使之更有效,并且更适合在单GPU上训练;这些改进包括CBN、PAN、SAM等。

说明:♨️♨️♨️

论文题目:《YOLOv4: Optimal Speed and Accuracy of Object Detection》

论文地址:  https://arxiv.org/abs/2004.10934

💥💥5.2 网络结构

最简单清晰的表示: YOLOv4 = CSPDarknet53(主干) + SPP附加模块(颈) + PANet路径聚合(颈) + YOLOv3(头部)

YOLOv4在原来的YOLO目标检测架构的基础上,采用了很多优化策略,在数据处理、主干网络、网络训练、激活函数、损失函数等方面都有不同程度的优化。

YOLOv4网络结构图如下所示:

YOLOv4的网络结构如上所示,可以看出,它是在YOLOv3的主干网络Darknet-53的基础上增加了backbone结构,其中包含了5个CSP模块,可以有效增强网络的学习能力,降低成本。同时增加了Droblock,缓解过拟合现象。此外很重要的一点是,使用了Mish激活函数,根据实验,这种激活函数可以增加精度。

YOLOv4中的Neck结构主要采用了SPP模块,FPN+PAN的方式,SPP模块指的是用不同尺度的最大池化方式连接不同尺寸的特征图,可以显著分离上下文的特征,此外FPN和PAN起到了特征聚合的作用。输入部分采用了Mosaic数据增强,随机采用四张图片随即缩放后随机凭借,丰富了数据集,增强了模型的鲁棒性。预测部份采用了CIOU_Loss替换了IOU_Loss,DIOU_nms替换了nms,充分考虑了边框不重合,中心点距离,以及边框宽高比的问题。🌱

💥💥5.3 训练策略

YOLOv4是一种广泛使用的目标检测算法,其训练策略可以分为以下几个步骤:

  1. 数据集准备:首先,需要准备一个包含目标物体的标注数据集。数据集应包含图像以及每个图像中物体的边界框和类别标签。

  2. 数据增强:为了增加数据集的多样性和泛化能力,可以使用数据增强技术对图像进行变换,如旋转、缩放、裁剪、翻转等。

  3. 模型选择:选择合适的模型架构作为YOLOv4的基础网络。YOLOv4通常使用Darknet作为基础网络,该网络可以在训练过程中学习到目标物体的特征。

  4. 损失函数:定义目标检测任务的损失函数。YOLOv4使用一种称为YOLO Loss的损失函数,该损失函数综合考虑了边界框的位置误差、类别预测误差和置信度误差。

  5. 训练策略:使用标注数据集进行模型训练。通常采用随机梯度下降(SGD)或者Adam优化器来最小化损失函数。训练过程中,可以采用分批次(mini-batch)的方式进行训练,以提高训练效率。

  6. 学习率调度:为了提高模型的收敛速度和泛化能力,可以使用学习率调度策略。常见的策略有学习率衰减、学习率余弦退火等。

  7. 模型评估:在训练过程中,可以定期对模型进行评估,以了解其在验证集上的性能。常用的指标包括精确度、召回率、平均精确度均值(mAP)等。

  8. 推理和后处理:在模型训练完成后,可以使用训练好的模型进行推理。推理过程包括图像预处理、模型前向计算、边界框后处理等步骤。

💥💥5.4 性能表现

🍀优点:

  • 高速度:YOLOv4采用了一种基于单阶段检测的方法,通过将目标检测与边界框回归和分类任务合并,使得整个检测过程非常高效。在GPU上实现时,YOLOv4可以实时处理视频流。
  • 高精度:YOLOv4在保持高速度的同时,通过引入一系列改进措施,如多尺度训练、数据增强和更强大的骨干网络等,提高了检测算法的精度。相比于之前的版本,YOLOv4在目标检测的准确率上有较大幅度的提升。
  • 多功能性:YOLOv4具备实时检测多种不同类别的目标能力。它可以应用于多个领域,包括安防监控、自动驾驶、智能家居等。而且它是一种端到端的检测算法,不需要额外的后处理步骤。

🍀缺点:

  • 较大的模型尺寸:YOLOv4相比于之前的版本,在网络结构和参数规模上有所增加,导致模型尺寸较大。这会对存储和计算资源造成一定的压力。
  • 相对较高的错误率:尽管YOLOv4在精度上有所提升,但相比于一些两阶段的目标检测算法,如Faster R-CNN和Mask R-CNN,在特别复杂或密集的场景下,YOLOv4可能会有一些漏检和误检的情况

🚀6.巅峰之作:YOLOv5

💥💥6.1 简介

关于YOLOv5的详细介绍,请参考我的专栏:《YOLOv5:从入门到实战》

YOLOv5是一个在COCO数据集上预训练的物体检测架构和模型系列,它代表了Ultralytics对未来视觉AI方法的开源研究,其中包含了经过数千小时的研究和开发而形成的经验教训和最佳实践。YOLOv5是YOLO系列的一个延申,您也可以看作是基于YOLOv3、YOLOv4的改进作品。YOLOv5没有相应的论文说明,但是作者在Github上积极地开放源代码,通过对源码分析,我们也能很快地了解YOLOv5的网络架构和工作原理。

说明:♨️♨️♨️

代码地址:mirrors / ultralytics / yolov5 · GitCode

💥💥6.2 网络结构

YOLOv5官方代码中,一共给出了5个版本,分别是 YOLOv5n、YOLOv5s、YOLOv5m、YOLOv5l、YOLO5x 五个模型。这些不同的变体使得YOLOv5能很好的在精度和速度中权衡,方便用户选择。本文中,我们以较为常用的YOLOv5s进行介绍,下面是YOLOv5s的整体网络结构示意图:

5.0版本:

6.0版本:

💥💥6.3 训练策略

YOLOv5的训练策略如下:

  1. 数据准备:首先需要准备标注好的训练集,包括图像和对应的标签。标签应包含物体的类别和边界框信息。

  2. 数据增强:为了增加模型的泛化能力,可以对训练集进行数据增强操作,如随机裁剪、旋转、缩放、翻转等。

  3. 模型选择:根据任务需求和硬件条件选择合适的YOLOv5模型,如YOLOv5s、YOLOv5m、YOLOv5l或YOLOv5x。

  4. 模型初始化:将选择好的YOLOv5模型加载到训练环境中进行初始化。

  5. 损失函数:使用适当的损失函数来定义模型的训练目标,常用的损失函数有交叉熵损失和均方差损失。

  6. 学习率策略:采用适当的学习率策略来优化模型的性能,如使用学习率衰减、余弦退火等方法。

  7. 训练过程:将准备好的数据送入模型进行训练,通过反向传播更新模型参数,不断迭代优化模型。

  8. 模型评估:使用验证集或测试集评估训练好的模型性能,包括准确率、召回率、mAP等指标。

  9. 模型调优:根据评估结果,可以调整超参数、数据增强方法等,进一步提升模型的性能。

  10. 模型应用:在完成训练并满足要求后,可以将训练好的模型用于目标检测任务。

💥💥6.4 性能表现

🍀优点:

  • 高速度:YOLOv5相对于以往的版本在速度方面有了明显的提升,能够实时地进行目标检测,适用于对实时性要求较高的应用场景。
  • 高精度:YOLOv5在准确度方面也有所提升,能够更好地识别和定位目标物体,对小目标的检测效果也较好。
  • 简单易用:YOLOv5的网络结构相对较简单,易于理解和实现。并且提供了多种预训练模型和预训练权重,方便进行迁移学习任务。
  • 可扩展性:YOLOv5提供了多种不同大小的模型,可以根据具体需求选择适合的模型,并且支持自定义数据集进行训练。

🍀缺点:

  • 对小目标不敏感:虽然相对于以往的版本有所改进,但是YOLO5在处理小目标的能力仍有限,对于小尺寸的目标可能会有一定的漏检和误检。
  • 难以处理重叠目标:当图像中存在大量重叠的目标时,YOLOv5容易出现目标重复检测的问题,导致输出结果不准确。
  • 对目标形状变化敏感度较高:YOLOv5对于目标形状的变化较为敏感,当目标出现变形或者遮挡时,可能会影响检测的准确性。

🚀7.梅开二度:YOLOv8

💥💥7.1 简介

YOLOv8是YOLO(You Only Look Once)目标检测算法的其中一个版本。它的起源可以追溯到YOLO的初版YOLOv1,由Joseph Redmon等人提出。YOLOv1使用了一个单独的神经网络来同时预测目标的类别和边界框,将目标检测任务转化为一个回归问题。随后,YOLOv2和YOLOv3相继推出,对YOLOv1进行了改进。YOLOv2采用了一种称为Darknet-19的卷积神经网络作为主干网络,并引入了一些技术来提升检测精度和速度。而YOLOv3则进一步改进了网络结构和训练策略,引入了多尺度预测和特征融合等技术,进一步提升了检测性能。随后,YOLOv4在2020年发布,是YOLO系列中的一次重大更新。YOLOv4在网络结构和训练策略上进行了大量改进,引入了一些新的技术和模块,如CSPDarknet53、SAM、PAN、YOLOv3-tiny等,这些改进使得YOLOv4在检测性能上有了显著提升。基于YOLOv4,Alexey Bochkovskiy等人在2021年提出了YOLOv5,并进行了一些细化和改进。YOLOv5在网络结构和训练策略上进行了一定的优化,提升了检测精度,并引入了自动混合精度训练等技术

YOLOv8 与YOLOv5出自同一个团队,是一款前沿、最先进(SOTA)的模型,基于先前 YOLOv5版本的成功,引入了新功能和改进,进一步提升性能和灵活性。YOLOv8 设计快速、准确且易于使用,使其成为各种物体检测与跟踪、实例分割、图像分类和姿态估计任务的绝佳选择。

YOLOv8的主要特点包括:

  1. 支持多尺度检测:YOLOv8在多个不同的尺度上进行检测,从而能够有效地检测不同大小的目标。
  2. 网络结构改进:YOLOv8采用了更深的骨干网络,如Darknet-53,以提高模型的表达能力和检测精度。
  3. 激活函数改进:YOLOv8使用了Leaky ReLU激活函数,以增加模型对小目标的检测敏感性。
  4. 数据增强策略:YOLOv8引入了一系列数据增强策略,如随机缩放、随机裁剪和颜色抖动,以增强模型的泛化能力。

说明:♨️♨️♨️

代码实现:mirrors / ultralytics / ultralytics · GitCode

权重链接:Releases · ultralytics/assets · GitHub

文档教程:Home - Ultralytics YOLOv8 Docs

💥💥7.2 网络结构

YOLOv8的网络结构图如下所示:

YOLOv8的具体改进如下:

  • Backbone:使用的依旧是CSP的思想,不过YOLOv5中的C3模块被替换成了C2f模块,实现了进一步的轻量化,同时YOLOv8依旧使用了YOLOv5等架构中使用的SPPF模块;
  • PAN-FPN:YOLOv8依旧使用了PAN的思想,不过通过对比YOLOv5与YOLOv8的结构图可以看到,YOLOv8将YOLOv5中PAN-FPN上采样阶段中的CBS 1*1的卷积结构删除了,同时也将C3模块替换为了C2f模块;
  • Decoupled-Head:YOLOv8使用了Decoupled-Head;即通过两个头分别输出cls与reg的输出;
  • Anchor-Free:YOLOv8抛弃了以往的Anchor-Base,使用了Anchor-Free的思想;
  • Loss:YOLOv8使用VFL Loss作为分类损失(实际训练中并未使用),使用DFL Loss+CIOU Loss作为分类损失;
  • label assignmet:YOLOv8抛弃了以往的IoU匹配或者单边比例的分配方式,而是使用了Task-Aligned Assigner匹配方式。

💥💥7.3 性能表现

🍀优点:

  • 高速:YOLOv8是一种实时目标检测算法,具有很快的检测速度,可以在实时场景下进行快速准确的目标检测。
  • 精度较高:YOLOv8采用了一系列改进的设计,包括使用更深的网络结构、更多的卷积层等,使得模型在目标检测任务上有更高的准确率。
  • 多尺度检测:YOLOv8引入了多尺度检测的机制,可以在不同尺度下对目标进行检测,提升了模型对小目标和大目标的检测能力。
  • 强大的通用性:YOLOv8可以用于各种不同类型的目标检测任务,包括人体检测、车辆检测等。

🍀缺点:

  • 模型较大:由于采用了更深的网络结构,YOLOv8相对于之前的版本有更大的模型体积,需要更多的计算资源进行训练和推理。
  • 对小目标的检测效果较差:尽管YOLOv8引入了多尺度检测机制,但对于小目标的检测效果仍然有待改进,相比于其他一些目标检测算法,YOLOv8在小目标上的表现相对较差。

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

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

相关文章

织梦CMS采集插件-DEDE插件大全

在如今充满信息爆炸的互联网时代,维护一个具有吸引力和活力的网站或博客是一项具有挑战性的任务。对于那些使用织梦CMS建立网站的用户来说,如何持续不断地更新内容以吸引访问者成为了一个突出的问题。 什么是织梦CMS自动采集插件?这些插件是为…

【数据结构】【C++】哈希表的模拟实现(哈希桶)

【数据结构】&&【C】哈希表的模拟实现(哈希桶) 一.哈希桶概念二.哈希桶模拟实现①.哈希结点的定义②.数据类型适配③.哈希表的插入④.哈希表的查找⑤.哈希表的删除⑥.哈希表的析构 三.完整代码 一.哈希桶概念 哈希桶这种形式的方法本质上是开散列法&#x…

常用压缩解压缩命令

在Linux中常见的压缩格式有.zip、.rar、.tar.gz.、tar.bz2等压缩格式。不同的压缩格式需要用不同的压缩命令和工具。须知,在Linux系统中.tar.gz为标准格式的压缩和解压缩格式,因此本文也会着重讲解tar.gz格式压缩包的压缩和解压缩命令。须知,…

26667-2021 电磁屏蔽材料术语 学习笔记

声明 本文是学习GB-T 26667-2021 电磁屏蔽材料术语. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本文件界定了0 Hz~500GHz 频率范围内具有电磁屏蔽作用的材料的术语和定义。 本文件适用于电磁屏蔽材料领域及相关的设备、人体和…

[C++ 网络协议] 异步通知I/O模型

1.什么是异步通知I/O模型 如图是同步I/O函数的调用时间流: 如图是异步I/O函数的调用时间流: 可以看出,同异步的差别主要是在时间流上的不一致。select属于同步I/O模型。epoll不确定是不是属于异步I/O模型,这个在概念上有些混乱&a…

数据安全:文件分析

什么是文件分析 文件分析是在组织的文件存储库中扫描、报告和处理文件安全性和存储的过程。文件安全性分析处理检查文件的位置、所有权和权限安全。文件存储分析包括检测结构化和非结构化数据,以及存储容量规划,由于对暗数据的担忧日益增加,…

基于Java的音乐网站管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&…

【MATLAB源码-第35期】matlab基于lms算法的陷波器仿真,估计误差,估计频率。

1、算法描述 1. LMS算法: LMS(Least Mean Square)算法是一种自适应滤波算法。其核心思想是通过最小化输入信号和期望响应之间的均方误差来调整滤波器的权重。 LMS算法的更新公式为:w(n1)w(n)μe(n)x(n) 其中, w(n) …

OSPF基础

OSPF:开放式最短路径优先协议 无类别IGP协议:链路状态型(LS) 基于LSA收敛,故更新量较大,在大中型网络正常工作,需要进行结构化部署---区域划分,IP地址规划 组播更新----224.0.0.5 224.0.0.6 支持等开销…

【学习笔记】CF1817F Entangled Substrings(基本子串结构)

前置知识:基本子串结构,SAM的结构和应用 学长博客 字符串理论比较抽象,建议直观的去理解它 子串 t t t的扩展串定义为 ext(t) : t ′ \text{ext(t)}:t ext(t):t′,满足 t t t是 t ′ t t′的子串,且 occ(t) occ(t…

【数据结构】堆,堆的实现,堆排序,TOP-K问题

大家好!今天我们来学习数据结构中的堆及其应用 目录 1. 堆的概念及结构 2. 堆的实现 2.1 初始化堆 2.2 销毁堆 2.3 打印堆 2.4 交换函数 2.5 堆的向上调整 2.6 堆的向下调整 2.7 堆的插入 2.8 堆的删除 2.9 取堆顶的数据 2.10 堆的数据个数 2.11 堆的判…

【VUE复习·10】v-for 高级::key 作用和原理;尽量不要使用 index 来遍历

总览 1.:key 作用和原理 2.尽量不要使用 index 来遍历 一、:key 作用和原理 1.数据产生串位的原因 在我们使用 index 进行遍历的时候,会出现虚拟 DOM 和 真实 DOM 的渲染问题。 二、尽量不要使用 index 来遍历 详情见视频 1/3 处: https://www.bili…

复杂的连接如何破坏智能家居体验

智能家居网络复杂性的增加可能会导致客户体验不佳、回报增加以及品牌声誉挑战。如果不加以解决,这一趋势可能会影响智能家居市场的未来增长。 智能家居网络复杂性的增加可能会导致客户体验不佳、回报增加以及品牌声誉挑战。如果不加以解决,这一趋势可能会…

【数据库——MySQL】(12)过程式对象程序设计——存储过程

目录 1. 存储过程2. 局部变量3. 条件分支3.1 IF 语句3.2 CASE 语句 4. 循环语句4.1 WHILE 语句4.2 REPEAT 语句4.3 LOOP和LEAVE语句4.4 LOOP和ITERATE语句 5. 存储过程应用示例参考书籍 1. 存储过程 要创建存储过程,需要用到 CREATE 语句: CREATE PROCED…

卸载无用Mac电脑软件应用程序方法教程

如何在Mac电脑卸载应用程序?Mac OS系统的用户卸载软件时,大部分会选择直接将软件图标拖进废纸篓清倒。这种操作会留下大量程序残余文件占据磁盘空间,手动清理又怕误删文件,有时还会遇到无法移除的恶意/流氓软件。小编今天分享3种可…

端口被占用怎么解决

第一步:WinR 打开命令提示符,输入netstat -ano|findstr 端口号 找到占用端口的进程 第二步: 杀死使用该端口的进程,输入taskkill /t /f /im 进程号( !!!注意是进程号,不…

分布式文件系统FastDFS实战

1. 分布式文件系统应用场景 互联网海量非结构化数据的存储需求: 电商网站:海量商品图片视频网站:海量视频文件网盘:海量文件社交网站:海量图片 2.FastDFS介绍 https://github.com/happyfish100/fastdfs 2.1简介 …

Spring Boot中配置文件介绍及其使用教程

目录 一、配置文件介绍 二、配置简单数据 三、配置对象数据 四、配置集合数据 五、读取配置文件数据 六、占位符的使用 一、配置文件介绍 SpringBoot项目中,大部分配置都有默认值,但如果想替换默认配置的话,就可以使用application.prop…

Unity如何实现TreeView

前言 最近有一个需求,需要实现一个TreeView的试图显示,开始我一直觉得这么通用的结构,肯定有现成的UI组件或者插件可以使用,结果,找了好久,都没有找到合适的插件,有两个效果差强人意。 最后在回家的路上突然灵光一闪,想到了一种简单的实现方式,什么插件都不用,仅使用…