Yolov8借鉴了Yolov5、Yolov6、YoloX等模型的设计优点,全面改进了Yolov5模型结构,同时保持了Yolov5工程化简洁易用的优势。

1. yolov8和yolov5结构图对比可发现,yolov5中的C3模块全部替换成梯度流更加丰富的C2f模块。YOLOv8 参考了 C3 模块的残差结构以及YOLOv7的 ELAN 思想,设计出了 C2f 结构。

C2f中每个BottleNeck的输入Tensor的通道数channel都只是上一级的0.5倍,因此计算量明显降低。从另一方面讲,梯度流的增加,也能够明显提升收敛速度和收敛效果。

yolov8的C2f:

具体改进如下:

  • 第一个卷积层的Kernel size从6×6改为3x3。

  • 所有的C3模块改为C2f模块,多了更多的跳层连接和额外Split操作。

  • Block数由C3模块3-6-9-3改为C2f模块的3-6-6-3。

2. 耦合头换成了解耦头

  • 耦合头的设计是在网络的末尾,通过一系列的卷积和全连接层,同时预测不同尺度的边界框位置、尺寸和类别。这种设计使得YOLOv5可以在不同尺度上并行地进行目标检测,即使用一层卷积同时完成分类和定位任务。

  • 解耦头的设计是将分类和检测头分离,两条并行的分支分别取提取类别特征和位置特征,然后各用一层1×1卷积完成分类和定位任务。以提高目标检测的准确性。

  • Decoupled Head不仅是模型精度上会提高,同时网络的收敛速度也加快了,使用Decoupled Head的表达能力更好,增强了模型的鲁棒性,可以更好地建模位置和类别之间的关系,提高目标检测性能。

  • 其中回归分支使用了 Distribution Focal Loss 中提出的积分形式表示法。考虑到真实的分布通常不会距离标注的位置太远,因此Distribution Focal Loss选择优化标签y附近左右两个位置(yi与yi+1)的概率,使得网络分布聚焦到标签值附近。

为配合Anchor-Free、以及提升泛化性,在v8中,增加了DFL损失。

DFL以交叉熵的形式,去优化与标签y最接近的一左一右2个位置的概率,从而让网络更快的聚焦到目标位置及邻近区域的分布。也就是说,学习的分布理论上是在真实浮点坐标的附近,并以线性插值的模式得到距离左右整数坐标的权重。

 3.Anchor-Based换成Anchor-free

anchor也叫做锚,预先设置目标可能存在的大概位置,然后再在这些预设边框的基础上进行精细化的调整。而它的本质就是为了解决标签分配的问题。

目标检测领域的发展从anchor-free到anchor-base,现在又有回到anchor-free的趋势。

Anchor-based和Anchor-free的区别就在于训练过程是否设置了先验框,Anchor-based策略非常依赖于好的先验框设计,对于不同的任务以及形变较大(高宽比变化大)的目标,可能都需要人为地根据经验对先验框超参数进行设计和调节。Anchor-free相对于就简单很多,但操作简单的同时可能会带来召回率性能欠佳、对重叠目标的检测效果一般等问题。

Anchor-Based

在同一个像素点上,生成多个不同大小和比例的候选框,覆盖几乎所有位置和尺度,每个参考框负责检测与其交并比大于阈值 (训练预设值,常用0.5或0.7) 的目标,然后通过anchor中有没有认识的目标和目标框偏离参考框的偏移量完成目标检测,不再需要多尺度遍历滑窗,极大的提升了速度。

在训练过程中,模型学习预测每个锚框的偏移量(相对于真实目标框的偏移),以调整它们以更好地匹配目标的位置。模型还负责为每个锚框预测目标类别。

通常,在预测结束后,采用NMS非极大值抑制来排除高度重叠的锚框,以确保每个目标只有一个最终的检测结果。

优点:
适用于多尺度和多宽高比的目标。
对于密集目标排列的情况,锚框可以提高检测性能。

缺点
对于目标数量较少的情况,锚框设计可能浪费计算资源。
对于小目标检测较为困难。

Anchor-free

无锚框在构建模型时将其看作一个点,即目标框的中心点。不依赖于预定义的锚框,而是直接预测目标的中心点。直接学习目标框的位置,通常通过回归目标框的四个顶点坐标来实现。
同样,模型负责为每个目标预测其类别,在预测结束后,采用NMS进行后处理。
优点:
相对简洁,无需设计大量的锚框。
更适合小目标检测。

缺点:
对于多尺度和多宽高比的目标,可能性能较差。
在密集目标排列的情况下,容易出现定位不准确的问题。

4.正负样本分配策略

正样本总很少,负样本(即无目标区域)总太多。会导致模型学习不均衡。因此,我们需要样本分配策略来解决这一问题。

Yolov8采用了TAL(Task Alignment Learning)动态匹配策略,而不是之前的IOU 匹配策略。

Yolov8算法中直接引用Task-Aligned Assigner正负样本分配策略。TaskAlignedAssigner 的匹配策略简单总结为: 根据分类与回归的分数加权的分数选择正样本。YOLOv5采用的依然是静态分配策略。

其中,s是标注类别对应的预测分值,u是预测框和GT Box的IoU,两者相乘即可衡量对齐程度(Task-Alignment)。α和β是权重超参数。

t可以同时控制分类得分和IoU的优化来实现Task-Alignment,从而引导网络动态关注高质量的anchor。当类别分值越高且IoU越高时,t的值就越接近于1。

具体执行步骤如下:

  • 基于分类得分和预测框与GT的IoU,加权得到一个关联分类以及回归的对齐分数alignment_metrics。

  • 计算anchor的中心点是否在当前GT框内,只有在当前GT内的anchor才能作为正样本。

  • 满足2的前提下,基于alignment_metrics选取topK大的作为正样本,其余作为负样本进行训练。

5、最后10 epoch关闭masic增强。

 附加 说明:SPPF对比SPP,两者的作用是一样的,感受野一样,但SPPF的速度更高。

Cx,Cy是feature map中grid cell的左上角坐标,在yolo中每个grid cell在feature map中的宽和高均为1。公式中的Pw、Ph是预设的anchor box映射到feature map中的宽和高。最终得到的边框坐标值是bx,by,bw,bh即边界框bbox相对于feature map的位置和大小,是我们需要的预测输出坐标。但我们网络实际上的学习目标是tx,ty,tw,th这4个offsets,其中tx,ty是预测的坐标偏移值,tw,th是尺度缩放,有了这4个offsets,自然可以根据之前的公式去求得真正需要的bx,by,bw,bh4个坐标。同时为了将边界框中心点约束在当前网格中,使用sigmoid函数来处理偏移值,使预测偏移值在(0,1)范围内,即保证中心点在该grid范围内。

1.宽高的回归也从之前的exp

引用文章链接:

 史上最详细的Yolov3边框预测分析-腾讯云开发者社区-腾讯云

https://www.zhihu.com/question/445416676

Yolov3边框预测分析_yolov3边框预测公式分析-CSDN博客

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐