yolo算法小结

文章目录

YOLO的核心思想是将物体检测视为一个回归问题,它不采用传统的区域提议方法,而是通过单一的神经网络对整个图像进行预测。这意味着YOLO只需要一次网络推断就能完成检测任务,从而大大提高了检测速度。

yolov1

工作原理

  • 将一幅图像分成SxS个网格(grid cell),如果某个object的中心 落在这个网格中,则这个网格就负责预测这个object
  • 每个网格要预测B个bounding box,每个bounding box 除了要预测位置之外,还要附带预测一个confidence值。每个网格还要预测C个类别的分数。

限制

  • 为了快速实时检测,设计成每个网格只能预测有限数量的目标(通常是两个),并且只能检测一个类别。
  • 在物体的宽高比方面泛化率低,就是无法定位不寻常比例的物体

yolov2

网络结构

改进点

  • Batch Normalization: YOLOv2在每一层之后加入了批量归一化(Batch Normalization),以加速训练过程并提高模型的泛化能力。
  • 高分辨率分类器: 使用更高分辨率的特征图来进行分类,这样可以更好地利用图像细节进行分类预测。
  • Anchor Boxes: 引入了锚框(Anchor Boxes),使用k-means聚类方法自适应调整先验框的尺寸。每个网格不再固定预测两个边界框,而是预测多个预定义形状的边界框。这增加了模型对不同大小和比例的物体的适应性。
  • 多尺度训练:YOLOv2支持随机调整输入图像的大小进行训练,以增强模型对不同图像尺寸的鲁棒性。
  • Darknet-19网络结构:
    使用了改进后的Darknet-19网络结构,该结构比YOLOv1使用的网络更深,具有更好的特征提取能力。
  • 类别和位置独立预测:
    分离了类别预测和位置预测,提高了检测精度。类别预测不再依赖于边界框的置信度得分。
  • 细粒度的网格预测: 采用了更细粒度的网格划分,提高了小物体的检测性能。
  • Passive Detection: 改进了非极大抑制(NMS)过程,使用被动检测策略来减少误检。
  • 类别预测改进: 在每个网格中预测类别概率时,不再强制每个网格只能预测一个类别。这允许模型更好地处理多物体和重叠物体的情况。
  • 训练数据增强: 使用了多种数据增强技术,如水平翻转、色彩空间变换等,以提高模型的泛化能力。
  • 更快的速度: 通过优化网络结构和训练过程,YOLOv2实现了更快的检测速度,同时保持了较高的检测精度。

yolov3

v3包括yolov3、yolov3-spp、yolov3-spp-ultralytics 版本,这里讲的是第三个版本。

改进点

YOLOv3采用了Darknet-53作为基础网络结构,它比YOLOv2使用的Darknet-19更深更强大,能够提取更高质量的特征

mosaic图像增强:选取4张图像,每张图像随机切割成不同的矩形后拼在一起,重叠区域像素值进行混合处理

SPP模块:实现了不同尺度的特征融合,使用不同大小池化核来提取多尺度的特征,池化后的特征图被拉平并按照顺序拼接。

IOU损失:

在 YOLOv3 中,IoU 相关的损失函数经历了从 IoU→GIoU →DIoU →CIoU的发展过程

  • IoU (Intersection over Union):
    IoU 是一种衡量两个边界框重叠程度的指标,定义为两个边界框重叠面积与它们并集面积的比例。
    IoU 本身并不是一个良好的损失函数,因为它不能区分两个具有相同 IoU 值但位置不同的边界框。
    在早期版本的 YOLO 中,IoU 有时被用来评估预测边界框的质量,但它并没有直接用于损失函数中。
  • GIoU (Generalized IoU):
    GIoU 是 IoU 的一种改进版本,它考虑了包围两个边界框最小闭合区域(Convex Hull)的面积。
    GIoU 损失函数能够更好地反映边界框之间的差异,并且在训练过程中引导预测框更快地逼近真实框。
  • DIoU (Distance IoU):
    DIoU 在 GIoU 的基础上进一步加入了中心点距离的概念,即预测框中心点与真实框中心点之间的欧几里得距离。
    DIoU 损失函数能够更加快速地收敛,并且更好地处理边界框的位置和大小。
  • CIoU (Complete IoU):
    CIoU 综合了 GIoU 和 DIoU 的优点,并且进一步考虑了边界框的长宽比(Aspect Ratio)。
    CIoU 损失函数包括了 GIoU 的部分、中心点距离的部分以及长宽比的一致性部分,它能够更全面地衡量边界框的相似性。

Focal Loss:

主要目的是减轻正负样本数量不均衡带来的影响,使模型更加关注那些难以分类的样本。

Focal Loss 是对传统的交叉熵损失(Cross-Entropy Loss)进行改进而来的,其定义为:

L focal ( p t ) = − α t ( 1 − p t ) γ log ⁡ ( p t ) L_{\text{focal}}(p_t) = -\alpha_t (1 - p_t)^\gamma \log(p_t) Lfocal(pt)=−αt(1−pt)γlog(pt)。

这里的 p t p_t pt是模型预测的正类概率。
α t \alpha_t αt 是权重因子,可以在正负样本之间进行加权,从而进一步缓解类别不平衡问题。

能够降低易分样本的损失贡献,缺点是易受噪音干扰。

yolov4

网络结构图

改进点

1.数据增强方面:

  • Mosaic 数据增强
  • Random Erase:用随机值或训练集的平均像素替换图像的区域
  • Hide and Seek:随机遮挡图像中的某些区域
  • self adversarial traning: 引入噪音点增加难度。
  • dropblock: 从之前dropout随机丢弃特征图的点或者单个神经元去除,现在丢弃特征图的一个区域
  • label smooth: 标签平滑化,修改训练数据的标签为概率值,不会过分依赖于单一的标签,从而提高模型的鲁棒性和泛化能力。

2.骨干网络(backbone)

CSPDarknet53:YOLOv4 采用了 CSPDarknet53 作为骨干网络,而不是 YOLOv3 中的 Darknet-53。CSPDarknet53 引入了 CSP(Cross Stage Partial Networks)架构,通过在每个阶段引入残差连接和特征重用,提高了网络的表征能力和计算效率。

2.颈部网络(Neck)

SPP(Spatial Pyramid Pooling):YOLOv4 引入了 SPP 模块,以增强模型对不同尺度特征的捕捉能力。SPP 模块通过不同大小的池化窗口,提取多尺度特征,并将其融合,从而提高了模型对不同大小目标的检测能力。

PANet(Path Aggregation Network):YOLOv4 使用了 PANet 进行特征融合,PANet 在特征金字塔网络(FPN)的基础上增加了自下而上的路径聚合,进一步增强了特征融合的效果。

PAN模块的设计灵感来源于FPN(Feature Pyramid Network)和PANet(Path Aggregation Network),它旨在解决多尺度目标检测中的信息传递问题。具体来说,PAN模块通过以下几种方式工作:

自底向上路径:类似于FPN,PAN也有一个自底向上的路径,用于从浅层特征到深层特征的信息融合。这使得模型可以从低层次的特征图中获取更多细节信息,同时也能利用高层次特征图的语义信息。

自顶向下路径:与FPN类似,PAN也有一个自顶向下的路径,它将高层特征图的信息传递给低层特征图。这样做的目的是增强浅层特征图的语义理解能力。

循环连接:这是PAN的一个关键特性。在完成了自顶向下的特征融合之后,PAN会再次从低层特征图往高层特征图传递信息,形成一个循环的连接模式。这种双向的信息流动有助于更好地整合不同层级的特征,使模型能够更有效地捕捉不同尺度的目标。


PAN结构图

3.头部网络(Head)

改进的检测头:YOLOv4 对检测头进行了改进,包括使用了更有效的激活函数(如 Swish 或 Mish 激活函数),以及对边界框回归和分类分支进行了优化。

4.训练技巧

自适应锚框:YOLOv4 采用了自适应锚框(Adaptive Anchors),根据训练数据动态调整锚框的大小和形状,以更好地匹配目标物体。

自适应锚框聚类:通过 K-means 聚类算法来生成更适合当前数据集的锚框尺寸。

自适应训练策略:包括动态调整学习率、批量化大小等参数,以提高训练效果。

5.其他改进

  • DIOU

    考虑了边界框之间的距离因素,而不仅仅是重叠区域的比例。具体而言:

    它同样开始于对边界框得分的排序。选择得分最高的边界框。计算该边界框与其它所有边界框之间的DIOU。使用DIOU作为抑制其他框的依据,而非传统的IoU。

  • NMS

    Soft-NMS则是在这基础上进行了改进,其核心思想不是直接删除那些重叠的检测框,而是降低它们的得分,使得它们不太可能成为最终的输出。这样做的好处是可以保留更多的候选框,从而提高召回率(Recall)

  • eliminate grid sensitivity

    坐标预测值都在0-1之间,为了达到边界,在激活函数前增加大于1的系数

  • SAM(Spatial Attention Mechanism,空间注意力机制)

    用于增强模型对重要特征的关注,从而提升检测效果

yolov5

改进点

backbone采用了新的CSPDarknet53结构,把普通的CSP结构改为C3结构。

SPP结构变为SPPF结构

训练策略:

  1. Multi-scale Training(多尺度训练)
    在训练过程中,输入图像的尺寸不是固定的,而是会在一定的范围内随机变化。这种方法使得模型能够在不同尺度的输入上进行训练,从而提高模型在不同大小目标上的检测能力。
    优点:增强模型的鲁棒性,使其能够更好地适应不同分辨率的输入图像。
  2. Auto Anchor(自动锚框)
    这是一种针对自定义数据集的锚框(anchor)选择方法。YOLOv5可以自动根据训练数据集中的目标大小分布来选择最适合的锚框尺寸,从而提高检测精度。
    优点:减少了手动选择锚框的繁琐工作,使得模型能够更好地适应特定的数据集。
  3. Warmup and Cosine LR Scheduler(预热和余弦学习率调度器)
    这是一种学习率调整策略。在训练初期(Warmup阶段),学习率逐渐从小值增加到初始设定值;随后,在训练过程中,学习率按照余弦函数的规律逐渐减小。
    优点:Warmup阶段有助于模型平稳启动,避免了初始阶段学习率过高导致的训练不稳定;余弦学习率调度器则可以帮助模型更好地收敛,提高训练效果。
  4. EMA (Exponential Moving Average)(指数移动平均)
    在训练过程中,使用指数移动平均的方法来维护一个模型参数的平滑版本。在每个训练步骤中,都会根据当前模型的参数更新EMA模型的参数。
    优点:EMA可以帮助模型减少因随机梯度引起的参数波动,从而提高模型的稳定性和最终性能。
  5. Mixed Precision(混合精度)
    在训练过程中使用混合精度(通常是半精度浮点数 FP16 和单精度浮点数 FP32)进行计算,以减少内存占用和提高计算效率。
    优点:可以显著减少GPU显存消耗,加快训练速度,尤其适用于内存受限的环境。
  6. Evolve Hyper-Parameters(进化超参数)
    这是一种自动化的超参数优化方法。YOLOv5使用遗传算法或其他优化算法来自动搜索和调整超参数,找到最优或次优的超参数组合。
    优点:减少了手动调整超参数的工作量,使得模型更容易调优,并且可以找到更合适的超参数设置,从而提高模型性能。

消除网格敏感度:

增加对宽度和高度的预测范围为0~4个网格大小

正负样本:

设置了模板比例、根据偏移增加了更多正样本的数量

参考资料

  1. 【目标检测】YOLO系列------YOLOv1详解)通俗易懂理解------YOLOv1原理与实现

  2. (三十二)通俗易懂理解------YOLOv1原理与实现

  3. 经典目标检测YOLO系列(二)YOLOv2算法详解

  4. 目标检测算法YOLOv4详解

  5. YOLOv5深度剖析

  6. YOLO系列算法全家桶------YOLOv1-YOLOv9详细介绍

相关推荐
pianmian11 小时前
python数据结构基础(7)
数据结构·算法
AI极客菌2 小时前
Controlnet作者新作IC-light V2:基于FLUX训练,支持处理风格化图像,细节远高于SD1.5。
人工智能·计算机视觉·ai作画·stable diffusion·aigc·flux·人工智能作画
阿_旭2 小时前
一文读懂| 自注意力与交叉注意力机制在计算机视觉中作用与基本原理
人工智能·深度学习·计算机视觉·cross-attention·self-attention
王哈哈^_^2 小时前
【数据集】【YOLO】【目标检测】交通事故识别数据集 8939 张,YOLO道路事故目标检测实战训练教程!
前端·人工智能·深度学习·yolo·目标检测·计算机视觉·pyqt
好奇龙猫3 小时前
【学习AI-相关路程-mnist手写数字分类-win-硬件:windows-自我学习AI-实验步骤-全连接神经网络(BPnetwork)-操作流程(3) 】
人工智能·算法
sp_fyf_20244 小时前
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-01
人工智能·深度学习·神经网络·算法·机器学习·语言模型·数据挖掘
香菜大丸4 小时前
链表的归并排序
数据结构·算法·链表
jrrz08284 小时前
LeetCode 热题100(七)【链表】(1)
数据结构·c++·算法·leetcode·链表
oliveira-time4 小时前
golang学习2
算法
南宫生5 小时前
贪心算法习题其四【力扣】【算法学习day.21】
学习·算法·leetcode·链表·贪心算法