【论文解析】YOLOv10论文解析与VisDrone数据集训练


论文标题:YOLOv10:Real-Time End-to-End Object Detection
论文作者源码:Github | YOLOv10
YOLOv9还没出来多久,清华团队的YOLOv10算法就已经出来,而且在速度和精度上都赶超v8和v9,下面我们一起看看YOLOv10算法
在这里插入图片描述

一、文章摘要

背景和动机:YOLOs系列架构中,依赖非最大值抑制(NMS)进行后处理阻碍了YOLO的端到端部署,这对推理延迟产生不利影响。此外,YOLOs模型中各组分的设计缺乏全面、彻底思考,导致计算冗余明显,由此产生的受约束的模型能力也导致了较差的性能。

作者的方法和思想:提出一种consistent dual assignment 策略,解决后处理中冗余预测的问题,它同时带来了具有竞争力的性能和低推理延迟;其次,引入了基于效率-精度驱动的整体模型设计策略,从效率和精度两个角度对YOLOs的各个组成部分进行了全面优化,大大降低了计算开销,提升了性能。

实验结果:大量的实验表明,YOLOv10在各种模型尺度上都达到了最先进的性能和效率。例如,YOLOv10-S在COCO上类似的AP下比RT-DETR-R18快1.8倍,同时参数数量和FLOPs减少2.8倍。与YOLOv9-C相比,在相同性能下,YOLOv10-B的延迟减少了46%,参数减少了25%


二、方法论和思想

2.1 Consistent Dual Assignments for NMS-free Training

在训练过程中,YOLOs架构通常利用TAL(Task Alignment Learning)为每个实例分配多个正样本。但是,YOLOs需要依赖NMS的后处理,导致部署的推理效率不够理想。虽然以前的研究探索一对一匹配来抑制冗余预测,但它们通常会引入额外的推理开销或产生次优性能。因此,作者引入Dual label assignments 和 Consistent matching metric来解决上述问题。
在这里插入图片描述

双重标签匹配 Dual label assignments

与一对多分配不同,一对一匹配只为每个基本事实分配一个预测,避免了 NMS 后处理。然而,它导致了弱监督,这导致了次优的准确性和收敛速度。因此,作者引入双重标签分配(dual label assignments )策略,以结合这两种策略的优点。
作者为YOLOs引入一对一头部,它保留了一对多头部的相同结构,并采用与原始一对多分支相同的优化目标,但利用一对一匹配来获得标签分配。在训练期间,两个头部与模型联合优化。

在推理过程中,作者丢弃一对多的头部并利用一对一的头部进行预测。 这使得 YOLO 能够用于端到端部署,而不会产生任何额外的推理成本。此外,在一对一匹配中,我们采用top_1选择方法,实现了与匈牙利匹配相同的性能,训练时间更少。

一致匹配度量 Consistent matching metric

在标签分配过程中,一对一和一对多方法都采用一种度量来定量评估预测与实例之间的一致性水平。为了实现两个分支的预测感知匹配,作者采用了一个统一的匹配度量:
m ( α , β ) = s ⋅ p α ⋅ I o U ( b ^ , b ) β m(α, β) = s·p^α ·IoU(\widehat{b}, b)^β m(α,β)=spαIoU(b ,b)β

其中 p p p为分类得分, b b b b ^ \widehat{b} b 为表示预测和实例的边界框, s s s表示空间先验,指示预测的锚点是否在实例内。 α α α β β β是平衡语义预测任务和位置回归任务影响的两个重要超参数。作者将一对一和一对多指标记为 m o 2 o = m ( α o 2 o , β o 2 o ) m_{o2o}=m(α_{o2o}, β_{o2o}) mo2o=m(αo2o,βo2o) m o 2 m = m ( α o 2 m , β o 2 m ) m_{o2m}=m(α_{o2m}, β_{o2m}) mo2m=m(αo2m,βo2m) 。这些指标会影响一对一和一对多这两个头部的标签分配和监督信息。

在双重标签分配中,一对多分支提供了比一对一分支更丰富的监督信号。因此,作者朝着一对多的头部优化的方向对一对一的头部进行优化。这样使得一对一头部在推理过程中可以提供更高质量的样本,从而获得更好的性能。

为此,作者分析了一对一和一对多两个头部之间的监督差距。由于训练期间的随机性,作者从使用相同值初始化的两个头开始开始检查并产生相同的预测,即一对一头和一对多头为每个预测实例对生成相同的 p p p I o U IoU IoU。作者注意到,两个分支的回归目标不冲突,因为匹配的预测共享相同的目标,并且忽略不匹配的预测。因此,监管差距在于不同的分类目标。

作者将其与预测的最大IoU表示为 u ∗ u^* u,最大的一对一和一对多匹配分数分别为 m o 2 o ∗ m^*_{o2o} mo2o m o 2 m ∗ m^*_{o2m} mo2m 。假设一对多分支产生了正样本 Ω Ω Ω,而一对一分支选择了使用度量 m o 2 o , i m_{o2o},i mo2o,i= m o 2 o ∗ m^*_{o2o} mo2o 的第 i i i个预测,则作者可以推导出一对多分支的分类目标 t o 2 m , j t_{o2m,j} to2m,j = u ∗ ⋅ m o 2 m , j m o 2 m ≤ u ∗ u^*·\frac{m_{o2m,j}}{m_{o2m}}≤u^* umo2mmo2m,ju。对于 j ∈ Ω j∈Ω jΩ和一对一任务的对齐损失 t o 2 o , i = u ∗ ⋅ m o 2 o , i m o 2 o = u ∗ t_{o2o,i} = u^*·\frac{m_{o2o,i}}{m_{o2o}}=u^* to2o,i=umo2omo2o,i=u。因此,可以通过不同分类目标的1-Wasserstein距离来推导两个分支之间的监督差距:
在这里插入图片描述
作者观察到,随着 t o 2 m , i t_{o2m,i} to2m,i 的增加,差距在缩小,即 i i i Ω Ω Ω中的排名更高。当 t o 2 m , i t_{o2m,i} to2m,i = u ∗ u^* u时,差距达到最小,即 i i i Ω Ω Ω中最佳的正样本,如Figure2(a)所示。为了实现这一点,作者提出了保持一致的匹配度量,即 α o 2 o = r ⋅ α o 2 m α_{o2o}=r·α_{o2m} αo2o=rαo2m β o 2 o = r ⋅ β o 2 m β_{o2o}=r·β_{o2m} βo2o=rβo2m,这意味着 m o 2 o ∗ m^*_{o2o} mo2o= m o 2 m r m^r_{o2m} mo2mr。因此,对于一对多头来说最佳的阳性样本对于一对一头来说也是最佳的。因此,两个头可以一致和谐地优化。为了简便,作者将 r r r设为1,默认 α o 2 o = α o 2 m α_{o2o}=α_{o2m} αo2o=αo2m β o 2 o = β o 2 m β_{o2o}=β_{o2m} βo2o=βo2m。为了验证改进的监督对齐,作者在训练后统计了一对多结果前1/5/10中一对一匹配对的数量。如Figure2(b)所示,在一致的匹配度量下,对齐得到了改善。为了更全面地理解数学证明,请参考附录。

2.2 Holistic Efficiency-Accuracy Driven Model Design

作者探讨了模型架构表现出不可忽略的计算冗余和约束能力,这阻碍了其实现高效率和性能的潜力。因此,作者从效率和准确性的角度全面执行YOLOs的模型设计。
在这里插入图片描述

高效驱动模型设计 Efficiency driven model design
  • (1)Lightweight classification head:作者简单地对分类头采用轻量级架构,它由两个深度可分离卷积组成,内核大小为 3×3,然后是 1×1 卷积
  • (2)Spatial-channel decoupled downsampling:利用点卷积对通道维数进行调整,然后利用深度卷积进行空间下采样,这样做可以最大化下采样期间的信息保留,导致与延迟减少竞争的性能。
  • (3)Rank-guided block design:YOLOs通常对所有阶段使用相同的基本构建块,但在深层阶段和大模型容易表现出更多的冗余、因此,作者利用内在秩来分析每个阶段的冗余性,并提出了一种秩引导的块设计方案,旨在通过紧凑型架构设计减少被显示为冗余的阶段的复杂性。首先,作者提出了一个CIB结构,它采用深度卷积进行空间混合和高效的点卷积进行通道混合,如Figure3(b)所示。它可以作为高效的基本构建块,嵌入到ELAN结构。然后,作者提倡一种秩引导的块分配策略,在保持竞争力的同时实现最佳效率。作者在附录中也给出了秩引导的块分配策略,请参考附录。
准确驱动模型设计 Accuracy driven model design
  • (1)Large-kernel convolution:采用大核深度卷积是扩大感受野和增强模型能力的有效方法,然而,简单地在所有阶段利用它们可能会在用于检测小物体的浅层特征中引入污染(噪声),同时也在高分辨率阶段引入显著的I/O开销和延迟。因此作者将CIB块中第二个3×3深度卷积的核大小增加到7×7。此外,作者采用结构重新参数化技术来引入另一个 3×3 深度卷积分支来缓解优化问题,而无需推理开销。此外,随着模型大小的增加,其感受野自然扩大,这得益于使用大内核卷积递减。因此,作者只对小模型尺度采用大核卷积。

  • (2)Partial self-attention (PSA):由于自注意力机制表现出较高的计算复杂度和内存占用,因此作者提出一个有效的部分自我注意(PSA)模块,如Figure 3©所示,在1×1卷积之后,作者将跨通道的特征均匀地划分为两部分,只将一部分输入由多头自注意力模块 (MHSA) 和前馈网络 (FFN) 组成的 NPSA 块。然后通过 1×1 卷积连接和融合两部分。此外,作者遵循将query和key的维度分配给MHSA中值的一半,并将LayerNorm替换为BatchNorm进行快速推理。此外,PSA只在分辨率最低的阶段4之后放置,避免了自注意二次计算复杂度的过度开销。


三、实验分析

作者选择YOLOv8作为baseline model,通过无 NMS 训练采用一致的双重分配,并在此基础上进行整体效率-精度驱动模型设计,推出了 YOLOv10 模型。YOLOv10 与 YOLOv8 具有相同的变体,即 N / S / M / L / X。此外,作者通过简单地增加YOLOv10-M的宽度比例因子,推导出一种新的变体YOLOv10-B。作者的实验采用training-from-scratch设置,在COCO上验证了所提出的检测器。此外,所有模型的延迟在带有TensorRT FP16的T4 GPU上进行了测试。
具体的实验细节和实验结论,请参考论文和附录,这里就不展开阐述了。


四、YOLOv10算法在VisDrone数据集的训练

  • 一、VisDrone2019数据集
    1、作者基于YOLOv8算法改进的,因此很多训练方式跟v8很类似,这里先下载YOLOv10代码,这里就不过多展示;
    2、针对VisDrone2019数据集的介绍,这里就不多阐述,这边给出VisDrone数据集下载链接: VisDrone2019 ;或者作者已经整理好相应百度网盘链接: VisDrone 提取码:htmg
    3、将VisDrone.yaml配置文件放置到 yolov10-main/ultralytics/cfg/datasets目录下,这里给出VisDrone.yaml文件配置:
train: datasets/VisDrone/train/images  # train images (relative to 'path')  6471 images
val: datasets/VisDrone/val/images  # val images (relative to 'path')  548 images
test: datasets/VisDrone/test/images  # test images (optional)  1610 images

# Classes
names:
  0: pedestrian
  1: people
  2: bicycle
  3: car
  4: van
  5: truck
  6: tricycle
  7: awning-tricycle
  8: bus
  9: motor

注意:这里训练、验证和测试记得修改为自己数据集的路径!

  • 二、实验的配置参数与训练

对于训练的超参数的设定,请参考 ultralytics/cfg/default.yaml 文件,这里就不展示了。

本文训练VisDrone数据集时,在代码根目录下创建了main.py,代码如下:

from ultralytics import YOLOv10

if __name__ == '__main__':
    # Load a model
    model = YOLOv10(r"ultralytics/cfg/models/v10/yolov10l.yaml", verbose=True)  # build a new model from scratch
    # Use the model
    model.train(data="ultralytics/cfg/datasets/VisDrone.yaml", epochs=200)  # train the model

上述准备做好之后,基本上就可以训练了。
下面是测试结果:

	from ultralytics import YOLOv10
	model = YOLOv10(r"runs/detect/train/weights/best.pt", verbose=True)  # build a new model from scratch
    # # Use the model
    metrics = model.val(data=r"ultralytics/cfg/datasets/VisDrone.yaml", split="test", save_json=False)  # evaluate model performance on the validation set

在这里插入图片描述


五、总结

在本文中,作者在 YOLOs检测任务中同时针对后处理和模型架构。对于后处理,作者提出了用于无 NMS 训练的一致双重分配,实现了高效的端到端检测。对于模型架构,作者引入了整体效率-精度驱动模型设计策略,提高了性能-效率权衡。大量的实验表明,与其他先进的检测器相比,YOLOv10实现了最先进的性能和延迟,很好地证明了它的优越性。

以上就是本篇文章的内容,若有问题欢迎各位批评指正~

  • 25
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Faster R-CNN是一种基于区域建议网络(Region Proposal Networks,RPN)的物体检测算法,旨在实现实时物体检测。它通过预测每个区域是否含有物体来生成候选框,并使用卷积神经网络(CNN)来确定候选框中的物体类别。Faster R-CNN在提高检测精度的同时,也显著提高了检测速度。 ### 回答2: 在计算机视觉领域中,目标检测一直是热门研究的方向之一。近年来,基于深度学习的目标检测方法已经取得了显著的进展,并且在许多实际应用中得到了广泛的应用。其中,Faster R-CNN 是一种基于区域建议网络(Region Proposal Networks,RPN)的目标检测方法,在检测准确率和速度之间取得了很好的平衡,能够实现实时目标检测。 Faster R-CNN 的基本框架由两个模块组成:区域建议网络(RPN)和检测模块。RPN 主要负责生成候选目标框,而检测模块则利用这些候选框完成目标检测任务。具体来说,RPN 首先在原始图像上以多个尺度的滑动窗口为基础,使用卷积网络获取特征图。然后,在特征图上应用一个小型网络来预测每个位置是否存在目标,以及每个位置的目标边界框的坐标偏移量。最终,RPN 根据预测得分和位置偏移量来选择一部分具有潜在对象的区域,然后将这些区域作为候选框送入检测模块。 检测模块的主要任务是使用候选框来检测图像中的目标类别和位置。具体来说,该模块首先通过将每个候选框映射回原始图像并使用 RoI Pooling 算法来获取固定大小的特征向量。然后,使用全连接神经网络对这些特征向量进行分类和回归,以获得每个框的目标类别和精确位置。 相比于传统的目标检测方法,Faster R-CNN 具有以下优点:首先,通过使用 RPN 可以自动生成候选框,避免了手动设计和选择的过程;其次,通过共享卷积网络可以大大减少计算量,提高效率;最后,Faster R-CNN 在准确率和速度之间取得了很好的平衡,可以实现实时目标检测。 总之,Faster R-CNN 是一种高效、准确的目标检测方法,是深度学习在计算机视觉领域中的重要应用之一。在未来,随着计算机视觉技术的进一步发展,Faster R-CNN 这类基于深度学习的目标检测方法将会得到更广泛的应用。 ### 回答3: Faster R-CNN是一种结合了深度学习和传统目标检测算法的新型目标检测方法,旨在提高目标检测速度和准确率。Faster R-CNN采用了Region Proposal Network(RPN)来生成候选区域,并通过R-CNN网络对候选区域进行分类和定位。 RPN是一种全卷积神经网络,用于在图像中生成潜在的候选区域。RPN通常在卷积特征图上滑动,对每个位置预测k个候选区域和其对应的置信度得分。这样,对于输入图像,在不同大小和宽高比的Anchor上预测候选框,可以在计算上更有效率。 R-CNN网络利用卷积特征图作为输入,对RPN生成的候选区域进行分类和精确定位。与以前的目标检测方法相比,Faster R-CNN使用了共享卷积特征,使得整个检测网络可以端到端地进行训练和优化,缩短了训练时间,同时也更便于理解和改进。 Faster R-CNN不仅具有较高的准确性,还具有较快的检测速度。在各种基准测试中,Faster R-CNN与其他目标检测算法相比,都取得了优异的性能表现。总之,Faster R-CNN将目标检测引入了一个新的阶段,为实时目标检测提供了一个良好的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值