前言: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 性能表现
YOLO(You Only Look Once)是一种目标检测算法,由Joseph Redmon等人于2016年提出。它的主要思想是将目标检测问题转化为一个回归问题,通过在图像上预测边界框和类别概率来检测目标。YOLO的主要特点是实时性高。相比于传统的目标检测方法,YOLO将整个图像作为输入,直接在一次前向传递中预测边界框和类别。YOLO的核心思想是将图像分割成网格,并在每个网格上预测边界框和类别。每个边界框由5个元素表示:x、y、w、h和置信度。其中,x和y表示边界框中心的坐标,w和h表示边界框的宽度和高度,置信度表示所检测物体的可信程度。
YOLO的核心网络结构包括特征提取层和检测层。特征提取层使用卷积神经网络来提取图像特征,而检测层将特征映射到不同尺度的网格,并预测每个网格单元中的边界框和类别概率。YOLO在速度方面具有显著优势,但在小目标检测方面表现较差。
使用YOLO进行目标检测的过程如下:
YOLO(You Only Look Once)算法相比其他目标检测算法有以下优势:
实时性能:YOLO算法通过将目标检测任务转化为一个回归问题,将图像分成多个网格,每个网格预测出固定数量的边界框和类别概率。这种设计使得YOLO能够在实时性要求较高的场景中运行,达到较高的检测速度。
全局信息:YOLO算法在整张图像上进行单次前向传播,同时预测多个目标。这使得它能够捕捉到全局的上下文信息,从而提高了检测的准确性。
多尺度特征:YOLO算法通过使用多个尺度的特征图来检测不同大小的目标。这种多尺度特征的使用使得算法能够更好地处理不同大小的目标,并且对于小目标的检测效果更好。
立体感:由于YOLO算法是基于全局的特征来进行目标检测的,因此它在保持目标形状和位置精度的同时,能够给人一种较强的立体感。
YOLO应用领域非常广泛。以下是一些常见的应用领域:
自动驾驶:YOLO算法可以用于实时检测和跟踪道路上的车辆、行人、交通标志等,为自动驾驶系统提供环境感知能力。
视频监控:YOLO算法可以用于实时监测视频中的人员、车辆、物体等,用于安防监控、行为分析等领域。
无人机:YOLO算法可以用于无人机的视觉导航与障碍物避障,帮助无人机识别和追踪目标。
工业质检:YOLO算法可以用于工业生产线上的产品质检,快速准确地检测产品中的缺陷和问题。
医疗影像:YOLO算法可以用于医学影像中的肿瘤检测、器官识别等任务,辅助医生进行诊断和治疗。
物体计数与统计:YOLO算法可以用于统计场景中特定物体的数量,例如人流量统计、车辆流量统计等。
虚拟现实与增强现实:YOLO算法可以用于虚拟现实和增强现实应用中的物体跟踪、场景理解等。
等等......
说明:♨️♨️♨️
YOLO官网:YOLO: Real-Time Object Detection (pjreddie.com)
在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
YOLOv1网络借鉴了GoogLeNet分类网络结构,不同的是YOLOv1使用1x1卷积层和3x3卷积层替代inception module。如下图所示,整个检测网络包括24个卷积层和2个全连接层。其中,卷积层用来提取图像特征,全连接层用来预测图像位置和类别概率值。
现在看来,YOLOv1的网路结构非常明晰,是一种传统的one-stage的卷积神经网络:
YOLOv1采用的是“分而治之”的策略,将一张图片平均分成7×7个网格,每个网格分别负责预测中心点落在该网格内的目标。回忆一下,在Faster R-CNN中,是通过一个RPN来获得目标的感兴趣区域,这种方法精度高,但是需要额外再训练一个RPN网络,这无疑增加了训练的负担。在YOLOv1中,通过划分得到了7×7个网格,这49个网格就相当于是目标的感兴趣区域。通过这种方式,我们就不需要再额外设计一个RPN网络,这正是YOLOv1作为单阶段网络的简单快捷之处!
具体实现过程如下:
说明:♨️♨️♨️
1. 由于输出层为全连接层,因此在检测时,YOLOv1训练模型只支持与训练图像相同的输入分辨率(可以通过reshape的方法把你的照片压缩或扩张成YOLO要求的尺寸)。
2. 虽然每个格子可以预测B个bounding box,但是最终只选择只选择IoU最高的bounding box作为物体检测输出,即每个格子最多只预测出一个物体。
作者动机:♨️♨️♨️
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》
论文地址: https://arxiv.org/abs/1612.08242
YOLOv2 采用 Darknet-19 作为特征提取网络,其整体结构如下:
这个网络结构的主要优势在于:
改进后的YOLOv2: Darknet-19,总结如下:
YOLOv2的训练策略主要包括以下几个步骤:
数据准备:首先需要准备训练数据集,包括图像和标注信息。标注信息通常包括物体的类别和边界框的位置。
网络初始化:使用预训练的卷积网络(如Darknet-19)作为特征提取器,然后添加额外的卷积层和全连接层来预测边界框的位置和类别。
损失函数:定义损失函数来度量预测和真实标注之间的差异。YOLOv2使用多任务损失函数,包括分类损失、边界框坐标损失和置信度损失。
训练过程:使用随机梯度下降(SGD)或其他相似的优化算法来最小化损失函数。在每个训练批次中,随机选择一批图像,并通过前向传播计算预测结果。然后使用反向传播更新网络参数。
数据增强:为了增加训练样本的多样性和鲁棒性,可以采用数据增强技术,如随机缩放、随机裁剪、随机旋转等。
迭代训练:重复执行步骤4和步骤5,直到达到预定的训练轮数或收敛条件。
推理阶段:在训练完成后,可以使用训练好的模型对新的图像进行目标检测。
(1)优点
(2)缺点
作者动机:♨️♨️♨️
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: An Incremental Improvement》
论文地址: https://pjreddie.com/media/files/papers/YOLOv3.pdf
相比于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的网络结构,可以看下面这张图:
为了更好的理解此图,下面我将主要单元进行说明:
与Darknet-19对比可知,Darknet-53主要做了如下改进:
YOLOv3是一种目标检测算法,它的训练策略通常包括以下几个步骤:
数据集准备:首先,需要收集并标注用于训练的图像数据集,确保数据集中包含所需目标的多个实例。然后,将标注信息转换为适合YOLOv3的格式,例如Darknet格式。
模型初始化:使用预训练的Darknet53模型作为初始模型,可以从Darknet官方网站下载预训练权重。这个模型是在大规模图像分类数据集上进行训练的,可以作为YOLOv3的基础模型。
进行训练:使用标注好的数据集对模型进行训练。训练过程通常分为两个阶段:先冻结部分网络层进行预热训练,然后解冻所有层进行完整训练。在预热训练阶段,可以设置较小的学习率,使得模型可以从预训练权重中继续学习。在完整训练阶段,可以选择较大的学习率来进一步微调模型。
调整超参数:YOLOv3有一些重要的超参数需要调整,例如学习率、批大小、迭代次数等。这些超参数的选择对模型的性能有很大影响,需要进行实验调整以获得最佳结果。
目标检测评估:在训练过程中,可以使用验证集对模型进行评估,计算模型在目标检测任务上的精度、召回率等指标。根据评估结果,可以进一步调整训练策略或者模型结构。
优点:
缺点:
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的独到之处在于:
说明:♨️♨️♨️
论文题目:《YOLOv4: Optimal Speed and Accuracy of Object Detection》
论文地址: https://arxiv.org/abs/2004.10934
最简单清晰的表示: 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,充分考虑了边框不重合,中心点距离,以及边框宽高比的问题。
YOLOv4是一种广泛使用的目标检测算法,其训练策略可以分为以下几个步骤:
数据集准备:首先,需要准备一个包含目标物体的标注数据集。数据集应包含图像以及每个图像中物体的边界框和类别标签。
数据增强:为了增加数据集的多样性和泛化能力,可以使用数据增强技术对图像进行变换,如旋转、缩放、裁剪、翻转等。
模型选择:选择合适的模型架构作为YOLOv4的基础网络。YOLOv4通常使用Darknet作为基础网络,该网络可以在训练过程中学习到目标物体的特征。
损失函数:定义目标检测任务的损失函数。YOLOv4使用一种称为YOLO Loss的损失函数,该损失函数综合考虑了边界框的位置误差、类别预测误差和置信度误差。
训练策略:使用标注数据集进行模型训练。通常采用随机梯度下降(SGD)或者Adam优化器来最小化损失函数。训练过程中,可以采用分批次(mini-batch)的方式进行训练,以提高训练效率。
学习率调度:为了提高模型的收敛速度和泛化能力,可以使用学习率调度策略。常见的策略有学习率衰减、学习率余弦退火等。
模型评估:在训练过程中,可以定期对模型进行评估,以了解其在验证集上的性能。常用的指标包括精确度、召回率、平均精确度均值(mAP)等。
推理和后处理:在模型训练完成后,可以使用训练好的模型进行推理。推理过程包括图像预处理、模型前向计算、边界框后处理等步骤。
优点:
缺点:
关于YOLOv5的详细介绍,请参考我的专栏:《YOLOv5:从入门到实战》
YOLOv5是一个在COCO数据集上预训练的物体检测架构和模型系列,它代表了Ultralytics对未来视觉AI方法的开源研究,其中包含了经过数千小时的研究和开发而形成的经验教训和最佳实践。YOLOv5是YOLO系列的一个延申,您也可以看作是基于YOLOv3、YOLOv4的改进作品。YOLOv5没有相应的论文说明,但是作者在Github上积极地开放源代码,通过对源码分析,我们也能很快地了解YOLOv5的网络架构和工作原理。
说明:♨️♨️♨️
代码地址:mirrors / ultralytics / yolov5 · GitCode
YOLOv5官方代码中,一共给出了5个版本,分别是 YOLOv5n、YOLOv5s、YOLOv5m、YOLOv5l、YOLO5x 五个模型。这些不同的变体使得YOLOv5能很好的在精度和速度中权衡,方便用户选择。本文中,我们以较为常用的YOLOv5s进行介绍,下面是YOLOv5s的整体网络结构示意图:
5.0版本:
6.0版本:
YOLOv5的训练策略如下:
数据准备:首先需要准备标注好的训练集,包括图像和对应的标签。标签应包含物体的类别和边界框信息。
数据增强:为了增加模型的泛化能力,可以对训练集进行数据增强操作,如随机裁剪、旋转、缩放、翻转等。
模型选择:根据任务需求和硬件条件选择合适的YOLOv5模型,如YOLOv5s、YOLOv5m、YOLOv5l或YOLOv5x。
模型初始化:将选择好的YOLOv5模型加载到训练环境中进行初始化。
损失函数:使用适当的损失函数来定义模型的训练目标,常用的损失函数有交叉熵损失和均方差损失。
学习率策略:采用适当的学习率策略来优化模型的性能,如使用学习率衰减、余弦退火等方法。
训练过程:将准备好的数据送入模型进行训练,通过反向传播更新模型参数,不断迭代优化模型。
模型评估:使用验证集或测试集评估训练好的模型性能,包括准确率、召回率、mAP等指标。
模型调优:根据评估结果,可以调整超参数、数据增强方法等,进一步提升模型的性能。
模型应用:在完成训练并满足要求后,可以将训练好的模型用于目标检测任务。
优点:
缺点:
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的主要特点包括:
说明:♨️♨️♨️
代码实现:mirrors / ultralytics / ultralytics · GitCode
权重链接:Releases · ultralytics/assets · GitHub
文档教程:Home - Ultralytics YOLOv8 Docs
YOLOv8的网络结构图如下所示:
YOLOv8的具体改进如下:
优点:
缺点: