解读YOLO v7的代码(一)模型结构研究

news2024/9/23 9:35:07

YOLO v7在今年7月份推出,模型的性能和速度相比以往版本有了很大的提升。我也想好好研究一下YOLO v7模型,因此把官方的代码库下载下来进行研究,尝试更好的理解这个模型。

从文档中我们可以看到,如果要从头开始训练,可以输入以下命令,

python train.py --workers 8 --device 0 --batch-size 32 --data data/coco.yaml --img 640 640 --cfg cfg/training/yolov7.yaml --weights '' --name yolov7 --hyp data/hyp.scratch.p5.yaml

因此我们就以train.py为入口开始研究,这里面加载的模型配置文件是yolov7.yaml,但是只看这个配置不好直观的查看模型的结构,因此我先尝试用Netron这个神经网络的可视化工具来展示。

在根目录还有一个export.py文件,这个是可以把yolo的模型导出为其他的格式,例如导出为onnx格式的模型,Netron可以支持这种格式的展示。

在这个网址https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7.pt下载yolov7的已训练好的模型。之后运行命令

python export.py --weights ./yolov7.pt

在netron.app网站打开刚才导出的yolov7.onnx文件,可以展示整个模型的结构。

在以上的模型中,我把主要的结构用不同的颜色标注了,红色的是论文中提到的ELAN结构,紫色的是增强的ELAN结构。绿色框以上的是模型的Backbone,从绿色框开始属于模型的检测部分,绿色框对应的是SPPCSPC结构。浅蓝色和蓝色框组成了最后各个尺度下的检测结构。可以看到总共有三个输出,其维度分别为1*3*80*80*85, 1*3*40*40*85, 1*3*20*20*85,分别对应大中小这三个粒度的检测。例如1*3*80*80*85表示有3个Anchor,图像分为80*80个格子,85表示每个格子的每个Anchor输出的检测结果的维度,其中有4位表示图像中心点的x,y坐标,长,宽,有1位代表是否有检测到图像,剩下的80位对应80个图像类别。

以上的模型结构图虽然很细致,但是不容易从宏观上把握模型设计的思路。为此我把通用部分进行了整合,绘制了一个模型图,其中橙色部分的是Backbone,绿色的是Head,蓝色的是输出不同尺度的检测。

这个模型图能更好的帮我们理解作者设计模型的思路。

从以上的模型图,我们可以理解到在Backbone里面,除了最后一次ELAN模块,前面几个ELAN模块变换,分辨率不变,但是通道数增加一倍。每个ELAN模块后都会进行Maxpool和卷积变换,降低分辨率。所以我们可以看到经过Backbone的处理,输出了80*80, 40*40, 20*20三个尺度的特征表达,即在不同的尺度下提取图像的特征信息。

在Head里面,处理流程和Backbone是相反的。即从最粗的尺度20*20开始,经过SPPCSPC处理后,通过Upsample处理为40*40的尺度,然后和Backbone的40*40尺度的特征卷积后组合,再通过ELAN-A模块进行特征的变换,从512的输入特征维度降为256。这里面ELAN-A的作用和Backbone的是相反的,ELAN的是特征通道丰富一倍,但是ELAN-A是特征通道减少一倍。最后Head里面的三个ELAN-A模块也是输出了80*80, 40*40, 20*20三个尺度的特征表达,即在不同的尺度下提取图像的特征信息。最后每个尺度的特征表达经过两次卷积后,把特征维度转为255(即3*85,对应三个不同size的Anchor的输出)

经过以上的分析,现在我们对于Yolo v7的结构应该是比较清楚了,在下一篇文章中,我将继续研究模型训练设计到的一些技巧和细节。

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

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

相关文章

Linux系统的开机自启动

本文为joshua317原创文章,转载请注明:转载自joshua317博客 Linux系统的开机自启动 - joshua317的博客 当你使用windows操作系统时,开机后总会有各种软件自我启动完成,你并没有在桌面上点击它们的图标启动。比如某些安全卫士,某些…

享元模式分析与实践

享元就是共享单元(元素)的意思。单元代表了整体的部分,如果一个对象其中的部分是稳定的不会改变的,那么这个部分即可以共享。享元模式的用途就是复用对象的单元,让对象的节省内存。 一、享元模式与单例模式区别 单例…

基于C++实现(控制台)停车场管理系统【100010020】

停车场管理系统 1 需求分析 1.1问题描述 停车场内只有一个可停放 n 辆汽车的狭长通道,且只有一个大门可供汽车进出。 汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在停车场…

vite3+vue3二次封装antdvue组件方法

有时候,第三方的组件库不能满足我们的业务需求,就有必要对别人的组件进行再次的封装,下面我们以antdvue里面的button组件二次封装为例,研究下封装的过程 最后效果 基础代码 <template><div><a-button type="primary" v

网络爬虫urllib库常用函数解析

文章目录前言urllib介绍urllib发送请求urllib编码与解码urllib异常处理urllib使用IP代理urllib使用cookie前言 快期末了&#xff0c;有个数据挖掘的大作业需要用到python的相关知识&#xff08;这太难为我这个以前主学C的人了&#xff0c;不过没办法还是得学&#x1f602;&…

我的周刊(第069期)

我的信息周刊&#xff0c;记录这周我看到的有价值的信息&#xff0c;主要针对计算机领域&#xff0c;内容主题极大程度被我个人喜好主导。这个项目核心目的在于记录让自己有印象的信息做一个留存以及共享。&#x1f3af; 项目ChatGPT[1]本周最火爆的项目是 ChatGPT 应该没有意义…

ChatGPT使用初体验

ChatGPT使用初体验 注册chatGPT ChatGPT官网&#xff1a;https://openai.com/blog/chatgpt/ 登录官网进行账号注册&#xff1a; 我相信以各位小伙伴的能力是可以成功注册到账号的。 ChatGPT使用 自从在抖音上、CSDN上看到众多大佬对ChatGPT的一致好评&#xff0c;顿时我就…

论文笔记-时序分类-Rocket

论文标题&#xff1a; ROCKET: exceptionally fast and accurate time series classification using random convolutional kernels 论文链接&#xff1a; https://www.xueshufan.com/publication/3042807565 代码链接&#xff1a; https://github.com/angus924/rocket 发表年份…

Linux系统网络编程——第十九节 多路复用(1)(概念、select、poll)

目录 概念引出 select select的特点 select缺点 poll 概念引出 我们来思考一个问题&#xff1a; 什么叫IO(input output)? 读取或者写入&#xff08;IO&#xff09;本质就是&#xff1a;等拷贝。 读&#xff1a;等将数据从内核空间&#xff08;缓冲区&#xff09;拷贝…

C++(第十一篇):继承(基类与派生类、菱形继承和菱形虚拟继承问题)

&#x1f4d2;博客主页&#xff1a;Morning_Yang丶 &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f4cc;本文所属专栏&#xff1a;【C拒绝从入门到跑路】 &#x1f64f;作者水平有限&#xff0c;如果发现错误&#xff0c;敬请指正&am…

虚拟机||后续1:使用Virtual Box7.0.4安装Ubuntu20.04图文教程+解决时间显示乱码问题

这个博主超爱碎碎念&#xff1a;&#xff09; 哈喽&#xff0c;四海八方的友友们&#xff0c;我胡汉三又回来啦&#xff08;&#xffe3;︶&#xffe3;&#xff09;↗ 有挺长一段时间没更新了&#xff0c;转眼间12月了&#xff0c;又到年底冲业绩的时候啦ψ(&#xff40;∇)ψ…

【大数据入门核心技术-Hadoop】(七)Hadoop基本Shell命令行

目录 一、 三种shell命令方式 二、常见Shell操作命令 1、创建文件夹 2、查看指定目录下内容 3、上传文件到HDFS指定目录下 4、查看HDFS文件内容 5、下载HDFS文件 6、拷贝HDFS文件 7、追加数据到HDFS文件中 8、HDFS数据移动操作 9、创建文件 10、查看磁盘使用情况 1…

金融信创与云化转型|基金超融合架构转型与场景探索合集

随着数字化经济的蓬勃发展&#xff0c;基金数字化转型作为金融行业发展的重点被提上日程。其中&#xff0c;证监会于 2022 年 4 月发布的《关于加快推进公募基金行业高质量发展的意见》中强调&#xff0c;基金行业应强化行业基础设施建设&#xff0c;以拥抱数字化金融市场&…

MySQL内置函数

MySQL内置函数1 .日期函数2.字符串函数3.数学函数4.其它函数5.综合练习题1 .日期函数 current_date() 当前日期获得年月日 mysql> select current_date(); ---------------- | current_date() | ---------------- | 2022-12-10 | ---------------- 1 row in set (0.0…

C语言基础—程序创建过程和编译过程

C程序的创建过程 4️⃣ C 程序的创建过程有4️⃣个基本步骤&#xff1a; 编写、编译、链接和运行。 编写&#xff1a;用文本编辑器或IDE编写源代码。源代码包含程序所需的所有命令和语句。编译&#xff1a;使用编译器对源代码进行编译&#xff0c;生成可执行文件。 - .o 文件…

gyp ERR find Python 解决方案

命令行报错如下 E:\vue-admin\node_modules\fibers>if not defined npm_config_node_gyp (node "D:\nodejs\node_modules\npm\node_modules\npm-lifecycle\node-gyp-bin\\..\..\node_modules\node-gyp\bin\node-gyp.js" rebuild --releas e ) else (node "…

Java项目:SSM物流快递管理系统

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 仓库管理员角色包含以下功能&#xff1a; 仓库管理员操作,入库操作,员工查看,揽收快件,新建员工等功能。 快递员角色包含以下功能&#xff1a; …

Nacos服务注册解析

服务注册就是在微服务启动时自动注册进nacos注册中心&#xff0c;核心逻辑就是在启动时调用nacos-server端的http接口:/nacos/v1/ns/instance&#xff0c;具体参考nacos官方文档。 我们打开nacos源码结构查看 上图为Nacos2.2的源码结构.其中比较核心的就是这几个包&#xff1…

墨者学院 PHP代码分析溯源(第4题) 详解

今天继续给大家介绍CTF通关writeup&#xff0c;本文主要内容是墨者学院 PHP代码分析溯源(第4题)。 免责声明&#xff1a; 本文所介绍的内容仅做学习交流使用&#xff0c;严禁利用文中技术进行非法行为&#xff0c;否则造成一切严重后果自负&#xff01; 再次强调&#xff1a;严…

尝试使用CubeMX做stm32开发之十四:FatFs的基础知识

一、文件系统概念 文件系统&#xff1a;在存储介质中建立一种组织架构&#xff0c;以更好地储存和管理数据 文件系统一般包含&#xff1a;操作系统引导区、目录、文件等 文件系统中数据以文件的形式存储 文件系统中数据的存取需要遵循特定的格式 与直接操作存储介质相比&a…