目标检测——YOLOv7算法解读

news2024/11/16 11:56:31

论文:YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors (2022.7.6)
作者:Chien-Yao Wang, Alexey Bochkovskiy, Hong-Yuan Mark Liao
链接:https://arxiv.org/abs/2207.02696
代码:https://github.com/WongKinYiu/yolov7


YOLO系列算法解读:
YOLOv1通俗易懂版解读、SSD算法解读、YOLOv2算法解读、YOLOv3算法解读、YOLOv4算法解读、YOLOv5算法解读、YOLOR算法解读、YOLOX算法解读、YOLOv6算法解读、YOLOv7算法解读

PP-YOLO系列算法解读:
PP-YOLO算法解读、PP-YOLOv2算法解读、PP-PicoDet算法解读、PP-YOLOE算法解读、PP-YOLOE-R算法解读


文章目录

  • 1、算法概述
  • 2、YOLOv7细节
    • 2.1 YOLOv7的网络结构改进
    • 2.2 赠品礼包(bag-of-freebies)
  • 3、实验


1、算法概述

YOLOv7是YOLOv4和YOLOR同一个作者,一个有趣的现象,按照arxiv上显示的时间,YOLOv7发布的时间比YOLOv6更早,难道是美团研发团队先向YOLO原作者拿到了v6这个序号版权吗?YOLOv7和YOLOv6优化的方式大致相同,都是结合重参数化对网络结构进行改进,相比于YOLOv6在自蒸馏和量化方面做优化,YOLOv7在网络结构方面做了更多的探索,也提出了训练方法的优化。这些模块和优化方法可以在不增加推理成本的情况下,增强训练成本以提高目标检测的准确性。
YOLOv7的贡献如下:
1、设计了几种可训练的bag-of-freebies,使实时检测器可以在不提高推理成本的情况下大大提高检测精度;
2、对于目标检测的发展,作者发现了两个新的问题,即模块重参化如何高效替代原始模块,以及动态标签分配策略如何处理好不同输出层的分配。作者针对这两个问题提出了方法进行解决。
3、作者为实时检测器提出了“扩展”和“复合缩放”(extend” and “compound scaling”)方法,可以更加高效地利用参数和计算量,同时,作者提出的方法可以有效地减少实时检测器40%的参数和50%的计算量,并且具备更快的推理速度和更高的检测精度。
在这里插入图片描述


2、YOLOv7细节

YOLOv7网络结构如下所示,图片来自[1]
在这里插入图片描述

2.1 YOLOv7的网络结构改进

扩展高效层聚合网络(E-ELAN, Extended efficient layer aggregation network)
ELAN结构通过控制最短最长的梯度路径,允许深度模型更有效地学习和收敛。YOLOv7基于ELAN结构提出的E-ELAN适用于具有无限堆叠计算块的模型。E-ELAN通过打乱和合并(shuffling and merging)基数来结合不同groups的特征,在不破坏原有梯度路径的情况下增强网络的学习能力。
在这里插入图片描述

基于连接的模型的模型缩放
模型缩放的主要目的是调整模型的某些属性,生成不同尺度的模型,以满足不同推理速度的需要。例如:Efficientnet系列,通过同时调整宽度、深度和分辨率得到b0到b7版本。YOLOv7的网络结构是基于串联的结构,其中标准缩放技术(如深度缩放)会导致过渡层的输入通道和输出通道之间的比率变化,从而导致模型的硬件使用减少。比如:串联结构网络中深度增加同时也会导致网络宽度增加,如下图a、b;YOLOv7提出了一种新的基于串联的模型缩放策略,该策略将块的深度和宽度以相同的因子进行缩放,以保持模型的最优结构。如下图c所示
在这里插入图片描述

2.2 赠品礼包(bag-of-freebies)

卷积重参数化
尽管RepConv在VGG上取得了优异的性能,但将它直接应用于ResNet和DenseNet或其他网络架构时,它的精度会显著降低。作者使用梯度传播路径来分析不同的重参化模块应该和哪些网络搭配使用。通过分析RepConv与不同架构的组合以及产生的性能,作者发现RepConv中的identity破坏了ResNet中的残差结构和DenseNet中的跨层连接,这为不同的特征图提供了梯度的多样性。基于这个原因,作者使用没有identity连接的RepConv结构。下图显示了作者在PlainNet和ResNet中使用的“计划型重参化卷积”的一个示例。
在这里插入图片描述

辅助训练模块
使用引导头(lead head)预测作为指导来生成由粗到细的层次标签,这些标签分别用于辅助头(auxiliary head)和引导头的学习。其结构如下:
在这里插入图片描述
引导头指导的标签分配器主要是根据引导头的预测结果和gt真实框进行计算,并通过优化过程生成软标签。这些软标签将作为辅助头和引导头的目标训练模型。这点可以被看作是一种广义残差学习。通过让较浅的辅助头直接学习引导头已经学习过的信息,引导头将更能专注于学习尚未学习的剩余信息。

其他bag-of-freebies
Batch normalization in conv-bn-activation:目的是在推理阶段将批归一化的均值和方差整合到卷积层的偏差和权重中。
Implicit knowledge:YOLOR中的隐式知识可以在推理阶段将计算值简化为向量。这个向量可以与前一层或后一层卷积层的偏差和权重相结合。
Exponential moving average:作者使用 EMA 模型作为最终的推理模型。


3、实验

实验设置
所有的实验都没有使用预训练的模型,用COCO2017训练集训练,用其验证集选择最佳模型,用COCO2017测试集评估模型性能。作者针对边缘端GPU、normal GPU和云端GPU分别设计了三种模型YOLOv7-tiny、YOLOv7和YOLOv7-W6。同时,我们还利用基本模型对不同的业务需求进行模型缩放,得到不同类型的模型。例如,通过对YOLOv7的neck部分缩放得到YOLOv7-X;对YOLOv7-W6进行缩放得到YOLOv7-E6和YOLOv7-D6。

BaseLines模型比较,以YOLOv4和YOLOR模型为基准进行比较
在这里插入图片描述

与现如今其他检测算法对比
在这里插入图片描述

消融实验:略

参考文献:
[1] Terven J, Cordova-Esparza D. A comprehensive review of YOLO: From YOLOv1 and beyond. arXiv 2023[J]. arXiv preprint arXiv:2304.00501

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

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

相关文章

十大排序算法详解-上篇:比较排序算法【python 动态图解】

作者介绍:10年大厂数据\经营分析经验,现任大厂数据部门负责人。 会一些的技术:数据分析、算法、SQL、大数据相关、python 欢迎加入社区:码上找工作 作者专栏每日更新: LeetCode解锁1000题: 打怪升级之旅 python数据分析…

如何通过cURL库实现远程控制插座

如何通过cURL库实现远程控制插座呢? 本文描述了使用cURL库调用HTTP接口,实现控制插座,即插即用,先插入插座,再接电器,实现远程控制。 可选用产品:可根据实际场景需求,选择对应的规格…

libtorrent - 安装小记

文章目录 官方文档:libtorrent python binding http://libtorrent.org/python_binding.html 1、下载代码 建议使用: git clone --recurse-submodules https://github.com/arvidn/libtorrent.git如果在 github web 界面下载代码,build 的时候…

进程动静态库

文章目录 动态库和静态库1. 静态库2. 动态库 承接上文: 文件描述符 动态库和静态库 静态库与动态库: 静态库(.a):程序在编译链接的时候把库的代码链接到可执行文件中。程序运行的时候将不再需要静态库动态库&#xf…

ISP比普通的静态代理相比有什么优势?

ISP(Internet Service Provider),即互联网服务提供商,是向广大用户综合提供互联网接入业务、信息业务、增值业务的电信运营商。而静态代理则是一个固定不变的代理IP地址,具有稳定性强、兼容性好和管理方便等特点。当我…

上位机图像处理和嵌入式模块部署(树莓派4b之自动化测试)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 硬件、软件功能开发ok只是产品开发的第一步。怎么做到自动化测试、保证产品质量才是关键。很多时候,我们给客户提供了功能,…

适用于集成温度补偿晶体振荡器SG3225EEN

在现代电子系统中,随着技术的发展,对晶体振荡器的要求越来越高。例如,人工智能、5G等技术的应用需要更高的频率稳定度和更低的相位噪声,以确保数据传输的准确性和系统的高效运行。此外,随着电子设备向智能化、小型化发…

PHP+MYSQL多条件选一通用搜索系统功能单文件7KB

通用功能: 快速填写参数用于自己的mysql数据表搜索,ajax载入数据 <?php header("content-Type: text/html; charsetUTF-8"); //error_reporting(0);$dbhost "localhost"; //数据库地址本地localhost $dbuser "chalidecom"; //数据库账号 …

C语言扫雷游戏完整实现(下)

文章目录 前言一、排雷函数菜单二、排雷函数菜单的实现三、拓展棋盘功能四、源码1. test.c源文件2. game.h头文件3. game.c源文件 总结 前言 C语言实现扫雷游戏的排雷菜单&#xff0c;以及功能的实现&#xff0c;拓展棋盘功能&#xff0c;以及源码等。 上半部分的链接地址: C语…

第一篇【传奇开心果系列】Python深度学习库技术点案例示例:深度解读深度学习在自动驾驶领域的应用

传奇开心果博文系列 系列博文目录Python深度学习库技术点案例示例系列 博文目录前言一、深度学习在自动驾驶方面的应用介绍二、目标检测和识别示例代码三、路况感知示例代码四、行为预测示例代码五、路径规划示例代码六、自动驾驶控制示例代码七、感知融合示例代码八、高精度地…

PyCharm开发工具安装plugins插件

一. 简介 通过前面的学习&#xff0c;我们知道 python开发常用的一个开发工具&#xff08;即IDE&#xff09;是 PyCharm。 本文来简单介绍一下&#xff0c;PyCharm开发工具是如何安装 plugins插件的。其实与 vscode软件安装插件类似。 本文来学习 PyCharm开发工具安装一个中…

51.HarmonyOS鸿蒙系统 App(ArkUI)通知

普通文本通知测试 长文本通知测试 多行文本通知测试 图片通知测试 进度条通知测试 通知简介 应用可以通过通知接口发送通知消息&#xff0c;终端用户可以通过通知栏查看通知内容&#xff0c;也可以点击通知来打开应用。 通知常见的使用场景&#xff1a; 显示接收到的短消息、…

正则表达式.java

正则表达式的作用&#xff1a; ①可以校验字符串是否满足一定的规则&#xff0c;并用来校验数据格式的合法性&#x1f9f8; &#x1f9e9;[]:只能是括号里的字符 &#x1f9e9;[^]&#xff1a;除了括号里的字符 &#x1f9e9;[- -]:表示两段范围&#xff0c;满足其一即可 &a…

openstack-镜像封装 7

再克隆两台主机并且安装图形化组件和虚拟化组件 进入图形化界面并安装一个虚拟化管理器 根下创建一个目录&#xff0c;虚拟化管理器新添加一个路径 创建虚拟化 配置虚拟化主机 设置虚拟化主机配置 安装所需软件 清理创建云主机时安装的组件 主机安装虚拟化工具 清理虚拟化缓存 …

应用在防蓝光显示器中的LED防蓝光灯珠

相比抗蓝光眼镜、防蓝光覆膜、软体降低蓝光强度这些“软”净蓝手段&#xff0c;通过对LED的发光磷粉进行LED背光进行技术革新&#xff0c;可实现硬件“净蓝”。其能够将90%以上的有害蓝光转换为450nm以上的长波低能光线&#xff0c;从硬件的角度解决了蓝光危害眼睛的问题&#…

深入探究音视频开源库WebRTC中NetEQ音频抗网络延时与抗丢包的实现机制

目录 1、引言 2、WebRTC简介 3、什么是NetEQ&#xff1f; 4、NetEQ技术详解 4.1、NetEQ概述 4.2、抖动消除技术 4.3、丢包补偿技术 4.4、NetEQ概要设计 4.5、NetEQ的命令机制 4.6、NetEQ的播放机制 4.7、MCU的控制机制 4.8、DSP的算法处理 4.9、DSP算法的模拟测试…

基于Flask的岗位就业可视化系统(三)

前言 本项目综合了基本数据分析的流程&#xff0c;包括数据采集&#xff08;爬虫&#xff09;、数据清洗、数据存储、数据前后端可视化等 推荐阅读顺序为&#xff1a;数据采集——>数据清洗——>数据库存储——>基于Flask的前后端交互&#xff0c;有问题的话可以留言…

unity学习(87)——断线的原因--客户端堆栈溢出1

无论unity还是exe问题都是一样的&#xff0c;都是客户端一直在发123&#xff0c;但收不到124&#xff0c;退出时服务器能发126&#xff0c;但是客户端压根接受不到126。一下确实解决不了问题&#xff0c;但其实已经十分接近了&#xff01; 客户端断线后就再也收不到任何包了&a…

ElasticSearch批处理

在刚才的新增当中&#xff0c;我们是一次新增一条数据。那么如果你将来的数据库里有数千上万的数据&#xff0c;你一次新增一个&#xff0c;那得多麻烦。所以我们还要学习一下批量导入功能。 也就是说批量的把数据库的数据写入索引库。那这里的需求是&#xff0c;首先利用mybat…

ctfshow web41-web50

web41 代码审计 <?php if(isset($_POST[c])){$c $_POST[c]; if(!preg_match(/[0-9]|[a-z]|\^|\|\~|\$|\[|\]|\{|\}|\&|\-/i, $c)){eval("echo($c);");} }else{highlight_file(__FILE__); } ?> 过滤了&#xff1a;[0-9] [a-z] ^ ~ $ [ ] { } & -…