- YOLOv8是一款计算机视觉框架
- 可支持的任务:
- 检测
- 分类
- 分割
- 追踪
- 姿态估计
下图是YOLOv8在coco目标检测的一些性能结果:
左图:x:参数量(根据卷积层的宽度和深度区分,n:Nano,s:small, m:medium, l:large, x:xlarge) ; y:coco的mAP
右图:x: Latency A100 TensorRT FP16 ;y:coco的mAP
YOLOv8网络结构
架构图分为以下几个部分:
- backbone(主干网络):特征提取,从这个主干网络中提取3个不同尺度的特征:80*80 , 40*40, 20*20(这些数据要送入neck部分)
- neck:特征融合(融合的特征送入头部)
- 头部:解码:bonding box(边界框的解码);class loss(分类的解码)
backbone原理解析:
C3:3层conv ,蓝色框:conv(卷积层);用了残差的链接,在主干的左侧有个直线连过来 ;C2f: 2层conv faster;使用了split(分离)再concat(连接):这样的结构可以提供网络更加丰富的梯度流,学习到更多的信息,速度更快。所以将C3结构更换为C2f结构
neck解析:
coupled head==》decoupled head
coupled head:拿到主干网络提取的特征之后,送入到卷积层,然后做解码(3个部分在一起,只是不同的位置代表的含义不同):
bonning box (用4个数值表示)用CloU的损失函数;
object(置信度)(用1个数值表示),用二进制交叉熵的损失函数
CLS:分类的类别,有几类就有几个数值来进行表示,用二进制交叉熵的损失函数
decoupled head:分为bonning box ,CLS,各自有单独的卷积,单独的边界框解码;bonning box是CloU+DCE 损失函数 ;CLS是BCE损失函数
CLS(分类):识别出你所框选的物体是一个什么样的类别
损失函数的含义:
在目标检测中的关键点:正负样本分配:网络选了一堆框,这个框对于我们的ground truth(标签)是正样本还是负样本,结合LU和分类的分数进行评估
在数据增强:使用了YOLOX中的方式:在最后10个epoch,关闭数据增强,让网络尽可能向着数据真实的分布来进行学习
网络推理:
80:COCO的80类
4:bonning box的4个数值
解码之后拿到分数,边界框结果,我们会做一个非极大值抑制,得到最终的结果进行输出,然后做一些可视化的内容
YOLOv8网络的特点:
- 全新的视觉模型,保持精度的同时,实现了较高的检测速度,并且同时支持支持图像分类、物体检测和实例分割等多种视觉任务。
- 新的骨干网络:将YOLOv5中的C3结构换成了梯度流更丰富的C2f结构,并对不同尺度模型调整了不同的通道数,大幅提升了模型性能。
- 解耦头的设计:YOLOv8的Head部分从原先的耦合头变成了解耦头结构,简化了模型结构并提高了推理速度。
- 新的损失函数:YOLOv8在Loss计算方面采用了TaskAlignedAssigner正样本分配策略,并引入了Distribution Focal Loss,确保了检测结果的准确性和鲁棒性。