Yolov7论文详解

news2024/11/17 2:47:13

论文地址:https://arxiv.org/pdf/2207.02696.pdfhttps://arxiv.org/pdf/2207.02696.pdf

项目地址: WongKinYiu/yolov7: Implementation of paper - YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors (github.com)https://github.com/WongKinYiu/yolov7

目录

摘要

1、介绍

2、相关工作 

2.1、 实时目标探测器

2.2、 模型重参数化

2.3、 模型缩放

3、 结构

3.1、扩展的高效层聚合网络

3.2、基于级联模型的模型缩放

4、可训练的bag-of-freebies

4.1、计划重参数卷积

4.2、粗为辅助,细为导引损失

4.3、其他可训练的bag-of-freebies

5、 实验

5.1、 实验设置

5.2、基础

5.3、与最新技术的比较

5.4、消融研究

5.4.1、提出的复合标度法

5.4.2、提出的计划再参数化模型

5.4.3、辅助头的拟议辅助损失

6、结论

7、致谢

8、更多比较


摘要

        Yolov7在速度和精度上都超过了所有已知的物体探测器,在5 fps到160 fps的范围内,并在所有已知的30 fps或更高的GPU V100实时物体探测器中拥有最高的精度56.8%AP。 YOLOV7-E6目标检测器(56 fps V100,55.9%AP)在速度和精度上优于基于变压器的检测器Swinl级联掩码R-CNN(9.2 fps A100,53.9%AP)509%和2%;基于卷积的检测器Convnext-XL级联掩码R-CNN(8.6 fps A100,55.2%AP)551%和0.7%AP;YOLOV7在速度和精度上优于:YOLOR、YOLOX、Scaled-YOLOV4、YOLOV5、DETR、DETR、DINO-5Scale-R50、VIT-Adapter-B和许多其他目标检测器。 此外,我们只在MS COCO数据集上从头开始训练Yolov7,而不使用任何其他数据集或预训练的权值。

图1:与其他实时目标检测器相比,我们提出的方法达到了最先进的性能。 

1、介绍

        实时目标检测是计算机视觉中一个非常重要的研究课题,因为它往往是计算机视觉系统中必不可少的组成部分。 例如多目标跟踪、自动驾驶、机器人、医学图像分析等,执行实时目标检测的计算设备通常是一些移动CPU或GPU,以及各大厂商开发的各种神经处理单元(NPU)。 例如,Apple Neural Engine(苹果)、Neural Compute Stick(英特尔)、Jetson AI Edge Devices(英伟达)、Edge TPU(谷歌)、Neural Processing Engine(高通)、AI Processing Unit(联发科)和AI SoC(Kneron)都是NPU。 上面提到的一些边缘设备侧重于加快不同的操作,如香草卷积、深度卷积或MLP操作。 本文提出的实时目标检测器主要是希望它能够同时支持移动GPU和从边缘到云端的GPU设备。

        近年来,针对不同边缘设备的实时目标检测器仍在不断发展。 例如,McUnet和Nanodet的发展集中在生产低功耗单片机和提高边缘CPU的推理速度上。 至于Yolox和Yolor等方法,则侧重于提高各种GPU的推理速度。 近年来,实时目标检测器的发展主要集中在高效体系结构的设计上。 至于可在CPU上使用的实时物体检测器,其设计大多基于MobileNet、ShuffleNet或GhostNet。 另一种主流的实时目标检测器是针对GPU开发的,它们大多使用ResNet、DarkNet或DLA,然后使用CSPNet策略来优化体系结构。 本文提出的方法与当前主流实时目标检测器的发展方向不同。 除了体系结构优化,我们提出的方法将侧重于训练过程的优化。 我们的重点将是一些优化模块和优化方法,这些优化模块和优化方法可以在不增加推理成本的情况下,加强训练成本,提高目标检测的准确性。 我们将所提出的模块和优化方法称为可训练的免费袋。

        近年来,模型重新参数化和动态标记分配已成为网络训练和目标检测中的重要课题。 主要是在上述新概念提出后,目标检测器的训练出现了许多新的问题。 在本文中,我们将介绍一些我们发现的新问题,并设计有效的方法来解决这些问题。 在模型重参数化方面,利用梯度传播路径的概念,分析了适用于不同网络层的模型重参数化策略,提出了有计划的模型重参数化。 另外,当我们发现使用动态标记赋值技术时,多输出层模型的训练会产生新的问题。 即:如何为不同分支的输出分配动态目标?针对这个问题,我们提出了一种新的标签分配方法,称为粗到细引导标签分配。

        本文的主要贡献如下:

  1. 设计了几种可训练的免费包检测方法,使得实时目标检测在不增加推理代价的前提下,大大提高了检测精度;
  2. 对于对象检测方法的发展,我们发现了两个新的问题,即重新参数化模块如何代替原来的模块,以及动态标记分配策略如何处理对不同输出层的分配。 此外,我们还提出了解决这些问题所产生的困难的方法;
  3. 提出了“扩展”和“复合缩放”两种实时目标检测方法,能够有效地利用参数和计算量;
  4. 该方法能有效地减少现有实时目标检测器40%左右的参数和50%的计算量,具有更快的推理速度和更高的检测精度。

2、相关工作 

2.1、 实时目标探测器

        目前最先进的实时目标检测器主要基于YOLO和FCOS。能够成为最先进的实时目标检测器通常需要以下特征:

  1. 更快、更强的网络架构;
  2. 一种更有效的特征集成方法[22,97,37,74,59,30,9,45];
  3. 更精确的检测方法[76,77,69];
  4. 更为稳健的损失函数[96,64,6,56,95,57];
  5. 一种更有效的标签分配方法[99,20,17,82,42];
  6. 一种更有效的训练方法。  

        在本文中,我们不打算探索需要额外数据或大型模型的自监督学习或知识蒸馏方法。 取而代之的是,我们将设计新的可训练的免费赠品袋方法,以解决从上面提到的(4)、(5)和(6)相关的最先进的方法中衍生出来的问题。

2.2、 模型重参数化

        模型再参数化技术在推理阶段将多个计算模块合并为一个。 模型再参数化技术可以看作是一种集成技术,可以分为模块级集成模型级集成两大类。 模型级重新参数化以获得最终推断模型有两种常见的做法。 一种是用不同的训练数据训练多个相同的模型,然后对多个训练模型的权重进行平均。 二是对不同迭代次数的模型权重进行加权平均。 ModuleVel再参数化是近年来比较热门的研究课题。 这类方法在训练时将一个模块分解成多个相同或不同的模块分支,在推理时将多个分支模块集成成一个完全等价的模块。 然而,并不是所有提出的再参数化模块都能完美地应用于不同的体系结构。 考虑到这一点,我们开发了新的再参数化模块,并针对各种体系结构设计了相关的应用策略。  

2.3、 模型缩放

        模型缩放是一种向上或向下缩放已经设计的模型并使其适合不同计算设备的方法。 模型缩放方法通常使用不同的缩放因子,如分辨率(输入图像的大小)、深度(层数)、宽度(通道数)和阶段(特征金字塔数),以实现网络参数量、计算量、推理速度和精度的良好权衡。 网络体系结构搜索(NAS)是常用的模型缩放方法之一。 NAS可以自动地从搜索空间中搜索合适的缩放因子,而无需定义太复杂的规则。 NAS的缺点是需要非常昂贵的计算来完成模型缩放因子的搜索。 在[15]中,研究者分析了缩放因子与参数和运算量之间的关系,试图直接估计某些规律,从而得到模型缩放所需的缩放因子。 查阅文献,我们发现几乎所有的模型标度方法都是独立分析单个标度因子的,甚至在复合标度范畴中的方法也是独立优化标度因子的。 这是因为大多数流行的NAS体系结构处理不太相关的伸缩因素。 我们观察到所有基于级联的模型,如DenseNet或VovNet,当这些模型的深度被缩放时,会改变某些层的输入宽度。 由于所提出的体系结构是基于级联的,我们必须为该模型设计一种新的复合缩放方法。  

3、 结构

3.1、扩展的高效层聚合网络

        在大多数关于设计高效体系结构的文献中,主要考虑的不只是参数数、计算量和计算密度。 从存储器访问开销的特点出发,Ma等人。 [55]还分析了输入/输出通道比、体系结构分支数、按元素操作等对网络推断速度的影响。 多尔等人。 [15]在进行模型缩放时还考虑了激活,即更多地考虑卷积层输出张量中的元素数。 图2(b)中的cspvovnet的设计是vovnet的变体。 CSPVOVNET的体系结构除了考虑上述基本的设计问题外,还分析了梯度路径,以使不同层的权值能够学习更多不同的特征。上面描述的梯度分析方法使推论更快更准确。 图2(c)中的Elan[1]考虑了以下设计策略--“如何设计一个高效的网络?”他们得出了一个结论:通过控制最短最长梯度路径,更深的网络可以有效地学习和收敛。 在本文中,我们提出了一种基于ELAN的扩展ELAN(E-ELAN),其主要结构如图2(d)所示。

图2:扩展的高效层聚合网络。 所提出的扩展ELAN(E-ELAN)完全不改变原有体系结构的梯度传输路径,而是使用群卷积来增加所添加特征的基数,并以洗牌合并基数的方式组合不同群组的特征。 这种操作方式可以增强不同特征图学习到的特征,改善参数和计算的使用。 

        无论在大规模ELAN中梯度路径长度和计算块的堆叠数,都达到了稳定状态。 如果无限制地堆叠更多的计算块,这种稳定状态可能会被破坏,参数利用率会降低。 提出的E-ELAN采用扩展、洗牌、合并基数等方法,在不破坏原有梯度路径的前提下,不断增强网络的学习能力。 在体系结构方面,E-ELAN只改变了计算块上的体系结构,而过渡层的体系结构完全不变。 我们的策略是使用群卷积来扩展计算块的信道和基数。 我们将对一个计算层的所有计算块应用相同的组参数和信道乘法器。 然后,将每个计算块计算出的特征映射按照设定的组参数G洗牌成G组,再将它们串联在一起。 此时,每组特征图中的通道数将与原架构中的通道数相同。 最后,我们添加G组特征映射来执行合并基数。 除了保持原有的ELAN设计架构,E-ELAN还可以指导不同的计算块组学习更多样的特征。

3.2、基于级联模型的模型缩放

        模型缩放的主要目的是调整模型的某些属性,生成不同尺度的模型,以满足不同推理速度的需要。 例如,效率网[72]的缩放模型考虑了宽度、深度和分辨率。 至于Scaled-Yolov4[79],其缩放模型是调整级数。 在[15]中,Doll'ar等人。 分析了Vanilla卷积和Group卷积在进行宽度和深度缩放时对参数量和计算量的影响,并据此设计了相应的模型缩放方法。 以上方法主要用于PlainNet或ResNet等架构中。 当这些体系结构执行向上或向下缩放时,各层的进度和出度不会发生变化,因此可以独立分析各缩放因子对参数量和计算量的影响。 然而,如果将这些方法应用到基于级联的体系结构中,我们会发现,当在深度上进行向上或向下伸缩时,紧接在基于级联的计算块之后的转换层的in-degree会减小或增加,如图3(a)和(b)所示。   

图3:基于级联的模型的模型缩放。 从(a)到(b),我们观察到当对基于级联的模型执行深度缩放时,计算块的输出宽度也增加。 这种现象会导致后续传输层的输入宽度增加。 因此,我们提出了(c),即对基于级联的模型进行模型缩放时,只需缩放计算块中的深度,传输层的剩余部分进行相应的宽度缩放。 

        从以上现象可以推断,对于一个基于级联的模型,我们不能单独分析不同的缩放因素,而必须将其结合起来考虑。 以扩展深度为例,这样的动作会引起过渡层输入通道和输出通道之间的比值变化,这可能会导致模型的硬件使用减少。 因此,我们必须针对一个基于级联的模型提出相应的复合模型缩放方法。 当我们缩放一个计算块的深度因子时,我们还必须计算该块输出通道的变化。 然后,我们将在过渡层上执行宽度因子缩放,以相同的变化量,结果如图3(c)所示。 我们提出的复合缩放方法可以保持模型在初始设计时的性质,并保持最优结构。

4、可训练的bag-of-freebies

4.1、计划重参数卷积

        虽然Repconv在VGG上取得了优异的性能,但当我们直接将其应用于Resnet和DenseNet等架构时,其精度会显著降低。 利用梯度流传播路径分析了再参数化卷积如何与不同的网络相结合。 我们还相应地设计了有计划的再参数化卷积。

        RepConv实际上在一个卷积层中结合了3×3卷积、1×1卷积和标识连接。 通过对RepConv与不同体系结构的组合和性能分析,发现RepConv中的身份连接破坏了ResNet中的残差和DenseNet中的级联,为不同的特征映射提供了更多的梯度多样性。 基于上述原因,我们使用无标识连接的repconv(repconvn)来设计计划重参数化卷积的体系结构。 在我们的思维中,当一个带有残差或级联的卷积层被重新参数化的卷积替换时,应该没有恒等式连接。 图4显示了在PlainNet和ResNet中使用的我们设计的“计划的重新参数化卷积”的示例。 至于基于残差模型和基于级联模型的完整计划重参数卷积实验,将在消融研究部分提出。

图4:计划的重新参数化模型。在我们提出的规划的重参数化模型中,我们发现一个有残留连接或连接连接的层,其RepConv应该没有身份连接。在这些情况下,可以用不包含标识连接的RepConvN替换它。

4.2、粗为辅助,细为导引损失

        深度监督是训练深度网络时经常使用的一种技术。 其主要思想是在网络的中间层增加额外的辅助头,以辅助损失为导向的浅层网络权重。 即使对于ResNet和DenseNet等通常收敛良好的架构,深度监管仍然可以显著提高模型在许多任务上的性能。 图5(a)和(b)分别显示了“没有”和“有”深度监视的对象检测器体系结构。 在本文中,我们把负责最终输出的头部称为导引头,用来辅助训练的头部称为辅助头。  

图5:粗为辅助,细为铅头标签分配器。 与正常模型(A)相比,(B)中的图式具有辅助中心。 与通常的独立标号分配器(C)不同,我们提出了(d)引导标号分配器和(e)粗到细引导标号分配器。 该标签分配器通过引导头预测和地面真实度对标签分配器进行优化,同时得到训练引导头和辅助头的标签。 详细的从粗到细的实现方法和约束设计细节将在Apendix中阐述。 

        接下来我们要讨论标签分配的问题。 以往在深度网络的训练中,标签赋值通常直接参考地面真值,按照给定的规则生成硬标签。 但近年来,如果以物体检测为例,研究人员往往利用网络输出预测的质量和分布,然后与地面真相一起考虑使用一些计算和优化方法,生成一个可靠的软标签。 例如,Yolo使用包围盒回归预测的IOU和地面真值作为客观性的软标签。 本文将网络预测结果与地面真实值相结合,并赋予软标签的机制称为“标签赋值器”。

        无论辅助头或领导头的情况如何,深度监督都需要对目标目标进行训练。 在软标签分配器相关技术的发展过程中,我们偶然发现了一个新的衍生问题,即“如何将软标签分配给辅助头和引导头”,据我们所知,相关文献至今还没有对此问题进行过探讨。 目前最流行的方法结果如图5(c)所示,是将辅助头和引导头分开,然后利用各自的预测结果和地面真相执行标签赋值。 本文所提出的方法是一种新的标签分配方法,它通过引导头预测来指导辅助头和引导头。 也就是说,我们以领先头预测为指导,生成由粗到细的分层标签,分别用于辅助头和领先头学习。 两个被提出的深度监督标签分配策略分别如图5(d)和(e)所示。

        导引头标签分配器主要是根据导引头的预测结果和地面真实情况进行计算,并通过优化过程生成软标签。 这套软标签将同时作为辅助头和引导头的目标训练模型。 之所以这样做,是因为Lead Head具有相对较强的学习能力,因此由其生成的软标签应该更能代表源数据与目标之间的分布和相关性。 此外,我们可以把这种学习看作是一种广义残差学习。 通过让较浅的辅助头直接学习引导头已经学习的信息,引导头将更能够专注于学习尚未学习的剩余信息。 

        由粗到细导联标签分配器还利用导引联预测结果和地面真实值生成软标签。 然而,在该过程中,我们生成了两组不同的软标签,即粗标签和细标签,细标签与引导标签分配器生成的软标签相同,粗标签是通过放松正样本分配过程的约束,允许更多的网格作为正目标来生成的。 究其原因,辅助头的学习能力不如引导头强,而为了避免丢失需要学习的信息,我们将重点优化辅助头在物体检测任务中的回忆。 对于引导头的输出,我们可以从高查全率的结果中过滤出高查准率的结果作为最终的输出。 但必须注意的是,如果粗标签的附加权重与细标签的附加权重接近,在最终预测时可能会产生较差的先验。 因此,为了使这些额外的粗正网格的影响更小,我们在解码器中设置限制,使额外的粗正网格不能完美地产生软标记。 该机制允许在学习过程中动态调整细标签和粗标签的重要性,并使细标签的可优化上界始终高于粗标签。

4.3、其他可训练的bag-of-freebies

        在这一节中,我们将列出一些可训练的bag-of-freebies。 这些免费赠品是我们在训练中使用的一些技巧,但最初的概念不是我们提出的。 附录中详细阐述了这些免费服务的训练细节,包括:

  1. conv-bn-activation拓扑中的批归一化:这部分主要是将批归一化层直接连接到卷积层。 这样做的目的是在推理阶段将批归一化的均值和方差集成到卷积层的偏差和权重中。
  2. Yolor中的隐式知识与卷积特征映射的加法和乘法相结合:在推理阶段通过预先计算,可以将Yolor中的隐式知识简化为一个向量。 该向量可以与前一个或后一个卷积层的偏置和权重相结合。
  3. ema模型:ema是mean教师中使用的一种技术,在我们的系统中,我们纯粹使用ema模型作为最终的推理模型。

5、 实验

5.1、 实验设置

        利用Microsoft COCO数据集进行实验,验证了本文提出的目标检测方法。 我们所有的实验都没有使用预先训练的模型。 也就是说,所有的模型都是从零开始训练的。 在开发过程中,我们使用Train 2017集进行训练,然后使用Val 2017集进行验证和选择超参数。 最后,我们在Test 2017集上展示了目标检测的性能,并与目前最先进的目标检测算法进行了比较。 详细的训练参数设置见附录。

        我们设计了边缘GPU、普通GPU和云GPU的基本模型,分别称为Yolov7Tiny、Yolov7和Yolov7-W6。 同时,针对不同的服务需求,采用BASIC模型进行模型缩放,得到不同类型的模型。 对于YOLOV7,我们在Neck上进行堆栈缩放,并使用提出的复合缩放方法对整个模型的深度和宽度进行缩放,从而得到YOLOV7-x。 对于YOLOV7-W6,我们用新提出的复合标度方法得到了YOLOV7-E6和YOLOV7-D6。 另外,我们将所提出的EELAN用于YOLOV7-E6,从而完成了YOLOV7E6E。 由于Yolov7-Tiny是一个面向边缘GPU的架构,它将使用Leaky Relu作为激活函数。 对于其他模型,我们使用SILU作为激活函数。 我们将在附录中详细描述每个模型的缩放因子。

5.2、基础

        我们选择早期版本的YOLO和Stateof-the-Art对象检测器YOLOR作为基线。 表1显示了我们提出的Yolov7模型和那些用相同设置训练的基线的比较。

表1:基线物体探测器的比较。 

         结果表明,与Yolov4相比,Yolov7的参数减少了75%,计算量减少了36%,计算效率提高了1.5%。 与现有的Yolor-CSP相比,Yolov7的参数减少了43%,计算量减少了15%,AP提高了0.4%。 在Tiny模型的性能方面,与Yolov4-Tiny-31相比,Yolov7Tiny模型的参数数减少了39%,计算量减少了49%,但AP保持不变。 在云GPU模型上,我们的模型在减少19%的参数数和33%的计算量的同时,仍然可以有更高的AP。

5.3、与最新技术的比较

        我们将所提出的方法与现有的通用GPU和移动GPU的目标检测器进行了比较,结果如表2所示。 从表2中的结果我们知道,所提出的方法具有最佳的速度-精度综合权衡。 如果我们将Yolov7-Tiny-Silu与Yolov5-N(R6.1)相比,我们的方法在AP上的速度快127 fps,准确度高10.7%。 此外,Yolov7在161 fps的帧率下拥有51.4%的AP,而同样AP的PPYoloe-L只有78 fps的帧率。 在参数使用方面,YOLOV7比PPYOLOE-L少41%。 如果我们将114 fps推理速度的Yolov7-X与99 fps推理速度的Yolov5-L(R6.1)相比,Yolov7-X可以提高3.9%的AP。 如果将Yolov7x与相似尺度的Yolov5-x(R6.1)进行比较,Yolov7-x的推断速度要快31 fps。 此外,在参数和计算量方面,Yolov7-x比Yolov5-x(R6.1)减少了22%的参数和8%的计算量,但AP提高了2.2%。  

表2:最先进的实时物体检测器的比较。 

        如果我们使用1280的输入分辨率来比较Yolov7和Yolor,Yolov7-W6的推断速度比Yolor-P6快8 fps,检测率也提高了1%AP。 与YOLOV7-E6和YOLOV5-X6(R6.1)相比,前者的AP增益为0.9%,参数减少45%,计算量减少63%,推理速度提高47%。 Yolov7-D6的推理速度接近于Yolor-E6,但AP提高了0.8%。 Yolov7-E6E的推理速度与Yolor-D6接近,但AP提高了0.3%。

5.4、消融研究

5.4.1、提出的复合标度法

        表3显示了使用不同的模型缩放策略进行缩放时获得的结果。 其中,我们提出的复合缩放方法是将计算块深度缩放1.5倍,过渡块宽度缩放1.25倍。 与仅增大宽度的方法相比,该方法在参数和计算量较少的情况下,可使AP提高0.5%。 如果与只增加深度的方法相比,我们的方法只需要增加2.9%的参数数和1.2%的计算量,就可以使AP提高0.2%。 从表3的结果可以看出,我们提出的复合缩放策略可以更有效地利用参数和计算。

表3:对拟议模型缩放的消融研究。 

5.4.2、提出的计划再参数化模型

        为了验证我们提出的计划重参数化模型的通用性,我们分别将其用于基于级联模型和基于残差模型的验证。 我们选择的基于级联的模型和基于残差的模型分别是3层的ELAN和CSPDarkNet。

        在基于级联模型的实验中,我们用REPCONV替换了3层叠ELAN中不同位置的3×3卷积层,详细配置如图6所示。 从表4所示的结果中,我们看到所有较高的AP值都出现在我们提出的计划重新参数化模型上。

图6:规划的RepConv3堆叠的elan。 蓝色圆圈是我们用repconv代替conv的位置。 
表4:计划再串联模型的消融研究。 

         在基于残差模型的实验中,由于原来的暗块没有符合我们设计策略的3×3反向卷积块,我们额外设计了一个反向暗块用于实验,其结构如图7所示。 由于带有暗块和反向暗块的CSPDarkNet具有完全相同的参数和操作量,因此比较是公平的。 表5所示的实验结果充分证实了所提出的计划重参数化模型对基于残差的模型同样有效。 我们发现RepcspresNet的设计也符合我们的设计模式。

图7:反转的CSPDarkNet。 我们颠倒了暗块中1×1和3×3卷积层的位置,以适应我们计划的重新参数化模型设计策略。 
表5:有计划的represdual模型的消融研究。 

5.4.3、辅助头的拟议辅助损失

        在辅助头的辅助损失实验中,我们比较了一般的独立标号分配方法和辅助头方法,以及两种引导标号分配方法。 我们在表6中显示了所有的比较结果。 从表6中列出的结果来看,很明显,任何增加助手损失的模型都可以显著提高整体性能。 此外,在AP、AP50和AP75中,我们提出的引导标签分配策略比一般的独立标签分配策略具有更好的性能。 对于我们提出的粗为辅助和细为铅标记分配策略,它在所有情况下都取得了最好的结果。 在图8中,我们展示了在辅助头和引导头用不同方法预测的客观图。 从图8中我们发现,如果辅助头学习导联引导的软标记,它确实有助于导联头从一致目标中提取剩余信息。

表6:拟议辅助头的消融研究。
图8:辅助头和引导头用不同方法预测的客观度图。

        在表7中,我们进一步分析了所提出的从粗到细导联引导标签分配方法对辅助磁头解码器的影响。 即我们比较了有/没有引入上限约束的结果。 从表中的数字来看,用离物体中心的距离来约束物体的上界的方法可以取得更好的性能。  

表7:约束辅助头的消融研究。 

        由于提出的Yolov7使用多个金字塔来联合预测目标检测结果,我们可以直接将辅助头连接到中间层的金字塔进行训练。 这种类型的训练可以弥补下一级金字塔预测中可能丢失的信息。 基于以上原因,我们在提出的E-ELAN架构中设计了部分辅助头。 我们的方法是在合并基数之前,在其中一组特征映射后连接辅助头,这种连接可以使新生成的特征映射集的权重不因辅助头的丢失而直接更新。 我们的设计允许每个铅头金字塔仍然从不同大小的物体中获取信息。 表8显示了使用两种不同方法获得的结果,即粗到细铅引导法和部分粗到细铅引导法。 显然,部分粗到细导铅法具有较好的辅助效果。

表8:部分辅助头的消融研究。 

6、结论

        本文提出了一种新的实时对象检测器体系结构和相应的模型缩放方法。 此外,我们发现目标检测方法的发展过程产生了新的研究课题。 在研究过程中,我们发现了重参数化模块的替换问题和动态标记赋值的分配问题。 为了解决这一问题,我们提出了一种可训练的免费包方法来提高目标检测的准确性。 在此基础上,我们开发了YOLOV7系列目标检测系统,取得了最先进的结果。

7、致谢

        作者希望感谢国家高性能计算中心(NCHC)提供的计算和存储资源。

8、更多比较

        Yolov7在5 fps到160 fps范围内的速度和精度都超过了所有已知的物体检测器,在GPU V100上的30 fps或更高的所有已知实时物体检测器中,它具有最高的精度56.8%AP Test-Dev/56.8%AP Min-Val。 YOLOV7-E6目标检测器(56 fps V100,55.9%AP)在速度和精度上优于基于转换的检测器SWIN-L级联掩模R-CNN(9.2 fps A100,53.9%AP)509%和2%;基于卷积的检测器Convnext-XL级联掩模R-CNN(8.6 fps A100,55.2%AP)551%和0.7%AP;YOLOV7在速度和精度上优于:YOLOR、YOLOX、Scaled-YOLOV4、YOLOV5、DETR、DETR、DINO-5Scale-R50、VIT-Adapter-B和许多其他目标检测器。 此外,我们只在MS Coco数据集上从头开始训练Yolov7,而不使用任何其他数据集或预先训练的权值。

        在COCO数据集上,Yolov7-E6E实时模型的最大精度(56.8%AP)比目前最精确的Meituan/Yolov6-S模型(43.1%AP)高出+13.7%AP。 在COCO DataSet和Batch=32的V100 GPU上,我们的Yolov7-Tini(35.2%AP,0.4ms)模型比Meituan/Yolov6-n(35.0%AP,0.5ms)快+25%,高+0.2%AP。  

表9:更多的比较(BATCH=1,no-TRT,没有额外的对象检测训练数据)
图9:与其他对象检测器的比较。 
图10:与其他实时对象检测器的比较。
表10:不同设置的比较。

图11:与其他实时对象检测器的比较。 

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

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

相关文章

多进程多线程并发服务器代码实现

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和…

R语言:鉴于计算10亿以内训练模型记录for循环的加速

文章目录 1 前言2 几个循环2.1 100以内的和2.2 100以内奇数和/偶数和 3 多重循环3.1 向量化3.2 合并循环3.3 apply函数3.4 矩阵运算3.5 foreach分解任务 4 讨论 1 前言 笔者主力机是MBAM1芯片(8256),某个下午巩固循环突然思考到个问题&#…

【Luenberger Observer】龙贝格观测器及示例Matlab仿真

目录 龙贝格观测器 龙贝格观测器示例和仿真 Matlab仿真 龙贝格观测器 观测器:根据系统的输入u和输出y估计系统的状态x。 SISO系统的状态空间方程如下 龙贝格观测器,通过在原系统添加基于输出误差校正项,构造状态空间方程,设x_h…

如何用Jmeter压测Netty的Echo服务之自定义Jmeter的Java Sampler

前言 如果想要压测一些三方组件,比如MQ,redis什么的,jmeter本身是不支持的。 本文以开发一个压测netty的echo示例,说明如何自定义jmeter的sampler。 开发 本文以idea示例, 新建工程 打开idea新建一个空的maven工程…

yolov8 ONNX Runtime C++ 部署

其实个人偏爱用OpenCV DNN 部署,但是在前面一篇博客发现还要升级OpenCV。 笔记本的CPU 是AMD 牌子的,就只能用 ONNX Runtime 部署了。 目录 Pre: cv::dnn::blobFromImages() gettimeofday() rand() template 代码 utils.h utils.cpp detect.h…

uboot第一阶段 start.S代码分析

u-boot.lds中找到start.S入口 (1)C语言规定整个项目的入口就是main函数。 (2)在uboot中因为有汇编阶段参与,因此不能直接找main.c。整个程序的入口取决于链接脚本中ENTRY声明的地方。ENTRY(_start)因此定义_start符号 的文件就是整个程序的起始文件,即st…

python报错提示以及logger的一些应用

本篇是拆解这篇【python︱函数、for、if、name、迭代器、防范报错、类定义、装饰器、argparse模块、yield 】 将报错 logger提示拿出来 文章目录 1、防范报错1.1 assert 断言 2 try...except...报错并提示异常信息优雅的异常报错:suppress 3、报错日志记录&#xf…

【Java 并发编程】一文详解 Java 内置锁 synchronized

一文详解 Java 内置锁 synchronized 1. 前言1.1 并发编程中存在线程安全问题1.2 设计同步器的意义1.3 如何解决线程并发安全问题? 2. synchronized 的用法2.1 修饰实例方法,锁是当前实例对象2.2 修饰静态方法,锁是当前类对象2.3 修饰代码块&a…

简单创建SSM项目

1、在idea中创建项目 点击new-project,点击Maven项目,勾选 creat from archetype ,找到maven-archetype-webapp 写好相关信息 点击下一步,需要检查maven环境 点击后下载对应的插件,选择项目地址。 开始下载资源&#x…

rust vscode编辑器常用插件与配置

插件:rust-analyzer 会实时编译和分析你的 Rust 代码,提示代码中的错误,并对类型进行标注 插件的完整手册地址:https://rust-analyzer.github.io/manual.html。 插件: rust syntax 为代码提供语法高亮。 …

就挺无语的,这是有脾气的博客

文章目录 前言1. 背景2. 使用3. 公众号体验4. 结束语 前言 ChatGPT已经推出两个多月了,热度已经不减。ChatGPT由人工智能研究实验室OpenAI在2022年11月30日发布的全新聊天机器人模型,一款人工智能技术驱动的自然语言处理工具。它能够通过学习和理解人类的…

大厂都用DevOps!十分钟带你了解自动化在DevOps中的运用

Hi,大家好。DevOps、CI/CD、Docker、Kubernetes……好像全世界都在谈论这些技术,以至于你觉得即将到达NoOps阶段。别担心,在工具和各种最佳实践的浩瀚海洋中感到迷失是正常的,是时候让我们来分析一下DevOps到底是什么了。 一、De…

JAVA类加载机制

在Java的世界里,每一个类或者接口,在经历编译器后,都会生成一个个.class文件。 类加载机制指的是将这些.class文件中的二进制数据读入到内存中,并对数据进行校验,解析和初始化。最终,每一个类都会在方法区保…

ChatGPT - 学习和提高新技能的Prompt

文章目录 Prompt例子 Prompt “我想学习/提高[技能]。我是一个完全的初学者。创建一个30天的学习计划,可以帮助像我这样的初学者学习和提高这项技能。”例子 我想学习/提高Flink。我是一个完全的初学者。 创建一个30天的学习计划,可以帮助像我这样的初…

Xilinx Artix-7【XC7A35T-2CSG324I】【XC7A35T-1CSG324I】成本与收发器优化的FPGA器件

产品介绍: Xilinx Artix -7系列 FPGA 重新定义了成本敏感型解决方案,功耗比上一代产品降低了一半,同时为高带宽应用提供一流的收发器和信号处理能力。这些设备基于 28 纳米 HPL 工艺构建,提供一流的性能功耗比。与 MicroBlaze™ 软…

boot-admin整合Liquibase实现数据库版本管理

Liquibase 和 Flyway 是两款成熟的、优秀的、开源/商业版的数据库版本管理工具,鉴于 Flyway 的社区版本对 Oracle 数据库支持存在限制,所以 boot-admin 选择整合 Liquibase 提供数据库版本管理能力支持。 Liquibase 开源版使用 Apache 2.0 协议。 Liqui…

实现服务器版本---表白墙(Servlet)

目录 一、创建Servlet项目 二、约定前后端交互接口 三、前端代码 四、后端代码 五、效果演示 结合Servlet API ,实现一个服务器版本表白墙。实现的这个表白墙,就通过服务器来保存这里的消息数据,进而做到 “持久化” 存储。 一、创建Se…

浮点数中的阶码和尾数

阶码和尾数 阶码尾数浮点数浮点数表示示例 例题分析总结 阶码 在机器中表示一个浮点数时需要给出指数,这个指数用整数形式表示,这个整数叫做阶码。 尾数 常用对数的小数部分,用于科学计数法,其表示方法为:Mantissa x Base^Expo…

k210单片机的串口交互实验

先来看看实验的结果吧,k210的9口为RX,10口为TX。接线: 9口接usb转ttl的TX 10口接usb转ttl的RX 下面介绍一下k210需要使用的模块: K210 一共有 3 个串口,每个串口可以自由映射引脚。 例: # IO10→RX1&#…

JuiceFS__持久化缓存源码走读

JuiceFS__持久化缓存源码走读 JuiceFS 是一款高性能 POSIX 文件系统,针对云原生环境特别优化设计,在 Apache 2.0 开源协议下发布。使用 JuiceFS 存储数据,数据本身会被持久化在对象存储(例如 Amazon S3),而…