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详细介绍

相关推荐
_feivirus_16 分钟前
神经网络_使用TensorFlow预测气温
人工智能·神经网络·算法·tensorflow·预测气温
大柏怎么被偷了26 分钟前
【C++算法】位运算
开发语言·c++·算法
程序猿方梓燚27 分钟前
C/C++实现植物大战僵尸(PVZ)(打地鼠版)
c语言·开发语言·c++·算法·游戏
CPP_ZhouXuyang28 分钟前
C语言——模拟实现strcpy
c语言·开发语言·数据结构·算法·程序员创富
闻缺陷则喜何志丹28 分钟前
【C++前后缀分解 动态规划】2100. 适合野炊的日子|1702
c++·算法·动态规划·力扣·前后缀分解·日子·适合
逝去的秋风42 分钟前
【代码随想录训练营第42期 Day57打卡 - 图论Part7 - Prim算法与Kruskal算法
算法·图论·prim算法
不是很强 但是很秃1 小时前
秃姐学AI系列之:实战Kaggle比赛:狗的品种识别(ImageNet Dogs)
图像处理·人工智能·pytorch·深度学习·神经网络·计算机视觉·分类
QXH2000001 小时前
数据结构—双向链表
c语言·数据结构·算法·链表
我是瓦力1 小时前
PointNet++改进策略 :模块改进 | EdgeConv | DGCNN, 动态图卷积在3d任务上应用
人工智能·深度学习·计算机视觉·3d
旺小仔.1 小时前
【数据结构篇】~排序(1)之插入排序
c语言·数据结构·算法·链表·性能优化·排序算法