赞
踩
YOLO算法更新速度很快,已经出到V10版本,后续大家有想发论文或者搞项目可更新自己的baseline了。下面为本人画的YOLOv10的结构图。
代码:GitHub - THU-MIG/yolov10: YOLOv10: Real-Time End-to-End Object Detection
摘要:在过去的几年里,由于在计算成本和检测性能之间取得了有效的平衡,YOLOs已经成为实时目标检测领域的主导范式。研究人员已经对yolo的架构设计、优化目标、数据增强策略等进行了探索,并取得了显著进展。然而,对非最大抑制(NMS)的后处理依赖阻碍了yolo的端到端部署,并对推理延迟产生不利影响。此外,YOLOs中各部件的设计缺乏全面彻底的检查,导致计算冗余明显,限制了模型的能力。它提供了次优的效率,以及相当大的性能改进潜力。在这项工作中,我们的目标是从后处理和模型架构两个方面进一步推进YOLOs的性能效率边界。为此,我们首先提出了一种一致的双任务方法,用于无nms训练的YOLOs,它同时带来了具有竞争力的性能和较低的推理延迟。此外,我们还介绍了整体效率-精度驱动的模型设计策略。我们从效率和精度两个角度对YOLOs的各个组成部分进行了全面优化,大大降低了计算开销,增强了性能。我们的努力成果是用于实时端到端目标检测的新一代YOLO系列,称为YOLOv10。大量的实验表明,YOLOv10在各种模型尺度上都达到了最先进的性能和效率。例如,我们的YOLOv10-S在COCO上类似的AP下比RT-DETR-R18快1.8倍,同时参数数量和FLOPs减少2.8倍。与YOLOv9-C相比,在相同性能下,YOLOv10-B的延迟减少了46%,参数减少了25% 。
1介绍
实时目标检测一直是计算机视觉领域的研究热点,其目的是在低延迟下准确预测图像中目标的类别和位置。它被广泛应用于各种实际应用,包括自动驾驶[3]、机器人导航[11]、目标跟踪[66]等。近年来,研究人员致力于设计基于cnn的目标检测器来实现实时检测[18,22,43,44,45,51,12]。其中,yolo因其在性能和效率之间的平衡而越来越受欢迎[2,19,27,19,20,59,54,64,7,65,16,27]。yolo的检测流程由模型前处理和NMS后处理两部分组成。然而,这两种方法都有不足之处,导致精度-延迟边界不够理想。具体来说,yolo在训练过程中通常采用一对多的标签分配策略,即一个真值对象对应多个正样本。尽管这种方法产生了优越的性能,但需要NMS在推理过程中选择最佳的正预测。这降低了推理速度,使性能对NMS的超参数敏感,从而阻碍了YOLOs实现端到端最优部署[71]。解决这个问题的一个方法是采用最近引入的端到端DETR架构[4,74,67,28,34,40,61]。例如,RT-DETR[71]提出了一种高效的混合编码器和最小不确定性查询选择,将detr推进到实时应用领域。然而,部署der的固有复杂性阻碍了其在准确性和速度之间实现最佳平衡的能力。另一条路线是探索基于cnn的检测器的端到端检测,该检测器通常利用一对一分配策略来抑制冗余预测[5,49,60,73,16]。此外,模型架构设计仍然是YOLOs面临的一个基本挑战,它对精度和速度有重要影响[45,16,65,7]。为了实现更高效的模型架构,研究人员探索了不同的设计策略。为增强主干特征提取能力,提出了多种主计算单元,包括DarkNet[43,44,45]、CSPNet[2]、EfficientRep[27]和ELAN[56,58]等。对于颈部,研究了PAN[35]、BiC[27]、GD[54]、RepGFPN[65]等方法来增强多尺度特征融合。此外,还研究了模型缩放策略[56,55]和重新参数化[10,27]技术。虽然这些努力取得了显著的进展,但从效率和精度的角度对YOLOs中各种组件的全面检查仍然缺乏。因此,yolo内部仍然存在相当大的计算冗余,导致参数利用率低,效率次优。此外,由此产生的受约束的模型能力也导致了较差的性能,为精度的提高留下了充足的空间。在这项工作中,我们的目标是解决这些问题,并进一步推进YOLOs的精度-速度边界。我们的目标是整个检测管道的后处理和模型架构。为此,我们首先提出了一种具有双标签分配和一致匹配度量的无nms yolo的一致双分配策略,解决了后处理中的冗余预测问题。它使模型在训练过程中得到丰富和谐的监督,而在推理过程中不需要NMS,从而获得高效率的竞争性能。其次,通过对YOLOs中各部件的全面检测,提出了整体效率-精度驱动的模型体系结构设计策略;为了提高效率,我们提出了轻量化分类头、空间信道解耦下采样和秩引导块设计,以减少显式计算冗余,实现更高效的架构。为了提高准确性,我们探索了大核卷积,并提出了有效的部分自关注模块来增强模型能力,利用低成本下的性能改进潜力。基于这些方法,我们成功地实现了一系列具有不同模型尺度的实时端到端检测器,即YOLOv10- n / S / M / B / L / x。在目标检测的标准基准(即COCO)上进行的大量实验[33]表明,我们的YOLOv10在各种模型尺度的计算精度权衡方面可以显著优于以前最先进的模型。如图1所示,在相同性能下,我们的YOLOv10-S / X分别比RT-DETRR18 / R101快1.8倍/ 1.3倍。与YOLOv9-C相比,在相同的性能下,YOLOv10-B的延迟降低了46%。此外,YOLOv10具有高效的参数利用率。我们的YOLOv10-L / X比YOLOv8-L / X分别高出0.3 AP和0.5 AP,参数数量分别减少1.8倍和2.3倍。与YOLOv9-M / yolov10 - ms相比,YOLOv10-M实现了2个相似的AP,参数分别减少了23% / 31%。我们希望我们的工作能够激发该领域的进一步研究和进步。
2 工作
在训练过程中,YOLOs[20,59,27,64]通常利用TAL[14]为每个实例分配多个阳性样本。采用一对多分配,可以产生丰富的监控信号,便于优化,实现更优的性能。但是,它需要yolo依赖NMS的后处理,导致部署的推理效率不够理想。虽然以前的研究[49,60,73,5]探索一对一匹配来抑制冗余预测,但它们通常会引入额外的推理开销或产生次优性能。在这项工作中,我们提出了一种具有双标签分配和一致匹配度量的无nms的yolo训练策略,实现了高效率和竞争性的性能。双标签分配。与一对多分配不同,一对一匹配只对每个基本事实分配一个预测,避免了NMS的后处理。然而,它导致弱监督,导致次优精度和收敛速度[75]。幸运的是,这个缺陷可以通过一对多赋值来弥补[5]。为了实现这一目标,我们为yolo引入了双标签分配,以结合两种策略的优点。具体来说,如图2.(a)所示,我们为yolo加入了另一个一对一的头部。它保留了与原始一对多分支相同的结构和优化目标,但利用一对一匹配来获得标签分配。在训练过程中,两个头部与模型共同优化,使脊柱和颈部享受到一对多分配所提供的丰富监督。在推理过程中,我们抛弃了一对多头像,利用一对一头像进行预测。这使yolo能够进行端到端部署,而不会产生任何额外的推理成本。此外,在一对一匹配中,我们采用了top 1的选择,达到了与匈牙利匹配[4]相同的效果,并且减少了额外的训练时间。
3.2整体效率-精度驱动的模型设计除了后处理之外,yolo的模型架构也对效率-精度权衡提出了很大的挑战[45,7,27]。尽管之前的作品探索了各种设计策略,
3 代码
网络结构与YOLOv8相似,就是增加了一些SCDown等新的模块。
yolov10n.yaml如下所示
- # Parameters
- nc: 80 # number of classes
- scales: # model compound scaling constants, i.e. 'model=yolov8n.yaml' will call yolov8.yaml with scale 'n'
- # [depth, width, max_channels]
- n: [0.33, 0.25, 1024]
-
- # YOLOv8.0n backbone
- backbone:
- # [from, repeats, module, args]
- - [-1, 1, Conv, [64, 3, 2]] # 0-P1/2
- - [-1, 1, Conv, [128, 3, 2]] # 1-P2/4
- - [-1, 3, C2f, [128, True]]
- - [-1, 1, Conv, [256, 3, 2]] # 3-P3/8
- - [-1, 6, C2f, [256, True]]
- - [-1, 1, SCDown, [512, 3, 2]] # 5-P4/16
- - [-1, 6, C2f, [512, True]]
- - [-1, 1, SCDown, [1024, 3, 2]] # 7-P5/32
- - [-1, 3, C2f, [1024, True]]
- - [-1, 1, SPPF, [1024, 5]] # 9
- - [-1, 1, PSA, [1024]] # 10
-
- # YOLOv8.0n head
- head:
- - [-1, 1, nn.Upsample, [None, 2, "nearest"]]
- - [[-1, 6], 1, Concat, [1]] # cat backbone P4
- - [-1, 3, C2f, [512]] # 13
-
- - [-1, 1, nn.Upsample, [None, 2, "nearest"]]
- - [[-1, 4], 1, Concat, [1]] # cat backbone P3
- - [-1, 3, C2f, [256]] # 16 (P3/8-small)
-
- - [-1, 1, Conv, [256, 3, 2]]
- - [[-1, 13], 1, Concat, [1]] # cat head P4
- - [-1, 3, C2f, [512]] # 19 (P4/16-medium)
-
- - [-1, 1, SCDown, [512, 3, 2]]
- - [[-1, 10], 1, Concat, [1]] # cat head P5
- - [-1, 3, C2fCIB, [1024, True, True]] # 22 (P5/32-large)
-
- - [[16, 19, 22], 1, v10Detect, [nc]] # Detect(P3, P4, P5)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。