关于yolov7的一些理解

news2024/11/23 19:29:36

在这里插入图片描述论文: https://arxiv.org/abs/2207.02696
Github: https://github.com/WongKinYiu/yolov7
在这里插入图片描述

YOLOV7的一些理解

    • 1.摘要
    • 2.创新点
    • 3.具体工作
      • 3.1.网络结构优化
      • 3.2.辅助头训练
      • 3.3.标签分配策略
      • 3.4.重参数结构
      • 3.5.其它

1.摘要

Yolov7是Yolov4团队的作品,受到了yolo原作者的认可,论文发布后就引起了较大的关注;Yolov7通过一系列优化和技巧的组合,截止至论文发布时间[2022年7月],在5FPS到160FPS的范围内,无论是速度或是精度,都超过了已知的检测器,并且在GPU V100上进行测试, 精度为56.8% AP的模型可达到30 FPS(batch=1)以上的检测速率,与此同时,这是目前唯一一款在如此高精度下仍能超过30FPS的检测器。

2.创新点

  • 高效的网络结构 : 修改网络组件,引入ELAN结构
  • 动态标签分配策略 : 结合yolov5的跨网格匹配策略及yolox的动态网格策略SimOTA
  • 提出了一些Bag-of-Freebies方法:不增加推理时间的前提下,提高检测精度
    • 辅助头训练策略
    • 模型重参数化

3.具体工作

3.1.网络结构优化

yolov7整体的网络架构还是延用yolov5,只是对部分组件进行了修改或替换;

Modify-1: 3层conv代替stem模块,实现两倍下采样
- Conv仍然是:卷积 + BN + SiLU三件套
在这里插入图片描述

Modify-2: 引入ELAN模块代替CSP模块
- ELAN的这种结构的一个优势就是每个branch的操作中,输入通道都是和输出通道保持一致的[网络设计的一个高效准则]
- 仅仅是最开始的两个1x1卷积是有通道变化的
在这里插入图片描述在这里插入图片描述

Modify-3: 下采样模块(Maxpling + Conv)
- 下采样的实现目前主要两种方法: 最大池化、步长为2的卷积,而yolov7下采样模块秉持着”大人全都要”的原则,同时包含两者;
- 左边的分支主要采用maxpooling(MP)来实现空间降采样,并紧跟一个1x1卷积压缩通道;
- 右边先用1x1卷积压缩通道,再用步长为2的3x3卷积完成降采样
- 最后,将两个分支的结果合并,通道一个通道数等于输入通道数,但空间分辨率缩小2倍的特征图
在这里插入图片描述

Modify-4: Neck部分仍然延用PANFPN的结构,区别在于
- ELAN代替CSP(ELAN结构相对于Backbone中更复杂)
- 下采样模块采用Maxpling + Conv(结构相对于Backbone输出的通道数增加)
在这里插入图片描述

整体网络结构

  • DS 为下采样模块
    在这里插入图片描述

3.2.辅助头训练

深度监督是深度网络训练中常用的一种技术。 其主要思想是在网络的中间层增加辅助头部,并结合辅助损失作为浅层网络权重的指导;即使对于ResNet和densenet这样通常收敛良好的架构,深度监督仍然可以显著提高模型在许多任务上的性能;在yolov7中,我们称负责最终输出的头部为引导头(Lead head),称辅助训练的头部为辅助头(Aux head)。

关于辅助头位置问题

  • 由于网络结构中引入了特征金字塔结构,因此可以将辅助头放置于金字塔的中间层是一个比较好的选择;

关于辅助头标签分配问题

  • 常规处理方法:将辅助头和引导头分开,**利用各自的预测结果和GT来执行标签分配,**如下图©所示
  • yolov7中则是以引导头预测结果为指导,生成粗到细的层次标签,分别用于辅助头和引导头学习,如下图(d)(e)所示
    在这里插入图片描述
  • Lead head指导的标签分配器(如上图d)
    • 基于导向头的预测结果和GT进行计算,通过优化过程生成软标签
    • 软标签在训练时将同时用于辅助头和导向头
    • 导向头单独计算损失,辅助头将导向头匹配得到的正样本作为自己的正样本,并计算损失,最终相加(不同占比)
  • 粗到细的导向头指导的标签分配器(如上图e)
    • 使用导向头的预测和GT来生成软标签,但是它是生成两类标签,如coarse label和fine label
    • fine标签和图d的软标签生成过程相同,coarse标签通过放宽对正样本的约束,允许更多的网格被视作正样本
    • 对于辅助头更加倾向于优化模型的召回率,而导向头则是在高召回率的结果中挑选高精度的结果
    • 导向头单独计算损失,辅助头将导向头匹配得到的正样本(粗匹配)作为自己的正样本,并计算损失,最终相加(占比不同)
    • 注意:额外添加的粗标签样本不能和精细样本具有相同的loss权重,否则会损害检测器,因此需要对权重加以调整
  • 两点关于是否带辅助头训练的区别
    • loss函数和不带辅助头相同,但辅助头的加权系数不能过大(辅助头和主导头按照0.25:1的比例),否则会导致主导头出来的结果精度变低
    • 匹配策略和上面的不带辅助头的区别在于:
      • 主导头中每个网格与GT匹配上后,附加周边最近两个网格,而辅助头附加4个网格
      • 主导头中将top10个样本iou求和取整,而辅助头中取top20
    • 实验结果
      • 引入辅助头比不加辅助头性能要好;
      • 由粗到细的标签策略效果最好
        在这里插入图片描述

3.3.标签分配策略

yolov7的标签分配策略(筛选正样本),主要是集成yolov5和yolov7两者的精华,同时对Coarse to fine的深层监督方式引入不同标签

  • 使用yolov5跨网络匹配策略分配初步正样本
    • yolov5中目标的匹配不再是基于iou,而是长宽比: anchor的长宽/GT的长宽小于设定的阈值,即为正样本;
    • 除了引入目标中心点所在网格的anchor,还会引入中心点网格上下左右四个网格的anchor,参与正样本的匹配,大大增加正样本数量
    • 其中,距离中心点较近的两个网格匹配的样本将用于引导头的训练,距离较远的两个网格会额外引入用于辅助头的训练[yolov5本身没有辅助头的操作,只会引入最近的两个网格]
    • 如下图所示,红点为目标中心点所在位置,上下左右四个网格也会用于样本匹配;其中左、上网格距离中心点较近,将用于引导头的训练,右、下网格距离中心点较远,只会在辅助头训练的时候引入
      在这里插入图片描述
  • 使用yolov7动态网格匹配策略进一步筛选得到最终正样本
    • 使用每个GT的预测样本确定它需要分配到的正样本数(Dynamic k)
      • 计算第一步筛选得到的初步正样本iou
      • 并对Top10的样本进行iou求和取整,确定为当前GT的Dynamic k(最小为1)
      • 对于辅助头的训练Top取前20[粗标签]
        在这里插入图片描述
    • 计算每个样本对每个GT的Reg + Cls loss(Loss aware)
    • 为每个GT取loss最小的前dynamic k个样本作为最终正样本
    • 去掉同一个样本被分配到多个GT的正样本的情况
      • 同样是基于loss筛选

3.4.重参数结构

  • 背景:来源于Repvgg
    • 多分支结构:能够学到更丰富的特征,模型具有更高的精度
    • 单分支结构:速度快,对硬件的支持更好,具有推理效率
    • 结构重参数化:整合以上优势,在训练时采用多分支结构,推理时通过结构重参数化将模型转换为单分支结构,实现较高的推理效率
  • 几点理解:
    • 结构和参数是一一对应
    • 通过参数的等价转换实现结构的等价转换,即变换结构参数将结构从一个结构转换到另一个结构
    • 训练和推理进行解耦
    • tensorrt部署加速技巧中—Conv、BN、Relu三个层融合(大部分情况是conv和bn融合)采用的就是这个技术
      在这里插入图片描述
  • Repvgg的结构实现
    • 借鉴于resnet网络,使用identity和1*1分支构造训练时的RepVGG
    • 通过结构从新参数化,合并两个旁路分支,最终形成直筒结构
      在这里插入图片描述
  • 参数/结构等效转换的具体实现
    1.恒等映射分支可以被看做卷积核为1*1的单位1卷积
    • 经过这一步后变成了1个3 * 3卷积,2个1*1卷积
      在这里插入图片描述
    1. 整合BN,再将1 * 1卷积核边缘补0成3 * 3卷积核
    • 将 conv+bn 转换成一个带 bias 的 conv
    • 1 * 1卷积核边缘补0转换为3 * 3卷积核
      在这里插入图片描述
    1. 将三个卷积以中心点为基准相加,将 3 个卷积合并为 1 个
    • 将2个1x1 kernels(边缘补 0)和1个3x3 kernels相加,就能得到最终的3x3 kernel
      在这里插入图片描述
    1. 完整过程如下
      在这里插入图片描述
  • Yolo中的研究和应用
    • 作者使用梯度传播路径来分析不同的重参化模块应该和哪些网络搭配使用
    • 通过分析RepConv与不同架构的组合以及产生的性能,作者发现RepConv中的identity破坏了ResNet中的残差结构和DenseNet中的跨层连接,这为不同的特征图提供了梯度的多样性
    • 基于上述原因,作者使用没有identity连接的RepConv结构
      在这里插入图片描述
    • V7中其实使用repconv并不多,只有在neck最后的时候用过一次
      在这里插入图片描述
    • 对于yolo系列的算法其实可以考虑将常规的conv代替为repconv
      在这里插入图片描述

3.5.其它

  • 组合缩放调整网络结构
  • BN合并到Conv
  • EMA

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

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

相关文章

Vue3瀑布流(Waterfall)

Vue2瀑布流&#xff08;Waterfall&#xff09; 可自定义设置以下属性&#xff1a; 图片数组&#xff08;images&#xff09;&#xff0c;类型&#xff1a;Array<{title: string, src: string}>&#xff0c;默认 [] 要划分的列数&#xff08;columnCount&#xff09;&a…

Linux下_多线程

线程 1. 为什么使用线程? 使用fork创建进程以执行新的任务&#xff0c;该方式的代价很高。多个进程间不会直接共享内存线程是进程的基本执行单元&#xff0c;一个进程的所有任务都在线程中执行&#xff0c;进程要想执行任务&#xff0c;必须得有线程&#xff0c;进程至少要有一…

11、响应数据

文章目录1、响应JSON1.1、引入开发场景1.2 、jackson.jar ResponseBody1、装填返回值处理器2、返回值初步处理3、获取并使用返回值处理器4、观察如何获取返回值处理器5、返回值处理器接口内部6、返回值处理器支持的类型7、返回值解析器原理1.3、HTTPMessageConverter 原理1、M…

c# 通过webView2模拟登陆小红书网页版,解析无水印视频图片,以及解决X-s,X-t签名验证【2023年4月15日】

一、c# WebView2简介 1.一开始使用WebBrowser&#xff0c;因为WebBrowser控件使用的是ie内核&#xff0c;经过修改注册表切换为Edge内核后&#xff0c; 发现Edge内核版本较低&#xff0c;加载一些视频网站提示“浏览器版本过低“&#xff0c;”视频无法加载“。 2.WebBrowser…

CentOS上PHP源码安装和配置

CentOS上PHP源码安装和配置 此文是在CentOS 7上已经部署了Nginx的基础上进行的 关于CentOS7上安装Nginx&#xff0c;可参考我之前的文章&#xff1a; CentOS上Nginx安装记录 我们现在在这个基础上安装PHP 7。 PHP里面概念挺多的&#xff0c;没想到安装这个PHP需要花那么多时…

SpringBoot 表单提交全局日期格式转换器

参考资料 SpringBoot–LocalDateTime格式转换(前端入参)SpringBoot InitBinder注解绑定请求参数 目录 一. 实现Converter<S, T>接口的方式二. 全局ControllerAdvice InitBinder注解的方式三. RequestMappingHandlerAdapter的方式四. 效果 分析 ⏹当前台的提交数据的Con…

JVM-0418

JVM-字节码篇 虚拟机体系结构 线程共享&#xff1a;堆、方法区 线程私有&#xff1a;虚拟机栈&#xff0c;本地方法栈&#xff0c;程序计数器。其中虚拟机栈中包括局部变量表&#xff0c;和操作数栈。 字节码文件概述 字节码文件是跨平台的吗&#xff1f; 是的 Java虚拟机…

Apache Log4j2(CVE-2021-4101)远程代码执行漏洞复现

文章目录前言影响范围黑盒发现复现准备JNDILADPRMI漏洞复现Dnslog数据外带使用工具进行反弹shell防御与绕过防御绕过参考前言 Apache log4j是Apache的一个开源项目&#xff0c;Java的日志记录工具(同logback)。 log4j2中存在JNDI注入漏洞&#xff0c;当程序记录用户输入的数据…

Qt Quick - FileDialog文件对话框

FileDialog文件对话框使用总结一、概述二、使用三、常用属性四、常用例子1. 单选打开文本文件2. 单选保存文本文件一、概述 FileDialog提供了一个基本的文件选择器的功能&#xff1a;它允许用户选择现有的文件或目录&#xff0c;或者创建新的文件名。 对话框最初是不可见的。…

【性能测试学习】2023最有效的7大性能测试技术(建议收藏)

进入互联网时代&#xff0c;性能测试显得越来越重要&#xff0c;移动应用、web应用和物联网应用都需要进行性能测试和性能调优&#xff0c;而进行性能和负载测试会产生了大量的数据&#xff0c;这些数据难以分析。除了数据分析&#xff0c;我们还会遇到其它一些困难和挑战。 今…

数据结构和算法学习记录——认识二叉搜索树及二叉搜索树的查找操作(递归以及迭代实现-查找操作、查找最大和最小元素)

目录 二叉搜索树 二叉搜索树的一些操作函数 二叉搜索树的查找操作Find 递归实现 迭代实现 查找最大和最小元素 查找最小元素的递归函数 查找最大元素的迭代函数 二叉搜索树 二叉搜索树&#xff08;BST&#xff0c;Binary Search Tree&#xff09;&#xff0c;也称二…

深入了解 Hugging Face 中的生成工具:Generate方法

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️&#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

SSH升级

升级openssh版本一、安装telnet远程管理主机1、检查是否安装telnet2、安装telnet服务二、下载所需的安装包1、下载openssl、openssh、zlib安装包2、安装所需的相关软件3、备份原来的数据4、复制文件到/usr/local/bin/下增加执行权限一、安装telnet远程管理主机 1、检查是否安装…

通达信口袋支点选股公式编写和设置方法答疑

1、口袋支点选股公式成交量条件 在我编写的口袋支点选股公式中&#xff0c;成交量条件为成交量创10日新高。有网友提出&#xff0c;根据书中的定义&#xff0c;口袋支点成交量条件是成交量大于近10日下跌时的最大成交量。 这个问题确实是我没考虑周全&#xff0c;成交量创10日…

【5G NAS】NR 终端侧PDU建立过程以及数据包的过滤和映射

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G算力网络技术标准研究。 博客…

对数据去趋势

对数据去趋势 测量的信号可能显示数据中非固有的整体模式。这些趋势有时会妨碍数据分析&#xff0c;因此必须进行去趋势。 以具有不同趋势的两种心电图 (ECG) 信号为例。ECG 信号对电源干扰等扰动很敏感。加载信号并绘制它们。 load(ecgSignals.mat) t (1:length(ecgl));su…

LaTeX+Overleaf 论文速通教程

一、文本/排版二、章节和段落三、数学公式四、插入图片五、插入表格六、参考文献与交叉引用不使用BibTeX使用BibTeX(推荐)七、交叉引用label和refOverleaf开发界面 latex命令&#xff1a;\命令[可选参数]{必选参数} Latex项目组成&#xff1a; .tex&#xff1a;正文 .bib&…

如何对数据库进行优化

数据库是什么&#xff1f; 简单来说数据库就是将数据按照一定顺序存储到磁盘上的一个软件&#xff0c;我们平时写的sql语句&#xff0c;就是用数据库软件能识别的语言&#xff0c;对数据进行增删改查。其实数据本质上是不存在表里&#xff0c;而是存在磁盘上&#xff0c;所谓的…

掌握亚马逊,沃尔玛,东南亚平台的测评要点,测评事半功倍

测评其实最重要的两个点就是自己的资源和成号率 资源包括;商家资源&#xff0c;中介资源&#xff0c;礼品卡资源&#xff0c;还有买卖账号的渠道&#xff0c;ip资源 成号率这个直接影响的就是你个人投入成本的多&#xff0c;成号率越高&#xff0c;你的成本越低&#xff0c;但…

【Java版oj】day36Rational Arithmetic、Pre-Post

目录 一、Rational Arithmetic &#xff08;1&#xff09;原题再现 &#xff08;2&#xff09;问题分析 &#xff08;3&#xff09;完整代码 二、Pre-Post &#xff08;1&#xff09;原题再现 &#xff08;2&#xff09;问题分析 &#xff08;3&#xff09;完整代码 一、…