YOLOv7 论文学习

1. 解决了什么问题?

实时的目标检测器是计算机视觉系统的重要组成部分。目前应用在 CPU 端的实时目标检测方法大多基于 MobileNet、ShuffleNet、GhostNet,而用在 GPU 的实时目标检测方法大多基于 ResNet、DarkNet、DLA,然后使用 CSPNet 策略来优化网络架构。本文方法主要侧重于优化训练的过程,而非模型架构。这些优化方法会增加一定的训练成本,提升检测的表现,但不会增加推理成本。

要想优化目标检测器,可以从下面几个方向入手:

  • 更快、更强的网络架构;
  • 更有效的特征融合方法;
  • 更准确的检测方法;
  • 更鲁棒的损失函数
  • 更高效的标签分配方法
  • 更有效的训练方法

本文没有尝试自监督学习或知识蒸馏方法,它们需要更多的训练数据或更大的模型。

模型重参数化、动态标签分配开始在目标检测领域流行起来。对于模型重参数化,如何将重参数化模块替换原来的模块,作者尝试将模型重参数化技术应用到不同网络的层。关于如何分配动态目标给不同分支的输出,作者提出了 coarse-to-fine lead guided 标签分配方法。

模型缩放将模型缩小或放大,以匹配不同的计算设备。模型缩放系数一般包括输入图像的分辨率、网络深度(层数)、网络宽度(通道数)、特征金字塔个数、从而平衡网络的参数量、计算量、推理速度和准确率。本文发现,几乎所有的方法都是独立地研究各缩放系数的,因为在这些方法中,缩放系数之间关系并不紧密。而基于 concat 的模型,如 DenseNet 和 VoVNet,当它们的网络深度变化时,某些层的输入宽度也会相应变化,于是作者提出了新的混合缩放策略。

2. 提出了什么方法?

2.1 架构

2.1.1 Extended efficient layer aggregation networks

在设计高效网络架构时,主要考量因素无非是参数量、计算量和计算密度。ShuffleNet 分析了输入/输出通道比、网络分支的个数、element-wise 操作的影响。

下图b 的 CSPVoVNet 是 VoVNet 的变体,它分析了梯度路径,让不同层的权重学习更改多样的特征,从而让推理更快速、准确。下图c 的 ELAN 则通过控制 the shortest longest gradient path,网络能更加高效地收敛。于是作者提出了下图d 的 E-ELAN,它不会改变原结构的梯度传递路径,使用分组卷积来增加特征的 cardinality,以 shuffle 和 merge cardinality 的方式将不同分组的特征结合,从而增强不同特征图学到的特征,提升参数与计算利用效率。
在这里插入图片描述

ELAN 已达到一个稳定状态,如果无限地码放计算模块,稳定性会被破坏,参数利用率会降低。E-ELAN 利用 expand、shuffle 和 merge cardinality,不断增强网络的学习能力,不会破坏原有的梯度路径。E-ELAN 只改变计算模块的结构,转换层的结构完全没变。本文的策略是用分组卷积来扩大通道数和计算模块的 cardinality。对所有的计算模块使用相同的分组参数和通道乘数,然后每个计算模块的特征图会被 shuffle 为 g g g组,然后再 concat 到一起。每个特征图分组的通道数与原结构的通道数一样。最后,将 g g g组特征图融合起来。E-ELAN 不仅维持了 ELAN 的设计,也指导不同的计算模块分组学习更多样的特征。

2.1.2 Model scaling for concatenation-based models

模型缩放通过调整模型的一些性质,产生不同大小的模型,从而满足不同的推理速度要求。比如 EfficientNet 对模型的宽度、深度和图像分辨率做缩放。这些缩放方法主要应用在 ResNet 或 PlainNet,每层的 in-degrees 和 out-degrees 不变,因此可以单独地分析各缩放因素对参数量和计算量的影响。但对于 concat-based 架构,如下图 a 和 b,对深度做缩放会改变转换层(在 concat-based 计算模块后)的 in-degree。

对于 concat-based 模型,我们不能单独地分析各缩放系数。增大模型的深度会增大计算模块的输出宽度,转换层输入通道和输出通道比值的变化会降低硬件利用效率。如下图 c,当我们缩放 concat-based 模型的深度系数时,只缩放计算模块的深度系数,对其余的转换层只缩放相应的宽度系数。这种混合缩放方法能够保持模型的初始设计及最佳结构。
在这里插入图片描述

2.2 Trainable bag-of-freebies

2.2.1 Planned re-parameterized convolution

直接将 RepConv 应用到 ResNet 或 DenseNet 等结构,会造成准确率大幅下降。作者使用梯度流传播路径来分析如何在不同的网络中重参数化卷积。

RepConv 将 3 × 3 3\times 3 3×3卷积、 1 × 1 1\times 1 1×1卷积和恒等连接转换为一个卷积层。作者分析了 RepConv 和不同的网络结构组合的表现,发现 RepConv 里面的恒等连接会破坏 ResNet 的残差和 DenseNet 的 concat,它们原本能提供更丰富的梯度。因此作者使用的 RepConv 不带恒等连接,即 RepConvN。当我们重参数化一个带残差或 concat 操作的卷积层时,不应使用恒等连接。
在这里插入图片描述

2.2.2 Coarse for auxiliary and fine for lead loss

深度监督是给网络的中间层添加一个额外的辅助 head,用辅助损失指导浅层网络的权重。深度监督能大幅提高模型的表现。本文将负责网络最终输出的 head 叫 lead head,辅助训练的 head 叫 auxiliary head。

以前的标签分配方法直接用 ground-truths 根据一定的规则生成硬标签。后来,人们使用网络预测结果的质量和分布,结合 ground-truths 来生成一个可靠的软标签。比如,YOLO 使用边框回归预测与 ground-truths 的 IoU 作为 objectness 的软标签。
作者发现一个问题,如何给 auxiliary head 和 lead head 分配软标签。下图 c 是目前最流行的办法,将 auxiliary head 和 lead head 分开考虑,使用各自的预测结果和 ground-truths 完成标签分配。如下图 d 和 e,本文提出的方法则使用 lead head 的预测结果来指导 auxiliary head 和 lead head。用 lead head 的预测作为指导,生成 coarse-to-fine 的标签,分别用于 auxiliary head 和 lead head 的学习。
在这里插入图片描述

Lead head guided label assigner 基于 lead head 的预测结果和 ground-truths 来计算软标签。Lead head 有着更强的学习能力,所以它生成的软标签更能体现源数据和目标之间的关系。我们可以将该学习看作泛化残差学习,让浅层 auxiliary head 直接学习 lead head 学到的信息,lead head 就能更关注于尚未学到的残差信息。这些软标签会作为目标来训练 auxiliary head 和 lead head。

Coarse-to-fine lead head guided label assigner 也用 lead head 的预测结果与 ground-truths 来生成软标签。但在这个过程中会产生两类软标签,粗粒度标签和细粒度标签。细粒度标签与 lead head guided label assigner 的软标签是一样的,但粗粒度标签则是放宽正样本分配的约束条件,将更多的网格作为潜在目标对待。这么做是因为 auxiliary head 的学习能力不强,为了防止模型漏掉应该学到的信息,就只关注于 auxiliary head 的召回。最后从召回率高的结果中筛选出精度高的作为 lead head 的最终输出。为了降低粗粒度正网格的影响,在 decoder 中作者加入了一些约束,于是这些粗粒度正网格就无法完美地输出软标签,该机制动态地调节细粒度标签和粗粒度标签的重要程度,让细粒度标签的优化上界始终高于粗粒度标签。

2.2.3 其他训练技巧

  • Batch Norm:BN 层直接连接到卷积层,推理时将 BN 的均值和方差整合到卷积层的权重和偏置。
  • 在 YOLOR 中以相加或相乘的方式,在卷积特征图内融入隐含知识:YOLOR 的隐含知识可以简化为一个向量,在推理阶段提前计算好。该向量可以结合到卷积层里面。
  • EMA 模型:将 EMA 模型作为最终的推理模型。

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

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

相关文章

MLP-Mixer:面向视觉的全mlp架构

文章目录 MLP-Mixer: An all-MLP Architecture for Vision摘要本文方法代码实验结果 MLP-Mixer: An all-MLP Architecture for Vision 摘要 卷积神经网络(cnn)是计算机视觉的首选模型。 最近,基于注意力的网络,如VIT,也变得流行起来。在本文…

消息中间件ActiveMQ介绍

一、消息中间件的介绍 介绍 ​ 消息队列 是指利用 高效可靠 的 消息传递机制 进行与平台无关的 数据交流,并基于 数据通信 来进行分布式系统的集成。 特点(作用) 应用解耦 异步通信 流量削峰 (海量)日志处理 消息通讯 …... 应用场景 根据消息队列的特点&a…

【蓝图】p40-p43对象引用、变量有效性、实现键盘控制物体自转、简单点名系统

p40-p43对象引用、变量有效性、实现键盘控制物体自转、简单点名系统 p40对象引用、变量有效性p41实现键盘控制物体自转创建bool值控制旋转实现通过键盘控制自转 p42p43简单点名系统Get All Actors Of Class(获得场景中所有该类的actor演员)getFor Each L…

蓝桥杯专题-真题版含答案-【贪吃蛇长度】【油漆面积】【绘制圆】【高次方数的尾数】

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 👉关于作者 专注于Android/Unity和各种游…

(一)RabbitMQ概念-优势、劣势、应用场景 、AMQP、工作原理

Lison <dreamlison163.com>, v1.0.0, 2023.06.22 RabbitMQ概念-优势、劣势、应用场景 、AMQP、工作原理 文章目录 RabbitMQ概念-优势、劣势、应用场景 、AMQP、工作原理RabbitMQ概念RabbitMQ的优势RabbitMQ劣势RabbitMQ应用的场景RabbitMQ_AMQPRabbitMQ工作原理 RabbitM…

Flutter、Android Studio 安装详细步骤以及常错解决

目录 一、前言 二、介绍 三、安装 (一&#xff09;、安装Flutter SDK 1&#xff09;双击文件夹&#xff0c;打开之后就是这样&#xff1a;​编辑 2&#xff09;双击此文件&#xff1a;​编辑 3&#xff09;此过程问题&#xff1a; (二&#xff09;、配置 Flutter SDK 环…

国内疫情地图和省级疫情地图

基础地图演示 from pyecharts.charts import Mapfrom pyecharts.options import VisualMapOpts map Map() data [ ("北京", 99), ("上海", 199), ("湖南", 299), ("台湾", 199), ("安徽", 299), ("广州", 399…

Rust vs Go:常用语法对比(十三)

题图来自 Go vs. Rust: The Ultimate Performance Battle 241. Yield priority to other threads Explicitly decrease the priority of the current process, so that other execution threads have a better chance to execute now. Then resume normal execution and call f…

7.27 作业 QT

要求&#xff1a; 结果图&#xff1a; clock.pro: QT core gui QT texttospeechgreaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c11# The following define makes your compiler emit warnings if you use # any Qt feature that has been marked deprecated …

Bootstrap框架(组件)

目录 前言一&#xff0c;组件1.1&#xff0c;字体图标1.2&#xff0c;下拉菜单组件1.2.1&#xff0c;基本下拉菜单1.2.2&#xff0c;按钮式下拉菜单 1.3&#xff0c;导航组件1.3.1&#xff0c;选项卡导航1.3.2&#xff0c;胶囊式导航1.3.3&#xff0c;自适应导航1.3.4&#xff…

React 组件使用

React 组件是一个 js 函数&#xff0c;函数可以添加 jsx 标记 当前页使用组件&#xff0c;基本使用 注意&#xff1a;组件的名称&#xff0c;第一个字母一定要大写&#xff0c;否则会报错 import { createRoot } from "react-dom/client"; import "./index.c…

(三)springboot实战——web新特性之函数式实现

前言 本节内容我们主要介绍一下web访问的另一种形式&#xff0c;通过函数式web实现一个restful风格的http请求案例。函数式web是spring5.2之后的一个新特性&#xff0c;可以通过函数去定义web请求的处理流程&#xff0c;使得代码更为简洁&#xff0c;耦合性也降低了。 正文 …

[Linux] 初识应用层协议: 序列化与反序列化、编码与解码、jsoncpp简单使用...

写在应用层之前 有关Linux网络, 之前的文章已经简单演示介绍了UDP、TCP套接字编程 相关文章: [Linux] 网络编程 - 初见UDP套接字编程: 网络编程部分相关概念、TCP、UDP协议基本特点、网络字节序、socket接口使用、简单的UDP网络及聊天室实现… [Linux] 网络编程 - 初见TCP套接…

国产化 | 走近人大金仓-KingbaseES数据库

引入 事务隔离级别 || KingbaseES数据库 开篇 1、KingbaseES数据库 百度百科&#xff1a;金仓数据库的最新版本为KingbaseES V8&#xff0c; KingbaseES V8在系统的可靠性、可用性、性能和兼容性等方面进行了重大改进&#xff0c;支持多种操作系统和硬件平台支持Unix、Linux…

Ubuntu--科研工具系列

翻译系列 pot-desktop github链接: https://github.com/pot-app/pot-desktop 下载deb Releases pot-app/pot-desktop GitHub 安装过程 在下载好的deb目录下打开终端(自动安装依赖) sudo apt install "XXX.deb" &#xff08;后面可以直接托文件到终端&#…

d3dx9_42.dll丢失怎么解决?这三个方法亲测可修复

最近我在使用计算机时遇到了一个问题&#xff0c;就是d3dx9_42.dll文件丢失的错误提示。初时我对这个错误一无所知&#xff0c;不知道该如何解决。但是经过一番搜索和学习&#xff0c;我终于找到了修复这个问题的方法。d3dx9_42.dll是一个与DirectX相关的动态链接库文件&#x…

网络:TCP/IP协议

1. OSI七层参考模型 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层 2. TCP/IP模型 应用层 传输层 网络层 数据链路层 物理层 3. 各链路层对应的名称 应用层对应的是协议数据单元 传输层对应的是数据段 网络层对应的是数据包 链路层对应的是数据帧 物理层对应的是比特…

Elasticsearch API(二)

文章目录 前言一、Elasticsearch指标ES支持的搜索类型ES的能力ES的写入实时性ES不支持事务 二、Elasticsearch名词节点&#xff08;Node&#xff09;角色&#xff08;Roles&#xff09;索引&#xff08;index&#xff09;文档&#xff08;document&#xff09; 三、Elasticsear…

fastadmin 项目gitee管理

gitee创建一个仓库使用sourcetree等工具拉取代码使用phpstorm远程同步代码到本地设置忽略代码文件 注意&#xff1a;如果是直接把远程代码同步到本地&#xff0c;默认是你在 .gitignore中设置是无效的&#xff0c;代码一样会提交&#xff0c;需要先使用上面的截图去掉缓存&…

VM虚拟机网络配置桥接模式方法步骤

VM虚拟机配置桥接模式&#xff0c;可以让虚拟机和物理主机一样存在于局域网中&#xff0c;可以和主机相通&#xff0c;和互联网相通&#xff0c;和局域网中其它主机相通。 vmware为我们提供了三种网络工作模式&#xff0c;它们分别是&#xff1a;Bridged&#xff08;桥接模式&…