YOLOX:2021年超越YOLO系列

 论文链接如下:

ReadPaperhttps://readpaper.com/pdf-annotate/note?pdfId=4558468783967051777¬eId=740712499546066944

作者信息如下:

 

 图1:YOLOX和其他最先进的物体探测器在移动设备上的精确模型的速度-精度权衡(上)和尺寸-精度曲线(下)。

摘要

在本报告中,我们对YOLO系列进行了一些有经验的改进,形成了一种新的高性能探测器-YOLOX。我们将YOLO探测器切换到无锚点的方式,并采用了其他先进的检测技术,即解耦头部和领先的标签分配策略Simota,以在大范围的模型上实现最先进的结果:对于仅有0.91M参数和1.08G Flop的YOLONano,我们在COCO上获得了25.3%的AP,比NanoDet高出1.8%AP;对于行业中使用最广泛的检测器之一YOLOv3,我们在COCO上将其提升到47.3%AP,超过当前最佳实践3.0%AP;对于与YOLOv4CSP、YOLOv5-L参数大致相同的YOLOX-L,我们在Tesla V100上以68.9 FPS的速度在COCO上获得了50.0%的AP,比YOLOv5-L高1.8%AP。此外,我们还使用一款YOLOX-L车型获得了流媒体感知挑战赛(CVPR 2021自动驾驶研讨会)的第一名。我们希望这份报告能为开发人员和研究人员在实际场景中提供有用的经验,我们还提供支持ONNX、TensorRT、NCNN和Openvino的Deploy版本。

然而,在过去的两年中,目标检测学术界的主要进展集中在无锚检测器[29,40,14],高级标签分配策略[37,36,12,41,22,4],以及端到端(NMS-Free)检测器[2,32,39]。这些还没有像YOLOv4和YOLOv5那样整合到YOLO家族中仍然是基于锚的探测器,具有手工制定的训练分配规则。

1我们选择分辨率为640×640的YOLOv5-L模型,并在V100上以FP16精度和Batch=1测试模型,以使YOLOv4[1]和YOLOv4-CSP[30]的设置一致,以进行公平的比较。

这就是我们来到这里的原因,通过经验丰富的优化提供了YOLO系列的最新改进。考虑到YOLOv4和YOLOv5对于基于锚点的管道可能有点过度优化,我们选择YOLOv3[25]作为我们的起点(我们将YOLOv3-SPP设置为默认的YOLOv3)。事实上,由于有限的计算资源和在各种实际应用中软件支持的不足,YOLOv3仍然是业界使用最广泛的探测器之一。

 

 以上YOLOX 论文阅读地址如下:ReadPaperhttps://readpaper.com/pdf-annotate/note?pdfId=4665305185141145601¬eId=740712499546066944

 CSPNet论文阅读地址如下:

ReadPaperhttps://readpaper.com/pdf-annotate/note?pdfId=4500339911726620673¬eId=1908917253678481920CSPNet结构如下:

CSPNet将基层的特征图分为两部分,一部分将经过密集块和过渡层;然后将另一部分与传输的特征图组合到下一阶段。

跨阶段部分DenseNet。所提出的CSPDenseNet一阶段的体系结构如图2(B)所示。CSPDenseNet的一个阶段由部分密集块和部分过渡层组成。在部分密集块中,阶段基层的特征图通过通道 x0 = [x′0, x′′0 分为两部分。在 x′′0 和 x′0 之间,前者直接链接到阶段的末尾,后者将通过密集块。部分转换层中涉及的所有步骤如下:首先,密集层的输出 [x′′0 , x1,..., xk] 将经历一个过渡层。其次,该过渡层的输出 xT 将与 x′′0 连接并经历另一个过渡层,然后生成输出 xU。CSPDenseNet前馈传递和权值更新方程分别如式3和式4所示。

 

我们可以看到来自密集层的梯度是分开集成的。另一方面,没有经过密集层的特征图 x′0 也被单独集成。至于用于更新权重的梯度信息,双方不包含属于另一侧的重复梯度信息。 

 总体而言,所提出的CSPDenseNet保留了DenseNet的特征重用特性的优点,但同时通过截断梯度流来防止过多的重复梯度信息。这个想法是通过设计一个分层特征融合策略并在部分过渡层中使用来实现的。

部分密集块。设计部分密集块的目的是 1.) 增加梯度路径:通过拆分和合并策略,梯度路径的数量可以加倍。由于跨阶段策略,可以缓解使用显式特征图副本进行拼接带来的缺点; 2.) 每一层的平衡计算:通常,DenseNet 基础层中的通道数远大于增长率。由于部分密集块中密集层操作所涉及的基础层通道仅占原始数的一半,可以有效解决几乎一半的计算瓶颈; 3.) 减少内存流量:假设 DenseNet 中密集块的基本特征图大小为 w × h × c,增长率为 d,总共有 mdense 层。然后,该密集块的 CIO 是 (c × m) + ((m2 + m) × d)/2,部分密集块的 CIO 是 ((c × m) + (m2 + m) × d)/2。虽然 m 和 d 通常远小于 c,但部分密集块能够保存网络大部分内存流量的一半。

 

不同类型的特征融合策略。(a) 单个路径 DenseNet, (b) 提出了 CSPDenseNet:转换→连接→转换,(c) 连接→转换,以及 (d) 转换→连接

 部分过渡层。设计部分过渡层的目的是最大化梯度组合的差异。部分过渡层是一种分层特征融合机制,它使用截断梯度流的策略来防止不同的层学习重复的梯度信息。在这里,我们设计了 CSPDenseNet 的两种变体来展示这种梯度流截断如何影响网络的学习能力。3 (c) 和 3 (d) 显示了两种不同的融合策略。CSP(首先融合)意味着连接两部分生成的特征图,然后进行转换操作。如果采用这种策略,将重用大量梯度信息。与CSP(融合最后)策略一样,密集块的输出将经过过渡层,然后与来自第1部分的特征映射进行拼接。如果采用CSP(融合最后)策略,由于梯度流被截断,梯度信息不会被重用。如果我们使用3所示的四种架构进行图像分类,则相应的结果如图4所示。可以看出,如果采用CSP(融合最后)策略进行图像分类,计算成本明显下降,但top-1准确率仅下降0.1%。另一方面,CSP(首先融合)策略确实有助于计算成本显着下降,但 top-1 准确率显着下降 1.5%。通过使用跨阶段的拆分和合并策略,我们能够有效地减少信息集成过程中重复的可能性。从图 4 所示的结果可以看出,如果可以有效减少重复的梯度信息,网络的学习能力将大大提高。

将 CSPNet 应用于其他架构。CSPNet 也可以很容易地应用于 ResNet 和 ResNeXt,架构如图 5 所示。由于只有一小部分特征通道通过 Res(X)Blocks,因此不需要再引入瓶颈层。这使得FLoating-point OPerations (FLOPs)固定时内存访问成本(MAC)的理论下限。

精确融合模型

准确查看以完美地预测。我们提出了EFM,它为每个锚点捕获适当的视场(FoV),提高了单级目标检测器的精度。对于分割任务,由于像素级标签通常不包含全局信息,因此考虑更大的补丁以获得更好的信息检索[22]通常更可取。然而,对于图像分类和目标检测等任务,当从图像级和边界框级标签中观察到时,可能会模糊一些关键信息。Li等人[15]发现,当CNN从图像级标签中学习时,CNN可能会被分散注意力,并得出结论,两级目标检测器优于一级目标检测器的主要原因之一。

聚合特征金字塔。所提出的 EFM 能够更好地聚合初始特征金字塔。EFM基于YOLOv3[29],它在每个地面真值对象之前只分配一个边界框。每个ground truth边界框对应一个超过阈值IoU的锚框。如果锚框的大小等价于网格单元的FoV,那么对于第s个尺度的网格单元,对应的边界框将的下界为第(s−1)个尺度,上界为(s + 1)个尺度。因此,EFM 从三个尺度组装特征。

平衡计算。由于特征金字塔的连接特征图是巨大的,它引入了大量的内存和计算成本。为了缓解这个问题,我们结合了 Maxout 技术来压。

不同的特征金字塔融合策略。(a) 特征金字塔网络 (FPN):融合当前尺度和先前尺度的特征。(b) 全局融合模型 (GFM):融合所有尺度的特征。(c) 精确融合模型 (EFM):融合特征 dep 和锚点大小。

PAN网络结构如下论文:

ReadPaperhttps://readpaper.com/pdf-annotate/note?pdfId=4666789975266705409¬eId=1908928993552075776 PAN结构理解:

用于实例分割的路径聚合网络(Path Aggregation Network for Instance Segmentation)

 图 1 我们框架的示意图。(a) FPN 主干。(b) 自下而上的路径增强。(c) 自适应特征池。(d) Box 分支。(e) 全连接融合。请注意,为简洁起见,我们省略了 (a) 和 (b) 中特征图的通道维度。

PAN论文中的主要改进点主要是如下3点:

首先,为了缩短信息路径,1、增强特征金字塔,在低层存在精确定位信号,创建了自下而上的路径增强。事实上,[44,42,13,46,35,5,31,14]的系统中使用了低层的特征。但是没有探索传播低级特征以增强整个特征层次结构以进行实例识别。

其次,为了恢复每个提议与所有特征级别之间的损坏信息路径,我们开发了2、自适应特征池。聚合每个提案的所有特征级别的特征是一个简单的组件,避免了任意分配的结果。通过此操作,与 [4, 62] 的路径相比,创建了更清晰的路径。

最后,为了捕捉每个提案的不同视图,我们使用3、一个小的全连接 (fc) 层来增强掩码预测,该层具有与 Mask R-CNN 最初使用的 FCN 互补的属性。通过融合这两个视图的预测,产生了信息多样性的增加和质量更好的掩码。

PAN如上改进涉及的结构如下:

图 2. 自下而上路径增强的构建块的图示。

我们的方法旨在利用具有单尺度输入的网络内特征层次结构中所有特征级别的信息。启用端到端训练。

我们的框架如图1所示。为了提高性能,进行了路径增强和聚合。增强了自下而上的路径,使低层信息更容易传播。我们设计了自适应特征池,以允许每个提议访问来自所有级别的信息进行预测。将互补路径添加到掩码预测分支中。这种新结构导致了不错的性能。与FPN类似,改进与CNN结构无关,例如[57,32,23]。

1、自下而上的路径增强

动机 富有洞察力的点 [63] 高层中的神经元强烈响应整个对象,而其他神经元更有可能被局部纹理和模式激活,这表明增加自上而下的路径以传播语义强特征并提高所有特征在 FPN 中具有合理分类能力。

我们的框架通过传播低级模式的强响应进一步增强了整个特征层次结构的定位能力,因为对边缘或实例部分的高响应是准确定位实例。为此,我们构建了一个从低级到顶层具有干净横向连接的路径。因此,在这些级别上,有一个“快捷方式”(图 1 中的虚线绿线),它由少于 10 层组成。相比之下,FPN 中的 CNN 主干提供了一条长路径(图 1 中的红色虚线),通过从低层到最顶层的偶数 100+ 层。

增强自底向上结构 我们的框架首先完成自下而上的路径增强。我们遵循 FPN 来定义生成具有相同空间大小的特征图的层在同一个网络阶段。每个特征级别对应一个阶段。我们还将 ResNet [23] 作为基本结构,并使用 {P2, P3, P4, P5} 来表示 FPN 生成的特征级别。我们的增强路径从最低级别 P2 开始,并逐渐接近 P5,如图 1(b) 所示。从 P2 到 P5,空间大小以因子 2 逐渐下采样。我们使用 {N2, N3, N4, N5} 来表示对应于 {P2, P3, P4, P5} 的新生成的特征图。请注意,N2 是 simpleP2,没有任何处理。

 如图2所示,每个构建块通过横向连接获取更高分辨率的特征映射Ni和较粗的映射Pi+1,生成新的特征映射Ni+1。每个特征映射Ni首先通过步长为2的3×3卷积层来减小空间大小。然后通过横向连接添加特征图 Pi+1 和下采样图的每个元素。然后将融合后的特征图由另一个 3×3 卷积层处理,为以下子网络生成 Ni+1。这是一个迭代过程,在接近 P5 后终止。在这些构建块中,我们始终使用 256 个通道的特征图。所有卷积层后面都有一个 ReLU [32]。然后将每个提案的特征网格从新的特征图汇集,即 {N2, N3, N4, N5}。

2、自适应特征池

在FPN[35]中,根据建议的大小,建议被分配到不同的特征级别。它使分配给低特征级别的小建议和大建议分配给更高的建议。尽管简单有效,但它仍然可以生成非最佳结果。例如,可以将两个具有 10 像素差异的提议分配给不同的级别。事实上,这两个建议非常相似

此外,特征的重要性可能与它们所属的级别密切相关。高级特征是用大的感受野生成的,并捕获更丰富的上下文信息。允许小建议访问这些特征可以更好地利用有用的上下文信息进行预测。同样,低级特征具有许多精细细节和高定位精度。让大型提案访问它们显然是有益的。有了这些想法,我们建议从每个级别汇集特征并将它们融合以进行以下预测。我们将此过程称为自适应特征池。

 我们现在通过自适应特征池分析从不同级别汇集的特征的比率。我们使用 maxoperation 来融合来自不同级别的特征,这允许网络选择元素的有用信息。我们根据提案最初分配给 FPN 中的级别将提案聚类为四个类别。对于每组建议,我们计算从不同级别选择的特征的比率。在符号中,级别 1 - 4 表示低到高的水平。如图3所示,蓝线表示最初在FPN中分配给第1级的小建议。令人惊讶的是,近 70% 的特征来自其他更高级别的。我们还使用黄色线表示在 FPN 中分配给第 4 级的大型提案。同样,50%+ 的特征从其他较低级别汇集。这一观察清楚地表明,多个级别的特征一起有助于准确预测。这也是设计自底向上路径增强的有力支持。

自适应特征池结构 自适应特征池的实现实际上很简单,如图1(c)所示。首先,对于每个提议,我们将它们映射到不同的特征级别,如图 1(b) 中的深灰色区域所示。在 Mask R-CNN [21] 之后,ROIAlign 用于从每个级别汇集特征网格。然后使用融合操作(element-wise max或sum)来融合不同层次的特征网格。 

在接下来的子网络中,池化的特征网格独立地通过一个参数层,然后是融合操作,使网络能够适应特征。例如,FPN 中的框分支中有两个 fc 层。我们在第一层之后应用融合操作。由于 Mask R-CNN 中的掩码预测分支中使用了四个连续的卷积层,我们在第一和第二卷积层之间放置了融合操作。融合特征网格被用作每个提案的特征网格,用于进一步预测,即分类、框回归和掩码预测。附录中的图 6 显示了框分支上自适应特征池的详细说明。

我们的设计侧重于融合来自网络内特征层次结构的信息,而不是来自输入图像金字塔的不同特征图的信息 [52]。与 [4, 62, 31] 的过程相比,它更简单,其中需要 L-2 归一化、连接和降维。

3、全连接融合

动机 全连接层或 MLP 广泛用于实例分割 [10, 41, 34] 和掩码提议生成 [48, 49] 中的掩码预测。[8, 33] 的结果表明,FCN 也能够预测实例的像素级掩码。最近,Mask R-CNN [21] 在池化特征网格上应用了一个微小的 FCN 来预测相应的掩码,以避免类之间的竞争。

我们注意到,与 FCN 相比,fc 层产生不同的属性,后者基于局部感受野对每个像素进行预测,并且参数在不同的空间位置共享。相反,fc 层是位置敏感的,因为不同空间位置的预测是通过不同的参数集实现的。所以它们有能力适应不同的空间位置。此外,利用整个提案的全局信息对每个空间位置进行预测。区分实例[48]并识别属于同一对象的单独部分是有帮助的。给定 fc 和卷积层的属性彼此不同,我们融合来自这两种类型的层的预测以获得更好的掩码预测。

掩码预测结构

我们的掩码预测组件是轻量级的,易于实现。掩码分支对每个提议的池化特征网格进行操作。如图 4 所示,主路径是一个小型 FCN,它由 4 个连续的卷积层和 1 个反卷积层组成。每个卷积层由256 3 × 3滤波器和反卷积层上采样特征组成,因子为2。它独立地预测每个类的二进制像素级掩码,以解耦分割和分类,类似于Mask R-CNN。我们进一步从层 conv3 到 fc 层创建一条短路径。有两个 3 × 3 卷积层,其中第二个将通道缩小到一半以减少计算开销。

 fc 层用于预测与类别无关的前景/背景掩码。它不仅是有效的,而且还允许用更多样本进行训练的 fc 层中的参数,从而获得更好的通用性。我们使用的掩码大小为28 × 28,使fc层产生784 × 1 × 1向量。该向量被重新整形为与 FCN 预测的掩码相同的空间大小。为了获得最终的掩码预测,添加了FCN中每个类的掩码和来自fc的前景/背景预测。仅使用一个fc层,而不是多个fc层进行最终预测,可以防止隐藏空间特征映射折叠成一个短特征向量的问题,从而丢失空间信息。

SiLu激活函数

综上YOLOX结构:

YoloX的网络结构如下,除了YoloHead采用了回归和分类的解耦,其他网络结构和YoloV5相同,

 

 

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

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

相关文章

2023企业数智化转型的正确打开方式是什么?他这样说(二)

哈喽~又见面了大家!上期我们说到了数据在数智化转型中的重要性,戳这里↓↓↓,一键直达 2023企业数智化转型的正确打开方式是什么?他这样说(一) 这期我们将从监控的角度进一步跟大家分享数智化转型&#x…

Java # Spring(2)

一、Spring事物 一、分类 编程式事物:代码中硬编码(不推荐使用) 声明式事物:配置文件中配置(推荐使用) 分类: 基于xml的声明式事物基于注解的声明式事物 二、隔离级别 ISOLATION_DEFAULT&…

Kubernetes集群部署

环境 > 192.168.50.53 k8s-master > 192.168.50.51 k8s-node1 > 192.168.50.50 k8s-node2 必须不能少于两核两G 所有主机共同操作 主机初始化配置 所有主机配置禁用防火墙和selinux [rootserver ~]# setenforce 0 [rootserver ~]# iptables -F [rootserver ~]…

LeetCode150道面试经典题--罗马数字转整数(简单)

目录 1.题目 2.示例 3.思路 4.案例代码(Java) 1.题目 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L …

java Spring Boot yml多环境配置

我们项目 线上和线下 环境配置不是特别一样 例如 运行的URL 数据库地址 数据库的账号密码 这些经常是不一样的 如果每次上线钱改 也不是特别方便 甚至可能忘记 那么 进入我们代码中 所谓的多环境 就是在不同的环境下配置不同的值 终端还是在application配置文件中 多环境的话…

一、Kubernetes介绍与集群架构

Kubernetes介绍与集群架构 一、认识容器编排工具 docker machine 主要用于准备docker host现已弃用建议使用docker desktop docker compose Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。使用 Compose,您可以使用 YAML 文件来配置应用程序的服务。…

电源控制--对数与db分贝

在控制理论中,"db"通常表示分贝(decibel)的缩写。分贝是一种用于度量信号强度、增益或衰减的单位。 在控制系统中,分贝常用于描述信号的增益或衰减。通常,增益以正数的分贝值表示,而衰减以负数的…

分布式定时任务框架Quartz总结和实践(1)

一、概述 Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序。Jobs可以做成标准的Java组件或…

营收、净利同比微增,喜临门品牌升级“临门一脚”?

8月8日晚,喜临门发布2023上半年业绩报告。根据财报,2023年上半年,喜临门营业收入约38.05亿元,同比增加5.53%;归属于上市公司股东的净利润约2.22亿元,同比增加1.2%。 如果仅从这份财报看,喜临门…

解决Spring Boot 2.6及之后版本取消了循环依赖的支持的问题

目录 1、问题: 2、报错: 3、解决方案: 1、问题: 循环依赖指的是两个或者多个bean之间相互依赖,形成一个闭环。直接表现为两个service层互相调用对方。 此时会遇到以下问题: 2、报错: 当启动项目时&…

Python AI 绘画

Python AI 绘画 本文我们将为大家介绍如何基于一些开源的库来搭建一套自己的 AI 作图工具。 需要使用的开源库为 Stable Diffusion web UI,它是基于 Gradio 库的 Stable Diffusion 浏览器界面 Stable Diffusion web UI GitHub 地址:GitHub - AUTOMATI…

【设计模式】-建造者模式

Java建造者模式:创建复杂对象的灵活构建者 在软件开发中,我们经常遇到需要创建一个复杂对象的情况。如果使用传统的构造函数进行对象创建,可能会导致构造函数参数过多,难以管理和维护。建造者模式(Builder Pattern&am…

数据结构-队列(C语言的简单实现)

简介 队列也是一种数据结构,队列也可以用来存放数字每次只能向队列里将入一个数字,每次只能从队列里获得一个数字在队列中,允许插入的一段称为入队口,允许删除的一段称为出队口它的原则是先进先出(FIFO: first in first out)&…

Docker之jenkins部署harbor在harbor中完成部署

Docker之jenkins部署harbor在harbor中完成部署 1、harbor作用 Harbor允许用户用命令行工具对容器镜像及其他Artifact进行推送和拉取,并提供了图形管理界面帮助用户查阅和删除这些Artifact。在Harbor 2.0版本中,除容器镜像外,Harbor对符合OCI…

商品推荐系统浅析 | 京东云技术团队

一、综述 本文主要做推荐系统浅析,主要介绍推荐系统的定义,推荐系统的基础框架,简单介绍设计推荐的相关方法以及架构。适用于部分对推荐系统感兴趣的同学以及有相关基础的同学,本人水平有限,欢迎大家指正。 二、商品…

【ChatGPT 指令大全】怎么使用ChatGPT辅助程式开发

目录 写程式 解读程式码 重构程式码 解 bug 写测试 写 Regex 总结 在当今快节奏的数字化世界中,程式开发变得越来越重要和普遍。无论是开发应用程序、网站还是其他软件,程式开发的需求都在不断增长。然而,有时候我们可能会遇到各种问题…

直播课 | 大橡科技研发总监丁端尘博士“类器官芯片技术在新药研发中的应用”

从类器官到类器官芯片,正在生物科学领域大放异彩。 药物研发需要新方法 众所周知,一款新药是一个风险大、周期长、成本高的艰难历程,国际上有一个传统的“双十”说法——10年时间,10亿美金,才可能成功研发出一款新药…

SpringCloud实用篇4——MQ RabbitMQ SpringAMQP

目录 1 初识MQ1.1 同步和异步通讯1.1.1 同步通讯1.1.2 异步通讯 1.2 技术对比 2.快速入门2.1 安装RabbitMQ2.1.1 单机部署2.1.2集群部署 2.2 RabbitMQ消息模型2.3.导入Demo工程2.4 入门案例2.4.1 publisher实现2.4.2 consumer实现 3 SpringAMQP3.1 Basic Queue 简单队列模型3.1…

玩一玩通义千问Qwen开源版,Win11 RTX3060本地安装记录!

大概在两天前,阿里做了一件大事儿。 就是开源了一个低配版的通义千问模型--通义千问-7B-Chat。 这应该是国内第一个大厂开源的大语言模型吧。 虽然是低配版,但是在各类测试里面都非常能打。 官方介绍: Qwen-7B是基于Transformer的大语言模…

Java EE 突击 9 - Spring Boot 日志文件

Spring Boot 日志文件 学习目标一 . 日志有什么用1.1 日志格式说明 二 . 自定义日志打印2.1 得到日志对象2.2 使用日志对象提供的方法 , 输出自定义的日志内容2.3 日志的级别 三 . 日志持久化3.1 在配置文件里面设置日志名称3.2 设置日志的保存目录 四 . 日志级别的设置五 . 简…