**前言:****Hello大家好,我是小哥谈。**YOLO(You Only Look Once)系列算法是一种目标检测算法,主要用于实时物体检测。相较于传统的目标检测算法,YOLO具有更快的检测速度和更高的准确率。YOLO系列算法的核心思想是将目标检测任务转化为一个回归问题,将图像划分为多个网格,并在每个网格中预测出目标的边界框和类别概率。YOLO通过在整个图像上进行单次前向传播,实现了实时检测。本节课就给大家重点介绍下YOLO系列算法,希望大家学习之后能够有所收获!🌈
前期回顾:
目录
[💥💥2.1 简介](#💥💥2.1 简介)
[💥💥2.2 网络结构](#💥💥2.2 网络结构)
[💥💥2.3 实现方法](#💥💥2.3 实现方法)
[💥💥3.1 简介](#💥💥3.1 简介)
[💥💥3.2 网络结构](#💥💥3.2 网络结构)
[💥💥3.3 训练策略](#💥💥3.3 训练策略)
[💥💥3.4 性能表现](#💥💥3.4 性能表现)
[💥💥4.1 简介](#💥💥4.1 简介)
[💥💥4.2 网络结构](#💥💥4.2 网络结构)
[💥💥4.3 训练策略](#💥💥4.3 训练策略)
[💥💥4.4 性能表现](#💥💥4.4 性能表现)
[💥💥5.1 简介](#💥💥5.1 简介)
[💥💥5.2 网络结构](#💥💥5.2 网络结构)
[💥💥5.3 训练策略](#💥💥5.3 训练策略)
[💥💥5.4 性能表现](#💥💥5.4 性能表现)
[💥💥6.1 简介](#💥💥6.1 简介)
[💥💥6.2 网络结构](#💥💥6.2 网络结构)
[💥💥6.3 训练策略](#💥💥6.3 训练策略)
[💥💥6.4 性能表现](#💥💥6.4 性能表现)
[💥💥7.1 简介](#💥💥7.1 简介)
[💥💥7.2 网络结构](#💥💥7.2 网络结构)
[💥💥7.3 性能表现](#💥💥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进行目标检测的过程如下:
- 将输入图像分割成固定大小的网格。
- 对每个网格预测边界框和类别。
- 根据预测结果筛选出置信度高的边界框。
- 通过非极大值抑制(NMS)去除重叠的边界框,得到最终的检测结果。
YOLO(You Only Look Once)算法相比其他目标检测算法有以下优势:
-
**实时性能:**YOLO算法通过将目标检测任务转化为一个回归问题,将图像分成多个网格,每个网格预测出固定数量的边界框和类别概率。这种设计使得YOLO能够在实时性要求较高的场景中运行,达到较高的检测速度。
-
**全局信息:**YOLO算法在整张图像上进行单次前向传播,同时预测多个目标。这使得它能够捕捉到全局的上下文信息,从而提高了检测的准确性。
-
**多尺度特征:**YOLO算法通过使用多个尺度的特征图来检测不同大小的目标。这种多尺度特征的使用使得算法能够更好地处理不同大小的目标,并且对于小目标的检测效果更好。
-
**立体感:**由于YOLO算法是基于全局的特征来进行目标检测的,因此它在保持目标形状和位置精度的同时,能够给人一种较强的立体感。
YOLO应用领域非常广泛。以下是一些常见的应用领域:
-
**自动驾驶:**YOLO算法可以用于实时检测和跟踪道路上的车辆、行人、交通标志等,为自动驾驶系统提供环境感知能力。
-
**视频监控:**YOLO算法可以用于实时监测视频中的人员、车辆、物体等,用于安防监控、行为分析等领域。
-
**无人机:**YOLO算法可以用于无人机的视觉导航与障碍物避障,帮助无人机识别和追踪目标。
-
**工业质检:**YOLO算法可以用于工业生产线上的产品质检,快速准确地检测产品中的缺陷和问题。
-
**医疗影像:**YOLO算法可以用于医学影像中的肿瘤检测、器官识别等任务,辅助医生进行诊断和治疗。
-
**物体计数与统计:**YOLO算法可以用于统计场景中特定物体的数量,例如人流量统计、车辆流量统计等。
-
**虚拟现实与增强现实:**YOLO算法可以用于虚拟现实和增强现实应用中的物体跟踪、场景理解等。
等等......🍉 🍓 🍑 🍈 🍌 🍐
说明:♨️♨️♨️
🚀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》
💥💥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作为单阶段网络的简单快捷之处!🔖
具体实现过程如下:
- 将一幅图像分成 S×S个网格(grid cell),如果某个 object 的中心落在这个网格中,则这个网格就负责预测这个object。
- 每个网格要预测 B 个bounding box,每个 bounding box 要预测 (x, y, w, h) 和 confidence 共5个值。
- 每个网格还要预测一个类别信息,记为 C 个类。
- 总的来说,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。
说明:♨️♨️♨️
由于输出层为全连接层,因此在检测时,YOLOv1训练模型只支持与训练图像相同的输入分辨率(可以通过reshape的方法把你的照片压缩或扩张成YOLO要求的尺寸)。
虽然每个格子可以预测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是两个不同版本的目标检测模型。它们之间的区别总结如下:
-
**网络架构:**YOLOv1使用一个单一的卷积神经网络(CNN)来同时预测边界框和类别,而YOLOv2采用了Darknet-19作为主干网络,并在其之上添加了额外的卷积层和特征金字塔网络。
-
**特征提取:**YOLOv1在最后一层使用全连接层来生成预测,而YOLOv2在特征图上进行多尺度预测。这种多尺度预测使得YOLOv2能够更好地捕捉不同尺度的目标。
-
**Anchor Boxes:**YOLOv2引入了锚框(anchor boxes)的概念,通过在每个单元格上定义多个先验框,来预测不同尺度和长宽比的目标。这种方法使得YOLOv2能够更好地处理不同形状和大小的目标。
-
**损失函数:**YOLOv1使用平方误差来计算边界框坐标和类别的损失,而YOLOv2采用了适应性权重的交叉熵损失函数,以更好地处理类别不平衡问题。
-
**训练策略:**YOLOv2使用了分步训练策略。首先,使用较大的输入图像进行预训练,然后再用较小的输入图像进行微调。这种策略在提高模型性能的同时,还能提高模型的速度。
说明:♨️♨️♨️
论文题目:《YOLO9000: Better, Faster, Stronger》
💥💥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的训练策略主要包括以下几个步骤:
-
**数据准备:**首先需要准备训练数据集,包括图像和标注信息。标注信息通常包括物体的类别和边界框的位置。
-
**网络初始化:**使用预训练的卷积网络(如Darknet-19)作为特征提取器,然后添加额外的卷积层和全连接层来预测边界框的位置和类别。
-
**损失函数:**定义损失函数来度量预测和真实标注之间的差异。YOLOv2使用多任务损失函数,包括分类损失、边界框坐标损失和置信度损失。
-
**训练过程:**使用随机梯度下降(SGD)或其他相似的优化算法来最小化损失函数。在每个训练批次中,随机选择一批图像,并通过前向传播计算预测结果。然后使用反向传播更新网络参数。
-
**数据增强:**为了增加训练样本的多样性和鲁棒性,可以采用数据增强技术,如随机缩放、随机裁剪、随机旋转等。
-
**迭代训练:**重复执行步骤4和步骤5,直到达到预定的训练轮数或收敛条件。
-
**推理阶段:**在训练完成后,可以使用训练好的模型对新的图像进行目标检测。
💥💥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具有以下特点:
- **快速:**YOLOv3可以实现实时的目标检测,在CPU上的速度也相对较快。
- **准确:**YOLOv3在保持速度的同时,也能保持较高的检测准确率。
- **多尺度:**YOLOv3在不同的尺度上进行目标检测,可以更好地处理不同大小的目标。
- **多尺度边界框:**YOLOv3在每个尺度上使用了多个不同大小的边界框,可以更好地适应不同形状的目标。
说明:♨️♨️♨️
论文题目:《YOLOv3: An Incremental Improvement》
💥💥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是一种目标检测算法,它的训练策略通常包括以下几个步骤:
-
**数据集准备:**首先,需要收集并标注用于训练的图像数据集,确保数据集中包含所需目标的多个实例。然后,将标注信息转换为适合YOLOv3的格式,例如Darknet格式。
-
**模型初始化:**使用预训练的Darknet53模型作为初始模型,可以从Darknet官方网站下载预训练权重。这个模型是在大规模图像分类数据集上进行训练的,可以作为YOLOv3的基础模型。
-
**进行训练:**使用标注好的数据集对模型进行训练。训练过程通常分为两个阶段:先冻结部分网络层进行预热训练,然后解冻所有层进行完整训练。在预热训练阶段,可以设置较小的学习率,使得模型可以从预训练权重中继续学习。在完整训练阶段,可以选择较大的学习率来进一步微调模型。
-
**调整超参数:**YOLOv3有一些重要的超参数需要调整,例如学习率、批大小、迭代次数等。这些超参数的选择对模型的性能有很大影响,需要进行实验调整以获得最佳结果。
-
**目标检测评估:**在训练过程中,可以使用验证集对模型进行评估,计算模型在目标检测任务上的精度、召回率等指标。根据评估结果,可以进一步调整训练策略或者模型结构。
💥💥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》
💥💥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是一种广泛使用的目标检测算法,其训练策略可以分为以下几个步骤:
-
**数据集准备:**首先,需要准备一个包含目标物体的标注数据集。数据集应包含图像以及每个图像中物体的边界框和类别标签。
-
**数据增强:**为了增加数据集的多样性和泛化能力,可以使用数据增强技术对图像进行变换,如旋转、缩放、裁剪、翻转等。
-
**模型选择:**选择合适的模型架构作为YOLOv4的基础网络。YOLOv4通常使用Darknet作为基础网络,该网络可以在训练过程中学习到目标物体的特征。
-
**损失函数:**定义目标检测任务的损失函数。YOLOv4使用一种称为YOLO Loss的损失函数,该损失函数综合考虑了边界框的位置误差、类别预测误差和置信度误差。
-
**训练策略:**使用标注数据集进行模型训练。通常采用随机梯度下降(SGD)或者Adam优化器来最小化损失函数。训练过程中,可以采用分批次(mini-batch)的方式进行训练,以提高训练效率。
-
**学习率调度:**为了提高模型的收敛速度和泛化能力,可以使用学习率调度策略。常见的策略有学习率衰减、学习率余弦退火等。
-
**模型评估:**在训练过程中,可以定期对模型进行评估,以了解其在验证集上的性能。常用的指标包括精确度、召回率、平均精确度均值(mAP)等。
-
**推理和后处理:**在模型训练完成后,可以使用训练好的模型进行推理。推理过程包括图像预处理、模型前向计算、边界框后处理等步骤。
💥💥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的网络架构和工作原理。
说明:♨️♨️♨️
💥💥6.2 网络结构
YOLOv5官方代码中,一共给出了5个版本,分别是 YOLOv5n、YOLOv5s、YOLOv5m、YOLOv5l、YOLO5x 五个模型。这些不同的变体使得YOLOv5能很好的在精度和速度中权衡,方便用户选择。本文中,我们以较为常用的YOLOv5s进行介绍,下面是YOLOv5s的整体网络结构示意图:
5.0版本:
6.0版本:
💥💥6.3 训练策略
YOLOv5的训练策略如下:
-
**数据准备:**首先需要准备标注好的训练集,包括图像和对应的标签。标签应包含物体的类别和边界框信息。
-
**数据增强:**为了增加模型的泛化能力,可以对训练集进行数据增强操作,如随机裁剪、旋转、缩放、翻转等。
-
**模型选择:**根据任务需求和硬件条件选择合适的YOLOv5模型,如YOLOv5s、YOLOv5m、YOLOv5l或YOLOv5x。
-
模型初始化: 将选择好的YOLOv5模型加载到训练环境中进行初始化。
-
**损失函数:**使用适当的损失函数来定义模型的训练目标,常用的损失函数有交叉熵损失和均方差损失。
-
**学习率策略:**采用适当的学习率策略来优化模型的性能,如使用学习率衰减、余弦退火等方法。
-
**训练过程:**将准备好的数据送入模型进行训练,通过反向传播更新模型参数,不断迭代优化模型。
-
**模型评估:**使用验证集或测试集评估训练好的模型性能,包括准确率、召回率、mAP等指标。
-
**模型调优:**根据评估结果,可以调整超参数、数据增强方法等,进一步提升模型的性能。
-
**模型应用:**在完成训练并满足要求后,可以将训练好的模型用于目标检测任务。
💥💥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的主要特点包括:
- **支持多尺度检测:**YOLOv8在多个不同的尺度上进行检测,从而能够有效地检测不同大小的目标。
- **网络结构改进:**YOLOv8采用了更深的骨干网络,如Darknet-53,以提高模型的表达能力和检测精度。
- **激活函数改进:**YOLOv8使用了Leaky ReLU激活函数,以增加模型对小目标的检测敏感性。
- **数据增强策略:**YOLOv8引入了一系列数据增强策略,如随机缩放、随机裁剪和颜色抖动,以增强模型的泛化能力。
说明:♨️♨️♨️
代码实现:mirrors / ultralytics / ultralytics · GitCode
💥💥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在小目标上的表现相对较差。