目标检测——YOLOv7算法解读

论文: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.mzph.cn/bicheng/2993.shtml

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

相关文章

C++_第八周做题总结

id:45 A.Equation(类与对象构造) 题目描述 建立一个类Equation,表达方程ax2bxc0。类中至少包含以下方法: 无参构造(abc默认值为1.0、1.0、0)与有参构造函数,用于初始化a、b、c的值; set方法,…

VS2019中配置C++ OpenCV 4.5.4完整指南

⭐️我叫忆_恒心,一名喜欢书写博客的在读研究生👨‍🎓。 如果觉得本文能帮到您,麻烦点个赞👍呗! 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧,喜欢的小伙伴给个三…

STM32标准库ADC和DMA知识点总结

目录 前言 一、ADC模数转换器 (1)AD单通道 (2)AD多通道 二、DMA原理和应用 (1)DMA数据转运(内存到内存) (2)DMAAD多同道(外设到内存&#x…

24深圳杯数学建模挑战赛A题6页初步思路+参考论文+保姆级答疑!!!

问题1:单个残骸的精确位置定位 建立数学模型,分析如果要精准确定空中单个残骸发生音爆时的位置坐标(经度、纬度、高程)和时间,至少需要布置几台监测设备?假设某火箭一级残骸分离后,在落点附近布置了7台监测…

【热门话题】AI作画算法原理解析

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 AI作画算法原理解析AI作画算法概述基础原理:机器学习与深度学习卷积…

Bentley二次开发教程24-交互式类工具

交互式工具概念简述 本次内容主要涉及到交互式工具的使用,在MicroStation中,超过一半的功能都是以交互式工具的形式而存在的,因此交互式工具在MicroStation二次开发中便显得非常重要。当我们的鼠标或键盘在视图中产生交互操作时,…

黑马微服务课程2

课程地址:2024最新SpringCloud微服务开发与实战,java黑马商城项目微服务实战开发(涵盖MybatisPlus、Docker、MQ、ES、Redis高级等)_哔哩哔哩_bilibili 课程名称:2024最新SpringCloud微服务开发与实战,java…

《A More Fine-Grained Aspect-Sentiment-Opinion Triplet Extraction Task》阅读笔记

一、论文简介 在自然语言处理(NLP)领域,情感分析一直是一个热门的研究主题,它帮助机器理解文本中的情感倾向。随着技术的进步,研究者们不断推动情感分析向更细粒度的方向发展,即从简单的正负情感判断&#…

【VueUse】重新定义状态管理在 Vue 中的体验

在 Vue 生态系统中,状态管理一直是开发者们关注的焦点之一。而随着 VueUse 的出现,我们迎来了一种全新的方式来处理状态管理,它让我们能够以更简单、更灵活的方式来管理应用程序的状态。 在本文中我们将深入探讨 VueUse 中与状态管理相关的内…

StrongSORT——基于DeepSORT,提高多目标跟踪的准确性和鲁棒性

1、概述 1.1 DeepSORT DeepSORT算法是在SORT基础上发展起来的一种多目标跟踪算法。SORT算法结合了目标检测器和跟踪器,其中跟踪器的核心是卡尔曼滤波和匈牙利算法。 卡尔曼滤波用于预测目标在下一帧的位置和状态而匈牙利算法则用于将预测状态与实际检测结果进行最…

SpringCloud基础 Consul的引入

前言 首先是为什么引入consul这个组件 我们知道微服务分为很多个模块,这里模块中相互调用,我使用硬编码的模式是不好的 比如微服务模块需要更新的时候,我们使用硬编码的方式可能需要修改很多个地方 但是使用consul之后,就引入了注册中心,我们只需要将对应的服务注册为节点 这样…

android脱壳第二发:grpc-dumpdex加修复

上一篇我写的dex脱壳,写到银行类型的app的dex修复问题,因为dex中被抽取出来的函数的code_item_off 的偏移所在的内存,不在dex文件范围内,所以需要进行一定的修复,然后就停止了。本来不打算接着搞得,但是写了…

【论文阅读】EgoPCA: A New Framework for Egocentric Hand-Object Interaction

论文主要贡献 提出一种新的框架:Ego-HOI recognition by Probing, Curation and Adaption (EgoPCA)。构建了全面的预训练集,平衡的测试集,以及一个包含了微调策略的baseline。 在Ego-HOI达到了SOTA,并且建立了有效的机制方法。 …

【后端】git与python的结合使用

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、git介绍二、git常见使用三、git与python的结合使用四、总结 前言 随着开发语言及人工智能工具的普及,使得越来越多的人会主动学习使用一些开发…

【OceanBase系列】—— 常用运维操作(备忘)

作者简介: 花名:绪宁,OceanBase 数据库解决方案架构师 创建租户 方法一:OCP 创建 确认可分配资源 具体可以分配多少内存,可以通过【资源管理】查看各节点的剩余资源 2. 新建租户 3. 填写租户信息 zone 优先级主要是 p…

STM32玩转物联网实战篇:5.ESP8266 WIFI模块MQTT通信示例详解

1、准备开发板 开发板功能区分布图 开发板俯视图 2、实验讲解 在之前的章节中,已经讲解过了MQTT的通讯原理和组包过程,现在开始手把手的教大家用代码来实现连接MQTT平台以及数据的交互,实际上这篇文章已经拖更接近两年了,非常…

《QT实用小工具·三十九》仿 Windows10 画图3D 的颜色选择器, 但更加强大

1、概述 源码放在文章末尾 该项目实现了仿 Windows10 画图3D 的颜色选择器,功能更加丰富更加强大。 项目部分代码如下所示: import QtQuick 2.15 import QtQuick.Controls 2.15 import QtQuick.Layouts 1.15 import QtGraphicalEffects 1.15Item {id…

【leetcode面试经典150题】72. 从前序与中序遍历序列构造二叉树(C++)

【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主,题解使用C语言。(若有使用其他语言的同学也可了解题解思路,本质上语法内容一致&…

opencv绘制线段------c++

绘制线段 bool opencvTool::drawLines(std::string image_p, std::vector<cv::Point> points) {cv::Mat ima cv::imread(image_p.c_str()); // 读取图像&#xff0c;替换为你的图片路径 cv::Scalar red cv::Scalar(0, 0, 255); // Red color int thickness 2;// 遍…

面试遇到算法题:实现LRU缓存

请你设计并实现一个满足 LRU (最近最少使用) 缓存约束的数据结构。 这是一道大厂面试高频出现的算法题&#xff0c;难度为⭐️⭐️⭐️&#xff0c;属于中等&#xff0c;老铁们来一起看看这个题该怎么解&#xff1f; 1. 原题再现 没有废话&#xff0c;翠花&#xff0c;上酸菜&…