YOLOv7 论文学习

news2024/11/17 19:31:18

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.coloradmin.cn/o/791929.html

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

相关文章

bfs算法和dfs算法

bfs:广度优先搜索,一层一层搜索 dfs:深度优先搜索,先搜索一边,如果其中某个节点不符,那么回溯上一个节点,再向另一边搜索,直到搜索完毕为止 这是我个人的理解,具体可参…

AIGC第一波裁员,揭开了AI大模型创业的裂痕

大模型开始商业化肉搏,AIGC创业走向残酷时刻。 短短一年,AIGC产业正以N倍速经历其他产业可能要走几年或十几年的波澜起伏:从现象级产品爆红出圈、产业热情全面点燃、创业融资层出不穷,到一批明星独角兽被曝身陷窘境、裁员求生&am…

28.基于注解的声明式事务

基于注解的声明式事务 准备工作 将之间的使用的数据库表t_user更改为t_user1,使用的依赖和对应的jdbc.properties不变即可 准备数据库 BookSql.sql CREATE TABLE t_book (book_id int(11) NOT NULL AUTO_INCREMENT COMMENT 主键,book_name varchar(20) DEFAULT …

【如何训练一个中英翻译模型】LSTM机器翻译模型部署(三)

系列文章 【如何训练一个中英翻译模型】LSTM机器翻译seq2seq字符编码(一) 【如何训练一个中英翻译模型】LSTM机器翻译模型训练与保存(二) 【如何训练一个中英翻译模型】LSTM机器翻译模型部署(三) 【如何训…

Java的0xFFFF在赋值、比较时引起的困惑

Java中的0xFFFF是整型,在赋值、比较的时候容易引起混淆,涉及到符号位、数值大小,赋值给什么类型的变量。我今天在编码的时候就遇到了一些困惑。用代码样例的形式记录下来,加深理解: package com.thb;public class Tes…

mysql null 值查询不出来问题

最新遇到mysql null 值查询的问题,当查询这个字段有的为null 有的不为null 该字段查询条件查询为null值得将不显示。 举例 新建表 test_user name和phone得值默认值为null 我们添加一些数据 查询下name 不是张三得数据 select * from test_user where name !张…

将Spring Session存储到Redis中实现持久化

文章目录 Session持久化1. 添加依赖2. 配置redis连接信息3. 存储和读取session从Redis Session持久化 1. 添加依赖 在项目中添加session依赖和redis依赖&#xff0c;如下所示&#xff1a; <dependency><groupId>org.springframework.boot</groupId><art…

答粉丝问)【问题记录解决】如何重新训练已经经过p-tuning微调的模型;自然语言处理平台dialogflow 智能对话式问答应用程序 相关问题

如果有人以你不喜欢的方式对待你,那一定是你允许的,否则他只能得逞一次。——张德芬 🎯作者主页: 追光者♂🔥 🌸个人简介: 💖[1] 计算机专业硕士研究生💖 🌟[2] 2022年度博客之星人工智能领域TOP4🌟 🏅[3] 阿里云社区特邀专家博主🏅 �…

字符串 (2)--- 前缀函数与 KMP 算法

/* https://www.luogu.com.cn/problem/UVA455 最小周期&#xff1a; n - pi[n -1] */ #include <iostream> #include <string> #include <vector> using namespace std; vector<int> prefix_fun(string s) { int len s.length(); /…

曲线拟合(MATLAB拟合工具箱)位置前馈量计算(压力闭环控制应用)

利用PLC进行压力闭环控制的项目背景介绍请查看下面文章链接,这里不再赘述。 信捷PLC压力闭环控制应用(C语言完整PD、PID源代码)_RXXW_Dor的博客-CSDN博客闭环控制的系列文章,可以查看PID专栏的的系列文章,链接如下:张力控制之速度闭环(速度前馈量计算)_RXXW_Dor的博客-CSD…

7.语 句

7.1 表达式和语句 ●表达式: 表达式是可以被求值的代码&#xff0c;JavaScript 引擎会将其计算出一个结果。 ●语句: 语句是一段可以执行的代码。 比如: prompt() 可以弹出一个输入框&#xff0c;还有if语句、for循环语句等等 区别: 1.表达式&#xff1a;因为表达式可被求值&…

八、Kafka时间轮与常见问题

Kafka与时间轮 Kafka中存在大量的延时操作。 1、发送消息-超时重试机制 2、ACKS 用于指定分区中必须要有多少副本收到这条消息&#xff0c;生产者才认为写入成功&#xff08;延时 等&#xff09; Kafka并没有使用JDK自带的Timer或者DelayQueue来实现延迟的功能&#xff0c;而…

Leetcode-每日一题【剑指 Offer 03. 数组中重复的数字】

题目 找出数组中重复的数字。 在一个长度为 n 的数组 nums 里的所有数字都在 0&#xff5e;n-1 的范围内。数组中某些数字是重复的&#xff0c;但不知道有几个数字重复了&#xff0c;也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 示例 1&#xff1a; 解题思…

uni-app:模态框的实现(弹窗实现)

效果图 代码 标签 <template><view><!-- 按钮用于触发模态框的显示 --><button click"showModal true">显示模态框</button><!-- 模态框组件 --><view class"modal" v-if"showModal"><view cla…

安科瑞能源物联网以能源供应、能源管理、设备管理、能耗分析的能源流向为主线-安科瑞黄安南

摘要&#xff1a;随着科学技术的发展&#xff0c;我国的物联网技术有了很大进展。为了提升电力抄表服务的稳定性&#xff0c;保障电力抄表数据的可靠性&#xff0c;本文提出并实现了基于物联网的智能电力抄表服务平台&#xff0c;结合云计算、大数据等技术&#xff0c;提供电力…

测试老鸟经验,性能测试重点17个疑难解答,一篇打通...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、如何理解性能测…

三层交换基础实验

要求: 1.IP地址基于192.168.1.0/24划分 2.使用OSPF 3.使用DHCP 4.全网可达 1.配置二层交换 SW 3 <Huawei>system-view [Huawei]sysname SW3 [SW3]interface GigabitEthernet 0/0/2 [SW3-GigabitEthernet0/0/2]port link-type access [SW3-GigabitEthernet0/0/2]por…

Spring5学习笔记 — IOC

✅作者简介&#xff1a;大家好&#xff0c;我是Cisyam&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Cisyam-Shark的博客 &#x1f49e;当前专栏&#xff1a; Spring专栏 ✨特色专栏&a…

XCP详解「3.1·ASAP2新建A2L文件」

返回 XCP详解「总目录」 ASAP2中新建A2L文件 通过ASAP2生成需要A2L文件更常用些 新建Database ASAP2界面打开如下 设置标定信号数量最大值 导入elf文件&#xff0c;elf路径建议直接索引编译生成的Debug下的&#xff0c;防止编译后忘记更新 加载信号 查找需要监控或者修改的变…

SDUT 2023 summer team contest(for 22) - 5

K - City 题意&#xff1a;n城市之间连接无方向的道路&#xff0c;每个道路都有能量&#xff0c;敌人发动攻击&#xff0c;来摧毁这些道路&#xff0c;如果敌人发动x的攻击&#xff0c;则所有能力小于等于x的道路都将被摧毁&#xff0c;问有有多少对城市可以到达对方 思路&am…