【目标检测】YOLOX ,YOLO系列的集大成者

一、YOLOX简介

提出时间:2021年
作者单位:旷视科技
旷视官方代码:https://github.com/Megvii-BaseDetection/YOLOX
论文下载地址:https://arxiv.org/abs/2107.08430
论文题目:《YOLOX: Exceeding YOLO Series in 2021》

《YOLOX: Exceeding YOLO Series in 2021》的意思是YOLOX在2021年超越了所有YOLO系列,标题很狂妄

从2015年的YOLOv1,2016年YOLOv2,2018年的YOLOv3,再到2020年的YOLOv4和YOLOv5,2021年的YOLOX,YOLO系列在不断的进化发展。

YOLOX的速度和精度图如下,横坐标为推理速度,纵坐标为MAP精度。

在这里插入图片描述
YOLOX不同版本的参数量(模型大小)和MAP精度图:

在这里插入图片描述
可以发现在YOLOX不同版本中,YOLOX-Nano模型最小,速度最快。

模型大小往往与速度成正比,很难做到小模型实现高精度。

二、YOLOX 模型结构的改进

2.1 baseline: YOLOv3-SPP

YOLOX 以 YOLOv3-SPP 为基础模型进行各种改进,其 backbone 是 DarkNet-53。

论文对于 baseline 的选择原因的解释为:

Considering YOLOv4 and YOLOv5 may be a little over-optimized for the anchor-based pipeline, we choose YOLOv3 as our start point (we set YOLOv3-SPP as the default YOLOv3).
翻译:考虑到YOLOv4和YOLOv5可能对anchor-based pipeline进行了过度优化,因此我们选择YOLOv3作为优化起点。
注:pipeline(流程)通常指的是算法的整体框架或流程

为什么说YOLOv4和YOLOv5可能对anchor-based pipeline进行了过度优化呢?

主要是因为YOLOv4和YOLOv5侧重于提升检测精度,而忽略了一些其他方面的问题。例如,YOLOV4和YOLOV5使用了大量的卷积层和网络结构调整,导致它们的计算复杂度很高,需要更多的计算资源来实现实时检测。此外,虽然YOLOV4和YOLOV5对大目标的检测效果有所改进,但在小目标的检测上依然不如YOLOv3。

2.2 检测头设计:分类和回归解耦

如下图所示,在YOLOv3–YOLOv5中,检测头对候选框的分类和回归是耦合的(在一起进行,Couple),这样会影响模型检测的性能。

如 YOLOv3 对于输出的 13 × \times × 13 大小的特征图的预测结果是一个 13 × \times × 13 × \times × 255 的矩阵,其中 255 = 3 × \times × (4+1+80),表示每个分支预测3个框,每个框预测 5 元组(x,y,w,h,confidence)和 80 个类别的得分(COCO数据集有80个分类)。其对于 anchor 的类别预测和位置预测(准确说是位置回归)是耦合的。

YOLOX 对分类和回归进行了解耦(Decouple),即将二者分开,变成两个分支,并在回归分支中增加了IOU计算的模块。

在 Neck 结构中,Yolox-Darknet53 和 Yolov3 baseline 一样,都采用FPN的结构进行融合。

在这里插入图片描述

实验证明解耦的检测头(Decouple head)的检测精度更高(能带来4.2%AP提升),收敛速度更快。论文中的解释是:

以往Yolo系列使用的检测头,表达能力可能有所欠缺,Decoupled Head的表达能力更好。

2.3 YOLOX 的整体网络结构

推荐一篇写的很好的文章:深入浅出Yolo系列之Yolox核心基础完整讲解

YOLOX 的整体网络结构如下:

在这里插入图片描述

与 YOLOV3 使用了三个不同尺度的检测头类似,YOLOX 使用了三个不同尺度的解耦的检测头,这是通过不同次数的下采样实现多尺度的。

YOLOX 对一张图片共产生 8400 个预测框,三个检测头对应的预测框分布大小为:

在这里插入图片描述

三、YOLOX 的其他改进

3.1 数据增强(data augmentation)

YOLOX采用了 Mosaic 和 MixUp 两种数据增强方式。

Mosaic是在YOLOv4中提出的,对四张图片进行拼接,每一张图片都有其对应的框框,将四张图片拼接之后就获得一张新的图片,同时也获得这张图片对应的框框。具体可以参考 YoloV4当中的Mosaic数据增强方法

MixUp 采用配对的方式进行训练,通过混合两个甚至是多个样本的分布,同时加上对应的标签来训练。两张图以一定的比例对rgb值进行混合,同时需要模型预测出原本两张图中所有的目标。目前MixUp在各大竞赛、各类目标检测中属于稳定提点的策略。具体可以参考 全网最全:盘点那些图像数据增广方式Mosiac,MixUp,CutMix等.

3.2 Anchor-free

YOLOv2–YOLOv5都是基于anchor的算法( anchor-based),这种方式有一些问题:

(1)为了达到最优的检测性能,需要在训练前对训练集进行聚类分析,确定一组最优的anchor。这些聚类获得的anchor是对于特点数据集适用的,不具有普遍性。

(2)anchor机制增加了检测头的复杂度,以及对每幅图像的预测数量。在一些边缘AI系统中,在设备之间移动如此大量的预测(例如从NPU到CPU)可能会成为整体延迟的潜在瓶颈。

Anchor-free算法可以减少模型参数,具有代表性的Anchor-free算法是在论文《FCOS:Fullu Convolutional One-Stage Object Detection》,该方法借鉴了语义分割的方法,根据主像素点预测边界框。

YOLOX中,特征图中的一个点只预测一个候选框(而不是多个anchor),直接预测4个值(候选框左上角的x,y坐标与w,h)。

将 YOLO 切换到 Anchor-free 的方式非常简单:将特征图中每个位置的预测从YOLOV3 的 3 个减少到 1 个,并直接预测四个值(x,y,w,h)

3.3 Multi positives(多个正样本)

3.3.1 目标检测中的正负样本

(1)问题一:什么是正负样本?

在目标检测中,正负样本是指用于模型训练和评估的样本数据。

首先明确两个概念:

(1)正样本并不是手动标注的GT框。正负样本都是针对于算法生成的预测框而言,而非原始的GT数据。
(2)正负样本是在训练过程中计算损失用的,而在预测过程和验证过程是没有这个概念的。

正样本(Positive Samples)通常是指包含目标物体的样本,这些样本被用来训练模型以学习如何准确地检测和定位目标物体。正样本通常会被标注出目标的类别和边界框位置信息。

负样本(Negative Samples)则是指不包含目标物体的样本,它们用于训练模型以学习如何区分目标物体与背景或其他干扰物体。负样本可以包括一般的背景图像或与目标物体类别不相符的图像。

正负样本在目标检测中起着重要的作用。通过使用大量的正样本和负样本进行训练,模型可以学习到目标物体的特征和背景的差异,进而实现目标的准确检测和定位。在模型评估过程中,正负样本也用于计算各种性能指标,例如精度、召回率和F1分数等,以评估模型的检测效果。

(2)问题二:训练的时候为什么需要进行正负样本筛选?

在目标检测中不能将所有的预测框都进入损失函数进行计算,主要原因是框太多,参数量太大,因此需要先将正负样本选择出来,再进行损失函数的计算。

对于正样本,分类和回归都进行训练
对于负样本,不进行回归,只进行分类(分类为背景)

(3)问题三:为什么要训练负样本?

训练负样本的目的是为了降低误检测率、误识别率,提高网络模型的泛化能力。通俗地讲就是告诉检测器,这些“不是你要检测的目标”。

(4)问题四:如何平衡正负样本的数量?

正负样本的比例最好为1:1到1:2左右,数量差距不能太悬殊,特别是正样本数量本来就不太多的情况下。

如果负样本远多于正样本,则负样本会淹没正样本的损失,从而降低网络收敛的效率与检测精度。这是目标检测中常见的正负样本不均衡问题,解决方案之一是增加正样本数

3.3.2 Multi positives 设置

YOLO系列中关于正负样本的定义可以参考 Yolov3-v5正负样本匹配机制

以往 anchor-free 的模型对每个对象只选择一个正样本,而忽略了其他高质量的预测。然而,优化那些高质量预测还可以带来有益的梯度,可以减轻训练期间正/负采样的极端不平衡。

YOLOX 借鉴 FCOS 中的 “center sampling” 策略,将中心 3 × \times × 3 区域设置为正样本。即对于某个GT框的,在其中心点周围 3 × \times × 3 的正方形,将所有中心点在该正方形范围内的预测框设置为GT框对应的正样本。所以一个GT框最多有 9 个正样本。

经过正样本选择后,预测的 8400 个bbox 中可能只有 1000 个是正样本。但这只是正样本初筛,而不是最终的正样本数,因为还要使用 SimOTA 操作进一步筛选正样本。

3.4 正负样本匹配:SimOTA

SimOTA 来源于旷视在 CVPR2021 中提出的 OTA,论文为 OTA: Optimal Transport Assignment for Object Detection

SimOTA 是 OTA 的简化版,它是一种标签分配方法,它将匹配正负样本的过程看作一个最优传输问题。采用 SimOTA 后 AP 提升了 2.3%

SimOTA 是 YOLOX 的一个重要 trick,其原理比较复杂,博客 YOLOX—SimOTA图文详解 详细且生动地介绍了 SimOTA 的计算流程和代码实现。

四、YOLOX的不同版本

4.1 YOLOX-S、YOLOX-M、YOLOX-L、YOLOX-X

如果不采用DarkNet53作为backbone,而采用YOLOv5的backbone(包括SCPNet、SiLU activation、PAN head),可以得到不同版本YOLO5对应的YOLOX的版本:

在这里插入图片描述
可以发现,YOLOX比YOLOv5的相应版本性能更好。

4.2 YOLOX-Tiny、YOLOX-Nano

Nano是纳米,YOLOX-Tiny和YOLOX-Nano是YOLOX的小模型,模型对比如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ctrl A_ctrl C_ctrl V

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值