在这里插入图片描述

1. 简介

YOLOv8是Ultralytics公司在2023年1月10号开源的YOLOv5的下一个重大更新版本,目前支持图像分类、物体检测和实例分割任务,在还没有开源时就收到了用户的广泛关注。

按照官方描述,YOLOv8是一个SOTA模型,它建立在以前YOLO版本的成功基础上,并引入了新的功能和改进,以进一步提升性能和灵活性。具体创新包括一个新的骨干网络、一个新的Ancher-Free检测头和一个新的损失函数,可以在从CPU到GPU的各种硬件平台上运行。不过Ultralytics并没有直接将开源库命名为YOLOv8,而是直接使用Ultralytics这个词,原因是Ultralytics将这个库定位为算法框架,而非某一个特定算法,一个主要特点是可扩展性。其希望这个库不仅仅能够用于YOLO系列模型,而是能够支持非YOLO模型以及分类分割姿态估计等各类任务。总而言之,Ultralytics开源库的两个主要优点是:
 融合众多当前SOTA技术于一体
 未来将支持其他YOLO系列以及YOLO之外的更多算法
在这里插入图片描述
下表为官方在COCO Val 2017数据集上测试的mAP、参数量和FLOPs结果。可以看出YOLOv8相比YOLOv5精度提升非常多,但是N/S/M模型相应的参数量和FLOPs都增加了不少,从上图也可以看出相比YOLOv5大部分模型推理速度变慢了。
在这里插入图片描述
现在各个YOLO系列改进算法都在COCO上面有明显性能提升,但是在自定义数据集上面的泛化性还没有得到广泛验证,至今依然听到不少关于YOLOv5泛化性能较优异的说法。

2. YOLOv8概述

YOLOv8 算法的核心特性和改动可以归结为如下:

(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计算方面采用了Task Aligned Assigner正样本分配策略,并引入了 Distribution Focal Loss;

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

从上面可以看出,YOLOv8主要参考了最近提出的诸如 YOLOX、YOLOv6、YOLOv7 和 PPYOLOE 等算法的相关设计,本身的创新点不多,偏向工程实践,主推的还是ultralytics这个框架本身。

下面将按照模型结构设计、Loss计算、训练数据增强、训练策略和模型推理过程共5个部分详细介绍YOLOv8目标检测的各种改进,实例分割部分暂时不进行描述。

3. 模型结构设计

在这里插入图片描述
在暂时不考虑Head情况下,对比YOLOv5和YOLOv8的yaml配置文件可以发现改动较小,左侧为YOLOv5-s,右侧为YOLOv8-s。
在这里插入图片描述
骨干网络和Neck的具体变化为:
(1)第一个卷积层的kernel从6x6变成了3x3;
(2)所有的C3模块换成C2f,结构如下所示,可以发现多了更多的跳层连接和额外的Split操作;
在这里插入图片描述
(3)去掉了Neck模块中的2个卷积连接层;
(4)Backbone中C2f 的block数从3-6-9-3改成了3-6-6-3;
(5)查看N/S/M/L/X等不同大小模型,可以发现N/S和L/X两组模型只是改了缩放系数,但是S/M/L等骨干网络的通道数设置不一样,没有遵循同一套缩放系数。如此设计的原因应该是同一套缩放系数下的通道设置不是最优设计,YOLOv7 网络设计时也没有遵循一套缩放系数作用于所有模型。

Head部分变化最大,从原先的耦合头变成了解耦头,并且从YOLOv5的Anchor-Based变成了Anchor-Free。其结构如下所示:
在这里插入图片描述
可以看出,不再有之前的objectness分支,只有解耦的分类和回归分支,并且其回归分支使用了Distribution Focal Loss中提出的积分形式表示法。

4. Loss计算

Loss计算过程包括2个部分:正负样本分配策略和Loss计算。

现代目标检测器大部分都会在正负样本分配策略上面做文章,典型的如YOLOX 的simOTA、TOOD的Task Aligned Assigner和RTMDet的Dynamic SoftLabel Assigner,这类 Assigner大都是动态分配策略,而YOLOv5采用的依然是静态分配策略。考虑到动态分配策略的优异性,YOLOv8算法中则直接引用了TOOD 的Task Aligned Assigner。Task Aligned Assigner的匹配策略简单总结为:根据分类与回归的分数加权的分数选择正样本。

t = s α + u β t=s ^ \alpha + u ^ \beta t=sα+uβ
s s s是标注类别对应的预测分值, u u u 是预测框和gt框的iou,两者相乘就可以衡量对齐程度。

1) 对于每一个 GT,对所有的预测框基于GT类别对应分类分数、预测框与GT 的IoU的加权得到一个关联分类以及回归的对齐分数alignment_metrics;
2) 对于每一个GT,直接基于alignment_metrics对齐分数选取topK大的作为正样本;

Loss 计算包括2个分支:分类和回归分支,没有了之前的objectness分支。
(1)分类分支依然采用BCE Loss;
(2)回归分支需要和Distribution Focal Loss中提出的积分形式表示法绑定,因此使用了Distribution Focal Loss,同时还使用了CIoU Loss;
3个Loss采用一定权重比例加权即可。

5. 训练数据增强

数据增强方面和YOLOv5差距不大,只不过引入了YOLOX中提出的最后10个 epoch关闭Mosaic的操作。假设训练epoch是500,其示意图如下所示:
在这里插入图片描述
考虑到不同模型应该采用的数据增强强度不一样,因此对于不同大小模型,有部分超参会进行修改,典型的如大模型会开启MixUp和CopyPaste。数据增强后典型效果如下所示:
在这里插入图片描述

6. 训练策略

YOLOv8的训练策略和YOLOv5没有啥区别,最大区别就是模型的训练总epoch 数从300提升到了500,这也导致训练时间急剧增加。以YOLOv8-S为例,其训练策略汇总如下:
在这里插入图片描述

7. 模型推理过程

YOLOv8的推理过程和YOLOv5几乎一样,唯一差别在于前面需要对 Distribution Focal Loss中的积分表示bbox形式进行解码,变成常规的4维度bbox,后续计算过程就和YOLOv5一样了。

以COCO 80类为例,假设输入图片大小为640x640,MMYOLO中实现的推理过程示意图如下所示:
在这里插入图片描述
其推理和后处理过程为:
(1) bbox积分形式转换为4d bbox格式:对Head输出的bbox分支进行转换,利用Softmax和Conv计算将积分形式转换为4维bbox格式。

(2) 维度变换:YOLOv8输出特征图尺度为80x80、40x40和20x20的三个特征图。Head部分输出分类和回归共6个尺度的特征图。 将3个不同尺度的类别预测分支、bbox预测分支进行拼接,并进行维度变换。为了后续方便处理,会将原先的通道维度置换到最后,类别预测分支和bbox预测分支shape分别为 (b, 80x80+40x40+20x20, 80)=(b,8400,80),(b,8400,4)。

(3) 解码还原到原图尺度:分类预测分支进行Sigmoid计算,而bbox预测分支需要进行解码,还原为真实的原图解码后xyxy格式。

(4) 阈值过滤:遍历batch中的每张图,采用score_thr进行阈值过滤。在这过程中还需要考虑multi_label和nms_pre,确保过滤后的检测框数目不会多于 nms_pre。

(5) 还原到原图尺度和nms:基于前处理过程,将剩下的检测框还原到网络输出前的原图尺度,然后进行nms即可。最终输出的检测框不能多于max_per_img。

8. 总结

本文详细分析和总结了最新的YOLOv8算法,从整体设计到模型结构、Loss计算、训练数据增强、训练策略和推理过程进行了详细的说明,并提供了大量的示意图供大家方便理解。 简单来说YOLOv8是一个包括了图像分类、Anchor-Free 物体检测和实例分割的高效算法,检测部分设计参考了目前大量优异的最新的 YOLO 改进算法,实现了新的SOTA。不仅如此还推出了一个全新的框架,不过这个框架还处于早期阶段,还需要不断完善。

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐