前言
本文详细介绍了从YOLOv1-YOLOv9的网络结构,以及各个版本之间的迭代。
YOLOv1-YOLOv8之间的对比如下表所示:
Model | Anchor | Input | Backbone | Neck | Predict/ Train |
YOLOv1 | 锚框(7*7grids,2 anchors) | resize(448*448*3): 训练是224*224,测试是448*448; |
GoogLeNet(24*Conv+2*FC+reshape;Dropout防止过拟合;最后一层使用线性激活函数,其余层都使用ReLU激活函数); |
无 |
IOU_Loss、nms;一个网格只预测了2个框,并且都属于同一类;全连接层直接预测bbox的坐标值; |
YOLOv2 | 锚框(13*13grids,5 anchors:通过k-means选择先验框) | resize(416*416*3):416/32=13,最后得到的是奇数值有实际的中心点;在原训练的基础上又加上了(10个epoch)的448x448高分辨率样本进行微调; | Darknet-19(19*Conv+5*MaxPool+AvgPool+Softmax;没有FC层,每一个卷积后都使用BN和ReLU防止过拟合(舍弃dropout);提出passthrough层:把高分辨率特征拆分叠加大到低分辨率特征中,进行特征融合,有利于小目标的检测); |
无 |
IOU_Loss、nms;一个网络预测5个框,每个框都可以属于不同类;预测相对于anchor box的偏移量;多尺度训练(训练模型经过一定迭代后,输入图像尺寸变换)、联合训练机制; |
YOLOv3 | 锚框(13*13grids,9 anchors:三种尺度*三种宽高比) | resize(608*608*3) | Darknet-53(53*Conv,每一个卷积层后都使用BN和Leaky ReLU防止过拟合,残差连接); | FPN(多尺度检测,特征融合) | IOU_Loss、nms;多标签预测(softmax分类函数更改为logistic分类器); |
OLOv4 | 锚框 | resize(608*608*3)、Mosaic数据增强、SAT自对抗训练数据增强 | CSPDarknet53(CSP模块:更丰富的梯度组合,同时减少计算量、跨小批量标准化(CmBN)和Mish激活、DropBlock正则化(随机删除一大块神经元)、采用改进SAM注意力机制:在空间位置上添加权重); | SPP(通过最大池化将不同尺寸的输入图像变得尺寸一致)、PANnet(修改PAN,add替换成concat) |
CIOU_Loss、DIOU_nms;自对抗训练SAT:在原始图像的基础上,添加噪音并设置权重阈值让神经网络对自身进行对抗性攻击训练;类标签平滑:将绝对化标签进行平滑(如:[0,1]→[0.05,0.95]),即分类结果具有一定的模糊化,使得网络的抗过拟合能力增强; |
YOLOv5 | 锚框 | resize(608*608*3)、Mosaic数据增强、自适应锚框计算、自适应图片缩放 | CSPDarknet53(CSP模块,每一个卷积层后都使用BN和Leaky ReLU防止过拟合,Focus模块); | SPP、PAN | GIOU_Loss、DIOU_Nms;跨网格匹配(当前网格的上、下、左、右的四个网格中找到离目标中心点最近的两个网格,再加上当前网格共三个网格进行匹配); |
YOLOX | 无锚框 | resize(608*608*3) | Darknet-53 | SPP、FPN | CIOU_Loss、DIOU_Nms、Decoupled Head、SimOTA标签分配策略; |
YOLOv6 | 无锚框 | resize(640*640*3) | EfficientRep Backbone(Rep算子) | SPP、Rep-PAN Neck | SIOU_Loss、DIOU_Nms、Efficient Decoupled Head、SimOTA标签分配策略; |
YOLOv7 | 锚框 | resize(640*640*3) | Darknet-53(CSP模块替换了ELAN模块;下采样变成MP2层;每一个卷积层后都使用BN和SiLU防止过拟合); | SPP、PAN | CIOU_Loss、DIOU_Nms、SimOTA标签分配策略、带辅助头的训练(通过增加训练成本,提升精度,同时不影响推理的时间); |
YOLOv8 | 无锚框 | resize(640*640*3) |
Darknet-53(C3模块换成了C2F模块) | SPP、PAN | CIOU_Loss、DFL_Loss、DIOU_Nms、TAL标签分配策略、Decoupled Head; |
一、YOLO算法的核心思想
YOLO系列的核心思想就是把目标检测转变为一个回归问题,利用整张图片作为网络的输入,通过神经网络,得到边界框的位置及其所属的类别。
1. YOLO系列算法的步骤
(1)划分图像:YOLO将输入图像划分为一个固定大小的网格。
(2)预测边界框和类别:对于每个网格,YOLO预测出固定数量(通常为5个或3个)
的边界框。每个边界框由5个主要属性描述:边界框的位置(中心坐标和宽高)和边界框包含的目标的置信度(confidence)。此外,每个边界框还预测目标的类别。
(3)单次前向传递:YOLO通过一个卷积神经网络(CNN)进行单次前向传递,同时预测所有边界框的位置和类别。相比于其他目标检测算法,如基于滑动窗口或区域提议的方法,YOLO具有更快的速度,因为它只需要一次前向传递即可完成预测。
(4)损失函数:YOLO使用多任务损失函数来训练网络。该损失函数包括位置损失、置信度损失和类别损失。位置损失衡量预测边界框和真实边界框之间的位置差异。置信度损失衡量边界框是否正确地预测了目标,并惩罚背景框的置信度。类别损失衡量目标类别的预测准确性。
(5)非最大抑制(Non-Maximum Suppression):在预测的边界框中,可能存在多个相互重叠的框,代表同一个目标。为了消除冗余的边界框,YOLO使用非最大抑制算法,根据置信度和重叠程度筛选出最佳的边界框。
2. Backbone、Neck和Head
物体检测器的结构开始被描述为三个部分:Backbone, Neck和Head。下图显示了一个高层次的Backbone, Neck 和 Head图。
Backbone负责从输入图像中提取有用的特征。它通常是一个卷积神经网络(CNN),在大规模的图像分类任务中训练,如IamgeNet。骨干网络在不同尺度上捕捉层次化的特征,在较早的层中提取低层次的特征(如边缘和纹理),在较深的层中提取高层次的特征(如物体部分和语义信息)。
Neck是连接Backbone和Head的一个中间部件。它聚集并细化骨干网提取的特征,通常侧重于加强不同尺度的空间和语义信息。颈部可能包括额外的卷积层、特征金字塔(FPN)或其他机制,以提高特征的代表性。
Head是物体检测器的最后组成部分。它负责根据Backbone和Neck提供的特征进行预测。它通常由一个或多个特定任务的子网络组成,执行分类、定位,以及最近的实例分割和姿势估计。头部处理颈部提供的特征,为每个候选物产生预测。最后,一个后处理步骤,如非极大值抑制(NMS),过滤掉重叠的预测,只保留置信度最高的检测。
二、YOLO系列的算法
1. YOLOv1(2016)
(论文地址:https://arxiv.org/pdf/1506.02640.pdf)
1.1 模型介绍
在YOLOv1提出之前,R-CNN系列算法在目标检测领域中独占鳌头。R-CNN系列检测精度高,但是由于其网络结构是双阶段(two-stage)的特点,使得它的检测速度不能满足实时性,饱受诟病。为了打破这一僵局,涉及一种速度更快的目标检测器是大势所趋。
2016年,Joseph Redmon、Santosh Divvala、Ross Girshick等人提出了一种单阶段(one-stage)的目标检测网络。它的检测速度非常快,每秒可以处理45帧图片,能够轻松地实时运行。由于其速度之快和其使用的特殊方法,作者将其取名为:You Only Look Once(也就是我们常说的YOLO的全称),并将该成果发表在了CVPR2016上,从而引起了广泛地关注。
YOLO的核心思想就是把目标检测转变成一个回归问题,利用整张图作为网络的输入,仅仅经过一个神经网络,得到bounding box(边界框)的位置及其所属的类别。
1.2 网络结构
现在看来,YOLOv1的网络结构十分清晰,是一种传统的one-stage的卷积神经网络:
- 网络输入:448*448*3的彩色图片
- 中间层:由若干卷积层和最大池化层组成,用于提取图片的抽象特征
- 全连接层:由两个全连接层组成,用来预测目标的位置和类别的概率值
- 网络输出:7*7*30的预测结果
1.3 实现细节
(1)检测策略
YOLOv1采用的是“分而治之”的策略,将一张图片平均分成7x7个网格,每个网格分别负责预测中心点落在该网格内的目标。在Faster R-CNN中,是通过一个RPN来获得目标的感兴趣区域,这种方法精度高,但是需要额外再训练一个RPN网络,这无疑增加了训练的负担。在YOLOv1中,通过划分得到了7x7个网格,这49个网格就相当于是目标的感兴趣区域。通过这种方式,我们就不需要再额外设计一个RPN网络,这正是YOLOv1作为单阶段网络的简单快捷之处。
具体实现过程如下:
①. 将一副图像分成 个网格(grid cell),如果某个object的中心落在这个网格中,则这个网络就负责预测这个object。
②. 每个网格都要预测B个bounding box,每个bounding box要预测 和confidence共5个值。
③. 每个网格还要预测一个类别信息,记为C个类。
④. 总的来说, 个网格,每个网格要预测B个bounding box,还要预测C个类。网络输出就是一个 的张量。
在实际过程中,YOLOv1把一张图片划分为了7x7个网格,并且每个网格预测2个Box(Box1和Box2),20个类别。所以实际上,S=7,B=2,C=20。那么网络输出的shape也就是: 。
(2)目标损失函数
损失由三部分组成,分别是:坐标预测损失、置信度预测损失、类别预测损失。
使用的是差方和误差。需要注意的是,w和h在进行误差计算的时候取得是它们的平方根,原因是对不同大小的bounding box预测中,相比于大bounding box预测偏一点,小box预测偏一点更不能忍受。而差方和误差函数中对同样的偏移loss是一样。为了缓和这个问题,作者用了一个比较取巧的办法,就是将bounding box的w和h取平方根代替原本的w和h。
定位误差比分类误差更大,所以增加对定位误差的惩罚,使。
在每个图像中,许多网格单元不包含任何目标值。训练时就会把这些网格里的框的“置信度”分数推到零,这往往超过了包含目标的框的梯度。从而可能导致模型不稳定,训练早期发散。因此要减少了不包含目标的框的置信度预测的损失,使。
1.4 性能表现
(1)优点
- YOLO检测速度非常快。标准版本的YOLO可以每秒处理45张图像;YOLO的极速版本每秒可以处理150帧图像。这就意味着YOLO可以小于25毫秒延迟,实时地处理视频。对于欠实时系统,在准确率保证的情况下,YOLO速度快于其他方法。
- YOLO实时检测的平均精度是其他实时监测系统的两倍。
- 迁移能力强,能运用到其他新的领域(比如艺术品目标检测)。
(2)局限性
- YOLO对相互靠近的物体,以及很小的群体检测效果不好,这是因为一个网格只预测了2个框,并且都只属于同一类。
- 由于损失函数的问题,定位误差是影响检测效果的主要原因,尤其是大小物体的处理上,还有待加强。(因为对于小的bounding boxes,small error影响更大)。
- YOLO对不常见的角度的目标泛化性性能偏弱。
2. YOLOv2(2016)
(论文地址:https://arxiv.org/pdf/1612.08242.pdf#page=4.24)
2.1 改进部分
YOLOv2Joseph Redmon和Ali Farhadi发表在CVPR 2017。它包括了对原始YOLO的一些改进,保持相同的速度,也更强大,能够检测9000个类别,这些改进有以下几点:
(1)在所有卷积层上的批量归一化改善了收敛性,并作为一个正则器来减少过拟合;
(2)高分辨率分类器,和YOLOv1一样,他们在ImageNet以224x224的分辨率对模型进行了预训练。然而,这一次,他们在分辨率为448x448的ImageNet上对模型进行了10次微调,提高了网络在高分辨率输入下的性能;
(3)完全卷积。它们去掉了密集层,采用了全卷积架构。
(4)使用Anchor来预测边界盒。他们使用一组先验框Anchor,这些Anchor具有预定义的形状,用于匹配物体的原型形状,如图6所示,每个网格单元都定义了多个Anchor,系统预测每个Anchor的坐标和类别。网络输出的大小与每个网格单元的Anchor数量成正比。
(5)维度聚类。挑选好的Anchor有助于网络学习预测更准确的边界盒。作者对训练中的边界盒进行了k-means聚类,以找到更好的先验。他们选择了五个Anchor,在召回率和模型复杂性之间进行了良好的权衡。
(6)直接预测位置。与其他预测偏移量的方法不同,YOLOv2遵循同样的理念,预测了相对于网格单元的位置坐标,网络为每个单元预测了五个bounding box,每个bounding box有五个值 ,其中 相当于YOLOv1的Pc,最终得到的bounding box坐标如图7所示。
(7)细粒度的特征。与YOLOv1相比,YOLOv2去掉了一个池化层,对于416x416的输入图像,得到13x13的特征图。
(8)多尺度训练。由于YOLOv2不使用全连接层,输入可以是不同的尺寸。为了使YOLOv2对不同的输入尺寸具有鲁棒性,作者随机训练模型,每10批改变尺寸(从320x320到608x608)。
2.2 网络结构
YOLOv2 采用 Darknet-19 作为特征提取网络,其整体结构如下:
改进后的YOLOv2:Darknet-19,总结如下:
①. 与VGG相似,使用了很多3x3卷积核;并且每一次池化后,下一层的卷积核的通道数=池化输出的通道 x 2。
②. 在每一层卷积后,都增加了BN层进行预处理。
③. 采用了降维的思想,把1x1的卷积置于3x3之间,用来压缩特征。
④. 在网络最后的输出上增加了一个global average pooling层。
⑤. 整体上采用了19个卷积层,5个池化层。
为了更好的说明,将Darknet-19与YOLOv1、VGG16网络进行对比:
- VGG-16:大多数检测网络框架都是以VGG-16作为基础特征提取器,它功能强大,准确率高,但是计算复杂度较大,所以速度会相对较慢。因此YOLOv2的网络结构将从这方面改进。
- YOLOv1:基于GoogLeNet的自定义网络,比VGG-16的速度快,但是精度稍不如VGG-16。
- Darknet-19:速度方面,处理一张图片仅需要55.8亿次运算,相比于VGG306.9亿次,速度快了近6倍。精度方面,在ImageNet上的测试精度为:top1准确率为72.9%,top5的准确率为91.2%。
2.3 性能表现
在VOC2007数据集上进行测试,YOLOv2在速度为67fps时,精度可以达到76.8的mAP;在速度为40fps时,精度可以达到78.6的mAP 。可以很好的在速度和精度之间进行权衡。下图是YOLOv1在加入各种改进方法后,检测性能的改变。可见在经过多种改进方法后,YOLOv2在原基础上检测精度具有很大的提升。
相对于YOLOv1而言,不足之处在于,没有进行多尺度特征的结合预测,传递模块(Pass-Through Module)的使用在提升细粒度特征的同时也对特征的空间,分布产生了一定影响,以及对小目标的检测能力没有明显提升。
3. YOLOv3 (2018)
(论文地址:https://arxiv.org/pdf/1804.02767.pdf)
3.1 模型介绍
2018年,作者Redmon又在YOLOv2的基础上做了一些改进。特征提取部分采用Darknet-53网络结构代替原来的Darknet-19,利用特征金字塔网络结构实现了多尺度检测,分类方法使用逻辑回归代替了softmax,在兼顾实用性的同时保证了目标检测的准确性。
从YOLOv1到YOLOv3,每一代性能的提升都与backbone(骨干网络)的改进密切相关。在YOLOv3中,作者不仅提供了darknet-53,还提供了轻量级的tiny-darknet。如果你想检测精度与速度兼备,可以选择darknet-53作为backbone;如果你想达到更快的检测速度,精度方面可以妥协。那么tiny-darknet是你很好的选择。总之,YOLOv3的灵活性使得它在实际工程中得到很多人的青睐。
3.2 网络结构
相比于 YOLOv2 的 骨干网络,YOLOv3 进行了较大的改进。借助残差网络的思想,YOLOv3 将原来的 darknet-19 改进为darknet-53。论文中给出的整体结构如下:
Darknet-53主要由1x1和3x3的卷积层组成,每个卷积层之后包含一个批量归一化层和一个Leaky ReLU,加入这两部分的目的是为了防止过拟合。卷积层、BN层以及LeakyReLU共同组成Darknet-53的基本CBL。因为在Darknet-53中共包含53个这样的CBL,所以称其为Darkent-53。
为了更加清晰地了解Darknet-53的网络结构,可以看下面这张图:
(图片来源:jiangdabai)
为了更好的理解此图,下面对主要单元进行说明:
- CBL:一个卷积层、一个BN层和一个Leaky ReLU组成的基本卷积单元。
- res unit:输入通过两个CBL后,再与原输入进行add;这是一种常规的残差单元。残差单元的目的是为了让网络可以提取到更深层的特征,同时避免出现梯度消失或爆炸。
- ResX:X个残差组件。
- concat:将Darknet-53的中间层和后面的某一层的上采样进行张量拼接,达到多尺度特征融合的目的。这与残差层的add操作是不一样的,拼接会扩充张量的维度,而add直接相加不会导致张量维度的改变。
- 最后面的蓝色立方体表示三种尺度的输出。
与Darknet-19相比,Darknet-53主要做了如下改进:
- 没有采用最大池化层,转而采用步长为2的卷积层进行下采样。
- 为了防止过拟合,在每个卷积层之后加入了一个BN层和一个Leaky ReLU。
- 引入了残差网络的思想,目的是为了让网络可以提取到更深层的特征,同时避免出现梯度消失或爆炸。
- 将网络的中间层和后面某一层的上采样进行张量拼接,达到多尺度特征融合的目的。
3.3 改进部分
(1)输入端
- Mosaic数据扩增:将四张不同的训练图像随机拼接在一起,形成一张马赛克图像。这种方式可以帮助模型学习并适应不同的场景、目标形状和尺度变化。
- 自适应锚框计算:引入了自适应锚框计算的机制,旨在更好地适应各种目标的尺寸和长宽比例变化。
- 初始锚框定义:首先,根据训练集的标注框,选择初始的锚框。可以使用一些聚类算法(如k-means)对标注框进行聚类,以确定一组代表性的锚框。
- 锚框调整:对于每个训练样本,根据该样本中的目标框与初始框的匹配程度,调整初始框的大小和长宽比例。这可以通过计算目标框与锚框的IoU(交并比)来确定匹配程度,并根据匹配程度调整锚框的尺寸。
- 锚框聚类:根据经过调整的锚框,再次进行聚类,得到一组更适应当前数据集的锚框。这些聚类过程通常是迭代进行的,直到达到一定的收敛条件。
- 锚框选择:根据聚类得到的锚框集合,可以选择一定数量的锚框用于目标检测。通常,可以根据聚类结果中的锚框长宽比例的分布情况,选择一些具有代表性的锚框。
- 自适应缩放:根据目标尺寸来自动调整输入图像的大小。这样可以更好地适应不同尺度的目标,提高目标检测的准确性。
(2)主干网络
YOLOv3的主干网络Darknet-53包含卷积层(Convolutional Layer)、残差层(Residual Layer)、特征融合层(Feature Fusion Layer),网络层数的加深提高了检测精度,大量残差网络模块的引入减少了由网络层数加深引起的梯度下降问题,金字塔池化模块的引入可以实现多尺寸的输入和统一尺寸的输出。
(3)颈部网络
YOLOv3的颈部网络是FPN(多尺度检测,特征融合),FPN(Feature Pyramid Network)是一种用于目标检测和语义分割任务的特征金字塔网络结构。它的设计目的是解决单尺度特征提取网络在处理不同尺度目标时的困难。
FPN的主要思想如下:
- 特征提取:首先,通过卷积神经网络(如ResNet)进行特征提取。这些特征具有不同的尺度和语义信息。
- 顶层池化:为了获取更高分辨率的特征,FPN使用自顶向下的顶层池化操作,将较低分辨率的特征图上采样到较高分辨率。这可以通过上采样或插值等方法实现。
- 横向连接:为了融合不同层次的特征信息,FPN引入横向连接,将上一层的特征与下一层的上采样特征进行逐元素相加(Element-wise Sum)。这样可以将低级别的细节信息与高级别的语义信息相结合,产生具有多尺度特征的金字塔结构。
- 特征融合:为了进一步提升特征表达能力,FPN在每个金字塔层级上引入一个额外的卷积层,进行特征融合和调整。
(4)输出端
YOLOv3在输出的改进是多标签预测(softmax函数变为logistics分类器)。在YOLOv1中,通常使用softmax函数作为分类器的激活函数,将每个类别的输出转化为概率分布。
然而,对于YOLOv3这样的多标签检测任务,一个目标可能属于多个类别,使用softmax函数会导致多个类别的概率之和超过1,不符合多标签问题的要求。因此,在YOLOv3中,采用了logistic分类器作为分类器的激活函数。
logistic分类器将每个类别的输出视为独立的二分类问题,对每个类别使用sigmoid函数进行激活。sigmoid函数将输出限制在0到1之间,表示每个类别的存在概率。
3.4 性能表现
如下图所示,是各种先进的目标检测算法在COCO数据集上测试结果。很明显,在满足检测精度差不都的情况下,YOLOv3具有更快的推理速度。
如下表所示,对不同的单阶段和两阶段网络进行了测试。通过对比发现,YOLOv3达到了与当前先进检测器的同样的水平。检测精度最高的是单阶段网络RetinaNet,但是YOLOv3的推理速度比RetinaNet快得多。
4. YOLOv4(2020)
(论文地址:https://arxiv.org/pdf/2004.10934.pdf)
4.1 模型介绍
从YOLOv3后,YOLO没有新版本。直到2020年4月,Alexey Bochkovskiy、Chien-Yao Wang和Hong-Yuan Mark Liao在ArXiv发布了YOLOv4[50]的论文。起初,不同的作者提出一个新的YOLO "官方 "版本让人感觉很奇怪;然而,YOLOv4保持了相同的YOLO理念——实时、开源、端到端和DarkNet框架——而且改进非常令人满意,社区迅速接受了这个版本作为官方的YOLOv4。
YOLOv4的独特之处在于:
是一个高效而强大的目标检测网络。它使我们每个人都可以使用GTX 1080Ti 或2080Ti的GPU来训练一个超快速和精确的目标检测器。
在论文中,验证了大量先进的技巧对目标检测性能的影响。
对当前先进的目标检测方法进行了改进,使之更有效,并且更适合在单GPU上训练;这些改进包括CBN、PAN、SAM等。
4.2 网络结构
(图片来源:jiangdabai)
先详细介绍一下YOLOv4的基本组件:
- CBM:Yolov4网络结构中的最小组件,由Conv+Bn+Mish激活函数三者组成。
- CBL:由Conv+Bn+Leaky_relu激活函数三者组成。
- Res unit:借鉴Resnet网络中的残差结构,让网络可以构建的更深。
- CSPX:借鉴CSPNet网络结构,由卷积层和X个Res unint模块Concate组成。
- SPP:采用1×1,5×5,9×9,13×13的最大池化的方式,进行多尺度融合。
YOLOv4 = CSPDarknet53(主干) + SPP附加模块(颈) + PANet路径聚合(颈) + YOLOv3(头部)
4.3 改进部分
(1)输入端
无明显变化。
(2)主干网络
- CSPDarknet-53骨干网络:YOLOv4采用了称为CSPDarknet-53的新的骨干网络结构,它基于Darknet-53,并通过使用CSP(Cross Stage Partial)模块来提高特征表示的能力。
- SAM(Spatial Attention Module):通过引入SAM模块,YOLOv4能够自适应地调整特征图的通道注意力权重。以增强对目标的感知能力。
- Mish激活函数:YOLOv4采用了CSPDarknet-53作为其主干网络,该网络中的每个残差块(residual block)都应用了Mish激活函数。这使得网络能够从输入到输出的特征变换过程中引入非线性变换,并帮助网络更好地捕捉输入数据的复杂特性。
(3)颈部网络
- PANet特征融合:YOLOv4引入了PANet(Path Aggregation Network)模块,用于在不同尺度的特征图之间进行信息传递和融合,以获取更好的多尺度特征表示。
- SPP:具体是在CSPDarknet-53网络的后面,通过在不同大小的池化层上进行特征提取,从而捕捉到不同尺度上的上下文信息。
(4)输出端
在YOLOv4中,确实引入了一种新的距离度量指标,称为CIOU。
CIOU是一种改进的目标检测损失函数,用于衡量预测框和真实框之间的距离。CIOU是DIoU的进一步扩展,除了考虑框的位置和形状之间的距离外,还引入了一个附加的参数用于衡量框的长宽比例的一致性。
CIOU的计算公式如下: ,其中,IoU表示传统的交并比(Intersection over Union),d表示预测框和真实框中心点之间的欧氏距离,c表示预测框和真实框的对角线距离。在CIOU中,α是一个参数,用于平衡框长宽比例的一致性和框位置之间的距离。v是一个辅助项,用于惩罚预测框和真实框之间的长宽比例差异。
CIOU损失是通过最小化CIOU来优化目标检测模型。它可以作为定位损失函数的一部分,用于衡量预测框的定位准确性。通过CIOU损失的引入,YOLOv4可以更好地优化边界框的位置、形状和长宽比例,从而提高目标检测的准确性和鲁棒性。
4.4 性能表现
如下图所示,在COCO目标检测数据集上,对当前各种先进的目标检测器进行了测试。可以发现,YOLOv4的检测速度比EfficientDet快两倍,性能相当。同时,将YOLOv3的AP和FPS分别提高10%和12%,吊打YOLOv3!
综合以上分析,总结出YOLOv4带给我们的优点有:
- 与其他先进的检测器相比,对于同样的精度,YOLOv4更快(FPS);对于同样的速度,YOLOv4更准(AP)。
- YOLOv4能在普通的GPU上训练和使用,比如GTX 1080Ti和GTX 2080Ti等。
- 论文中总结了各种Tricks(包括各种BoF和BoS),给我们启示,选择合适的Tricks来提高自己的检测器性能。
5. YOLOv5(2020)
(代码地址:https://github.com/ultralytics/yolov5)
5.1 模型介绍
YOLOv5有YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x四个版本。文件中,这几个模型的结构基本一样,不同的是depth_multiple模型深度和width_multiple模型宽度这两个参数。就和我们买衣服的尺码大小排序一样,YOLOv5s网络是YOLOv5系列中深度最小、特征图的宽度最小的网络。其他三种都是在此基础上不断加深,不断加宽。
5.2 网络结构
(图片来源:jiangdabai)
- 输入端:Mosaic数据增强、自适应锚框计算、自适应图片缩放
- Backbone:Focus结构,CSP结构
- Neck:FPN+PAN结构
- Head:CIOU_Loss
基本组件:
- Focus:基本上就是YOLOv2的passthrough。
- CBL:由Conv+Bn+Leaky ReLU三者3组成。
- CSP1_X:借鉴CSPNet网络结构,由三个卷积层和X个Res unit模块Concat组成。
- CSP2_X:不再用Res unit模块,而是改为CBL。
- SPP:采用1x1,5x5,9x9,13x13的最大池化方式,进行多尺度融合。
5.3 改进部分
(1)输入端
无明显变化。
(2)主干网络
Focus结构:Focus结构是YOLOv5中的一个重要组件,用于提取高分辨率特征。它采用的是一种轻量级的卷积操作,帮助模型在保持较高感受野的同时减少计算负担。Focus结构通过将输入特征图进行通道划分和空间划分,将原始特征图转换为更小尺寸的特征图,并保留了原始特征图中的重要信息。这样做有助于提高模型的感知能力和对小尺寸目标的检测准确性。
CSPDarknet-53结构:CSP(Cross Stage Partial)Darknet-53是YOLOv5中的主干网络结构。相对于YOLOv4中的Darknet-53,CSPDarknet-53引入了跨阶级部分连接的想法,通过将特征图在通道维度上分为两个部分,将其中一部分直接连入下一阶段,以增加信息流动的路径,提高特征的传递效率。CSPDarknet-53结构在减少参数和计算量的同时,保持了较高的特征表示能力,有助于提高目标检测的准确性和速度。
(3)颈部网络
无明显变化。
(4)输出端
无明显变化。
5.4 性能表现
在COCO数据集上,当输入原图的尺寸是:640x640时,YOLOv5的5个不同版本的模型的检测数据如下:
在COCO数据集上,当输入原图的尺寸是:1280x1280时,YOLOv5的5个不同版本的模型的检测数据如下:
从上表可得知,从YOLOv5n到YOLOv5x,这五个YOLOv5模型的检测精度逐渐上升,检测速度逐渐下降。根据项目要求,用户可以选择合适的模型,来实现精度与速度的最佳权衡!
YOLO系列算法全家桶——YOLOv1-YOLOv9详细介绍 !!(二):https://developer.aliyun.com/article/1508533