一、YOLOv1

1  概述

        YOLO之父Joseph Redmon创新性的提出了通过直接回归的方式获取目标检测的具体位置信息和类别分类信息,极大的降低了计算量,显著提升了检测的速度,达到了45FPS(Fast YOLO版本达到了155FPS)。

1.1  思路

        YOLO检测算法整体思路如下:

        step1:将输入图片缩放至448x448x3大小;

        step2:经过卷积网络backbone提取特征图;

        step3:把提取到的特征图送入两层全连接层,最终输出7x7x30大小的特征图。

        更进一步讲,就是将输入的图片整体划分为SxS的网格(例如:7x7),物体中心落在哪一个格子中,那么该格子就负责该物体的检测,每一个格子预测B个边框,输出SXS(B*5+C)。

        对于YOLOv1而言,常用的是7x7的网格划分,预测2个边框,输出7x7x30,30个通道包含每个类别的概率+边框置信度+边框位置信息。

1.2  网络结构

        骨干网络:GoogLeNet网络构成:24个卷积层+2个全连接层,值得注意的是:YOLOv1版本在第一个卷积层使用的是7x7卷积。

优势与不足

        (1)优势:与二阶段检测算法相比,利用直接回归的方式,大大缩小了计算量,提升了运行速度。

        (2)不足:每一个网格仅2个预测框,当存在多物体密集挨着的时候或者小目标的时候,检测效果不好。

 二、YOLOv2

2  概述

        YOLOv2算法于2017年提出,从更准确,更快,更多识别三个角度对YOLOv1算法进行了改进。

1、更准确

        加入了批量归一化的正则化手段,加速了收敛速度,提升了收敛效果,同时提升了精确度。

        原来的YOLOv1直接回归预测框的坐标,由于不同物体的尺寸不同,导致YOLOv1在精确定位方面表现较差,在YOLOv2中放弃了全连接层预测边界框而采用了anchor boxes机制来预测边界框,同时去掉了一个池化层,使卷积层输出更高的分辨率。

        使用anchor box后,其框的尺寸会随着训练不断自我调节,由于框的大小不一,所以不采用标准的欧氏距离而是box和聚类中心box之间的iou作为距离指标。YOLOv2虽然引入了anchor box来预测box,但是所用的方法还是YOLOv1中的直接预测相对于网格坐标位置的方式。

2、更快

        将分类网络换成了Darknet-19,整体上卷积操作比YOLOv1中要少,减少了运算量

3、识别更多对象

        扩展到能检测9000种不同对象。

优势与不足

        (1)优势:在一定程度上增强了小目标的检测能力。采用小卷积核替代7x7大卷积核,降低了计算量。同时改进的位置偏移的策略降低了检测目标框的难度。

        (2)尚未采用残差网络结构。且当存在多物体密集挨着的时候或者小目标的时候,检测效果有待提升。

三、YOLOv3

3  概述

        针对YOLOv2的问题,YOLO之父Joseph Redmon决定深化改革。俗话说“他山之石,可以攻玉”,于是乎吸收当下较好的网络设计思想,引入了残差网络模块。重要深化改革的举措:

        1. 在darknet19的基础上推陈出新,引入残差,并加深网络深度,提出了Darkent53。

        2. 借鉴了特征金字塔的思想,在三个不同的尺寸上分别进行预测。

3.1 网络结构

         YOLOv3中只有卷积层,控制特征图的尺寸这一任务由调节卷积步长来实现,同时由于采用了FPN架构,因此总共会输出三个特征图,将高级和低级语义信息进行融合,在低、中、高三个层次上分别预测目标框,最后输出三个尺度的特征图信息。

        由于使用了FPN机制,可能会有多个特征图重复检测某个物体的情况,这是如果粗暴的给IOU不够高的置信度置为零,学习效果会走向极端,为此提出了忽略样例,所以将样例总共分成了三个部分:正例,反例,忽略样例。

        正例:任取一个 ground truth,与 4032 个框全部计算 IoU,IoU 最大的预测框,即为正例。与 ground truth 计算后 IoU最大的检测框,但是IOU小于阈值,仍为正例。正例产生置信度 loss、检测框 loss、类别 loss。置信度标签为 1。

        负例:除正例外,与所有 ground truth 的 IoU 都小于阈值(0.5),则为负例。负例只有置信度产生loss,置信度标签为 0。

        忽略样例:除正例外,与任意一个 ground truth 的 IoU 大于阈值,则为忽略样例,忽略样例不产生任何 loss。

优势:

        基本解决了小目标检测的问题,在速度和精度上实现了较好的平衡。

四、YOLOv4

4  概述

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

 4.1  思路

        1)将CSP结构融入Darknet53中,生成了新的主干网络CSPDarkent53,可以有效增强网络的学习能力,降低成本。同时增加了Droblock,缓解过拟合现象。

        2)Neck结构主要采用了SPP模块,FPN+PAN的方式,SPP模块指的是用不同尺度的最大池化方式连接不同尺寸的特征图,可以显著分离上下文的特征,此外FPN和PAN起到了特征聚合的作用。

        3)引入了Mish激活函数,可以增加精度。

        4)输入部分采用了Mosaic数据增强,随机采用四张图片随机缩放后随机拼接,丰富了数据集,增强了模型的鲁棒性。

        5)预测部份采用了CIOU_Loss替换了IOU_Loss,DIOU_nms替换了nms抑制,充分考虑了边框不重合,中心点距离,以及边框宽高比的问题。

五、YOLOv5

5  概述

        在YOLOv4的基础上进行了一定程度的优化,加入了一个focus框架加速了训练速度 另外在YOLOv4中使用的CSP模块应用neck结构。使用SPPF结构代替了SPP。

        对于anchor box的设置采用了每次训练时自适应生成的方式,以及为了保持正常的长宽比,在填充增强环节自适应增添最少的黑边。

六、Yolox

6  概述

         Yolox以YOLOv3作为基础网络做改进。

6.1  网络结构

         输入端采用了 Mosaic、Mixup两种数据增强方式,采用和原本的Yolov3一样的Darknet53的网络结构,输出层增加了三个Decoupled Head(解耦头)。 anchor-based检测器转换为anchor-free的方式。

七、YOLOv6

7  概述

        YOLOv6是由美团推出的,所做的主要工作是为了更加适应GPU设备,将2021年的RepVGG结构引入到了YOLO。检测算法的思路类似YOLOv5(backbone+neck)+YOLOX(head)。

        主要改动:

        1)骨干网络由CSPDarknet换为了EfficientRep

        2)Neck是基于Rep和PAN构建了Rep-PAN

        3)检测头部分模仿YOLOX,进行了解耦操作,并进行了少许优化。

 优势:

        对耗时做了进一步的优化,进一步提升YOLO检测算法性能。

八、YOLOv7

8  概述

        YOLOv7是YOLOv4团队的续作,主要是针对模型结构重参化和动态标签分配问题进行了优化。

        YOLOv7检测算法的思路是与YOLOv4、v5类似。

        主要改动:

        1)提出了计划的模型结构重参化。

        2)借鉴了YOLOv5、Scale YOLOv4、YOLOX,“拓展”和“复合缩放”方法,以便高效的利用参数和计算量。

        3)提出了一种新的标签分配方法。

8.1  网络结构

        E-ELAN采用expand、shuffle、merge cardinality结构,实现在不破坏原始梯度路径的情况下,提高网络的学习能力。在体系结构方面,E-ELAN只改变了计算模块中的结构,而过渡层的结构则完全不变。作者的策略是利用分组卷积来扩展计算模块的通道和基数,将相同的group parameter和channel multiplier用于计算每一层中的所有模块。然后,将每个模块计算出的特征图根据设置的分组数打乱成G组,最后将它们连接在一起。此时,每一组特征图中的通道数将与原始体系结构中的通道数相同。最后,作者添加了G组特征来merge cardinality。

优势:

        参数量和计算量大幅度减少,但性能仍能保持少量的提升。

九、YOLOv8

9  概述

        YOLOv8是YOLOv5团队进一步开发的,主要包括结构算法、命令行界面、Python API等,精度上YOLOv8相比YOLOv5高出一大截,但速度略有下降。

9.1  网络结构

         具体改进如下:

        1、提供了一个全新的 SOTA 模型,包括 P5 640 和 P6 1280 分辨率的目标检测网络和基于 YOLACT 的实例分割模型。和 YOLOv5 一样,基于缩放系数也提供了 N/S/M/L/X 尺度的不同大小模型,用于满足不同场景需求。

        2、骨干网络和 Neck 部分可能参考了 YOLOv7 ELAN 设计思想,将 YOLOv5 的 C3 结构换成了梯度流更丰富的 C2f 结构,并对不同尺度模型调整了不同的通道数,属于对模型结构精心微调,不再是无脑一套参数应用所有模型,大幅提升了模型性能。不过这个 C2f 模块中存在 Split 等操作对特定硬件部署没有之前那么友好了。

        3、Head 部分相比 YOLOv5 改动较大,换成了目前主流的解耦头结构,将分类和检测头分离,同时也从 Anchor-Based 换成了 Anchor-Free。

        4、Loss 计算方面采用了 TaskAlignedAssigner 正样本分配策略,并引入了 Distribution Focal Loss。

        5、训练的数据增强部分引入了 YOLOX 中的最后 10 epoch 关闭 Mosiac 增强的操作,可以有效地提升精度。

 

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐