目标检测算法YOLOv7简介

news2024/12/27 10:56:13

      YOLOv7由Chien-Yao Wang等人于2022年提出,论文名为:《YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors》,论文见:https://arxiv.org/pdf/2207.02696 ,项目网页:https://github.com/WongKinYiu/yolov7 。

      以下内容主要来自论文:

      1.Introduction

      近年来,实时目标检测器仍在针对不同的边缘设备(edge device)进行开发。例如,MCUNet和NanoDet的发展重点是生产低功耗单芯片并提高边缘CPU的推理速度。至于YOLOX和YOLOR等方法,它们专注于提高各种GPU的推理速度。最近,实时目标检测器的发展主要集中在高效架构的设计上。至于可以在CPU上使用的实时目标检测器,其设计大多基于MobileNet、ShuffleNet或GhostNet。另一种主流的实时目标检测器是针对GPU开发的,它们大多使用ResNet、DarkNet或DLA,然后使用CSPNet策略来优化架构。本文提出的方法的发展方向与当前主流的实时目标检测器不同。除了架构优化之外,我们提出的方法还将重点关注训练过程的优化。我们的重点将是一些优化的模块和优化方法,这些模块和优化方法可以加强训练成本以提高目标检测的准确性,但不会增加推理成本。我们将所提出的模块和优化方法称为可训练的免费赠品(bag-of-freebies)。

      最近,模型重新参数化(re-parameterization)和动态标签分配(label assignment)已成为网络训练和目标检测中的重要主题。主要是在上述新概念提出之后,目标检测器的训练演化出了许多新的问题。在本文中,我们将介绍我们发现的一些新问题,并设计有效的方法来解决这些问题。对于模型重参数化,我们利用梯度传播路径的概念分析了适用于不同网络层的模型重参数化策略,并提出了规划(planned)的重参数化模型。此外,当我们发现使用动态标签分配技术时,具有多个输出层的模型的训练会产生新的问题。即:"如何为不同分支的输出分配动态目标?" 针对这个问题,我们提出了一种新的标签分配方法,称为从粗到细引导标签分配(coarse-to-fine lead guided label assignment)。

      本文的贡献总结如下:(1)我们设计了几种可训练的bag-of-freebies方法,使得实时目标检测可以在不增加推理成本的情况下大大提高检测精度;(2)对于目标检测方法的演变,我们发现了两个新问题,即重新参数化模块如何替换原始模块,以及动态标签分配策略如何处理对不同输出层的分配。此外,我们还提出了解决这些问题所带来的困难的方法;(3)我们为实时目标检测器提出了"扩展"和"复合缩放"("extend" and "compound scaling")方法,可以有效地利用参数和计算;(4)我们提出的方法可以有效减少最先进(state-of-the-art)的实时目标检测器约40%的参数和50%的计算量,并且具有更快的推理速度和更高的检测精度。

      2.Related work

      (1).Real-time object detectors:目前最先进的实时目标检测器主要基于YOLO和FCOS。能够成为最先进的实时目标检测器通常需要以下特性:1)更快、更强的网络架构;2)更有效的特征整合方法;3)更准确的检测方法;4)更鲁棒的损失函数;5)更高效的标签分配方法;6)更高效的训练方法。在本文中,我们不打算探索需要额外数据或大型模型的自监督学习或知识蒸馏方法。相反,我们将针对与上述4)、5)和6)相关的最先进方法衍生的问题,设计新的可训练的bag-of-freebies方法。

      (2).Model re-parameterization:模型重新参数化技术在推理阶段将多个计算模块合并为一个。模型重参数化技术可以看作是一种集成(ensemble)技术,我们可以将其分为两类,即模块级集成和模型级集成。模型级重新参数化以获得最终推理模型有两种常见做法。一种是用不同的训练数据训练多个相同的模型,然后对多个训练好的模型的权重进行平均。另一种是对不同迭代次数的模型权重进行加权平均。模块级重参数化是最近比较热门的研究问题。此类方法在训练时将一个模块拆分为多个相同或不同的模块分支,并在推理时将多个分支模块集成为完全等效的模块。然而,并非所有提出的重新参数化模块都可以完美地应用于不同的架构。考虑到这一点,我们开发了新的重参数化模块,并针对各种架构设计了相关的应用策略。

      (3).Model scaling:模型缩放是一种放大或缩小已设计模型并使其适合不同计算设备的方法。模型缩放方法通常使用不同的缩放因子,如分辨率(输入图像的大小)、深度(层数)、宽度(通道数)、阶段(特征金字塔数),从而很好的权衡了网络参数量、计算量、推理速度和准确性。网络架构搜索(Network architecture search, NAS)是常用的模型缩放方法之一。NAS可以自动从搜索空间中搜索合适的缩放因子,而无需定义过于复杂的规则。NAS的缺点是需要非常昂贵的计算才能完成模型缩放因子的搜索。通过查阅文献,我们发现几乎所有模型缩放方法都独立分析单个缩放因子,甚至复合缩放类别中的方法也独立优化缩放因子。其原因是大多数流行的NAS架构处理的缩放因子相关性不是很强。我们观察到,所有基于级联(concatenation-based)的模型(例如DenseNet或VoVNet)在缩放此类模型的深度时都会改变某些层的输入宽度。由于所提出的架构是基于级联的,我们必须为此模型设计一种新的复合缩放方法。

      3.Architecture

      (1).Extended efficient layer aggregation networks:在大多数关于设计高效架构的文献中,主要考虑的只是参数数量、计算量和计算密度。如下图所示:(b)中CSPVoVNet的设计是VoVNet的一种变体。除了考虑上述基本设计问题外,CSPVoVNet的架构还分析了梯度路径,以使不同层的权重能够学习更多样的特征。上述梯度分析方法使推理更快、更准确。(c)中的ELAN考虑了以下设计策略--"如何设计高效的网络?"。他们得出了一个结论:通过控制最短最长梯度路径,更深的网络可以有效地学习和收敛。本文在ELAN的基础上提出了Extend-ELAN(E-ELAN),其主要架构如图(d)所示。

      无论梯度路径长度和大规模(large-scale)ELAN中计算块的堆叠数量如何,它都达到了稳定状态。如果无限地堆叠更多的计算块,这种稳定状态可能会被破坏,参数利用率就会下降。所提出的E-ELAN利用expand、shuffle、merge基数(cardinality)来实现在不破坏原有梯度路径的情况下不断增强网络的学习能力。在架构方面,E-ELAN仅改变了计算块的架构,而过渡层(transition layer)的架构完全不变。我们的策略是使用组卷积来扩展计算块的通道和基数。我们将对计算层的所有计算块应用相同的组参数和通道乘数(channel multiplier)。然后,每个计算块计算出的特征图将根据设定的组参数g被洗牌(shuffled)成g组,然后将它们连接在一起。此时,每组特征图中的通道数将与原始架构中的通道数相同。 最后,我们添加g组特征图来执行合并基数。除了保持原有的ELAN设计架构外,E-ELAN还可以引导不同组的计算模块学习更多样的特征。

      (2).Model scaling for concatenation-based models:模型缩放的主要目的是调整模型的一些属性,生成不同尺度的模型,以满足不同推理速度的需求。例如,EfficientNet的缩放模型考虑了宽度、深度和分辨率。至于scaled-YOLOv4,其缩放模型是调整stages的数量。上述方法主要应用于PlainNet或ResNet等架构中。 当这些架构执行放大或缩小时,每一层的入度和出度(in-degree and out-degree)都不会改变,因此我们可以独立分析每个缩放因子对参数量和计算量的影响。然而,如果将这些方法应用于基于串联的架构,我们会发现当对深度进行放大或缩小时,紧接在基于串联的计算块之后的翻译层(translation layer)的入度会减小或增加,如下图(a)和(b)所示。

      从上述现象可以推断,对于基于级联的模型,我们不能单独分析不同的缩放因子,而必须一起考虑。以深度放大为例,这样的动作会导致过渡层的输入通道和输出通道之间的比例发生变化,这可能会导致模型的硬件使用率下降。因此,我们必须为基于级联的模型提出相应的复合模型缩放方法。当我们缩放计算块的深度因子(depth factor)时,我们还必须计算该块的输出通道的变化。然后,我们对过渡层进行相同变化量的宽度因子缩放,结果如下图(c)所示。我们提出的复合缩放方法可以保持模型在初始设计时具有的属性并保持最佳结构。

      4.Trainable bag-of-freebies

      (1).Planned re-parameterized convolution:虽然RepConv在VGG上取得了优异的性能,但是当我们直接将其应用到ResNet和DenseNet等架构上时,其精度会明显降低。我们使用梯度流传播路径(gradient flow propagation path)来分析重参数化卷积应如何与不同网络结合。我们还相应地设计了计划重新参数化卷积(planned re-parameterized convolution)。

      RepConv实际上在一个卷积层中结合了3*3卷积、1*1卷积和恒等连接(identity connection)。在分析了RepConv和不同架构的组合和相应性能后,我们发现RepConv中的恒等连接破坏了ResNet中的残差和DenseNet中的级联,这为不同的特征图提供了更多多样性的梯度。由于上述原因,我们使用无恒等连接的RepConv(RepConvN)来设计计划重参数化卷积的架构。在我们的想法中,当带有残差或级联的卷积层被重新参数化卷积替换时,不应该有恒等连接。下图显示了我们设计的"planned re-parameterized convolution"在PlainNet和ResNet中使用的示例。

      (2).Coarse for auxiliary and fine for lead loss:深度监督(deep supervision)是一种常用于训练深度网络的技术。其主要思想是在网络的中间层添加额外的辅助头(auxiliary head),并以辅助(assistant)损失为指导的浅层网络(shallow network)权重。即使对于ResNet和DenseNet这样通常收敛良好的架构,深度监督仍然可以显着提高模型在许多任务上的性能。如下图所示:(a)和(b)分别显示了"无"和"有"深度监督的目标检测器架构。在本文中,我们将负责最终输出的头称为引导头(lead head),用于辅助训练的头称为辅助头(auxiliary head)。

      接下来我们要讨论标签分配的问题。过去,在深度网络的训练中,标签分配通常直接参考ground truth,并根据给定的规则生成硬标签(hard label)。然而,近年来,如果我们以目标检测为例,研究人员经常利用网络预测输出的质量和分布,然后与ground truth一起考虑使用一些计算和优化方法来生成可靠的软标签(soft label)。在本文中,我们将这种将网络预测结果与ground truth一起考虑然后分配软标签的机制称为"标签分配器(label assigner)"。

      无论auxiliary head or lead head的情况,都需要针对目标进行深度监督训练。在开发软标签分配器相关技术的过程中,我们无意中发现了一个新的衍生问题,即"如何为auxiliary head and lead head分配软标签?"据我们所知,相关文献迄今尚未对此问题进行探讨。目前最流行的方法的结果如下图(c)所示,即将auxiliary head and lead head分开,然后使用各自的预测结果和ground truth来执行标签分配。本文提出的方法是一种新的标签分配方法,通过lead head预测来指导auxiliary head and lead head。换句话说,我们使用lead head预测作为指导来生成从粗到细的分层标签(coarse-to-fine hierarchical labels),这些标签分别用于auxiliary head and lead head学习。所提出的两种深度监督标签分配策略分别如下图(d)和(e)所示。

      1).Lead head guided label assigner:主要根据lead head的预测结果和ground truth进行计算,并通过优化过程生成软标签。这套软标签将作为auxiliary head and lead head的目标训练模型。这样做的原因是因为lead head具有比较强的学习能力,因此它生成的软标签应该更能代表源数据和目标数据之间的分布和相关性。此外,我们可以将这种学习视为一种广义的残差学习。通过让较浅的(shallower) auxiliary head直接学习lead head已学到的信息,lead head将更能够专注于学习尚未学习的剩余信息。

      2).Coarse-to-fine lead head guided label assigner:还使用lead head的预测结果和ground truth来生成软标签。然而,在这个过程中,我们生成了两组不同的软标签,即粗标签和细标签(coarse label and fine label),其中细标签与lead head引导标签分配器生成的软标签相同,而粗标签是通过允许更多网格来生成的,通过放宽正样本分配过程的约束,将其视为正目标。原因是auxiliary head的学习能力不如lead head,为了避免丢失需要学习的信息,我们将重点优化优化目标检测任务中auxiliary head的召回。对于lead head的输出,我们可以从高召回率的结果中筛选出高精度的结果作为最终的输出。然而,我们必须注意,如果粗标签的附加权重(additional weight)接近细标签的附加权重,则可能在最终预测中产生不好的先验框。因此,为了使那些额外的粗正网格(coarse positive grids)的影响更小,我们在解码器中进行了限制,使得额外的粗正网格不能完美地产生软标签。上述机制使得细标签和粗标签的重要性在学习过程中动态调整,使得细标签的可优化上限始终高于粗标签。

      (3).Other trainable bag-of-freebies:在本节中,我们将列出一些可训练的bag-of-freebies。这些赠品(freebies)是我们在训练中使用的一些技巧,但最初的概念并不是我们提出的。包括:

      1).Batch normalization in conv-bn-activation topology:这部分主要将批量归一化层直接连接到卷积层。这样做的目的是在推理阶段将批量归一化的均值和方差整合到卷积层的偏差和权重(bias and weight)中。

      2).Implicit knowledge in YOLOR  combined with convolution feature map in addition and multiplication manner:YOLOR中的隐式知识可以通过推理阶段的预计算简化为向量。该向量可以与前一个或后一个卷积层的偏差和权重相结合。

      3).EMA model:EMA是mean teacher使用的一种技术,在我们的系统中我们纯粹使用EMA模型作为最终的推理模型。

      GitHub:https://github.com/fengbingchun/NN_Test

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

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

相关文章

HC-05的简介与使用

蓝牙概述 蓝牙(Bluetooth)是一种用于无线通信的技术标准,允许设备在短距离内进行数据交换和通信。它是由爱立信(Ericsson)公司在1994年推出的,以取代传统的有线连接方式,使设备之间能够实现低功…

Ansible-Playbook通过role角色部署Lnmp架构

目录​​​​​​​ 一、配置Nginx的Roles角色 1.1编写files/default.conf 1.2编写files/nginx.repo 1.3编写handlers/main.yml 1.4编写tasks/main.yml文件 1.5编写vars/main.yml文件 1.6测试运行结果,并不是真的执行任务 二、配置Mysql的Roles角色 2.1编写…

vue-fontawesome-elementui-icon-picker选择icon框架

第一步:安装vue-fontawesome-elementui-icon-picker依赖 npm install vue-fontawesome-elementui-icon-picker --save-dev 第二步:main.js配置 (放在element ui引入之后) import iconPicker from vue-fontawesome-elementui-icon-picker; Vue.use(ico…

day2_greedyIntervalsLRU/LFU

二、贪心算法之区间调度问题 0.计算一个区间集合中无重复的区间的最大数量(模板) public int intervalSchedule(int[][] intvs) {if (intvs.length 0) return 0;// 按 end 升序排序Arrays.sort(intvs, (a, b) -> Integer.compare(a[1], b[1]));// 至少有一个区间不相交in…

Web3 Tools - Base58

Base58编码 Base58编码是一种用于表示数字的非常见的编码方法。它通常用于加密货币领域,例如比特币和其他加密货币的地址表示。 什么是Base58编码? Base58编码是一种将数字转换为人类可读形式的编码方法。与常见的Base64编码不同,Base58编码…

Docker常用镜像安装

1. mysql 1.1 安装 获取镜像 docker pull mysql:8.0.30创建文件挂载目录 创建容器并运行 docker run -p 3306:3306 --name mysql8 \ -v /home/docker/mysql8/log:/var/log/mysql \ -v /home/docker/mysql8/data:/var/lib/mysql \ -v /home/docker/mysql8/mysql-files:/va…

鸿蒙OpenHarmony开发板解析:【特性配置规则】

特性 特性配置规则 下面介绍feature的声明、定义以及使用方法。 feature的声明 开发前请熟悉鸿蒙开发指导文档:gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。 在部件的bundle.json文件中通过feature_list来声明部件的feature列…

『大模型笔记』Google CEO Sundar Pichai(桑达尔·皮查伊)谈人工智能的未来!

Google CEO Sundar Pichai(桑达尔皮查伊)谈人工智能的未来! 文章目录 一. Google CEO谈人工智能的未来总结摘要观点时间线二. 参考文献中文字幕视频链接,欢迎关注我的xhs账号:Google CEO 皮查伊谈人工智能的未来! 一. Google CEO谈人工智能的未来

VTK 数据类型:规则网格

VTK 数据类型:规则网格 VTK 数据类型:规则网格分类三种规则网格需要的设置实例 VTK 数据类型:规则网格 分类 VTK 有 3 种规则网格: vtkImageData:几何结构和拓扑结构都是规则的。vtkRectilinearGrid:几何…

大语言模型的后处理

后处理的输入 常规意义上的大模型处理流程 import torch from transformers import LlamaForCausalLM, LlamaTokenizer# 加载模型和tokenizer model LlamaForCausalLM.from_pretrained("decapoda-research/llama-7b-hf") tokenizer LlamaTokenizer.from_pretrain…

《Python编程从入门到实践》day24

# 昨日知识点学习 创建外星人从一个到一行 # 主程序snipdef _create_fleet(self):"""创建外星人群"""# 创建一个外星人并计算一行可容纳多少个外星人# 外星人的间距为外星人的宽度alien Alien(self)alien_width alien.rect.widthavailable_sp…

使用Vue调用ColaAI Plus大模型,实现聊天(简陋版)

首先去百度文心注册申请自己的api 官网地址&#xff1a;LuckyCola 注册点开个人中心 查看这个文档自己申请一个ColaAI Plus定制增强大模型API | LuckyColahttps://luckycola.com.cn/public/docs/shares/api/colaAi.html来到vue的页面 写个样式 <template><Header …

Springboot+Vue项目-基于Java+MySQL的宠物商城网站系统(附源码+演示视频+LW)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &…

调试记录 CPU PCIE 找不到设备,AC 耦合电容的问题

1. 问题 现象&#xff1a; 1. 国产CPU的主板&#xff0c;主板内的PCIE 设备找的到&#xff0c;但是另一块板子上连接的PCIE 设备找不到。 2. 排查问题在哪里的计划 1. 检查原理图先排除信号定义的问题&#xff0c; TXRX是否反接。 2. 示波器检查PCIE 的时钟频率是否正确。 3. …

图神经网络(GNNs)在时间序列分析中的应用

时间序列数据是记录动态系统测量的主要数据类型&#xff0c;由物理传感器和在线过程&#xff08;虚拟传感器&#xff09;大量生成。时间序列分析对于解锁可用数据中隐含的丰富信息至关重要。随着图神经网络&#xff08;GNNs&#xff09;的最近进展&#xff0c;基于GNN的方法在时…

[嵌入式系统-73]:RT-Thread-快速上手:如何选择RT Thread的版本?

目录 如何选择合适的 RT-Thread 版本进行开发&#xff1f; RT-Thread 分支与版本介绍 如何选择 发布版本&#xff08;GitHub releases&#xff09; 开发分支&#xff08;GitHub master 主分支&#xff09; 长期支持分支&#xff08;GitHub lts-v3.1.x 分支&#xff09; …

面向对象设计之套路——设计模式

1、总则 面向对象的分析设计编程思想&#xff0c;通过封装、继承、多态把程序的耦合度降低&#xff0c;用设计模式使得程序更加灵活&#xff0c;容易修改&#xff0c;并且易于复用。 让业务逻辑与界面逻辑分开&#xff0c;让它们的耦合度下降&#xff0c;只有分离&#xff0c;…

JAVA使用Apache POI动态导出Word文档

文章目录 一、文章背景二、实现步骤2.1 需要的依赖2.2 创建模板2.3 书写java类2.3.1 模板目录2.3.2 Controller类2.3.2 工具类 2.4 测试2.4.1 浏览器请求接口2.4.2 下载word 三、注意事项四、其他导出word实现方式 一、文章背景 基于Freemarker模版动态生成并导出word文档存在弊…

西米支付:数字藏品元宇宙的介绍与骗局套路解析

一、什么是元宇宙&#xff1f; 元宇宙是一个集体虚拟共享空间&#xff0c;由虚拟增强的物理现实和物理持久的虚拟空间融合而创造&#xff0c;包括所有虚拟世界、增强现实和互联网的总和。简单地说&#xff0c;元宇宙是Web3.0时期的数字世界。 这类新兴概念被非法分子包装后&am…

JVM基础之垃圾回收

垃圾回收 1. Base 内存泄漏&#xff1a;不再使用的对象在系统中未被回收 内存溢出&#xff1a;内存泄漏的积累 手动触发垃圾回收&#xff1a;System.gc(),该方法不一定会立即回收垃圾&#xff0c;仅仅是向JVM发送一个垃圾回收请求&#xff0c;具体是否需要垃圾回收由JVM自行…