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

news2024/11/19 23:35:52

文章目录

  • 摘要
  • 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机制推广到其他模型中,得到了显著的改进。实验结果表明,该机制具有较强的适应性和通用性。这种机制始终能够在不同的任务和模型之间带来性能改进。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

recycleView(三)动态修改背景色

效果图 1.关键代码 1. // 定义一个变量来记录滑动的距离var scrollDistance 0// 在RecycleView的滑动监听器中更新滑动的距离binding.recyclerView.addOnScrollListener(object : RecyclerView.OnScrollListener() {override fun onScrolled(recyclerView: RecyclerView, …

Pinia 状态管理器 菠萝

Pinia介绍: Pinia 是 Vue 的专属状态管理库,它允许你跨组件或页面共享状态。 Pinia 大小只有 1kb 左右,超轻量级,你甚至可能忘记它的存在! 相比 Vuex,Pinia 的优点: 更贴合 Vue 3 的 Composition API 风…

Leetcode—191.位1的个数【简单】

2023每日刷题&#xff08;二十七&#xff09; Leetcode—191.位1的个数 实现代码 int hammingWeight(uint32_t n) {int ans 0;for(int i 0; i < 32; i) {if(n & ((long long)1 << i)) {ans;}}return ans; }运行结果 翻转比特1思路 就解法一的代码实现来说&am…

基于Transformer架构的ChatGPT:三步带你了解它的工作原理

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 梦想从未散场&#xff0c;传奇永不落幕&#xff0c;博主会持续更新优质网络知识、Python知识、Linux知识以及各种小技巧&#xff0c;愿你我共同在CSDN进步 目录 一、Transformer架构 1. 自注意力层 2. 前馈神…

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">…

PCB知识补充

系列文章目录 文章目录 系列文章目录参考文献PCB知识互连线电阻过孔/铜箔电流能力铜箔载流能力过孔载流能力 热设计电磁兼容及部分要求 参考文献 [1]牛森,张敏娟,银子燕.高速PCB多板互联的电源完整性分析[J].单片机与嵌入式系统应用,2023,23(09). [2]陈之秀,刘洋,张涵舒等.高…

【Python】KDtree的调用

前言 查询点集中与目标点最近的k个点 from scipy.spatial import cKDTree import numpy as npdata np.array([[1,2],[1,3],[4,5]]) # 生成 100 个三维数据 tree cKDTree(data) # 创建 K-D Tree result tree.query(np.array([5, 5]), k2) # 查询与 [0.5, 0.5, 0.5] 最近的三…

(离散数学)命题及命题的真值

答案&#xff1a; &#xff08;5&#xff09;不是命题&#xff0c;因为真值不止一个 &#xff08;6&#xff09;不是命题&#xff0c;因为不是陈述句 &#xff08;7&#xff09;不是命题&#xff0c;因为不是陈述句 &#xff08;8&#xff09;不是命题&#xff0c;真值不唯一

NodeJs - 实现当前线程唯一的单例对象

NodeJs - 实现当前线程唯一的单例对象 一. 实现当前线程唯一的单例对象 一. 实现当前线程唯一的单例对象 Java 里面&#xff0c;一般都把这种和当前线程绑定的单例对象存储到ThreadLocal里面&#xff0c;但是Node里面没有这种存储&#xff0c;那咋办呢&#xff1f;直接上代码&…

Android---动态权限适配问题

在 Android6.0&#xff0c;即 API 23 之前&#xff0c;App 需要的权限都会在安装阶段向用户展示&#xff0c;而在 App 运行期间不需要动态判断权限是否已申请。从 6.0 之后的版本开始&#xff0c;Android 系统做了一次大的改动。对于部分权限&#xff0c;App 需要在代码中动态申…

No177.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…

OpenAI 开发者大会亮相新一代AI

OpenAI 开发者大会于11月6日在旧金山举行&#xff0c;发布了一系列新模型及开发者产品的更新。 主要包括&#xff1a; GPT-4 Turbo&#xff1a;一种功能更强大的模型&#xff0c;具有128K的超大文本窗口&#xff0c;并以更低的成本提供服务。 Assistants API&#xff1a;新AP…

计算机msvcp140.dll重新安装的四个解决方法,专门解决dll文件丢失问题的方法

在我多年的电脑使用经历中&#xff0c;曾经遇到过一个非常棘手的问题&#xff0c;那就是电脑提示找不到msvcp140.dll文件。这个问题让我苦恼了很久&#xff0c;但最终还是找到了解决方法。今天&#xff0c;我就来分享一下我解决这个问题的四种方法&#xff0c;希望对大家有所帮…

cesium如何实现区域下钻

首先&#xff0c;这里讲一下数据源&#xff0c;数据源是拷贝的DataV.GroAtlas里的数据&#xff0c;这里整合了一下之前发的区域高亮的代码来实现的&#xff0c;单击左键使得区域高亮&#xff0c;每次点击都移除上一次点击的模块&#xff0c;双击左键&#xff0c;实现区域下钻并…

社会公益服务小程序的作用是什么

公益包含的项目比较广&#xff0c;包括助学、环保、关爱特殊群体等&#xff0c;市场中无论相关机构还是团队&#xff0c;都有不少&#xff0c;而在实际运作中&#xff0c;也有些一些难题&#xff1a; 首先就是信息展示方面&#xff0c;自身服务及案例难以展示&#xff0c;线上…

每天一点python——day66

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

AI 绘画 | Stable Diffusion精确控制ControlNet扩展插件

ControlNet ControlNet是一个用于控制AI图像生成的插件&#xff0c;通过使用Conditional Generative Adversarial Networks&#xff08;条件生成对抗网络&#xff09;的技术来生成图像。它允许用户对生成的图像进行更精细的控制&#xff0c;从而在许多应用场景中非常有用&#…

Reeds-Shepp曲线

汽车都有一个最小转向半径&#xff0c;Reeds-Shepp曲线由几段半径固定的圆弧和一段直线段拼接组成&#xff0c;而且圆弧的半径就是汽车的最小转向半径。从起始点到目标点的路径长度是指汽车中心运动轨迹的长度&#xff0c;也就是所有圆弧的弧长和直线段的长度之和。 当环境中…

STM32F4X定时器之通用定时器

一、STM32通用定时器概述 通用定时器包括一个16位或32位自动重载计数器&#xff0c;可通过可编程预分频器进行驱动。定时器可以实现多种功能&#xff0c;包括测量输入信号的脉冲宽度和生成输出波形&#xff0c;通过使用定时器预分频器和RCC时钟控制器预分频器&#xff0c;可以…

深度学习之基于Pytorch框架的MNIST手写数字识别

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 MNIST是一个手写数字识别的数据集&#xff0c;是深度学习中最常用的数据集之一。基于Pytorch框架的MNIST手写数字识…