Gold-YOLO:基于收集-分配机制的高效目标检测器

文章目录

  • 摘要
  • 1、简介
  • 2、相关工作
    • 2.1、实时目标检测器
    • 2.2、基于Transformer的目标检测
    • 2.3、用于目标检测的多尺度特征
  • 3、方法
    • 3.1、预备知识
    • 3.2、低级收集和分发分支
    • 3.3、高阶段收集和分发分支
    • 3.4、增强的跨层信息流
    • 3.5、遮罩图像建模预训练
  • 4、实验
    • 4.1、设置
    • 4.2、比较
      • 4.3.2、 关于LAF的消融实验
      • 4.3.3、其他模型和任务的消融研究
  • 5、结论
  • A、附加实验
    • A.1、Gold-YOLO的更详细的准确率和速度数据
    • A.2、MIM预训练消融实验
  • B、综合延迟和吞吐量基准
    • B.1、使用tensort8在T4 GPU上建模延迟和吞吐量
    • B.2、在TensorRT 7上,使用V100 GPU时模型延迟和吞吐量
  • C、更广泛的影响和局限性
  • D、CAM可视化
  • E、论述
    • E.1、Gold-YOLO特征对齐模块与其他类似工作的区别
    • E.2、简单的计算操作

摘要

https://arxiv.org/pdf/2309.11331.pdf
在过去的几年中,YOLO系列模型已经成为实时目标检测领域的领先方法。许多研究通过修改结构、增加数据和设计新的损失,将基线推高到更高的水平。然而,我们发现以前的模型仍然存在信息融合问题,尽管特征金字塔网络(FPN)和路径聚合网络(PANet)缓解了这一问题。因此,本研究提供了一种先进的GD机制,该机制通过卷积和自注意力操作来实现。这种新设计的模型被命名为Gold-YOLO,它提高了多尺度特征融合能力,并在所有模型尺度上实现了延迟和准确性之间的理想平衡。此外,我们首次在YOLO系列中实现了MAE风格的预训练,使得YOLO系列模型可以从无监督的预训练中受益。Gold-YOLO-N在COCO val2017数据集上获得了39.9%的AP,在T4 GPU上获得了1030 FPS,比之前的SOTA型号YOLOv6-3.0-N的FPS高+2.4%。PyTorch代码可在https://github.com/huawei-noah/EfficientComputing/tree/master/Detection/Gold-YOLO获得,MindSpore代码可在https://gitee.com/mindspore/models/tree/master/research/cv/Gold_YOLO获得。
在这里插入图片描述

1、简介

物体检测是一项基本的视觉任务,其目的是识别物体的类别和定位物体的位置。可广泛应用于智能安防、自动驾驶、机器人导航、医疗诊断等领域。在边缘设备上部署高性能、低延迟的对象检测器正受到越来越多的关注。
在这里插入图片描述

在过去的几年中,研究人员对基于CNN的检测网络进行了广泛的研究,将目标检测框架从两阶段(例如Faster RCNN [42]和Mask RCNN [25])演变为单阶段(例如YOLO [39]),从基于锚点(例如YOLOv3 [41]和YOLOv4 [2])演变为无锚点(例如CenterNet [10],FCOS [46]和YOLOX [11])。[12, 7, 17]通过NAS研究了用于目标检测任务的最优网络结构,[16,23,19]探索了另一种通过蒸馏来提高模型性能的方法。单阶段检测模型,尤其是YOLO系列模型,由于其简单的结构和速度与精度之间的平衡,在行业中受到了广泛的欢迎。

视觉领域中主干网络的改进也是一项重要研究方向。如概述[20]所述,[26,27,59,21]实现了精度与速度之间的平衡,而[9,35,22,18]在精度方面表现出色。这些主干网络在不同的视觉任务中改进了原始模型的表现,从高级任务(如目标检测)到低级任务(如图像恢复)。通过使用具有Transformer的编码器-解码器结构,研究人员构建了一系列DETR类目标检测模型,例如DETR [3]和DINO [56]。这些模型可以捕获对象之间的长程依赖性,使基于transformer的检测器能够与大多数精细的经典检测器实现相当或更好的性能。尽管基于transformer的检测器的性能显著,但与基于CNN的模型的运行速度相比仍存在不足。基于CNN的小规模目标检测模型仍然在速度-精度权衡中占主导地位,例如YOLOX [11]和YOLOv6-v8[32,48,14]。我们专注于实时目标检测模型,特别是适用于移动部署的YOLO系列。主流实时目标检测器由三个部分组成:主干网络、颈部和头部。主干网络架构已得到广泛研究[41,43,9,35],而头部架构通常是简单的,由几个卷积或全连接层组成。YOLO系列中的颈部通常使用特征金字塔网络(FPN)及其变体来融合多层次特征。这些颈部模块基本上遵循图3中所示的结构。然而,目前的信息融合方法有一个明显的缺陷:当需要整合跨越多个层次的信息时(例如,将level-1和level-3融合),传统的FPN类结构无法无损失地传输信息,这阻碍了YOLO更好的信息融合。

基于全局信息融合的概念,TopFormer [58]在语义分割任务中取得了显著成果。本文在TopFormer理论的基础上,提出了一种新型的Gather-and-Distribute机制(GD)用于YOLO中高效的信息交换,通过全局融合多层次特征并将全局信息注入到更高的层次中,从而显着增强了颈部的信息融合能力,而不会显着增加延迟,改善了模型在不同目标大小上的性能。具体来说,GD机制包括两个分支:浅层Gather-and-Distribute分支和深层Gather-and-Distribute分支,它们分别通过卷积-基于块和注意力-基于块来提取和融合特征信息。为了进一步促进信息流动,我们引入了一个轻量级的相邻层融合模块,该模块将局部范围内的相邻层特征进行融合。我们的Gold-YOLO架构超越了现有的YOLO系列,有效地证明了我们的方法的有效性。

为了进一步提高模型的准确性,我们还引入了一种预训练方法,其中我们使用MAE方法在ImageNet 1K上预训练主干网络,这显着提高了模型的收敛速度和准确性。例如,我们的Gold-YOLO-S在经过预训练后实现了46.4%的AP,在类似的速度下优于之前SOTA的YOLOv6-3.0-S的45.0% AP。

2、相关工作

2.1、实时目标检测器

经过多年的发展,YOLO系列模型在实时目标检测领域已经变得非常流行。YOLOv1-v3 [39, 40, 41]构建了最初的YOLO,识别了一个由三个部分组成的单阶段检测结构,主干网络-颈部-头部,通过多尺度分支预测不同大小的对象,成为代表性的单阶段目标检测模型。YOLOv4 [2]优化了之前使用的darknet主干结构并提出了一系列改进,如Mish激活函数、PANet和数据增强方法。YOLOv5 [13]继承了YOLOv4 [2]方案,改进了数据增强策略和模型变体。YOLOX [11]将Multi positives、Anchor-free和Decoupled Head纳入模型结构,为YOLO模型设计树立了新的范例。YOLOv6 [32, 31]首次将重参数化方法引入YOLO系列模型,提出了EfficientRep主干和Rep-PAN颈部。YOLOv7 [48]专注于分析梯度路径对模型性能的影响,并提出了E-ELAN结构来在不破坏原始梯度路径的情况下增强模型能力。YOLOv8 [14]将以前YOLO模型的优点整合在一起,实现了当前YOLO系列中的SOTA。
在这里插入图片描述

2.2、基于Transformer的目标检测

视觉Transformer(ViT)成为广泛用于不同图像识别任务的卷积神经网络(CNN)的竞争替代方案。DETR [3]将Transformer结构应用于目标检测任务,重建了检测管道并消除了许多手动设计的部分和NMS组件,简化了模型设计和整体流程。结合可变形卷积的稀疏采样能力和Transformer的全局关系建模能力,Deformable DETR [61]提高了收敛速度,同时提高了模型的速度和准确性。DINO [56]第一次引入了对比去噪、混合查询选择和一个前瞻性的两步方案。最近的RT-DETR [36]改进了编码器-解码器结构来解决DETR类模型的慢速问题,在准确率和速度上都优于YOLO-L/X。然而,DETR类结构的局限性使其在小模型区域无法表现出足够的优势,在这个区域中,YOLO仍然是精度和速度平衡的SOTA。

2.3、用于目标检测的多尺度特征

传统上,不同级别的特征包含有关不同大小物体的位置信息。较大的特征包含低维纹理细节和小物体的位置。相比之下,较小的特征包含高维信息和大物体的位置。由[34]提出的特征金字塔网络(FPN)的原始思想是,这些不同的信息可以通过相互协作来增强网络性能。FPN提供了一种有效的架构设计,通过跨尺度连接和信息交换来融合多尺度特征,从而提高各种大小物体的检测精度。

基于FPN,Path Aggregation Network(PANet) [49]结合了自下而上的路径,使不同级别之间的信息融合更加充分。同样,EfficientDet [44]提出了一种新的可重复模块(BiFPN),以增加不同级别之间的信息融合的效率。M2Det [60]使用U形和特征融合模块,引入了一个有效的MLFPN架构。Ping-Yang Chen [5]使用双向融合模块改进了深层和浅层之间的交互。与这些层间工作不同,[37]使用Centralized Feature Pyramid(CFP)方法探索了单个特征的信息。此外,[53]将FPN扩展为Asymptotic Feature Pyramid Network(AFPN),以实现非相邻层之间的交互。针对FPN在检测大型物体方面的局限性,[30]提出了改进的FPN结构。YOLO-F [6]使用单级特征实现了最先进的性能。SFNet [33]使用语义流对不同级别的特征进行对齐,以改善FPN的性能。SAFNet [29]引入了自适应特征融合和自增强模块。[4]提出了用于目标检测的并行FPN结构,实现了双向融合。然而,由于网络中路径过多和间接交互方法过多,之前的基于FPN的融合结构仍然存在速度低、跨级别信息交换和信息损失的缺点。

然而,由于网络中路径和间接交互方式过多,以往基于FPN的融合结构仍然存在低速、跨层信息交换和信息丢失等缺点。

3、方法

3.1、预备知识

如图3所示,YOLO系列颈部结构采用了传统的FPN结构,由多个分支组成,用于多尺度特征融合。然而,它只对相邻级别的特征进行完全融合,对于其他级别的信息,它只能间接地“递归”获取。在图3中,它显示了传统FPN的信息融合结构:现有的level-1、level-2和level-3从上到下排列。FPN用于不同级别之间的融合。当level-1从其他两个级别获取信息时,存在两种不同的场景:

  • 1)如果level-1想要利用来自level-2的信息,它可以直接访问并融合这些信息。
  • 2)如果level-1想要使用来自level-3的信息,level-1应该递归调用相邻层的信息融合模块。具体来说,必须先融合level-2和level-3的信息,然后level-1可以通过结合level-2的信息间接获取level-3的信息。

这种传输模式可能导致在计算过程中出现重大的信息损失。层之间的信息交互只能交换由中间层选择的信息,未选择的信息在传输过程中会被丢弃。这导致某一层的信息只能充分辅助相邻层,而减弱了对其他全局层的辅助。因此,信息融合的整体有效性可能会受到限制。
在这里插入图片描述

为了避免传统FPN结构在传输过程中的信息损失,我们放弃了原有的递归方法,构建了一种新的“收集-分发”机制(GD)。通过使用统一的模块来收集和融合来自所有级别的信息,并将其分发到不同的级别,我们不仅避免了传统FPN结构固有的信息损失,而且在不显著增加延迟的情况下增强了颈部部分的信息融合能力。我们的方法可以更有效地利用主干网络提取的特征,并且可以轻松地集成到任何现有的主干-颈部-头部结构中。

在我们实现中,收集和分发的过程涉及三个模块:特征对齐模块(FAM)、信息融合模块(IFM)和信息注入模块(Inject)。

  • 收集过程涉及两个步骤。首先,FAM收集和整理来自不同级别的特征。其次,IFM融合这些对齐的特征以生成全局信息。
  • 在从收集过程中获得融合的全局信息后,Inject模块将该信息分发到每个级别,并使用简单的注意力操作进行注入,从而增强分支的检测能力。

为了增强模型对不同大小物体的检测能力,我们开发了两个分支:低级收集和分发分支(Low-GD)和高级收集和分发分支(High-GD)。这些分支分别提取和融合大尺寸和小尺寸的特征图。更多细节请参见第4.1节和第4.2节。如图2所示,颈部输入包括由主干网络提取的特征图B2、B3、B4、B5,其中 B i ∈ R N × C B i × R B i B_{i} \in \mathbb{R}^{N \times C_{B i} \times R_{B i}} BiRN×CBi×RBi。批量大小用N表示,通道数用C表示,维度用 R = H × W R=H \times W R=H×W表示。另外, R B 2 , R B 3 , R B 4 R_{B 2}, R_{B 3}, R_{B 4} RB2,RB3,RB4​和 R B 5 R_{B 5} RB5​的维度分别为 R , 1 2 R , 1 4 R R, \frac{1}{2} R, \frac{1}{4} R R,21R,41R 1 8 R \frac{1}{8} R 81R

3.2、低级收集和分发分支

在这个分支中,主干网络输出的特征图B2、B3、B4、B5被选择进行融合以获得保留小目标信息的高分辨率特征。结构如图4(a)所示。
在这里插入图片描述

低级特征对齐模块。在低级特征对齐模块(Low-FAM)中,我们采用平均池化(AvgPool)操作来下采样输入特征并实现统一的大小。通过将特征调整为组中最小的特征大小 ( R B 4 = 1 4 R ) \left(R_{B 4}=\frac{1}{4} R\right) (RB4=41R),我们获得了 F align  F_{\text {align }} Falign 。Low-FAM技术确保了信息的有效聚合,同时最小化了后续通过transformer模块处理的计算复杂性。

目标对齐大小的选择基于两个相互冲突的考虑:1)为了保留更多的低级信息,较大的特征大小更为优越;然而,(2)随着特征大小的增加,后续块的计算延迟也会增加。为了控制颈部部分的延迟,必须保持较小的特征大小。

因此,我们选择 R B 4 R_{B 4} RB4作为目标特征对齐大小,以在速度和精度之间取得平衡。

低级信息融合模块。低级信息融合模块(Low-IFM)设计包括多层重新参数化的卷积块(RepBlock)和拆分操作。具体而言,RepBlock采用 F align  F_{\text {align }} Falign  c h a n n e l = sum ⁡ ( C B 2 , C B 3 , C B 4 , C B 5 ) channel =\operatorname{sum}\left(C_{B 2}, C_{B 3}, C_{B 4}, C_{B 5}\right) channel=sum(CB2,CB3,CB4,CB5))作为输入并产生 F fuse  ( c h a n n e l = C B 4 + C B 5 ) F_{\text {fuse }}(channel \left.=C_{B 4}+C_{B 5}\right) Ffuse (channel=CB4+CB5)。中间通道是一个可调节值(例如256),以适应不同的模型大小。RepBlock产生的特征随后在通道维度上拆分为 F i n j − P 3 F_{i n j_{-} P 3} FinjP3 F i n j − P 4 F_{i n j_{-} P 4} FinjP4​,然后与不同级别的特征融合。

该公式如下所示:
F align  = Low_FAM ⁡ ( [ B 2 , B 3 , B 4 , B 5 ] ) , (1) F_{\text {align }}=\operatorname{Low\_ FAM}([B 2, B 3, B 4, B 5]), \tag{1} Falign =Low_FAM([B2,B3,B4,B5]),(1)
F fuse  = RepBlock ⁡ ( F align  ) (2) F_{\text {fuse }}=\operatorname{RepBlock}\left(F_{\text {align }}\right) \tag{2} Ffuse =RepBlock(Falign )(2)
F i n j P 3 , F i n j P 4 = Split ⁡ ( F fuse  ) . (3) F_{injP3 }, F{injP4}=\operatorname{Split}\left(F{\text {fuse }}\right) . \tag{3} FinjP3,FinjP4=Split(Ffuse ).(3)

信息注入模块。为了更有效地将全局信息注入到不同级别中,我们从分割经验[47]中获得灵感,并采用注意力操作来融合信息,如图5所示。具体而言,我们输入本地信息(指当前级别的特征)和全局注入信息(由IFM生成),分别记为 F l o c a l ​ F_{local​} Flocal F i n j F_{inj} Finj​。我们使用两个不同的Conv与 F i n j F_{inj} Finj​进行计算,得到 F g l o b a l _ e m b e d F_{global\_embed} Fglobal_embed​和Fact​。而 F l o c a l _ e m b e d ​ F_{local\_embed​} Flocal_embed则是使用 F l o c a l F_{local} Flocal​通过Conv计算的。然后通过注意力计算融合特征 F o u t F_{out} Fout​。由于 F l o c a l F_{local} Flocal​和 F g l o b a l F_{global} Fglobal​之间的大小差异,我们使用平均池化或双线性插值来根据 F i n j F_{inj} Finj​的大小调整 F g l o b a l _ e m b e d F_{global\_embed} Fglobal_embed​和 F a c t F_{act} Fact​的大小,以确保正确对齐。在每个注意力融合的末尾,我们添加RepBlock以进一步提取和融合信息。

在低级阶段, F l o c a l F_{local} Flocal​等于 B i B_i Bi​,因此该公式如下所示:
F global_act_Pi  = resize ⁡ ( Sigmoid ⁡ ( Conv ⁡ act  ( F inj_Pi  ) ) ) , (4) F_{\text {global\_act\_Pi }}=\operatorname{resize}\left(\operatorname{Sigmoid}\left(\operatorname{Conv}_{\text {act }}\left(F_{\text {inj\_Pi }}\right)\right)\right), \tag{4} Fglobal_act_Pi =resize(Sigmoid(Convact (Finj_Pi ))),(4)
F global_embed_Pi  = resize ⁡ ( C o n v global_embed_Pi  ( F inj_Pi  ) ) , (5) F_{\text {global\_embed\_Pi }}=\operatorname{resize}\left(C o n v_{\text {global\_embed\_Pi }}\left(F_{\text {inj\_Pi }}\right)\right), \tag{5} Fglobal_embed_Pi =resize(Convglobal_embed_Pi (Finj_Pi )),(5)
F att_fuse_Pi  = C o n v local_embed_Pi  ( B i ) ∗ F ing_act_Pi  + F global_embed_Pi  , (6) F_{\text {att\_fuse\_Pi }}=C o n v_{\text {local\_embed\_Pi }}(B i) * F_{\text {ing\_act\_Pi }}+F_{\text {global\_embed\_Pi }}, \tag{6} Fatt_fuse_Pi =Convlocal_embed_Pi (Bi)Fing_act_Pi +Fglobal_embed_Pi ,(6)
P i = R e p B l o c k ( F att_fuse_Pi  ) . (7) P i=R e p B l o c k\left(F_{\text {att\_fuse\_Pi }}\right) . \tag{7} Pi=RepBlock(Fatt_fuse_Pi ).(7)

3.3、高阶段收集和分发分支

High-GD融合了由Low-GD生成的特性集 { P 3 ​, P 4 ​, P 5 ​ } \{P3​,P4​,P5​\} {P3​P4​P5​},如图4(b)所示。

High-stage特征对齐模块。High-FAM由avgpool组成,用于将输入特征的大小减少到统一的大小。具体而言,当输入特征的大小为 { R p 3 ​, R p 4 ​, R p 5 ​ } \{Rp3​,Rp4​,Rp5​\} {Rp3​Rp4​Rp5​}时,avgpool将特征大小减少到特征组中最小的大小 ( R P 5 = 1 8 R ) \left(R_{P 5}=\frac{1}{8} R\right) (RP5=81R)。由于transformer模块提取高级信息,池化操作有助于信息聚合,同时降低transformer模块后续步骤的计算要求。

高级信息融合模块。高级信息融合模块(High-IFM)包括transformer模块(下面将详细说明)和拆分操作,拆分操作包括三个步骤:(1)源自High-FAM的 F align F_{\text {align}} Falign使用transformer模块组合以获得 F fuse F_{\text {fuse}} Ffuse。(2) F fuse F_{\text {fuse}} Ffuse通道通过 C o n v 1 × 1 Conv 1 \times 1 Conv1×1运算简化为 sum ⁡ ( C P 4 , C P 5 ) \operatorname{sum}\left(C_{P 4}, C_{P 5}\right) sum(CP4CP5)。(3)将 F fuse F_{\text {fuse}} Ffuse沿着通道维度划分为 F i n j − n 4 F_{i n j_{-} n 4} Finjn4 F i n j − n 5 F_{i n j_{-} n 5} Finjn5,然后与当前水平特征进行融合。

公式如下:
F align  = H i g h _ F A M ( [ P 3 , P 4 , P 5 ] ) , (8) F_{\text {align }}=H i g h \_F A M([P 3, P 4, P 5]), \tag{8} Falign =High_FAM([P3,P4,P5]),(8)

F fuse  = Transformer ⁡ ( F align  ) , (9) F_{\text {fuse }}=\operatorname{Transformer}\left(F_{\text {align }}\right), \tag{9} Ffuse =Transformer(Falign ),(9)

F inj_N  4 , F inj_N5  = Split ⁡ ( Conv ⁡ 1 × 1 ( F fuse  ) ) . (10) F_{\text {inj\_N } 4}, F_{\text {inj\_N5 }}=\operatorname{Split}\left(\operatorname{Conv} 1 \times 1\left(F_{\text {fuse }}\right)\right) . \tag{10} Finj_N 4,Finj_N5 =Split(Conv1×1(Ffuse )).(10)

第8个公式中的transformer融合模块包含几个堆叠的transformer块,其数量用L表示。每个transformer块都包括一个多头注意力块、一个前馈网络(FFN)和残差连接。为了配置多头注意力块,我们采用与LeViT [15]相同的设置,将键的头维度K和查询Q分配给D(例如,16)通道,并将V=2D(例如,32)通道分配给V。为了加快推理速度,我们将每个卷积的Layer Normalization(速度不友好的操作符)替换为Batch Normalization,并将所有GELU激活替换为ReLU。这最大限度地减小了transformer模块对模型速度的影响。为了建立我们的前馈网络,我们遵循[28,55]中提出的方法来构建FFN块。为了增强transformer块的局部连接,我们在两个1x1卷积层之间引入了一个深度卷积层。我们还将FFN的扩展因子设置为2,旨在平衡速度和计算成本。

信息注入模块。High-GD和Low-GD的信息注入模块完全相同。在高位时, F local F_{\text {local}} Flocal等于 P i P_i Pi,则公式为:
F global_act_Ni  = resize ⁡ ( Sigmoid ⁡ ( Conv ⁡ act  ( F inj_Ni  ) ) ) , (11) F_{\text {global\_act\_Ni }}=\operatorname{resize}\left(\operatorname{Sigmoid}\left(\operatorname{Conv}_{\text {act }}\left(F_{\text {inj\_Ni }}\right)\right)\right), \tag{11} Fglobal_act_Ni =resize(Sigmoid(Convact (Finj_Ni ))),(11)

F global_embed_Ni  = resize ⁡ ( Conv ⁡ global_embed_Ni  ( F inj_Ni  ) ) , (12) F_{\text {global\_embed\_Ni }}=\operatorname{resize}\left(\operatorname{Conv}_{\text {global\_embed\_Ni }}\left(F_{\text {inj\_Ni }}\right)\right), \tag{12} Fglobal_embed_Ni =resize(Convglobal_embed_Ni (Finj_Ni )),(12)
F att_fuse_Ni  = C o n v local_embed_Ni  ( P i ) ∗ F ing_act_Ni  + F global_embed_Ni  , (13) F_{\text {att\_fuse\_Ni }}=C o n v_{\text {local\_embed\_Ni }}(P i) * F_{\text {ing\_act\_Ni }}+F_{\text {global\_embed\_Ni }}, \tag{13} Fatt_fuse_Ni =Convlocal_embed_Ni (Pi)Fing_act_Ni +Fglobal_embed_Ni ,(13)
N i = R e p B l o c k ( F att_fuse_Ni  ) . N i=R e p B l o c k\left(F_{\text {att\_fuse\_Ni }}\right) . Ni=RepBlock(Fatt_fuse_Ni ).

3.4、增强的跨层信息流

仅使用全局信息融合结构,我们取得了优于现有方法的性能。为了进一步提升性能,我们从YOLOv6的PAFPN模块[31]中获得了灵感,并引入了Inject-LAF模块。该模块是对注入模块的增强,包括添加到注入模块输入位置的轻量级相邻层融合(LAF)模块。

为了实现速度和精度之间的平衡,我们设计了两个LAF模型:LAF低级模型和LAF高级模型,它们分别用于低级注入(合并相邻两层的特征)和高级注入(合并相邻一层的特征)。其结构如图5(b)所示。

为了确保来自不同级别的特征图与目标大小对齐,我们实现中的两个LAF模型仅使用三个操作:双线性插值上采样过小的特征、平均池化下采样过大的特征以及1x1卷积调整与目标通道不同的特征。

我们的模型中将LAF模块与信息注入模块相结合,有效地平衡了准确性和速度。通过使用简化的操作,我们能够增加不同级别之间的信息流路径数量,从而提高性能而不会显着增加延迟。

3.5、遮罩图像建模预训练

最近的研究表明,例如BEiT [1]、MAE [24]和SimMIM [51]等,遮罩图像建模(MIM)对视觉任务非常有效。然而,这些方法并不是专门为卷积神经网络(convnets)量身定制的。SparK [45]和ConvNeXt-V2 [50]是探索遮罩图像建模用于卷积神经网络潜力的先驱。

在本研究中,我们采用MIM预训练,遵循SparK的方法论[45],成功地识别并克服了将MAE风格预训练成功扩展到卷积神经网络(convnets)所面临的两个关键障碍。这些挑战包括卷积操作无法处理不规则和随机遮罩的输入图像,以及BERT预训练的单尺度性质与卷积神经网络的层次结构之间的不一致性。

为了解决第一个问题,未遮罩的像素被视为3D点云的稀疏体素,并采用稀疏卷积进行编码。对于后一个问题,开发了一个分层解码器来从多尺度编码的特征中重建图像。该框架采用UNet风格的结构来解码多尺度稀疏特征图,其中所有空间位置都填充有嵌入式掩码。我们在ImageNet 1K上预训练了我们模型的主干网络,为多个Gold-YOLO模型带来了显著的性能提升。

4、实验

4.1、设置

数据集。我们在Microsoft COCO数据集上进行了广泛的实验来验证所提出的检测器。对于消融研究,我们在COCO train2017上进行训练,并在COCO val2017数据集上进行验证。我们使用带有单个尺度图像的标准COCO AP度量作为输入,并报告了不同IoU阈值和对象尺度下的标准平均精度(AP)结果。

实施细节。我们遵循YOLOv6-3.0 [31]的设置(除了颈部结构),并使用相同的训练配置。网络的主干部分使用EfficientRep Backbone实现,而头部则使用Efficient Decoupled Head。优化器、学习调度和其他设置也与YOLOv6相同,即带有动量项和余弦衰减的学习率SGD。使用了预热、分组权重衰减策略和指数移动平均(EMA)。在训练中使用了自我蒸馏和锚辅助训练(AAT)。我们采用了强大的数据增强技术,包括Mosaic [2, 13]和Mixup [57]。

我们使用128万个ImageNet-1K数据集[8]在主干上进行了MIM无监督预训练。根据Spark[45]中的实验设置,我们采用LAMB优化器[54]和余弦退火学习率策略,掩码比为60%,掩码补丁大小为32。对于Gold-YOLO-L模型,我们使用了1024个批量,而对于Gold-YOLO-M模型,使用了1152个批量。由于Gold-YOLO-N骨干网容量有限,未采用MIM预训练。

我们所有的模型都是在8个NVIDIA A100 GPU上训练的,速度性能是在带有TensorRT的NVIDIA Tesla T4 GPU上测量的。

4.2、比较

我们的重点主要是评估部署后模型的速度性能。具体来说,我们测量吞吐量(批处理大小为1或32时每秒帧数)和GPU延迟,而不是FLOPs或参数数量。为了将Gold-YOLO与YOLO系列中其他最先进的探测器(如YOLOv5 [13], YOLOX [11], PPYOLOE [52], YOLOv7 [48], YOLOv8[14]和YOLOv6-3.0[31])进行比较,我们在使用TensorRT的同一Tesla T4 GPU上使用fp16精度测试了所有官方型号的速度性能。

Gold-YOLO-N表现出了显著的进步,与YOLOv8-N、YOLOv6-3.0-N和YOLOv7-Tiny(输入大小为416)相比,分别提高了2.6%/2.4%/6.6%的准确率,同时在吞吐量和延迟方面提供了相当或更好的性能。与YOLOX-S和PPYOLOE-S相比,Gold-YOLO-S在AP方面表现出显著增加,增长了5.9%/3.1%,同时以更快的速度运行,达到50/27 FPS(批量大小为32)。

Gold-YOLO-M在YOLOv6-3.0-M、YOLOX-M和PPYOLOE-M的基础上实现了更高的性能,AP提高了1.1%、4.2%和2.1%,同时保持了相当的速度。此外,与YOLOv5-M和YOLOv8-M相比,Gold-YOLO-M的AP分别提高了5.7%和0.9%,同时保持了更高的速度。Gold-YOLO-M在保持相同AP的同时,以显著的98 FPS(批量大小=32)超过了YOLOv7。Gold-YOLO-L在YOLOv8-L和YOLOv6-3.0-L的基础上实现了更高的精度,精度优势分别为0.4%和0.5%,同时在批量大小为32的情况下保持了相似的FPS。

4.3.2、 关于LAF的消融实验

在本次消融实验中,我们进行了实验,以比较LAF框架中不同模块设计的效果,并评估模型大小变化对准确率的影响。我们的研究结果表明,现有的LAF结构确实是最佳的。model-1和model-2之间的区别在于LAF使用的是add还是concat,而model-3在model-2的基础上增加了模型大小。model-4基于model-3,但丢弃了LAF。实验结果如表3所示。

4.3.3、其他模型和任务的消融研究

GD机制是一个通用概念,可以应用于YOLO之外。我们将GD机制推广到其他模型中,得到了显著的改进。

在实例分割任务上,我们在Mask R-CNN中替换不同的颈部,并在COCO实例数据集上进行训练/测试。结果如表4所示。

在语义分割任务上,我们替换了PointRend中的不同颈部,并在Cityscape数据集上进行了训练/测试。结果如表5所示。

在目标检测任务上,我们替换了EfficientDet中的不同颈部,并在COCO数据集上进行训练/测试。结果如表6所示。

5、结论

在本文中,我们对传统的特征金字塔网络(FPN)架构进行了重新审视,并对其在信息传递方面的局限性进行了批判性分析。在此之后,我们为对象检测任务开发了Gold-YOLO系列模型,并取得了最先进的成果。在Gold-YOLO中,我们引入了一种创新的“收集并分发”机制,该机制经过精心设计,旨在增强信息融合和传输的效率和效果,避免不必要的信息损失,从而显著提高模型的检测能力。我们真心希望我们的工作能在解决现实世界问题方面证明其价值,并可能为该领域的研究人员激发新的想法。

A、附加实验

A.1、Gold-YOLO的更详细的准确率和速度数据

在本节中,我们报告了我们的Gold-YOLO带或不带LAF模块和预训练的测试性能。在相同的环境下,使用TensorRT 7在Tesla T4上进行FP16精度的测量。我们模型的准确率和速度性能均以640x640的输入分辨率进行评估。结果如表7所示。

A.2、MIM预训练消融实验

我们还对比了没有进行自蒸馏的、不同MIM预训练轮数的Gold-YOLO-S在COCO 2017验证集上的结果。结果如表8所示。

B、综合延迟和吞吐量基准

B.1、使用tensort8在T4 GPU上建模延迟和吞吐量

与其他YOLO系列检测器在COCO 2017 val上的比较。在相同环境下,使用TensorRT 8.2在Tesla T4上进行FP16精度的测量。结果如表9所示。

B.2、在TensorRT 7上,使用V100 GPU时模型延迟和吞吐量

与其他YOLO系列检测器在COCO 2017 val上的比较。在相同环境下,使用TensorRT 7.2在Tesla V100上进行FP16精度的测量。结果如表10所示。

C、更广泛的影响和局限性

更广泛的影响。YOLO模型可以广泛应用于医疗保健和智能交通等领域。在医疗保健领域,YOLO系列模型可以提高某些疾病的早期诊断率,降低初步诊断成本,从而挽救更多生命。在智能交通领域,YOLO模型可以辅助车辆的自动驾驶,提高交通安全和效率。然而,YOLO模型在军事应用方面也存在风险,例如用于无人机目标识别和协助军事侦察。我们将尽一切努力防止我们的模型被用于军事目的。

局限性。一般来说,对结构进行更精细的调整有助于进一步提高模型的性能,但这需要大量的计算资源。此外,由于我们的算法大量使用注意力操作,可能对一些较早的硬件支持不太友好。

D、CAM可视化

以下是YOLOv5、YOLOv6、YOLOv7、YOLOv8和我们的Gold-YOLO的颈部CAM可视化结果,如图6所示。可以看出,我们的模型为目标的检测区域赋予了更高的权重。并且我们比较了Gold-YOLO和YOLOv6的颈部CAM可视化,如图7所示。

E、论述

E.1、Gold-YOLO特征对齐模块与其他类似工作的区别

M2Det和RHF-Net都在其特征对齐模块中集成了额外的信息融合模块。在M2Det中,SFAM模块包括一个SE块,而在RHF-Net中,空间金字塔池化块通过增加一个瓶颈层进行了增强。与M2Det和RHF-Net不同,Gold-YOLO倾向于将功能分离到不同的模块中,将特征对齐和特征融合分为不同的模块。具体来说,Gold-YOLO中的FAM模块只关注特征对齐,这确保了FAM模块的计算效率。LAF模块以最小的计算成本有效地合并来自不同级别的特征,将更多的融合和注入功能留给其他模块。

基于GD机制,使用简单且易于访问的操作实现YOLO模型的SOTA性能是可行的,这强烈证明了我们所提出的方法的有效性。此外,在构建网络的过程中,我们选择简单且经过充分验证的结构是有意识的。这种选择旨在防止部署设备不支持某些操作符而可能出现的发展和性能问题,从而确保整个机制的可用性和可移植性。

E.2、简单的计算操作

在网络建设的过程中,我们从前人的经验中汲取和发展。我们的重点不是仅仅关注通过增强特定运营商或局部结构来实现的性能改进,而是与传统FPN结构相比,GD机制带来的概念转变。通过GD机制,使用简单且易于应用的操作符就可以实现YOLO模型的SOTA性能。这有力地证明了所建议的方法的有效性。

此外,在网络建设过程中,我们有意选择简单和彻底验证的结构。这种选择可以防止由于部署设备不支持某些操作而导致的潜在开发和性能问题。因此,它保证了整个机制的可用性和可移植性。此外,该决策还为将来的性能增强创造了机会。

GD机制是一个通用概念,可以应用于yolo之外。我们将GD机制推广到其他模型中,得到了显著的改进。实验结果表明,该机制具有较强的适应性和通用性。这种机制始终能够在不同的任务和模型之间带来性能改进。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/135873.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Android14前台服务适配指南

Android14前台服务适配指南 Android 10引入了android:foregroundServiceType属性,用于帮助开发者更有目的地定义前台服务。这个属性在Android 14中被强制要求,必须指定适当的前台服务类型。以下是可选择的前台服务类型: camera: 相机应用。…

Git之分支与版本

🎬 艳艳耶✌️:个人主页 🔥 个人专栏 :《Spring与Mybatis集成整合》《Vue.js使用》 ⛺️ 越努力 ,越幸运。 1.开发测试上线git的使用 1.1. 环境讲述 当软件从开发到正式环境部署的过程中,不同环境的作用…

docker搭建etcd集群

最近用到etcd,就打算用docker搭建一套,学习整理了一下。记录在此,抛砖引玉。 文中的配置、代码见于https://gitee.com/bbjg001/darcy_common/tree/master/docker_compose_etcd 搭建一个单节点 docker run -d --name etcdx \-p 2379:2379 \…

matlab Silink PID 手动调参

(业余)PID即比例积分微分,它将给定值r(t)与实际输出值y(t)的偏差的比例(P)、积分(I)、微分(D)通过线性组合形成控制量,对被控对象进行控制。我们先用matlab Silink弄一个简易的PID例子: 中间三条就是比例,积…

Django中简单的增删改查

用户列表展示 建立列表 views.py def userlist(request):return render(request,userlist.html) urls.py urlpatterns [path(admin/, admin.site.urls),path(userlist/, views.userlist), ]templates----userlist.html <!DOCTYPE html> <html lang"en">…

大数据可视化数据大屏可视化模板【可视化项目案例-05】

🎉🎊🎉 你的技术旅程将在这里启航! 🚀🚀 本文选自专栏:可视化技术专栏100例 可视化技术专栏100例,包括但不限于大屏可视化、图表可视化等等。订阅专栏用户在文章底部可下载对应案例源码以供大家深入的学习研究。 🎓 每一个案例都会提供完整代码和详细的讲解,不…

matlab直线一级倒立摆lqr控制

1、内容简介 略 16-可以交流、咨询、答疑 matlab直线一级倒立摆lqr控制 2、内容说明 倒立摆是一个开环不稳定的强非线性系统&#xff0c;其控制策略与杂技运动员顶杆平衡表演的技巧有异曲同工之处&#xff0c;目的在于使得摆杆处于临界稳定状态&#xff0c;是进行控制理论研…

MYSQL字符串函数详解和实战(字符串函数大全,内含示例)

MySQL提供了许多字符串函数&#xff0c;用于处理和操作字符串数据。以下是一些常用的MYSQL字符串函数。 建议收藏以备后续用到查阅参考。 目录 一、CONCAT 拼接字符串 二、CONCAT_WS 拼接字符串 三、SUBSTR 取子字符串 四、SUBSTRING 取子字符串 五、SUBSTRING_INDEX 取子…

Linux 程序开发流程 / 基本开发工具 / Vim / GCC工具链 / Make 工具 / Makefile 模板

编辑整理 by Staok。 本文部分内容摘自 “100ask imx6ull” 开发板的配套资料&#xff08;如 百问网的《嵌入式Linux应用开发完全手册》&#xff0c;在 百问网 imx6ull pro 开发板 页面 中的《2.1 100ASK_IMX6ULL_PRO&#xff1a;开发板资料》或《2.2 全系列Linux教程&#xf…

文生图模型测评之HPS v2

文章目录 1. 简介2. HPD v22.1 相关数据集介绍2.2 HPD v2 的构建2.2.1 prompt collection2.2.2 image collection2.2.3 preference annotation3. Human Preference Score v23.1 构建模型3.2 实验结果4. 结论及局限性论文链接:Human Preference Score v2: A Solid Benchmark fo…

Java通过JNI技术调用C++动态链接库的helloword测试

JNI调用原理 原理就不细说了&#xff0c;其实就是写个库给Java调&#xff0c;可以百度一下Java JNI&#xff0c;下面是HelloWorld代码测试 编写一个本地测试类 package com.my.study.cpp_jni;/*** 测试Java调用C库* <p>使用命令javac -h . NativeTest.java自动生成C头…

Technology Strategy Patterns 学习笔记8- Communicating the Strategy-Decks(ppt模板)

1 Ghost Deck/Blank Deck 1.1 It’s a special way of making an initial deck that has a certain purpose 1.2 you’re making sure you have figured out what all the important shots are before incurring the major expense of shooting them 1.3 需要从技术、战略、产…

每天一点python——day66

#每天一点Python——66 #字符串的分隔 #如图&#xff1a; #方法①split()从左开始分隔&#xff0c;默认空格为分割字符&#xff0c;返回值是一个列表 shello world jisuanji#首先创建一个字符串 list1s.split() print(list1)#输出结果是&#xff1a;[hello, world, jisuanji]注…

GoF之代理模式

2023.11.12 代理模式是GoF23种设计模式之一&#xff0c;其作用是&#xff1a;为其他对象提供一种代理以控制对这个对象的访问。在某些情况下&#xff0c;一个客户不想或者不能直接引用一个对象&#xff0c;此时可以通过一个称之为“代理”的第三者来实现间接引用。代理对象可以…

不同性别人群的股骨颈骨密度随年龄的变化趋势

增龄是发生骨质疏松的危险因素。因此&#xff0c;中老年人需要积极防范骨质疏松&#xff0c;以免发生骨折等不良事件。 为了探究不同性别人群的股骨颈骨密度随年龄的变化趋势&#xff0c;首先创建一个df&#xff0c;变量有id&#xff08;编号&#xff09;、age&#xff08;年龄…

Git之分支与版本->课程目标及知识点的应用场景,分支的场景应用,标签的场景应用

1.课程目标及知识点的应用场景 Git分支和标签的命名规范 分支 dev/test/pre/pro(即master) dev:开发环境--windows (自己的电脑) test:测试环境--windows/linux (公司专门的测试电脑 pre:灰度环境(非常大的公司非常重要的项目) pro:正式环境 灰度环境与正式环境的服务器配置…

开发者测试2023省赛--Square测试用例

测试结果 官方提交结果 EclEmma PITest 被测文件 [1/7] Square.java /*** This class implements the Square block cipher.** <P>* <b>References</b>** <P>* The Square algorithm was developed by <a href="mailto:Daemen.J@banksys.co…

Linux:安装MySQL5.7

1. 下载 下载地址&#xff1a;https://dev.mysql.com/downloads/mysql/5.7.html#downloads 2. 解压 tar -xvf mysql-5.7.26-linux-glibc2.12-x86_64.tar 再移动并重命名一下 mv mysql-5.7.26-linux-glibc2.12-x86_64 /usr/local/mysql3. 创建mysql用户组和用户并修改权限 g…

安装完 Ubuntu 22.04 LTS 后需要做的11件事情

如果你已经安装了 Ubuntu 22.04 LTS&#xff0c;接下来如何优化呢? 在本指南中&#xff0c;我们概述了一些基本步骤&#xff0c;当你熟悉 Ubuntu 22.04 LTS (Jammy Jellyfish) 时&#xff0c;你可以采取这些步骤。 (1) 更新本地存储库并升级系统 刷新本地软件包索引。因此&a…

【ArcGIS Pro二次开发】(75):ArcGIS Pro SDK二次开发中的常见问题及解决方法

ArcGIS Pro SDK二次开发路程也近一年时间了&#xff0c;这里总结一下平时遇到的一些问题和解决方法。有些问题没能解决&#xff0c;也记录下来&#xff0c;提醒自己不要忘记。 一、在VS2022中进行调试弹出错误 正常在VS2022中&#xff0c;如果要调试程序的话&#xff0c;直接按…