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,一经查实,立即删除!

相关文章

Doris 部署

介绍 Apache Doris 是一个基于 MPP 架构的高性能、实时的分析型数据库,以极速易用的特点被人们所熟知,仅需亚秒级响应时间即可返回海量数据下的查询结果,不仅可以支持高并发的点查询场景,也能支持高吞吐的复杂分析场景。基于此&a…

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

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

@ImportResource 注解的使用

ImportResource注解&#xff1a;用于导入 Spring 的 xml 配置文件&#xff0c;让该配置文件中定义的 bean 对象加载到Spring容器中。 1.Spring 方式的配置文件 beans.xml <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www…

【Logback】Spring boot 配置多环境的logback

一、背景描述 由于MAC环境本地启动项目存在目前权限问题&#xff0c;需要与测试环境不一致只&#xff0c;为了不每次修改代码都修改本地目录&#xff0c;则想配置日志目录的多环境支持 二、实现方案 1、application-local.yml配置 logging:config: classpath:logback-sprin…

leetcode刷题记录

1.二分法 class Solution { public:int search(vector<int> &nums, int target) {int left 0, right nums.size() - 1;while(left < right) {int mid left ((right - left) >> 1);if(nums[mid] > target) {right mid -1;} else if(nums[mid] < …

详解Linux手动释放缓存的方法

详解Linux手动释放缓存的方法 Linux释放内存的命令&#xff1a; sync echo 1 > /proc/sys/vm/drop_caches0&#xff1a;不释放&#xff08;系统默认值&#xff09; 1&#xff1a;释放页缓存 2&#xff1a;释放dentries和inodes 3&#xff1a;释放所有缓存 释放完内存后改回…

深入浅出Pytorch函数——torch.nn.Softmax

分类目录&#xff1a;《深入浅出Pytorch函数》总目录 相关文章&#xff1a; 机器学习中的数学——激活函数&#xff1a;Softmax函数 深入浅出Pytorch函数——torch.softmax/torch.nn.functional.softmax 深入浅出Pytorch函数——torch.nn.Softmax 将Softmax函数应用于 n n n…

消息中间件ActiveMQ介绍

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

题目:2160.拆分数位后四位数字的最小和

​​题目来源&#xff1a; leetcode题目&#xff0c;网址&#xff1a;110. 平衡二叉树 - 力扣&#xff08;LeetCode&#xff09; 解题思路&#xff1a; 获得各位数字后&#xff0c;当较小的两个数字做为十位&#xff0c;较大的两个数字作为个位时所组成的两个两位数之和最小。…

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

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

postgresql主从搭建

postgresql主从搭建 主从服务器分别安装好postgresql 主库 创建数据库热备帐号replica&#xff0c;密码123456为例&#xff0c;则执行以下命令 create role replica login replication encrypted password 123456;打开 pg_hba.conf 配置文件&#xff0c;设置 replica 用户白…

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

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

数据结构之图

一. 常见算法模板 1. 基础代码&#xff0c;具体释义后序有空补充 头文件 #ifndef __GRAPH__H__ #define __GRAPH__H__#include <algorithm> #include <climits> #include <cmath> #include <cstddef> #include <cstdlib> #include <ctime&…

(一)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…

php-golang-rpc使用roadrunner-server/goridge/v3/pkg/rpc和php的spiral/goridge3.2实践

golang代码&#xff1a; go get github.com/roadrunner-server/goridge/v3 package main import ( "fmt" "net" "net/rpc" goridgeRpc "github.com/roadrunner-server/goridge/v3/pkg/rpc" ) type App struct{} func (s *App) Hi(na…

linux文件管理

1.目录架构介绍 1.存放命令相关的目录 # Windows: 以多根的方式组织文件 C: D: # Linux:以单根的方式组织文件 //bin&#xff0c; 普通用户使用的命令 /bin/ls, /bin/date /sbin&#xff0c;管理员使用的命令 /sbin/service,poweroff,useradd…只要看到bin路径&#xff0c;就应…

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 …