YOLO 目标检测算法汇总

  YOLO(You Only Look Once)是一系列目标检测算法,其核心思想是将目标检测视为回归问题,从而实现了端到端的训练。从最初的 YOLOv1 开始,该系列算法在速度和准确性方面不断取得突破。YOLOv1 引入了单网络结构,实现了端到端的训练,虽然定位精度有待提高,但其高速性能为后续版本奠定了基础。YOLOv2(YOLO9000)通过引入批归一化、高分辨率分类器、锚点框等改进,显著提升了检测性能。YOLOv3 则在保持高速的同时,通过多尺度预测、更好的基础分类网络和对象分类损失函数等优化,进一步提高了检测精度。而最新的 YOLOv4 和 YOLOv5 则在保持 YOLO 系列一贯的高速特性的同时,通过引入各种新的技巧和模块,如 CSPNet、PANet、SiLU 激活函数等,进一步提升了检测精度和速度。总体而言,YOLO 系列算法以其高效、准确的特点,在目标检测领域持续引领创新,成为实际应用中的热门选择。





基本知识

目标检测经典算法

  • 两阶段:Faster-RCNN,Mask-RCNN 系列
  • 单阶段:YOLO 系列
    • 优势:速度快,实时监测

衡量指标

  • mAP:越大,效果越好。(面积之和)

  • IoU:预测框与 ground truth 的交集和并集的比值。

  • FPS:帧率,越大,速度越快,网络结构越简单

  • P 和 R:





发展历程

发展历程



YOLOv1

概述

  以往的二阶段检测算法,例如 Faster-RCNN,在检测时需要经过两步:边框回归和 softmax 分类。由于大量预选框的生成,该方法检测精度较高,但实时性较差。鉴于此,YOLO 之父 Joseph Redmon 创新性的提出了通过直接回归的方式获取目标检测的具体位置信息和类别分类信息,极大的降低了计算量,显著提升了检测的速度,达到了 45FPS。

核心思想

  将整张图作为网络的输入,直接在输出层对 BBox 的位置和类别进行回归。

  1. 给个一个输入图像,首先将图像划分成 7 × 7 的网格
  2. 对于每个网格,我们都预测 2 个边框(包括每个边框是目标的置信度以及每个边框区域在多个类别上的概率)
  3. 根据上一步可以预测出 7 × 7 × 2 个目标窗口,然后根据阈值去除可能性比较低的目标窗口,最后 NMS 去除冗余窗口即可

优缺点

优点:

  • 快速,pipline 简单;
  • 背景误检率低;
  • 通用性强。

缺点:

  • 对于小而密集的物体检测效率低: 由于输出层为全连接层,因此在检测时,YOLO v1 训练模型只支持与训练图像相同的输入分辨率。虽然每个格子可以预测 几个 bounding box,但是最终只选择只选择 IOU 最高的 bounding box 作为物体检测输出,即每个格子最多只预测出一个物体。当物体占画面比例较小,如图像中包含畜群或鸟群时,每个格子包含多个物体,但却只能检测出其中一个。



YOLOv2

概述

  针对 YOLOv1 的问题,YOLO 之父 Joseph Redmon 不甘屈服,对 v1 版本进行了大刀阔斧的改革,继而提出了 YOLOv2 网络,重要改革举措包括:

  1. 更换骨干网络;
  2. 引入 PassThrough;
  3. 借鉴二阶段检测的思想,添加了预选框。

  YOLOv2 检测算法是将图片输入到 darknet19 网络中提取特征图,然后输出目标框类别信息和位置信息。

PassThrough 操作

  该方法将 28x28x512 调整为 14x14x2048,后续 v5 版本中的 Focus 操作类似该操作。将生成的 14x14x2048 与原始的 14x14x1024 进行 concat 操作。

引入 anchor

  引入 anchor,调整位置预测为偏移量预测 借鉴了 Faster-RCNN 的思想,引入了 anchor,将目标框的位置预测由直接预测坐标调整为偏移量预测,大大降低了预测难度,提升了预测准确性。

优缺点

(1)优势:利用 passthrough 操作对高低层语义信息进行融合,在一定程度上增强了小目标的检测能力。采用小卷积核替代 7x7 大卷积核,降低了计算量。同时改进的位置偏移的策略降低了检测目标框的难度。

(2)不足:尚未采用残差网络结构。且当存在多物体密集挨着的时候或者小目标的时候,检测效果有待提升。



YOLOv3

  针对 YOLOv2 的问题,YOLO 之父 Joseph Redmon 决定深化改革,于是乎吸收当下较好的网络设计思想,引入了 残差网络模块。基本解决了小目标检测的问题,在速度和精度上实现了较好的平衡。

  1. 在 Darknet19 的基础上推陈出新,引入残差,并加深网络深度,提出了 Darkent53(类似于 ResNet 引入残差结构)。
  2. 借鉴了 特征金字塔 的思想,在三个不同的尺寸上分别进行预测(多尺度预测 ,引入 FPN)。
  3. 分类器不再使用 Softmax,分类损失采用 binary cross-entropy loss(二分类交叉损失熵)

YOLOv3 网络结构图

特征金字塔

  YOLOv3 检测算法是将图片输入到 darknet53 网络中提取特征图,然后借鉴特征金字塔网络思想,将高级和低级语义信息进行融合,在低、中、高三个层次上分别预测目标框,最后输出三个尺度的特征图信息(52×52×75、26×26×75、13×13×75)。



YOLOv4

YOLOv4 就是 筛选 了一些从 YOLOv3 发布至今,能够 提高检测精度 tricks,并以 YOLOv3 为 基础 进行改进。

  • 相较于 YOLOv3 的 DarkNet53,YOLOv4 用了 CSPDarkNet53
  • 相较于 YOLOv3 的 FPN,YOLOv4 用了SPP+PAN
  • CutMix 数据增强和马赛克(Mosaic)数据增强
  • DropBlock 正则化

YOLOv4 网络结构图

输入数据采用 Mosaic 数据增强

  借鉴了 2019 年 CutMix 的思路,并在此基础上进行了拓展,Mosaic 数据增强方式采用了 4 张图片,随机缩放、随机裁剪、随机排布的方式进行拼接。从而对小目标的检测起到进一步的提升的作用。

YOLOv4 的效果

修改骨干网络为 CSPDarknet53

  借鉴了 2019CSPNet 的经验,并结合先前的 Darkent53,获得了新的骨干网络 CSPDarknet53。在 CSPNet 中,存在如下操作,即:进入每个 stage 先将数据划分为两部分,如下图中的 part1、part2,区别在于 CSPNet 中直接对通道维度进行划分,而 YOLOv4 应用时是利用两个 1x1 卷积层来实现的。两个分支的信息在交汇处进行 Concat 拼接。

CSPDarknet53

引入 spp 空间金字塔池化模块

  引入 SPP 结构来增加感受野,采用 1x1、5x5、9x9、13x13 的最大池化的方式,进行多尺度融合,输出按照通道进行 concat 融合。

  由于 CNN 网络后面接的全连接层需要固定的输入大小,故往往通过将输入图像 resize 到固定大小的方式输入卷积网络,这会造成几何失真影响精度。SPP 模块就解决了这一问题,他通过三种尺度的池化,将任意大小的特征图固定为相同长度的特征向量,传输给全连接层。因为卷积层后面的全连接层的结构是固定的。但在现实中,我们的输入的图像尺寸总是不能满足输入时要求的大小,然而通常的手法就是裁剪 (crop) 和拉伸(warp),但这样做总归是不好的,其扭曲了原始的特征。而 SPP 层通过将候选区的特征图划分为多个不同尺寸的网格,然后对每个网格内都做最大池化,这样依旧可以让后面的全连接层得到固定的输入。

在 Neck 部分采用 FPN+PAN 的结构

  借鉴 2018 年图像分割领域 PANet, 相比于原始的 PAN 结构,YOLOV4 实际采用的 PAN 结构将 addition 的方式改为了 concatenation。如下图:

  由于 FPN 结构是自顶向下的,将高级特征信息以上采样的方式向下传递,但是融合的信息依旧存在不足,因此 YOLOv4 在 FPN 之后又添加了 PAN 结构,再次将信息从底部传递到顶部,如此一来,FPN 自顶向下传递强语义信息,而 PAN 则自底向上传递强定位信息,达到更强的特征聚合效果。

  整个 NECK 结构如下图所示:



YOLOv5

YOLOv5 网络结构图

  2020 年 2 月 YOLO 之父 Joseph Redmon 宣布退出计算机视觉研究领域,2020 年 4 月 23 日 YOLOv4 发布,2020 年 6 月 10 日 YOLOv5 发布。

  • 使用 Pytorch 框架,对用户非常友好,能够方便地训练自己的数据集,相对于 YOLO v4 采用的 Darknet 框架,Pytorch 框架更容易投入生产。
  • 代码易读,整合了大量的计算机视觉技术,非常有利于学习和借鉴。
  • 能够轻松的将 Pytorch 权重文件转化为安卓使用的 ONXX 格式,然后可以转换为 OpenCV 的使用格式,或者通过 CoreML 转化为 IOS 格式,直接部署到手机应用端。
  • 有非常轻量级的模型大小, YOLOv5 的大小仅有 27MB , 使用 Darknet 架构的 YOLOv4 有 244MB。

使用 SPPF 结构代替了 SPP

  主要区别就是 MaxPool 由原来的并行调整为了串行,值得注意的是:串行两个 5 x 5 大小的 MaxPool 和一个 9 x 9 大小的 MaxPool 是等价的,串行三个 5 x 5 大小的 MaxPool 层和一个 13 x 13 大小的 MaxPool 是等价的。虽然并行和串行的效果一样,但是串行的效率更高,降低了耗时。

Focus 操作

Focus 操作



YOLOX

YOLOX 网络结构图 -1

YOLOX 网络结构图 -2

  • 一般情况下,可以选择Yolox-Nano、Yolox-Tiny、Yolox-s 用于移动端部署
  • Yolox-m、Yolox-l、Yolox-x 用于 GPU 服务器部署

  YOLO 检测器调整为了 Anchor-Free 形式并集成了其他先进检测技术(比如 decoupled head、label assignment SimOTA)取得了 SOTA 性能,比如:

  具有与 YOLOv4-CSP、YOLOv5-L 相当的参数量,YOLOX-L 取得了 50.0%AP 指标同时具有 68.9fps 推理速度,指标超过 YOLOv5-L 1.8%;

  值得一提的是,作者使用的 baseline 是 YOLOv3 + DarkNet53(所谓的 YOLOv3-SSP)

1. Decoupled Head 解耦头

  检测头耦合会影响模型性能。采用解耦头替换 YOLO 的检测头可以显著改善模型收敛速度。解耦头结构考虑到 分类 定位 所关注的内容的不同。
同时为了避免计算量的大量增加,YOLOX 的 Decoupled Head 结构(轻量解耦头),会先进行 1x1 的降维操作,然后再接上分类和定位两个并行分支(均为 3 × 3 卷积)。

2. Mosaic + Mixup 数据增强

  • Mosaic 数据增强:基本原理就是在训练集中随机选择若干个(一般是 4 个)图像,经过裁剪拼接形成新的训练集元素,可以缓解训练集元素少或者增强识别能力。

  • Mixup 数据增强: 对图像进行混类增强的算法,它将不同类之间的图像进行混合,从而扩充训练数据集

3. Anchor-free

  YOLOv4、YOLOv5 均采用了 YOLOv3 原始的 anchor 设置。然而 anchor 机制存在诸多问题:

(1) 为获得最优检测性能,需要在训练之前进行聚类分析以确定最佳 anchor 集合,这些 anchor 集合存在数据相关性,泛化性能较差;
(2) anchor 机制提升了检测头的复杂度。

  将 YOLO 转换为 anchor-free 形式非常简单,我们将每个位置的预测从 3 下降为 1 并直接预测四个值:即两个 offset 以及高宽。

AnchorFree 系列算法详解

4. Multi positives

  为确保与 YOLOv3 的一致性,前述 anchor-free 版本仅仅对每个目标赋予一个正样本,而忽视了其他高质量预测。参考 FCOS,我们简单的赋予中心 3×3 区域为正样本。

5. SimOTA

  SimOTA 的作用是为不同目标设定不同的正样本数量,例如蚂蚁和西瓜,传统的正样本分配方案常常为同一场景下的西瓜和蚂蚁分配同样的正样本数,那要么蚂蚁有很多低质量的正样本,要么西瓜仅仅只有一两个正样本。对于哪个分配方式都是不合适的。

6. 主干网络(CSPDarknet)加入 Fcous 结构

  主干网络加入 Fcous 结构,将图片宽高信息缩小,减小参数量,提升网络计算速度

  Fcous 结构:将输入的图片先经过 Fcos 结构对图片进行每隔一个像素取出一个值,得到四个特征层,然后再进行 concat。从而图片宽高的信息缩小,通道数增加。在原始信息丢失较少的情况下,减小了参数量。

7. SiLU 激活函数

  SiLU 函数 相比于 ReLU 非线性能力更强,同时继承了 ReLU 收敛更快的优点。



YOLOv6

YOLOv6 网络结构图

  YOLOv6 是由美团推出的,所做的主要工作是为了更加适应 GPU 设备,将 2021 年的 RepVGG 结构引入到了 YOLO。YOLOv6 主要在 Backbone、Neck、Head 以及训练策略等方面进行了诸多的改进:

  • 统一设计了更高效的 Backbone 和 Neck:受到硬件感知神经网络设计思想的启发,基于 RepVGG style 设计了可重参数化、更高效的骨干网络 EfficientRep BackboneRep-PAN Neck
  • 检测头部分模仿 YOLOX,进行了解耦操作,优化设计了更简洁有效的 Efficient Decoupled Head,进一步降低了一般解耦头带来的额外延时开销。
  • 在训练策略上,采用 Anchor-free 无锚范式,同时辅以 SimOTA 标签分配策略以及 SIoU 边界框回归损失来进一步提高检测精度。

1. 更适应 GPU 的骨干网络设计

  YOLOv5/YOLOX 使用的 Backbone 和 Neck 都基于 CSPNet 搭建,采用了多分支的方式和残差结构。对于 GPU 等硬件来说,这种结构会一定程度上增加延时,同时减小内存带宽利用率。按照 RepVGG 的思路,为每一个 3x3 的卷积添加平行了一个 1x1 的卷积分支和恒等映射分支,然后在推理时融合为 3x3 的结构,这种方式对计算密集型的硬件设备会比较友好。

2. 简洁高效的 Decoupled Head

  在 YOLOv6 中,采用了解耦检测头(Decoupled Head)结构,并对其进行了精简设计。原始 YOLOv5 的检测头是通过分类和回归分支融合共享的方式来实现的,而 YOLOX 的检测头则是将分类和回归分支进行解耦,同时新增了两个额外的 3x3 的卷积层,虽然提升了检测精度,但一定程度上增加了网络延时。

3. Anchor-free 无锚范式

  YOLOv6 采用了更简洁的 Anchor-free 检测方法。由于 Anchor-based 检测器需要在训练之前进行聚类分析以确定最佳 Anchor 集合,这会一定程度提高检测器的复杂度;同时,在一些边缘端的应用中,需要在硬件之间搬运大量检测结果的步骤,也会带来额外的延时。而 Anchor-free 无锚范式因其泛化能力强,解码逻辑更简单,在近几年中应用比较广泛。经过对 Anchor-free 的实验调研,我们发现,相较于 Anchor-based 检测器的复杂度而带来的额外延时,Anchor-free 检测器在速度上有 51% 的提升。

4. SimOTA 标签分配策略

  为了获得更多高质量的正样本,YOLOv6 引入了 SimOTA 算法动态分配正样本,进一步提高检测精度。YOLOv5 的标签分配策略是基于 Shape 匹配,并通过跨网格匹配策略增加正样本数量,从而使得网络快速收敛,但是该方法属于静态分配方法,并不会随着网络训练的过程而调整。

5. SIoU 边界框回归损失

  为了进一步提升回归精度,YOLOv6 采用了 SIoU 边界框回归损失函数来监督网络的学习。

  SIoU 损失函数由 4 个 Cost 函数组成:

  • Angle cost 角度
  • Distance cost 距离
  • Shape cost 形状
  • IoU cost 重合度



YOLOv7

  官方版的 YOLOv7 相同体量下比 YOLOv5 精度更高,速度快 120%(FPS),比 YOLOX 快 180%(FPS)。YOLOv7 依旧基于 anchor based 的方法,同时在网络架构上增加 E-ELAN 层,并将 REP 层也加入进来,方便后续部署,同时在训练时,在 head 时,新增 Aux_detect 用于辅助检测,对预测结果的一种初筛,有种 two-stage 的感觉。

  根据上图的架构图走一遍网络流程:先对输入的图片预处理,对齐成 640*640 大小的 RGB 图片,输入到 backbone 网络中,根据 backbone 网络中的三层输出,在 head 层通过 backbone 网络继续输出三层不同 size 大小的feature map,经过 RepVGG block 和 conv,对图像检测的三类任务(分类、前后背景分类、边框)预测,输出最后的结果。

  YOLOv7 因为基于 anchor based 的目标检测,与 YOLOv5 相同,YOLOv6 的正负样本的匹配策略则与 YOLOX 相同,YOLOv7 则基本集成两家之所长。

  YOLOv7 大部分继承自 YOLOv5,包括整体网络架构、配置文件的设置和训练、推理、验证过程等等;此外,YOLOv7 也有不少继承自 YOLOR,毕竟是同一个作者前后年的工作,包括不同网络的设计、超参数设置以及隐性知识学习的加入;还有就是在正样本匹配时仿照了 YOLOX 的 SimOTA 策略。

优势:参数量和计算量大幅度减少

1. 正样本分配策略

  • 中心点增加了一个 0.5 个单位的偏移扩散,提升召回。
  • 为了让正样本更多
  • 正样本分配,IoU 计算,通过累加和动态筛选正样本

  YOLOv7 的标签分配策略(正样本筛选),集成了 YOLOv5 和 YOLOX 两者的精华:

  • YOLOv5

    Step1:Autoanchor 策略,获得数据集最佳匹配的 9 个 anchor(可选)

    Step2:根据 GT 框与 anchor 的宽高比,过滤掉不合适的 anchor

    Step3:选择 GT 框的中心网格以及最邻近的 2 个邻域网格作为正样本筛选区域(辅助头则选择周围 4 个邻域网格)

  • YOLOX

    Step4:计算 GT 框与正样本 IOU 并从大到小排序,选取前 10 个值进行求和(P6 前 20 个),并取整作为当前 GT 框的 K 值

    Step5:根据损失函数计算每个 GT 框和候选 anchor 的损失,保留损失最小的前 K 个

    Step6:去掉同一个 anchor 被分配到多个 GT 框的情况

2. SPPCSPC 模块

https://yolov5.blog.csdn.net/article/details/126354660

  总的输入会被分成三段进入不同的分支,最中间的分支其实就是金字塔池化操作,左侧分支类似于 depthwise conv,但是请注意,中间的 3×3 卷积并未进行分组,依旧是标准卷积,右侧则为一个 point conv,最后将所有分支输出的信息流进行 concat。

3. E-ELAN 模块

  E-ELAN 只改变了计算模块中的结构,而过渡层的结构则完全不变。作者的策略是利用分组卷积来扩展计算模块的通道和基数,将相同的 group parameter 和 channel multiplier 用于计算每一层中的所有模块。然后,将每个模块计算出的特征图根据设置的分组数打乱成 G 组,最后将它们连接在一起。此时,每一组特征图中的通道数将与原始体系结构中的通道数相同。最后,作者添加了 G 组特征来 merge cardinality。除了维护原始的 ELAN 设计架构外,E-ELAN 还可以指导不同的分组模块来学习更多样化的特性。

4. 辅助头检测

  常用的方式是图(c)所示,即辅助头和引导头各自独立,分别利用 ground truth 和它们(辅助头、引导头)各自的预测结果实现标签分配。YOLOV7 算法中提出了利用引导头的预测结果作为指导,生成从粗到细的层次标签,将这些层次标签分别用于辅助头和引导头的学习,如下图(d)和(e)所示。

5. 复合模型缩放

  类似于 YOLOv5、Scale YOLOv4、YOLOX,一般是对 depth、width 或者 module scale 进行缩放,实现扩大或缩小 baseline 的目的。

6. 卷积重参化

  引入了卷积重参化并进行了改进 采用梯度传播路径来分析不同的重参化模块应该和哪些网络搭配使用。同时分析出 RepConv 中的 identity 破坏了 ResNet 中的残差结构和 DenseNet 中的跨层连接,因此作者做了改进,采用没有 Identity 连接的 RepConv 结构进行卷积重参数化。下图是设计的用于 PlainNet 和 ResNet 的计划重参数卷积。

YOLOv7 基础版本的区别

  YOLOv7 基础版本有三种,分别是 YOLOv7、YOLOv7-tiny 和 YOLOv7-W6:

  • YOLOv7是针对普通 GPU 计算优化的基础模型。
  • YOLOv7-tiny是针对边缘 GPU 优化的基础模型。计算机视觉模型的后缀“小”意味着它们针对边缘 AI 和深度学习工作负载进行了优化,并且更轻量级,可以在移动计算设备或分布式边缘服务器和设备上运行 ML。该模型对于分布式现实世界的计算机视觉应用程序很重要。与其他版本相比,边缘优化的 YOLOv7-tiny 使用 leaky ReLU 作为激活函数,而其他模型使用 SiLU 作为激活函数。
  • YOLOv7-W6是针对云 GPU 计算优化的基础模型。此类云图形单元 (GPU) 是用于运行应用程序以在云中处理大量 AI 和深度学习工作负载的计算机实例,而无需在本地用户设备上部署 GPU。







正负样本匹配策略对比

YOLOv5 的正负样本匹配策略

  YOLOv5 基于 anchor based,在开始训练前,会基于训练集中 gt 框,通过 k-means 聚类算法,先验获得 9 个从小到大排列的 anchor 框。先将每个 gt 与 9 个 anchor 匹配(以前是 IOU 匹配,yolov5 中变成 shape 匹配,计算 gt 与 9 个 anchor 的长宽比,如果长宽比小于设定阈值,说明该 gt 和对应的 anchor 匹配)

  YOLOv5 有三层网络,9 个 anchor, 从小到大,每 3 个 anchor 对应一层 prediction 网络,gt 与之对应 anchor 所在的层,用于对该 gt 做训练预测,一个 gt 可能与几个 anchor 均能匹配上。
所以一个 gt 可能在不同的网络层上做预测训练,大大增加了正样本的数量,当然也会出现 gt 与所有 anchor 都匹配不上的情况,这样 gt 就会被当成背景,不参与训练,说明 anchor 框尺寸设计的不好。

  在训练过程中怎么定义正负样本呢,因为 yolov5 中负样本不参与训练,所以要增加正样本的数量。gt 框与 anchor 框匹配后,得到 anchor 框对应的网络层的 grid,看 gt 中心点落在哪个 grid 上,不仅取该 grid 中和 gt 匹配的 anchor 作为正样本,还取相邻的的两个 grid 中的 anchor 为正样本。

  如下图所示, 绿色的 gt 框中心点落在红色 grid 的第三象限里,那不仅取该 grid, 还要取左边的 grid 和下面的 grid, 这样基于三个 grid 和匹配的 anchor 就有三个中心点位于三个 grid 中心点,长宽为 anchor 长宽的正样本,同时 gt 不仅与一个 anchor 框匹配,如果跟几个 anchor 框都匹配上,所以可能有 3-27 个正样本,增大正样本数量。

YOLOv6 的正负样本匹配策略

  YOLOv6 的正负样本匹配策略同 YOLOX,YOLOX 因为是 anchor free,anchor free 因为缺少先验框这个先验知识,理论上应该是对场景的泛化性更好,同时参见旷视的官方解读:Anchor 增加了检测头的复杂度以及生成结果的数量,将大量检测结果从 NPU 搬运到 CPU 上对于某些边缘设备是无法容忍的。

  OLOv6 中的正样本筛选,主要分成以下几个部分:
①:基于两个维度来粗略筛选;
②:基于 simOTA 进一步筛选。
具体步骤如下:

  tie 标签的 gt 如图所示,找到 gt 的中心点(Cx,Cy), 计算中心点到左上角的距离(l_l,l_t), 右下角坐标(l_r,l_b), 然后从两步筛选正样本:

  第一步粗略筛选第一个维度是如果 grid 的中心点落在 gt 中,则认为该 grid 所预测的框为正样本,如图所示的红色和橙色部分 ,第二个维度是 以 gt 的中心点所在 grid 的中心点为中心点,上下左右扩充 2.5 个 grid 步长范围内的 grid,则默认该 grid 所预测的框为正样本,如图紫色和橙色部分。

第二步:通过 SimOTA 进一步筛选:

  SimOTA 流程如下:
①计算初筛正样本与 gt 的 IOU,并对 IOU 从大到小排序,取前十之和并取整, 记为 b。
②计算初筛正样本的 cos 代价函数,将 cos 代价函数从小到大排列,取 cos 前 b 的样本为正样本。
同时考虑同一个 grid 预测框被两个 gt 关联的情况,取 cos 较小的值,该预测框为对应的 gt 的正样本。

YOLOv7 的正负样本匹配策略

  YOLOv7 因为基于 anchor based , 集成 v5 和 v6 两者的精华,即 YOLOv6 中的第一步的初筛换成了 YOLOv5 中的筛选正样本的策略,保留第二步的 simOTA 进一步筛选策略。

  同时 YOLOv7 中有 aux_head 和 lead_head 两个 head ,aux_head 做为辅助,其筛选正样本的策略和 lead_head 相同,但更宽松。如在第一步筛选时,lead_head 取中心点所在 grid 和与之接近的两个 grid 对应的预测框做为正样本,如图绿色的 grid,aux_head 则取中心点以及周围的 4 个预测框为正样本。如下图绿色+蓝色区域的 grid。

  同时在第二步 SimOTA 部分,lead_head 是计算初筛正样本与 gt 的 IOU,并对 IOU 从大到小排序,取前十之和并取整,记为 b。aux_head 则取前二十之和并取整。其他步骤相同,aux_head 主要是为了增加召回率,防止漏检,lead_head 再基于 aux_head 做进一步筛选。



YOLOv5 和 YOLOX 的对比

深入浅出 Yolo 系列之 Yolox 核心基础完整讲解

YOLOv5:

YOLOX:

由上面两张图的对比,及前面的内容可以看出,Yolov5s 和 Yolox-s 主要区别 在于:

(1)输入端: 在 Mosa 数据增强的基础上,增加了 Mixup 数据增强效果;

(2)Backbone: 激活函数采用 SiLU 函数;

(3)Neck: 激活函数采用 SiLU 函数;

(4)输出端: 检测头改为 Decoupled Head、采用 anchor free、multi positives、SimOTA 的方式。

在前面 Yolov3 baseline 的基础上,以上的 tricks,取得了很不错的涨点。



参考





打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2019-2024 SongXJ
  • 访问人数: | 浏览次数:

      请我喝杯咖啡吧~

      支付宝
      微信