YOLOX论文翻译详解

YOLOX:在2021年超越YOLO系列

摘要

在本报告中,我们对YOLO系列提出了一些有经验的改进,形成了新的高性能探测器- YOLOX。我们把YOLO探测器切换到无锚方式及其他超前探测技术,即,一个解耦的头部和领先的标签对于只有0.91M参数和1.08G FLOPs的YOLO-Nano,我们采用了一种新的分配策略,可以在大尺度范围的模型中实现最先进的结果
在COCO上获得25.3%的AP,超过NanoDet 1.8%的AP;对于在行业中应用最广泛的探测器之一YOLOv3,我们将其在COCO上的AP提高到47.3%,比目前的最佳实践高出3.0% AP;对于YOLOX-L具有与YOLOv4-大致相同数量的参数CSP, YOLOv5-L,我们在COCO上达到50.0%的AP,特斯拉V100的速度为68.9 FPS,超过了YOLOv5-L。此外,我们在流媒体上获得了第一名
感知挑战(自动驾驶研讨会)(CVPR 2021),使用单个YOLOX-L模型。我们希望该报告可以为开发人员和用户提供有用的经验,我们还提供了使用ONNX、TensorRT、NCNN和Openvino的部署版本支持。源代码在https://github.com/Megvii-BaseDetection / YOLOX。

1.Introduction

随着目标检测技术的发展,YOLO系列一直在追求实时应用中速度和精度的最佳权衡。他们提取了当时可用的最先进的检测技术(例如,用于YOLOv2的锚,用于YOLOv3的残差网),并优化了最佳实践的实现。目前,YOLOv5在13.7 ms.下,在COCO上的AP为48.2%,具有最佳的权衡性能。
然而,在过去两年中,目标检测学术界的主要进展集中在无锚点检测器、高级标签分配策略和端到端(无nms)检测器。这些尚未集成到YOLO系列中,如yolo4和YOLOv5仍然是基于锚点的检测器,手工制定训练分配规则。
这就是把我们带到这里的原因,通过经验丰富的优化,为YOLO系列提供这些最新的进步。考虑到YOLOv4和YOLOv5对于基于锚点的管道可能有些过度优化,我们选择YOLOv3作为起点(我们将YOLOv3- spp设置为默认的YOLOv3)。事实上,在各种实际应用中,由于计算资源有限,软件支持不足,YOLOv3仍然是行业中应用最广泛的探测器之一。
如图1所示,随着上述技术的不断更新,我们在640 × 640分辨率的COCO上将YOLOv3的AP提高到47.3% (YOLOv3 - darknet53),大大超过了目前YOLOv3的最佳实践(44.3% AP, ultralytics version2)。此外,当切换到采用先进的CSPNet骨干和额外的PAN头的高级YOLOv5架构时,YOLOX-L在640 × 640分辨率的COCO上实现了50.0%的AP,比对应的YOLOv5- l高出1.8%的AP。我们还在小尺寸模型上测试了我们的设计策略。YOLOX-Tiny和YOLOX-Nano(仅0.91M参数和1.08G FLOPs)分别比对应的YOLOv4-Tiny和NanoDet3分别高出10%和1.8%的AP。
图1:YOLOX和其他最先进的目标探测器的精确模型的速度-精度权衡(上)和移动设备上生命模型的尺寸-精度曲线(下)。
图1:YOLOX和其他最先进的目标探测器的精确模型的速度-精度权衡(上)和移动设备上生命模型的尺寸-精度曲线(下)。

我们已经在https://github上发布了我们的代码。
支持ONNX, TensorRT, NCNN和Openvino。值得一提的是,我们在流感知挑战赛(CVPR 2021自动驾驶研讨会)中使用单个YOLOX-L模型获得了第一名。

2.YOLOX

2.1YOLOX-DarkNet53

我们选择YOLOv3与Darknet53作为我们的基准模型。在接下来的部分中,我们将在YOLOX中一步一步地完成整个系统的设计。

实现技巧

从基准模型到最终模型,我们的训练设置基本一致。我们在COCO train2017上对模型进行了总共300次的训练,其中有5次热身warm-up。我们使用随机梯度下降(SGD)进行训练。我们使用的学习率lr×BatchSize/64(线性缩放),初始lr = 0.01,余弦lr调度。权重衰减为0.0005,SGD动量为0.9。典型的8 gpu设备的批处理大小默认为128。其他批处理规模包括单个GPU训练也可以很好地工作。输入大小均匀地从448绘制到832,共32步。FPS和本报告中的延迟都是在单个Tesla V100上使用fp16精度和batch=1测量的

YOLOV3 基准

我们的基准采用了DarkNet53骨干网和SPP层的架构,在一些文献中称为YOLOv3-SPP。与最初的实现相比,我们稍微改变了一些训练策略,增加了EMA权重更新、余弦调度、IoU损失和IoU感知分支。
我们将BCE Loss用于训练类和对象分支,IoU Loss用于训练区域分支。这些一般的训练技巧与YOLOX的关键改进是正交的,因此我们把它们放在基线上。
此外,对于数据增强,我们只执行RandomHorizontalFlip, ColorJitter和multi-scale,而放弃RandomResizedCrop策略,因为我们发现RandomResizedCrop与计划的马赛克增强有点重叠。通过这些增强,我们的基线在COCO val上达到38.5%的AP,如表2所示。

在这里插入图片描述
表2:YOLOX-Darknet53在COCO val上的AP(%)路线图。所有型号在640×640分辨率下进行测试,精度为fp16,批次=1,在特斯拉V100上。该表中的延迟和FPS是不经过后处理的。

解耦头

在目标检测中,分类任务和回归任务之间的冲突是一个众所周知的问题。因此,解耦头部分类和定位被广泛应用于大多数一阶段和二阶段检测器中。然而,随着YOLO系列的主干和特征金字塔(如FPN、PAN)的不断演化,它们的检测头仍然保持耦合,如图2所示.
在这里插入图片描述
图2:YOLOv3头和建议的解耦头之间的区别。对于每一层FPN特征,我们首先采用1 × 1的conv层将特征通道减少到256个,然后添加两个并行分支,每个分支有两个3 × 3的conv层,分别用于分类和回归任务。在回归分支上添加IoU分支。
我们的两个分析实验表明,耦合检测头可能会损害性能。1)将YOLO的头部替换为解耦的头部,大大提高了收敛速度,如图3所示。2).解耦头对于端到端版本的YOLO至关重要(将在下面描述)。从表1可以看出,耦合封头的端对端特性降低了4.2% AP,而解耦封头的端对端特性降低到0.8% AP。因此,我们将YOLO检测头替换为寿命解耦头,如图2所示。具体来说,它包含一个1 × 1的转换层来降低通道的尺寸,然后是两个平行的分支,分别有两个3 × 3的转换层。我们在表2中报告了V100上batch=1的推断时间,并且生命解耦头带来了额外的1.1 ms (11.6 ms vs . 10.5 ms)。
在这里插入图片描述
图3:使用YOLOv3头部或解耦头部的检测器的训练曲线。每隔10个epoch对COCO值进行AP评价。可以明显看出,解耦磁头的收敛速度比YOLOv3磁头快得多,最终取得了更好的效果

数据增强

我们将Mosaic和MixUp添加到增强策略中,以提高YOLOX的性能。马赛克是由ultralytics-YOLOv3提出的一种有效的增强策略。然后广泛应用于YOLOv4 , YOLOv5等探测器。
MixUp最初是为图像分类任务设计的,但在BoF[中进行了修改,用于目标检测训练。我们在模型中采用MixUp和Mosaic实现,并在最后15个epoch关闭它,在表2中实现42.0%的AP。在使用强数据增强后,我们发现ImageNet预训练没有更多的好处,因此我们从头开始训练以下所有模型。

无锚框

YOLOv4和YOLOv5都沿用了原来的YOLOv3基于锚点的方法。
然而,锚定机制有许多已知的问题。首先,为了达到最优的检测性能,需要在训练前进行聚类分析,确定一组最优的锚点。这些聚集的锚点是特定于领域的,泛化程度较低。其次,锚定机制增加了检测头的复杂性,以及每个图像的预测数量。在一些边缘AI系统中,在设备之间移动如此大量的预测(例如,从NPU到CPU)可能会成为整体延迟方面的潜在瓶颈。
无锚探测器在过去两年中发展迅速。这些工作表明,无锚点探测器的性能可以与基于锚点的探测器相当。无锚机制显著减少了需要启发式调优的设计参数数量和涉及的许多技巧(例如,锚聚类,网格敏感),以获得良好的性能,使检测器,特别是其训练和解码阶段,大大简化。
将YOLO切换到无锚的方式非常简单。我们将每个位置的预测从3个减少到1个,并使它们直接预测4个值,即网格左上角的两个偏移量,以及预测框的高度和宽度。我们把每个目标的中心位置作为正样本并预先定义一个刻度范围,来指定每个对象的FPN级别。这样的修改降低了检测器的参数和GFLOPs,使检测器速度更快,但获得了更好的性能——42.9% AP,如表2所示。

Multi positives

为了与YOLOv3的分配规则一致,上述无锚版本为每个对象只选择一个阳性样本(中心位置),同时忽略了其他高质量的预测。然而,优化这些高质量的预测也可能带来有益的梯度,这可能会缓解训练过程中正/负抽样的极端不平衡。我们简单地将中心3×3区域赋值为正,在FCOS中也称为“中心采样”。如表2所示,检测器的性能提高到45.0% AP2,已经超过了当前的最佳实践ultralytics-YOLOv3 (44.3% AP2)。

SimOTA

高级标签分配是近年来目标检测的又一重要进展。基于我们自己的研究OTA,我们总结了高级标签分配的四个关键见解:1).损失/质量意识,2).中心先验,3).每个基本真理的正锚点的动态数量(缩写为动态top-k), 4).全局视图。OTA满足上述所有四条规则,因此我们选择它作为候选标签分配策略.
具体而言,OTA从全局角度分析标签分配,并将分配过程定义为最优运输(Optimal Transport, OT)问题,从而产生当前分配策略中的SOTA性能。然而,在实践中我们发现,通过Sinkhorn-Knopp算法解决OT问题会带来25%的额外训练时间,这对于训练300个epoch来说是相当昂贵的。因此,我们将其简化为动态top-k策略,命名为SimOTA,以获得近似解。
我们在这里简单介绍一下SimOTA。SimOTA首先计算每个预测对的成对匹配度,用成本或质量表示。例如,在SimOTA中,gt gi与预测pj之间的代价计算为:
在这里插入图片描述
其中λ是平衡系数。L cls ij和L regij是gt gi与预测pj之间的分类损失和回归损失。然后,对于gt gi,我们选择固定中心区域内代价最小的前k个预测作为其正样本。最后,将这些正预测对应的网格赋值为正,其余网格赋值为负。请注意,值k随不同的真值而变化。详见OTA中的动态k估计策略.
SimOTA不仅减少了训练时间,而且避免了SinkhornKnopp算法中额外的求解器超参数。如表2所示,SimOTA将检测器的AP从45.0%提高到47.3%,比SOTA ultralytics-YOLOv3高3.0% AP,显示了高级分配策略的强大。

端到端的YOLO

我们按照添加了两个额外的卷积层,一对一的标签分配和停止梯度。
这使得检测器能够以端到端方式执行,但会略微降低性能和推理速度,如表2所示。因此,我们将其作为一个可选模块,不涉及我们的最终模型

2.2其它的主干

除了DarkNet53,我们还在其他不同大小的骨干网上测试了YOLOX, YOLOX对所有相应的骨干网都取得了一致的改进。

修改YOLOV5里的CSPNet

为了进行公平的比较,我们采用了完全相同的YOLOv5的主干,包括修改后的CSPNet、SiLU激活和PAN头。我们还遵循其缩放规则,生产YOLOXS, YOLOX-M, YOLOX-L和YOLOX-X型号。与表3中的YOLOv5相比,我们的模型得到了一致的改善,AP提高了~ 3.0%至~ 1.0%,只有边际时间增加(来自解耦的头部)。
在这里插入图片描述
表3:YOLOX和YOLOv5在COCO上的AP(%)比较。所有模型都在640 × 640分辨率下进行测试,在特斯拉V100上采用fp16精度和batch=1

Tiny和Nano检测器

我们进一步将模型缩小为YOLOX-Tiny,与YOLOv4-Tiny进行比较。对于移动设备,我们采用深度卷积构建了一个只有0.91M参数和1.08G FLOPs的YOLOX-Nano模型。如表4所示,YOLOX在更小的模型尺寸下也表现良好。
在这里插入图片描述
表4:YOLOX-Tiny和YOLOX-Nano与同类产品在COCO val上的AP(%)比较。所有模型均以416 × 416分辨率进行测试。

模型尺寸和数据增强

在我们的实验中,所有的模型保持几乎相同的学习进度和优化参数,如2.1所示。然而,我们发现,不同尺寸的模型,合适的增强策略是不同的。由表5可以看出,虽然对YOLOX-L应用MixUp可以提高0.9%的AP,但对于像YOLOX-Nano这样的小车型,最好削弱其增强作用。具体来说,我们在训练小型模型(即YOLOX-S, YOLOX-Tiny和YOLOX-Nano)时去除混合增强并削弱马赛克(将比例范围从[0.1,2.0]减小到[0.5,1.5])。这样的修改将YOLOX-Nano的AP从24.0%提高到25.3%。
在这里插入图片描述
表5:不同模型规模下的数据扩充效果。“scale Jit"。表示马赛克图像的尺度抖动范围。当采用Copypaste时,将使用来自COCO训练的实例掩码注释

对于大型模型,我们还发现更强的增强更有帮助。实际上,我们的MixUp实现比原始版本要重一些。受Copypaste的启发,我们在混合它们之前通过随机采样比例因子对两个图像进行抖动。为了理解Mixup与scale jit规模抖动的力量,我们将其与yolox-L上的Copypaste进行比较。注意,Copypaste需要额外的实例掩码注释,而MixUp不需要。但如表5所示,这两种方法的性能相当,说明在没有实例掩码注释的情况下,带规模抖动的MixUp是Copypaste的合格替代品

3.与SOTA的比较

传统上显示SOTA比较表如表6所示。但是,请记住,该表中模型的推理速度通常是不受控制的,因为速度随软件和硬件的不同而变化。因此,我们对图1中的所有YOLO系列使用相同的硬件和代码库,绘制出多少受控制的速度/精度曲线。
我们注意到有一些更大模型尺寸的高性能YOLO系列,如Scale-YOLOv4和YOLOv5-P6。目前基于Transformer的检测器将精度- sota提高到~ 60 AP。由于时间和资源限制,我们在本报告中没有探讨这些重要特征。然而,它们已经在我们的范围之内了。
在这里插入图片描述
表6:不同目标检测器在COCO 2017测试开发上的速度和精度比较。为了公平比较,我们选择了在300个epoch上训练的所有模型

4.流媒体感知挑战赛第一名(WAD at CVPR 2021)

WAD 2021上的流感知挑战是通过最近提出的一个度量来联合评估准确性和延迟:流精度。该度量是联合评估整个感知堆栈在每个时刻的输出,迫使堆栈考虑在计算发生时应该忽略的流数据量。我们发现在30fps数据流上度量的最佳折衷点是一个推理时间≤33ms的强大模型。因此,我们采用yolox - l模型和TensorRT来制作我们的最终模型,以获得第一名的挑战。详情请参阅挑战赛网站5。

5.总结

在本报告中,我们介绍了YOLO系列的一些经验更新,它形成了一个高性能的无锚点检测器YOLOX。配备了一些最新的先进检测技术,即解耦头部,无锚点和先进的标签分配策略,YOLOX在所有模型尺寸上都比其他同类产品在速度和准确性之间取得了更好的平衡。值得注意的是,我们将YOLOv3的架构提升到了47.3%的AP,超过了目前最佳实践的3.0% AP。我们希望这份报告可以帮助开发人员和研究人员在实际场景中获得更好的体验。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
yolox的损失函数主要包括分类损失和定位损失。分类损失是通过计算预测类别与真实类别之间的交叉熵损失来衡量分类的准确性。定位损失则是通过计算预测框与真实框之间的差异来衡量定位的准确性。 具体来说,对于分类损失,yolox使用了二元交叉熵损失函数。首先,将预测的类别概率进行平方根处理,然后与真实的类别标签进行比较,计算二元交叉熵损失。这个损失函数会对每个样本的分类结果进行计算,并将所有样本的损失值进行求和。 对于定位损失,yolox采用了Anchor free的方式。网络最后输出的特征向量的维度是85*8400,其中每个特征向量包含了预测框的中心点坐标、宽高值以及置信度。定位损失只关注正样本,通过将实际标注框的中心点坐标和宽高值代入损失函数,反求出预测框的中心点坐标和宽高值。然后计算预测框与真实框之间的差值的平方和,并除以正样本的总数,得到定位损失。 综上所述,yolox的损失函数包括分类损失和定位损失,通过计算交叉熵损失和差值的平方和来衡量分类和定位的准确性。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *2* [yolox知识点](https://blog.csdn.net/sinat_39307513/article/details/119751702)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [YOLO系列损失函数详解](https://blog.csdn.net/m0_56247038/article/details/125981901)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值