目标检测-One Stage-YOLOv7

文章目录

  • 前言
  • 一、YOLOv7的不同版本
  • 二、YOLOv7的网络结构
  • 二、YOLOv7的创新点
  • 三、创新点的详细解读
    • ELAN和E-ELAN
    • BoF训练技巧
      • 计划型重参化卷积
      • 辅助训练模块
      • 标签分配
      • Lead head guided label assigner
      • Coarse-to-fine lead head guided label assigner
    • 基于级联模型的复合缩放方法
  • 总结


前言

自YOLOv4之后,其作者提出一些新的trciks,YOLOv7诞生主要贡献分为以下3个方面

  1. 设计了几种训练tricks(bag-of-freebies),使得实时目标检测可以在不增加推理成本的情况下大大提高检测精度
  2. 针对目标检测领域现有的两个问题提出解决方案:一是模块重参化如何高效合并,二是动态标签分配策略如何处理好不同输出层的分配

ps:

  • 模型重参化就是在推理阶段将多个模块合并为一个计算模块,YOLOv6的RepVGG Style就是基于这种策略设计的
  • YOLOv6的是SimOTA就是一种动态标签分配策略,除此外还有ATSS、OTA、TAL等方法
  1. 提出了一种新型的模型缩放方法-基于级联模型的复合缩放方法,可以更加高效地利用参数和计算量,减少实时探测器50%的参数,使其具备更快的推理速度和更高的检测精度。

提示:以下是本篇文章正文内容,下面内容可供参考

一、YOLOv7的不同版本

YOLOv7给出了以下版本:

  • 基础版本
    • YOLOv7-tiny(边缘GPU)、YOLOv7(普通GPU)、YOLOv7-W6(云GPU)
  • 缩放版本
    • YOLOv7-X:基于YOLOv7,对neck部分进行stage缩放+使用新的模型缩放法对整个模型部分进行depth和width缩放
    • YOLOv7-E6:基于YOLOv7-W6,使用新的模型缩放法进行了depth缩放
    • YOLOv7-D6:基于YOLOv7-W6,使用新的模型缩放法进行了depth和width缩放
    • YOLOv7-E6E:基于YOLOv7-E6,使用E-ELAN替换ELAN

二、YOLOv7的网络结构

YOLOv7基础版本是anchor-based的,和YOLOv5比较相似,除数据增强外,在输入端都使用了自适应锚框计算自适应图片缩放,并将Neck和Head合称Head层。

YOLOv7的网络结构图如下,可以看出改动在于:

  1. backbone:
    • 卷积块:与YOLOv5相比,将CBL卷积模块改为不同卷积核大小的CBS(激活函数从Leaky relu改为SiLU)
    • 残差块:与YOLOv5相比,将CSP_1残差块修改为ELAN,ELAN 由多个 CBS 模块堆叠组成,含有丰富的梯度流信息,能够有效的使用网络参数并且加速网络的推理
    • 新增MP模块:由 CBS 和最大池化层组成,主要用于下采样操作,能够有效减少特征丢失
  2. Neck:
    • 仍然是FPN+PAN结构,与YOLOv5相比, 将SPPF模块改为SPPCSPC模块,CSP 模块换成了 ELAN-H 模块, 同时下采样变为了 MP模块

ps:

  • ELAN-H相比于 ELAN 增加了两个拼接操作,SPPCSPC 主要用于增大感受野。
  • 前面系列中,已经提到了SPP(空间金字塔池化)和CSPC(跨阶段部分连接),其中SPP是一种用于解决不同尺寸输入图像问题的技术,CSPC是一种用于提高特征传递和网络效率的技术,SPPCSPC将SPP和CSPC两种技术结合起来。它首先使用SPP技术提取不同尺度的特征表示,然后通过CSPC技术进行特征传递和信息融合。这种结合可以同时处理不同尺度的特征信息,提高目标检测的准确性和效率。
  • SPPCSPC 表现优于SPPF,但参数量和计算量提升了很多
  1. Head:
    • 加入了Rep算子,用于参数重参化
      在这里插入图片描述
      示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

二、YOLOv7的创新点

  1. 结合一些先进模块改进了模型:CBSELAN\E-ELANMPSPPCSPCRep,保证速度情况下,提升了检测精度
  2. 提出了一些BoF训练技巧(计划型重参化卷积辅助训练模块标签分配(Coarse-to-fine lead head guided label assigner)),使用了一些现有BoF训练技巧(conv-bn-activation拓扑中的批量归一化YOLOR中的隐式知识与卷积特征图以加法和乘法的方式相结合EMA更新权重),在不增加推理成本的情况下大大提高了检测精度
  3. 提出了一种新型的模型缩放方法-基于级联模型的复合缩放方法,可以更加高效地利用参数和计算量,减少实时探测器50%的参数,使其具备更快的推理速度和更高的检测精度。

三、创新点的详细解读

ELAN和E-ELAN

  1. 设计轻量级网络或高效架构时,计算量(FLOPs)和模型参数量是主要考虑因素,但是减少模型大小和FLOPs不等同于减少推理时间和降低能耗。比如ShuffleNetv2与MobileNetv2在相同的FLOPs下,前者在GPU上速度更快。所以除了FLOPs和模型大小外,还需要考虑其他因素对能耗和模型推理速度的影响。VoVNet诞生,除了考虑上述因素外,还考虑两个重要的因素:内存访问成本(Memory Access Cost,MAC)和GPU计算效率。实质上就是要减少残差连接(内存碎片化)和减少层数(并行运算)
  2. CSPVoVNet是VoVNet的变种,在其基础上还考虑了梯度路径(gradient path),使不同层的权重可以学习更多不同的特征,即增加了跨stage连接(cross stage connection)
  3. ELAN模块是一个高效的网络结构,它通过控制最短和最长的梯度路径,使网络能够学习到更多的特征,并且具有更强的鲁棒性(作者发现通过控制最短最长梯度路径,更深的网络可以有效地进行学习并更好地收敛)
  4. E-ELAN是ELAN的扩展

ps:在大规模ELAN中,无论梯度路径长度和计算模块数量如何,都达到了稳定的状态。但如果更多计算模块被无限地堆叠,这种稳定状态可能会被破坏,参数利用率也会降低。论文提出的E-ELAN采用expand、shuffle、merge cardinality结构,实现了在不破坏原始梯度路径的情况下,提高网络的学习能力。

在这里插入图片描述

BoF训练技巧

计划型重参化卷积

尽管RepConv在VGG上取得了优异的性能,但将它直接应用于ResNet和DenseNet或其他网络架构时,它的精度会显著降低。作者使用梯度传播路径来分析不同的重参化模块应该和哪些网络搭配使用。通过分析RepConv与不同架构的组合以及产生的性能,作者发现RepConv中的identity破坏了ResNet中的残差结构和DenseNet中的跨层连接,这为不同的特征图提供了梯度的多样性

在这里插入图片描述
基于上述原因,作者使用没有identity连接的RepConv结构。图4显示了作者在PlainNet和ResNet中使用的“计划型重参化卷积”的一个示例
在这里插入图片描述

辅助训练模块

深度监督是一种常用于训练深度网络的技术,其主要概念是在网络的中间层增加额外的辅助头,以及以辅助损失为指导的浅层网络权重。即使对于像ResNet和DenseNet这样收敛效果好的网络结构,深度监督仍然可以显著提高模型在许多任务上的性能。

作者将负责最终输出的头部称为引导头部(lead head),而用于辅助训练的头部则称为辅助头部(auxiliary head)

在这里插入图片描述

标签分配

过去,在深度网络的训练中,标签分配通常直接参考ground true框,并根据给定的规则生成硬标签。然而,近年来,以目标检测为例,研究人员经常使用网络输出的预测质量和分布,然后与ground true框一起考虑,使用一些计算和优化方法来生成可靠的软标签。例如,YOLO使用边界框回归预测框和ground true框的IoU和作为对象性的软标签。

在软标签分配器相关技术的发展过程中,作者意外地发现了一个新的衍生问题,即“如何为辅助头和引导头分配软标签?”,并且作者并未发现相关文献迄今对此问题进行了探讨。

此前最流行的方法的结果如下图(c)所示,即将辅助头和引导头分离,然后使用它们自己的预测结果和ground true框来执行标签分配。本文提出的方法是一种新的标签分配方法,通过引导头预测来引导辅助头和引导头。

即使用引导头预测作为指导来生成从粗到细的分层标签,这些标签分别用于辅助头和引导头学习。提出的两种深度监督标签分配策略分别如下图(d)和(e)所示

在这里插入图片描述

Lead head guided label assigner

  • 引导头指导的标签分配器主要根据引导头的预测结果和ground true框进行计算,并通过优化过程生成软标签。这组软标签将用作辅助头和引导头的目标训练模型。

ps:之所以这样做,是因为引导头具有相对较强的学习能力,因此从中生成的软标签应该更能代表源数据和目标之间的分布和相关性。此外,我们可以将这种学习视为一种广义残差学习。通过让较浅的辅助头直接学习引导头已经学习的信息,引导头将能够更专注于学习尚未学习的剩余信息

Coarse-to-fine lead head guided label assigner

  • Coarse-to-fine引导头指导的标签分配器同样利用引导头的预测结果和ground true框生成软标签。不同的是,生成了两组不同的软标签(粗标签和细标签), 粗标签用于辅助头的目标训练模型,细标签用于引导头的目标训练模型。

ps:

  • 细标签与Lead head guided label assigner生成的软标签相同,而粗标签是通过放宽正样本分配过程的约束,允许更多的网格被视为正目标来生成的(例如FastestDet的label assigner,不单单只把gt中心点所在的网格当成候选目标,还把附近的三个也算进行去,增加正样本候选框的数量)。
  • 之所以这样做,是因为辅助头的学习能力不如引导头,为了避免丢失需要学习的信息,将在目标检测任务中重点优化辅助头的召回。对于引导头的输出,可以从高召回率的结果中过滤出高精度的结果作为最终输出。
  • 需要注意的是,如果粗标签的附加权重接近细标签的附加权值,那么在最终预测时可能会产生不良先验。因此,为了使这些超粗正网格具有较小的影响,作者在解码器中施加了限制,使得超粗正栅格不能完美地产生软标签。该机制允许在学习过程中动态调整细标签和粗标签的重要性,并使细标签的可优化上界始终高于粗标签。

基于级联模型的复合缩放方法

compound model scaling method for a concatenation-based model

EfficientNet的缩放模型考虑了宽度、深度和分辨率。对于缩放的YOLOv4,其缩放模型是调整stage数量。

这些缩放方法主要用于PlainNet或ResNet等架构中。当这些架构执行缩放时,每层的入度和出度都不会改变,因此可以独立分析每个缩放因子对参数量和计算量的影响。

然而,如果将这些方法应用于基于级联的体系结构就会发现,当对深度进行缩放时,宽度也将改变,如下图(a)和(b)所示
在这里插入图片描述
从上述现象可以推断,对于基于级联的模型,不能单独分析不同的缩放因子,而必须一起考虑。以放大深度为例,这样的动作会导致过渡层的输入通道和输出通道之间的比例变化,这可能导致模型占用更多硬件资源。

因此,必须为基于级联的模型提出相应的复合模型缩放方法。当缩放计算块的深度因子时,还必须计算该块的输出通道的变化。然后在过渡层上执行相同变化量的宽度因子缩放,结果如上图(c)所示。该复合缩放方法可以保持模型在初始设计时的特性,并保持最佳结构。


总结

YOLOv7达到新的SOTA,所提出的方法具有最好的速度-精度均衡性

在这里插入图片描述

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

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

相关文章

面试官问,如何在十亿级别用户中检查用户名是否存在?

面试官问,如何在十亿级别用户中检查用户名是否存在? 前言 不知道大家有没有留意过,在使用一些app注册的时候,提示你用户名已经被占用了,需要更换一个,这是如何实现的呢?你可能想这不是很简单吗…

java获取已经发送谷歌邮件的打开状态

1.前言 现在网上的方案都是在邮件里面插入一张图片的地址,当收件人打开之后,就会发送请求到指定路径的服务器上,然后在请求的controller里面处理邮件的状态,这个方案确实是行得通的,本文章只是给大家避个坑&#xff0…

从传统训练到预训练和微调的训练策略

目录 前言1 使用基础模型训练手段的传统训练策略1.1 随机初始化为模型提供初始点1.2 目标函数设定是优化性能的关键 2 BERT微调策略: 适应具体任务的精妙调整2.1 利用不同的representation和分类器进行微调2.2 通过fine-tuning适应具体任务 3 T5预训练策略: 统一任务形式以提高…

Vue学习计划-Vue3--核心语法(七)pinia

pinia案例gitee地址 1. pinia 准备一个效果 【搭建 pinia 环境】 安装pinia: npm install pinia/yarn add pinia第二步:操作src/main.ts import { createApp } from vue import App from ./App.vue/* 引入createPinia,用于创建pinia */ import { crea…

阿里云优惠券介绍、种类、领取入口及使用教程

阿里云优惠券是阿里云提供的一种优惠活动,旨在帮助用户节省购买云服务产品的费用。本文将为大家详细介绍阿里云优惠券的相关信息,包括优惠券的介绍、种类、领取入口以及使用教程。 一、阿里云优惠券介绍 阿里云优惠券是阿里云提供给用户的一种优惠凭证&…

vue前端开发自学,异步加载组件,提升用户端的客户体验度

vue前端开发自学,异步加载组件,提升用户端的客户体验度!现实项目开发时,组件的数量非常庞大,如果都是一口气加载完,对手机用户来说,体验度会很差。因此,非常有必要使用异步加载。 那就是,用到了…

Neo4j知识图谱(2)创建与删除

Neo4j - CQL简介_w3cschoolhttps://www.w3cschool.cn/neo4j/neo4j_cql_introduction.html一、创建节点 create(n:Person{name:何仙鸟,age:21}) create就是创建,无论是点还是边都是用create来创建 n相当于一个别名,比如创建一个Person,而Pe…

React16源码: React中的schedule调度整体流程

schedule调度的整体流程 React Fiber Scheduler 是 react16 最核心的一部分,这块在 react-reconciler 这个包中这个包的核心是 fiber reconciler,也即是 fiber 结构fiber 的结构帮助我们把react整个树的应用,更新的流程,能够拆成…

JVM基础(10)——老年代调优

作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO 联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬 学习必须往深处挖&…

[ACM算法学习] 诱导排序与 SA-IS算法

学习自诱导排序与SA-IS算法 - riteme.site 为了简化一些操作,定义 # 是字典序最小的字符,其字典序小于字母集里任意字符,并且将其默认作为每个字符串的最后一个字符,即作 S[|S|] SA-IS 算法 SA-IS 算法是基于诱导排序这种思想。…

Python基础知识:整理14 利用pyecharts生成地图

1 地图可视化的基本使用 from pyecharts.charts import Map from pyecharts.options import VisualMapOpts # 准备地图对象 map Map()# 准备数据 data [("北京市", 8), ("上海市", 99), ("广州省", 199), ("重庆市", 400), ("…

JavaScript学习笔记——变量、作用域、var、const和let

JavaScript学习笔记——变量、作用域、var、const和let 学习链接(原链接)变量变量声明的三种方式 作用域作用域介绍作用域分类全局作用域局部作用域(函数作用域)块级作用域块级作用域和局部(函数)作用域区别 varvar的作用域(全局函…

在数据中查找峰值

使用 findpeaks 函数求出一组数据中局部最大值的值和位置。 文件 spots_num 包含从 1749 年到 2012 年每年观测到的太阳黑子的平均数量。求出最大值及其出现的年份。将它们与数据一起绘制出来。 load("spots_num")[pks,locs] findpeaks(avSpots);plot(year,avSpots…

ssm基于vue的儿童教育网站的设计与实现论文

摘 要 传统信息的管理大部分依赖于管理人员的手工登记与管理,然而,随着近些年信息技术的迅猛发展,让许多比较老套的信息管理模式进行了更新迭代,视频信息因为其管理内容繁杂,管理数量繁多导致手工进行处理不能满足广大…

【26 预处理详解】

目录 预定义符号#define定义常量#define定义宏带有副作用的宏参数宏替换的规则宏函数的对比#和##命名约定#undef命令行定义条件编译头文件的包含其他预处理指令 1. 预定义符号 c语言设置了一些预定义符号,可以直接使用,预定义符号也是在预处理期间处理…

响应式编程初探-自定义实现Reactive Streams规范

最近在学响应式编程,这里先记录下,响应式编程的一些基础内容 1.名词解释 Reactive Streams、Reactor、WebFlux以及响应式编程之间存在密切的关系,它们共同构成了在Java生态系统中处理异步和响应式编程的一系列工具和框架。 Reactive Streams…

ruoyi后台管理系统部署-1-安装JDK

CentOS 7 安装JDK 1. 最简单方法 部署JDK最简单的方法是使用:yum 首先查看原服务器有没有安装 jdk # 没有输出 java -version yum list installed | grep javayum 安装 查看可供安装的jdk: yum search java | grep jdk yum -y list java*应该输出一堆…

C#无标题栏窗体拖动代码

文章目录 一、概念二、案例三、常见问题四、链接 一、概念 C#(C Sharp)是由微软公司开发的一种面向对象的编程语言。它是从C和C语言演化而来的,并结合了Java和其他编程语言的特性。C#是微软.NET平台的一部分,允许开发人员创建各种…

超强站群系统v9.0:最新蜘蛛池优化技术,一键安装,内容无缓存刷新,高效安全

安全、高效,化的优化利用php性能,使得运行流畅稳定 独创内容无缓存刷新不变,节省硬盘。防止搜索引擎识别蜘蛛池 蜘蛛池算法,轻松构建站点(电影、资讯、图片、论坛等等) 可以个性化每个网站的风格、内容、…

YOLOv7涨点改进:多层次特征融合(SDI),小目标涨点明显,| UNet v2,比UNet显存占用更少、参数更少

💡💡💡本文全网独家改进:多层次特征融合(SDI),能够显著提升不同尺度和小目标的识别率 💡💡💡在YOLOv7中如何使用 1)iAFF加入Neck替代Concat; 收录: YOLOv7高阶自研专栏介绍: http://t.csdnimg.cn/tYI0c ✨✨✨前沿最新计算机顶会复现 🚀🚀🚀YOL…
最新文章