YOLOv10:实时端到端目标检测(论文学习和代码运行)

论文地址: 2405.14458 (arxiv.org)
概述:
主要针对NMS和YOLOs中存在的计算冗余进行改进,首先提出了一种一致的双任务方法,用于无nms训练的YOLOs,它同时带来了具有竞争力的性能和较低的推理延迟。此外,还介绍了整体效率-精度驱动的模型设计策略。从效率和精度两个角度对YOLOs的各个组成部分进行了全面优化,大大降低了计算开销,增强了性能。
模型训练速度是真的快,在我的数据集(2200张图片)跑了一下yolov10n,训练速度比v8要快近5倍
训练:500 epochs completed in 1.112 hours.
Speed: 1.3ms preprocess, 1.3ms inference, 0.0ms loss, 0.0ms postprocess per image
但精度比yolov8n低一点:mAP50:0.949 mAP50-95) 0.73
对比yolov8,
训练:350 epochs completed in 3.534 hours,
Speed: 0.5ms preprocess, 1.7ms inference, 0.0ms loss, 0.8ms postprocess per image
但精度比yolov8n低一点:mAP50:0.957 mAP50-95) 0.728

1 Introduction

作者指出实时目标检测是计算机视觉领域的一个关键研究方向,具有广泛的实际应用价值。尽管YOLO系列算法已经在实时目标检测中取得了显著的进展,但仍存在依赖NMS导致的端到端部署难题和推理延迟问题,以及模型设计中缺乏全面优化导致的计算冗余。因此,本研究的目标是通过提出新的后处理策略和全面优化模型架构,进一步提升YOLO算法在效率和准确性之间的平衡,推动其实时目标检测的性能边界。

2 Related Work

实时目标探测器。
实时目标检测的目的是在低延迟的情况下对目标进行分类和定位,这对现实世界的应用至关重要。在过去的几年里,大量的努力已经指向开发高效的探测器[18,51,43,32,72,69,30,29,39]。其中,YOLO系列最为主流。YOLOv1、YOLOv2和YOLOv3识别了典型的检测架构,由脊柱、颈部和头部三部分组成。YOLOv4和YOLOv5]引入了CSPNet设计来取代DarkNet,并结合了数据增强策略、增强的PAN和更多样化的模型尺度等。YOLOv6分别为颈部和脊柱提供了BiC和SimCSPSPPF,并采用锚定辅助训练和自蒸馏策略。YOLOv7引入了E-ELAN的富梯度流路径,并探索了几种可训练的免费袋方法。YOLOv8提出了C2f构建块,用于有效的特征提取和融合。Gold-YOLO提供了先进的GD机制来增强多尺度特征融合能力。YOLOv9提出了GELAN来改进体系结构和PGI来增强训练过程
端到端对象检测器。
端到端目标检测已经成为传统管道的范式转变,提供了简化的架构。DETR引入transformer架构,采用匈牙利损耗实现一对一匹配预测,从而消除了手工制作元器件和后处理。此后,人们提出了各种各样的DETR变体来提高其性能和效率。deformable - detr利用多尺度可变形注意力模块加快收敛速度。DINO将对比去噪、混合查询选择和前向两次方案集成到der中。
RT-DETR进一步设计了高效的混合编码器,并提出了最小不确定性查询选择,以提高准确性和延迟。另一条实现端到端目标检测的线路是基于CNN检测器。可学习NMS和关系网络提供了另一种网络来消除检测器的重复预测。OneNet和DeFCN提出了一对一匹配策略,以实现完全卷积网络的端到端目标检测。

3 Methodology

3.1 一致的双重赋值用于无需NMS的训练

提出了一种具有双标签分配和一致匹配度量的无nms的yolo训练策略,实现了高效率和竞争性的性能。
双重标签赋值。与一对多赋值不同,一对一匹配仅为每个真实标注分配一个预测,避免了NMS后处理。然而,这导致监督信号变弱,引起次优的准确性和收敛速度[75]。幸运的是,这种缺陷可以通过一对多赋值[5]得到补偿。为了实现这一点,我们为YOLOs引入了双重标签赋值,以结合两种策略的优势。具体来说,如图2.(a)所示,我们为YOLOs增加了另一个一对一的头部。它保持与原始一对多分支相同的结构,并采用相同的优化目标,但利用一对一匹配获得标签赋值。在训练期间,两个头部与模型一起进行联合优化,允许主干网络和连接部分享受由一对多赋值提供的丰富监督。 在推理期间,我们丢弃一对多头部,并使用一对一头部进行预测。这使得YOLOs能够实现无需任何额外推理成本的端到端部署。此外,在一对一匹配中,我们采用顶部选择,这在训练时间上少于匈牙利匹配[4],但实现了相同的性能。
一对多赋值(One-to-Many Assignment) 一个真实物体可以与多个预定义框匹配,需要使用NMS来处理得到最佳的框。
一对一匹配(One-to-One Matching): 每个真实存在的物体(ground-truth object)在模型训练过程中只对应一个正样本(positive sample)。
YOLOv10提出的一致的双重赋值策略,实际上是结合了一对一和一对多匹配的优点。它在训练时使用一对多赋值来提供丰富的监督信号,两个头部与模型一起进行联合优化, 而在推理时切换到一对一匹配,以实现无需NMS的高效率检测。这种方法旨在提高模型的性能,同时保持推理过程的高效性。
  1. 匹配度量的组成
    • m(α, β):这是匹配度量的标准函数,用于评估预测(ˆb)与实例(b)之间的一致性。
    • s:空间先验,表示预测的锚点是否在实例内。
    • p:分类得分,表示预测框属于某个类别的概率。
    • IoU(ˆb, b):预测框(ˆb)和真实框(b)之间的交并比,衡量预测框的准确性。
    • α 和 β:超参数,用于平衡分类得分和IoU对匹配度量的影响。
图2有点难理解,感觉讲得不清楚,我理解论文的意思不知道对不对,
比如在inconsistent,不一致, αo2o=0.5; βo2o =2.时, One-to-One和 One-to-Many计算得到的m不一致,这个时候 One-to-One预测结果 One-to-Many得到的预测框中Top-1/5/10中的频率。
但问了kimi,它解释是: "YOLOv8-S的一对多结果的Top-1/5/10中一对一分配的频率" 这句话是说,在YOLOv8-S模型使用一对多赋值策略得到的预测结果排序中,我们考察排名最高的1个、5个和10个预测框里,有多少是通过一对一赋值策略得到的,以此来评估两种赋值策略的效果和一致性。

3.2 整体效率-精度驱动的模型设计

普通人——yolo模型的魔改,这里—— 整体效率-精度驱动的模型设计听着就高端大气上档次了。
针对模型体系结构表现出不可忽略的计算冗余和约束能力问题, 从效率和准确性的角度全面进行YOLOs的模型设计。
1. 效率驱动的模型设计(Efficiency Driven Model Design):
    * 轻量级分类头(Lightweight Classification Head):简化分类头的架构,以减少计算量和参数数量,同时保持性能。
    * 空间-通道解耦下采样(Spatial-Channel Decoupled Downsampling):将空间下采样和通道扩展的操作解耦,以更高效的方式进行下采样,减少计算成本。
    * 基于秩引导的块设计(Rank-Guided Block Design):利用内在秩(intrinsic rank)分析不同阶段的冗余度,采用紧凑的架构设计减少计算复杂性,并通过秩引导的块分配策略,在保持性能的同时实现更高的效率。
2. 准确性驱动的模型设计(Accuracy Driven Model Design):
    * 大核心卷积(Large-Kernel Convolution):在深层阶段使用大核心深度卷积来扩大感受野,增强模型的表示能力,特别是在小模型尺度上。
    * 部分自注意力模块(Partial Self-Attention, PSA):引入部分自注意力机制来增强模型的全局建模能力,同时通过设计减少计算复杂性和内存占用。

4 Experiments

  1. 性能提升:YOLOv10在不同模型尺寸上与其他YOLO系列模型以及一些其他先进的目标检测模型相比,显示出了在准确性(AP)、参数数量、计算量(FLOPs)和推理延迟方面的显著提升。
  2. 延迟-准确性权衡:YOLOv10在保持较低延迟的同时实现了更高的准确性。例如,YOLOv10-S在与RT-DETR-R18相似的平均精度(AP)下,推理速度提升了1.8倍。
  3. 参数和计算效率:YOLOv10模型在参数数量和计算量上都有显著减少。与YOLOv9-C相比,YOLOv10-B在保持相同性能的同时,延迟减少了46%,参数数量减少了25%。
  4. 不同模型尺寸的比较:YOLOv10提供了不同尺寸的模型变体(如N/S/M/B/L/X),以适应不同的计算能力和实时性要求。这些变体在各自的尺寸类别中均展示了优异的性能。
  5. 端到端检测:YOLOv10作为一个端到端的检测器,无需额外的后处理步骤如NMS,进一步提高了推理速度。
  6. COCO数据集上的表现:在标准的COCO目标检测数据集上,YOLOv10在各种模型尺寸上均实现了比以前的模型更高的平均精度(AP)。
  7. 代码开源:作者提供了YOLOv10的代码,使得研究者和开发者可以访问、使用和进一步研究这一模型。

5.代码运行

yolov10的代码是在v8基础上改的,代码结构也几乎一样,比较简单

如果报错
KeyError: 'SCDovn'
报错原因:'SCDovn'没有编译到环境里面,
解决办法:在代码路径下运行
pip install -e .
  • 34
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值