当前位置: 首页 > news >正文

极智Paper | YOLOv7 更高 更快 更强

欢迎关注我的公众号 [极智视界],获取我的更多笔记分享

  大家好,我是极智视界,本文解读一下 更高、更快、更强的 YOLOv7:Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors

  在 5FPS 到 160 FPS的范围内,YOLOv7 的速度和精度都超过了所有已知的目标检测器。在 V100 上所有已知的 30 FPS或更快的实时目标检测器中,YOLOv7 的准确率最高,AP 达到 56.8%。YOLOv7-E6 目标检测器 (56 FPS, 55.9% AP),相比基于 transformer 的检测器 SWIN-L Cascade-Mask R-CNN (9.2 FPS, 53.9% AP),在速度上要高出 509%,在精度上高出 2%;相比于基于 卷积 的检测器 ConvNeXt-XL Cascade-Mask R-CNN (A100 上 8.6 FPS, 55.2% AP),在速度上高出 551%,在精度上高出 0.7%。另外 YOLOv7 速度和精度上还优于其他一些检测器,如:YOLOR、YOLOX、Scaled-YOLOv4、YOLOv5、DETR、Deformable DETR、DINO-5scale-R50、ViT-Adapter-B 等。更加亲民的是,YOLOv7 只在 MS COCO 数据集上从头开始训练,而不使用任何其他数据集或预训练权重。源代码在:[https:// github.com/ WongKinYiu/ yolov7](https:// github.com/ WongKinYiu/ yolov7)。

文章目录

    • 1. 简介
    • 2. 相关工作
      • 2.1 实时目标检测器
      • 2.2 模型重参数化
      • 2.3 模型缩放
    • 3. 架构
      • 3.1 扩展的高效层聚合网络
      • 3.2 基于级联模型的模型缩放
    • 4. Trainable bag-of-freebies
      • 4.1 Planned re-parameterized convolution
      • 4.2 Coarse for auxiliary and fine for lead loss
      • 4.3 Other trainable bag-of-freebies
    • 5. 实验
    • 6. 参考

1. 简介

  实时目标检测是计算机视觉中一个非常重要的话题,是 CV 必不可少的部分,例如,多目标跟踪、自动驾驶、机器人、医学图像分析等应用均需要实时目标检测。执行实时目标检测的计算设备通常是一些 mobile CPU 或 GPU 以及 不同厂商生产的 NPU。如苹果的 Apple neural engine、英特尔的 neural compute stick、英伟达的 Jetson AI 边缘设备、谷歌的 edge TPU、高通的 neural processing engine、联发科的 AI processing unit 以及 耐能的 AI SoCs 都属于 NPU。上面提到的一些边缘设备专注于加速不同的 OP,如普通卷积、深度卷积或 MLP。论文中,作者提出的实时目标检测器,主要是希望它能够同时支持移动 GPU 以及 边缘和云端的 GPU。

  近年来,针对不同边缘设备的实时目标检测器仍在不断发展。例如,MCUNet 和 NanoDet 的提出,主要关注处理低功耗单片机和提高边缘 CPU 上的推理速度。而 YOLOX 和 YOLOR 等方法则专注于提高各种 GPU 的推理速度。近年来,实时目标检测器的发展主要集中在高效体系架构的设计上。对于可以在 CPU 上使用的实时目标检测器,它们的设计主要基于 MobileNet、ShuffleNet 或 GhostNet。另一种主流的实时目标检测器是针对 GPU 开发的,它们大多使用 ResNet、DarkNet 或者 DLA,然后使用 CSPNet 策略来优化架构。论文提出方法的关注方向不同于目前主流的实时目标检测器。除了架构的优化以外,还将重点关注训练过程的优化上,重点讨论一些可以在不增加推理成本的情况下,只通过增加训练成本可以提高目标检测准确性的优化模块和优化方法。作者将这样的模块和优化方法称为 trainable bag-of-freebies

  近年来,模型重参数化 re-parameterization 和 动态label分配 已经成为网络训练和目标检测中的焦点。在这两个新概念提出后,目标检测器的训练发展遇到了许多新问题。对于模型重参数化,作者结合梯度传播路径的概念,分析了不同网络中各层的模型重参数化策略,提出了 规划的重参数化模型。对于动态标签分配技术,多输出层模型的训练往往会产生新的问题:如何为不同分支的输出分配动态目标。对于这个问题,作者提出了一种新的标签分配方法,称为 coarse-to-fine lead guided label assignment

  论文的主要贡献总结如下:

  (1) 设计了几种 trainable bag-of-freebies 方法,使实时目标检测器在不增加推理成本的情况下大大提高了检测精度;

  (2) 在目标检测方法的发展中,作者发现了两个新的问题,即重参数化模块如何取代原来的模块,以及动态标签分配策略如何处理不同输出层的赋值。针对这些问题,提出了解决方法;

  (3) 针对实时目标检测器,提出了 扩展 和 复合缩放 方法,可以有效的利用参数和计算;

  (4) 提出的方法可以有效地减少最先进实时目标检测器 40% 左右的参数和 50% 左右的计算量,具有更加快的推理速度和更高的检测精度。


2. 相关工作

2.1 实时目标检测器

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

  (1) 一个更快、更强的网络架构;

  (2) 一种更有效的特征集成方法;

  (3) 一种更加准确的检测方法;

  (4) 一个更加鲁棒的损失函数;

  (5) 一种更加高效的标签分配方法;

  (6) 一种更高效的训练方法。

  本文中,作者不打算探索需要额外数据或大模型的自监督学习或知识蒸馏方法,相反,针对上述 (4)、(5)、(6) 的最新方法衍生出的问题,设计新的 trainable bag-of-freebies 方法。

2.2 模型重参数化

  模型重参数化技术 是指在推理阶段将多个计算模块合并为一个。模型重参数化技术可以看做是一种集成技术,可以将其分为两类,即 模块级集成 和 模型级集成。为了获得最终的推理模型,有两种常见的模型级重参数化实现:一种是使用不同的训练数据训练多个相同的模型,然后平均多个训练模型的权重;另外一种是对不同迭代次数下的模型权重进行加权平均。模块级重参数化是近年来比较热门的研究课题,这种方法在训练期间将一个模块拆分为多个相同或不同的模块分支,并在推理阶段将多个分支模块集成为一个完全等价的模块。然而,并不是所有提出的重参数化模块都可以完美的应用于不同的架构。考虑到这一点,作者设计了新的重参数化模块,并为各种架构设计了相关的应用策略。

2.3 模型缩放

  模型缩放是一种放大或缩小已经设计好的模型,使其适合不同计算设备的方法。模型缩放方法通常使用不同的缩放因子,如分辨率 (输入图像的大小)、深度 (层数)、宽度 (通道数) 和 stage (特征金字塔的数量),从而在网络参数的数量、计算量、推理速度和精度上达到良好的权衡。网络架构搜索 (NAS) 是一种常用的模型缩放方法,NAS 可以从搜索空间中自动搜索合适的缩放因子,而无需定义过于复杂的规则。NAS 的缺点是需要非常昂贵的计算来完成模型缩放因子的搜索。在《Fast and accurate model scaling》中,研究者分析了缩放因子与参数量和 OP 之间的关系,试图直接预测一些规则,从而得到模型缩放所需要的缩放因子。通过查阅文献,作者发现几乎所有的模型缩放方法都是独立分析单个缩放因子的,甚至复合缩放策略中的方法也是独立优化缩放因子的,这是因为大多数流行的 NAS 架构都是在处理不太相关的缩放因子。作者观察到,所有基于级联的模型,如 DenseNet 或 VoVNet,当这些模型的深度被缩放时,会连带改变某些层的输入宽度。考虑到论文提出的模型是级联的,所以必须为提出的模型设计一种新的复合缩放方法。


3. 架构

3.1 扩展的高效层聚合网络

   在大多数关于设计高效架构的文献中,主要考虑的无非是参数的数量、计算量和计算密度。Maet 等人还从内存访问代价的特点出发,分析了 输入/输出通道比率、架构的分支数量和 element-wise OP 对网络推理速度的影响。Dollar 等人在执行模型缩放时还考虑了激活,即更多地考虑卷积层输出张量中的元素数量。下图 b 中CSPVoVNet 的设计是 VoVNet 的变体。CSPVoVNet 的架构除了考虑上述的基本设计问题外,还对梯度路径进行了分析,使不同层的权重能够学习到更加多样化的特征。下图 c 中的 ELAN 考虑了:如何设计一个高效的网络。答案是:通过控制最短最长梯度路径,深度网络可以有效学习和收敛。在论文中,作者提出了基于 ELAN 的 Extended-ELAN (E-ELAN),其主要架构如下图 d。
在这里插入图片描述

  在大规模 ELAN 中,无论梯度路径长度和计算块的堆叠数量如何,都能够达到稳定状态。但若无限制地叠加更多的计算块,可能会破坏这种稳定状态,降低参数利用率。作者提出的 E-ELAN 架构,利用 扩展expand、重新洗牌shuffle、合并基数merge cardinality 来实现不破坏原有梯度路径的情况下,不断增强网络学习的能力。在模型架构上,E-ELAN 只是改变了计算块的结构,而过渡层的结构完全不变。作者的策略是使用组卷积来扩展计算块的通道和基数,对一个计算层的所有计算块,应用相同的组参数和通道乘法器,然后将每个计算块计算出的 feature map,按照设定的组参数 g,重新洗牌成 g 组,然后拼接在一起。此时,每组 feature map 中的通道数将与原架构中的通道数相同。最后,添加 g 组 feature map 来执行合并基数。除了保持原来 ELAN 的设计架构外,E-ELAN 还可以引导不同的计算块 groups 学习更多不同的特征。

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

   模型缩放的主要目的是调整模型的一些属性来生成不同尺度的模型,以满足不同推理速度的需要。例如,EfficientNet 的缩放模型考虑了宽度、深度和分辨率;Scaled-YOLOv4 的缩放模型考虑了调整 stages 的数量。在《Fast and accurate model scaling》中,作者分析了在进行宽度和深度缩放时,普通卷积和组卷积对参数量和计算量的影响,并以此设计了相应的模型缩放方法。

  以上方法主要应用于 PlainNet 或 ResNet。当这些架构在执行放大或缩小时,每一层的入度和出度不会发生变化,因此我们可以独立分析每个缩放因子对参数量和计算量的影响。然而,如果将这些方法应用于基于级联的架构时,作者发现当对深度进行放大或缩小时,计算块之后的转换层的入度将会减少或增加,如下图 a 和 b。

  从上述现象可以推测,对于基于级联的模型,我们不能单独分析不同的比例因子,而必须综合考虑。以按比例放大深度为例,这将导致过渡层 transition layer 的输入通道和输出通道的比例变化,这可能会导致模型在硬件上的使用。所以,当我们缩放一个计算块的深度因子时,还必须计算该块 block 的输出通道的变化,然后在过渡层上执行宽度缩放,并进行相同的深度更改,结果如下图 c。作者提出的复合缩放方法既能够保持模型初始设计时的特征,又能保持最优结构。
在这里插入图片描述


4. Trainable bag-of-freebies

4.1 Planned re-parameterized convolution

  虽然 RepConv 在 VGG 上已经取得了优异的性能,但当作者将其直接应用于 ResNet 和 DenseNet 及 其他架构时,其精度会显著降低。作者用梯度流传播路径来分析如何将重参数化的卷积与不同的网络相结合,并相应地设计了 规划的重参数化卷积 (Planned re-parameterized convolution)

  RepConv 实际上是在一个卷积层中结合了 3x3 卷积、1x1 卷积 和 identity连接。通过分析 RepConv 与不同架构的结合及其性能,作者发现 RepConv 中的 identity连接 破坏了 ResNet 中的残差 和 DenseNet 中的拼接,不同的 feature maps 提供了更多的梯度多样性。基于上述原因,作者使用没有 identity连接 的 RepConv (RepConvN) 来设计 规划的重参数化卷积架构。作者认为,当一个带有残差 或 拼接的卷积层被 重参数化卷积所取代时,应该不存在 identity连接。如下图展示了作者在设计的在 PlainNet 和 ResNet 中使用 规划的重参数化卷积 的示例。
在这里插入图片描述

4.2 Coarse for auxiliary and fine for lead loss

  深度监督是深度网络训练中常用的一种技术,其主要思想是在网络中间层增加额外的辅助头,以此作为辅助损失来给浅层网络权重作指导。即使对于 ResNet 和 DenseNet 这样通常收敛良好的架构,深度监督仍然可以提高模型在许多任务上的性能。下图 a、b 分别展示了 没有 深度监督的目标检测器架构。在论文中,作者把最终输出的头部称为 引导头lead head,将辅助训练的头部称为 辅助头auxiliary head。

  接下来要讨论标签分配问题。过去,在深度网络的训练中,标签通常就是指 ground truth,根据给定的规则生成硬标签。然而近年来,以目标检测为例,研究人员往往利用网络预测输出的质量和分布,再考虑 ground truth 真实值,然后使用一个计算和优化的方法来生成可靠的软标签 soft label。例如,YOLO 使用 bounding box 回归预测 IOU 和 ground truth 作为目标的软标签。在论文中,作者将预测结果和 ground truth 相结合并分配软标签的机制称为 “标签分配器 label assigner”。

  无论 auxiliary head 或 lead head 的情况如何,都需要对最终目标进行深度监督训练。作者在开发软标签分配器相关技术的过程中,偶然发现了一个新的衍生问题,即:如何分配软标签给 auxiliary head 和 lead head。相关文献还没有探讨过这个问题。如下图c,目前最流行的方法是将 auxiliary head 和 lead head 分开,利用各自的预测结果和 ground truth 进行标签分配。本文提出的方法是一种通过 lead head 预测来同时引导 auxiliary head 和 lead head 标签分配的方法。换句话说,就是以 lead head 预测为指导,生成从粗到细 coarse-to-fine 的层次标签,分别用于 auxiliary head 和 lead head 学习。提出的两种深度监督标签分配策略分别如下图d 和 e。
在这里插入图片描述

Lead head guided label assigner 主要根据 lead head 的预测结果和 ground truth 进行计算,通过优化生成软标签。这套软标签将作为 auxiliary head 和 lead head 的 target 来训练模型。这样做的原因是 lead head 具有较强的学习能力,由此生成的软标签应该更能代表源数据和目标数据之间的分布和相关性。我们可以把这种学习称为 广义的残差学习通过让较浅的 auxiliary head 直接学习 lead head 已经学习过的信息,lead head 将更多精力专注于学习还未学习的残差信息

Coarse-to-fine lead head guided label assigner 是利用 lead head 的预测结果和 ground truth 来生成软标签。然而在此过程中,生成了两组不同的软标签,即 粗标签细标签,其中细标签和 lead head 引导标签生成器生成的软标签相同,而粗标签是通过放宽正样本分配过程的约束,允许更多的 grids 作为正目标来生成的。这是因为 auxiliary head 的学习能力不如 lead head 强,为了避免丢失需要学习的信息,在目标检测任务中需要重点优化 auxiliary head 的召回。对于 lead head 的输出,可以从高查全率的结果中 过滤出 高精度的结果,作为最终输出。但必须注意的是,如果粗标签的附加权重接近细标签的附加权重,可能会在最终预测的时候产生较差的先验。因此,为了使这些额外的粗的 positive grids 影响较小,作者在解码器中加入了限制,使额外的粗的 positive grids 不能完美地产生软标签。上述机制允许细标签和粗标签的重要性在学习的过程中动态调整,使细标签的可优化上限始终高于粗标签。

4.3 Other trainable bag-of-freebies

  在本节中,作者列出一些 trainable bag-of-freebies,这些 freebies 是在训练中使用的一些技巧,这个概念并不是在论文中最先提出的。这些 freebies 包括:(1) conv-bn-activation 拓扑中的批归一化:将批归一化直接连接到卷积层。这样做的目的是在推理阶段将批归一化的均值和方差整合到卷积层的偏置和权重中;(2) YOLOR 中的 implicit knowledge 结合卷积特征映射的加法和乘法方式:在推理阶段,通过预计算可以将 YOLOR 中的 implicit knowledge 简化为向量,该向量可以和前一层或后一层的偏置和权重相结合;(3) EMA 模型:EMA 是 mean teacher 中使用的一种技术,在本文提出的模型中,只使用 EMA 模型作为最终的推理模型。


5. 实验

  Baselines:
在这里插入图片描述

  YOLOv7 与 state-of-the-arts 检测器进行比较:
在这里插入图片描述


6. 参考

  [1]. YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors.

  [2]. Fast and accurate model scaling.


  好了,以上解读了 更高、更快、更强的 YOLOv7。希望我的分享能对你的学习有一点帮助。


 【公众号传送】

《极智Paper | YOLOv7 更高 更快 更强》


在这里插入图片描述

搜索关注我的微信公众号【极智视界】,获取我的更多经验分享,让我们用极致+极客的心态来迎接AI !

相关文章:

  • 大型在线考试答题系统源码 B/S架构
  • Uniswap 顶流之路:机制、决策与风险分析
  • Human-level control through deep reinforcement learning
  • [2013][note]通过石墨烯调谐用于开关、传感的动态可重构Fano超——
  • 罗氏线圈在有源滤波中的应用
  • JVM学习(宋红康)之运行时数据区之虚拟机栈中栈帧的动态链接及方法调用
  • 基于FPGA的LCD1602驱动(含代码)
  • 高并发场景下,6种方案,保证缓存和数据库的最终一致性!
  • Elasticsearch HTTP查询
  • ArkID开源IDaaS系统插件OAuth2轻松实现单点登录安心做应用服务集成
  • 判断一个数是否是质数
  • 诊断Android系统原生代码Native崩溃问题
  • React中实现一键复制——五种办法
  • byName自动装配和byType自动装配
  • 【黑马Java笔记汇总】JavaSE+JavaWeb+SSM+Springboot笔记汇总
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • 「译」Node.js Streams 基础
  • C++类的相互关联
  • CEF与代理
  • JavaScript学习总结——原型
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • ReactNativeweexDeviceOne对比
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 多线程 start 和 run 方法到底有什么区别?
  • 番外篇1:在Windows环境下安装JDK
  • 开源地图数据可视化库——mapnik
  • 如何解决微信端直接跳WAP端
  • 为视图添加丝滑的水波纹
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • ​如何在iOS手机上查看应用日志
  • $GOPATH/go.mod exists but should not goland
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (一) storm的集群安装与配置
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (转)ORM
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .NET开发不可不知、不可不用的辅助类(三)(报表导出---终结版)
  • [ MSF使用实例 ] 利用永恒之蓝(MS17-010)漏洞导致windows靶机蓝屏并获取靶机权限
  • [AIGC] MySQL存储引擎详解
  • [C#C++]类CLASS
  • [emuch.net]MatrixComputations(7-12)
  • [hive] 窗口函数 ROW_NUMBER()
  • [HNOI2008]水平可见直线
  • [IE技巧] IE8中HTTP连接数目的变化
  • [Intel Edison开发板] 05、Edison开发基于MRAA实现IO控制,特别是UART通信
  • [iOS]随机生成UUID通用唯一识别码
  • [IT生活推荐]大家一起来玩游戏喽,来的都进!