YOLOv5【目录结构源码】超详细注释解读!!!建议收藏✨✨!

news2024/11/25 21:38:46

      上一篇文章介绍了YOLOv5的网络的详细解读:直通车🚀 由于以后的学习及在进行的项目打算YOLOv5再仔细研究进行使用及改进,接下来会出相关于YOLOv5的代码逐行解读以及注释,废话不多说,让我们一起学习YOLOv5源码吧!

YOLOv5所使用版本:v6.1(由于YOLOV5版本一直在更新,不同版本代码略有差异,但差别不大,可供用来学习。)

源码地址:GitHub - ultralytics/yolov5 at v6.1


首先我们从YOLOv5的目录结构进行解读 ~

YOLOv5目录结构总览🚀

YOLOv5项目整体目录如下图所示: 

 接下来我们逐一介绍文件作用并进行解读:

注意:

因为此项目是从github上克隆来的,第一个文件夹 .github文件见中存放的为github相关信息,不属于YOLOv5的相关文件,这里直接略过从data开始。

⭐⭐⭐项目中未出现的datasets文件夹和runs文件夹在后面讲解注释及解读!!

一、data 文件夹⭐

data文件夹:主要是存放一些超参数的配置文件(这些文件(yaml文件)是用来配置训练集和测试集还有验证集的路径的,其中还包括目标检测的种类数和种类的名称);

       还有一些官方提供测试的图片(images下的两张图-bus.jpg和zidane.jpg)。如果是训练自己的数据集的话,那么就需要修改其中的yaml文件,或新建自己数据集的yaml文件放在此文件夹中。

注意:自己的数据集不建议放在这个路径下面,而是建议把数据集放到yolov5项目的同级目录下面(上面提到的datasets)。

1.1 hyps文件夹 ✨

 hyps文件夹 :存放yaml格式的超参数微调配置文件

1.hyps.scratch-low.yaml :YOLOv5 COCO训练从头优化,数据增强低,适用于较小型号,比如:v5n、v5s。

2.hyps.scratch-med.yaml  :数据增强中,适用于中型型号。比如:v5m。

3. hyps.scratch-high.yaml  :数据增强高,适用于大型型号,比如:v3、v3-spp、v5l、v5x。

1.2 images 文件夹 ✨

images文件夹:存放着官方给的两张测试图片,bus.jpg和zidane.jpg 。

bus.jpg:

zidane.jpg: 

1.3 scripts 文件夹 ✨

scripts文件夹:存放数据集和权重的下载shell脚本

 1. download_weights.sh  : 下载权重文件,包括 'n' , 's' , 'm' , 'l' , 'x' 五种大小的P5版和P6版以及分类器版。

2. get_coco.sh   : 下载coco数据集的shell脚本。

3. get_coco128.sh  : 下载coco128(只有128张)数据集的shell脚本。

1.4 data中其他文件 ✨

       后面的每个.yaml文件都对应一种标准数据集格式的数据,我们也可将自己数据集的.yaml文件放在此处。

1.Argoverse.yaml  : Argoverse数据集配置文件。

2.coco.yaml   :COCO数据集配置文件。

3.coco128.yaml   :COCO128数据集配置文件。

。。。以此类推。。。

二、models 文件夹⭐

       models文件夹为模型文件夹。里面主要是一些网络构建的配置文件和函数,其中包含了该项目的四个不同的版本,分别为是s、m、l、x。从名字就可以看出,这几个版本的大小。他们的检测速度分别都是从快到慢,但是精确度分别是从低到高。如果训练自己的数据集的话,就需要修改这里面相对应的yaml文件来训练自己模型。

 2.1 hub 文件夹 ✨

 hub文件夹: 存放yolov5各版本目标检测网络模型的配置文件。

1. anchors.yaml  :COCO数据的默认锚点。 

2. yolov3-spp.yaml  : 带spp的yolov3网络模型的配置文件。

3.yolov3-tiny.yaml  : 精简版yolov3网络模型的配置文件。

4.yolov5-bifpn.yaml  : 带二值fpn的yolov5l 网络模型的配置文件。

5.yolov5-fpn.yaml  : 带fpn的yolov5网络模型的配置文件。

6.yolov5-p2.yaml  : (P2, P3, P4, P5)都输出的v5网络模型配置文件,宽深与large版本相同,相当于比large版本能检测更小物体。

7.yolov5-p6.yaml  : (P3, P4, P5, P6)都输出的v5网络模型配置文件,宽深与large版本相同,相当于比large版本能检测更大物体。

8.yolov5-p7.yaml  : (P3, P4, P5, P6, P7)都输出的v5网络模型配置文件,宽深与large版本相同,相当于比large版本能检测更更大物体。

9.yolov5-p34.yaml  # 只输出(P3, P4)的v5网络模型配置文件,宽深与small版本相同,相当于比small版本更专注于检测中小物体

10.yolov5-panet.yaml  : 带PANet的yolov5l网络模型的配置文件。

11.yolov5l6.yaml   : (P3, P4, P5, P6)都输出的v5网络模型配置文件,宽深与large版本相同,相当于比large版本能检测更大物体,anchor已预定义,推测是作者做实验的产物。

12.yolov5m6.yaml   : (P3, P4, P5, P6)都输出的v5网络模型配置文件,宽深与middle版本相同,相当于比middle版本能检测更大物体,anchor已预定义。

13.yolov5n6.yaml  : (P3, P4, P5, P6)都输出的v5网络模型配置文件,宽深与nano版本相同,相当于比nano版本能检测更大物体,anchor已预定义。

14.yolov5s6.yaml  : (P3, P4, P5, P6)都输出的v5网络模型配置文件,宽深与small版本相同,相当于比small版本能检测更大物体,anchor已预定义。

15.yolov5s-ghost.yaml   : backbone的卷积换成了GhostNet形式的yolov5s网络模型配置文件,anchor已预定义。

16.yolov5s-transformer.yaml  : backbone最后的C3卷积添加了Transformer模块的yolov5s网络模型配置文件,anchor已预定义。

17.yolov5x6.yaml  :(P3, P4, P5, P6)都输出的v5网络模型配置文件,宽深与Xlarge版本相同,相当于比Xlarge版本能检测更大物体,anchor已预定义。

2.2 models 中其他文件 ✨

1._int_.py   : 文件是空的,什么都没有。 

2.common.py  :放的是一些网络结构的定义通用模块,包括autopad、Conv、DWConv、TransformerLayer等。

3.experimental.py   : 放的是实验性质的代码,包括MixConv2d、跨层权重Sum等。

4.tf.py :tensorflow版的yolov5代码。

5.yolo.py:yolo的特定模块,包括BaseModel,DetectionModel,ClassificationModel,parse_model等。

6.yolov5l.yaml :yolov5l网络模型配置文件,large版本,深度1.0,宽度1.0。

7.yolov5m.yaml :yolov5m网络模型配置文件,middle版本,深度0.67,宽度0.75。

8.yolov5n.yaml :yolov5n网络模型配置文件,nano版本,深度0.33,宽度0.25。

9.yolov5s.yaml :yolov5s网络模型配置文件,small版本,深度0.33,宽度0.50。

10.yolov5x.yaml : yolov5x网络模型配置文件,Xlarge版本,深度1.33,宽度1.25。

三、untils 文件夹⭐

utils文件夹为工具文件夹。存放的是工具类的函数,里面有loss函数,metrics函数,plots函数等工具类函数。

1.aws文件夹:恢复中断训练,存放和aws平台使用相关的工具。

2.flask_rest_api 文件夹  : 和flask接口相关的工具。

3.google_app_engine 文件夹: 和谷歌app引擎相关的工具。

4.loggers 文件夹:日志打印。

5._init_.py:notebook的初始化,检查系统软件和硬件。

6.activations.py:存放一些相关的激活函数。

7.augmentations:存放一些相关的图像增强技术。

8.autoanchor.py:自动生成锚框。

9.autobatch.py:自动生成批量大小。

10. benchmarks.py: 对模型进行性能评估(推理速度和内存占用上的评估)。

11.callbacks.py:回调函数,主要为logger服务。

12.datasets:使用dateset和dateloader来定义代码。

13.downloads.py :谷歌云盘内容下载。

14.general.py:全项目通用代码,相关实用函数实现。

15.loss.py: 存放相关的一些损失函数。

16.metrics.py:存放一些模型验证指标,包括ap,混淆矩阵等。

17.plots.py:matplots绘图相关函数,如绘制loss、ac曲线,还能单独将一个bbox存储为图像。

18.torch_utils.py:存放一些辅助函数。

四、datasets 文件夹⭐

        我们一般使用datasets文件夹存储自己的数据集(也可以自命名),在下载目录中没有这个文件夹,需要我们自己创建,分为 images和labels 两部分,同时images和labels每个文件夹下,又应该分为 train,val,test 分别存放训练集、训练过程中的验证集以及测试集的图片与标签。

    datasets中会出现.cache文件,.cache文件为缓存文件,将数据加载到内存中,方便下次调用快速。

五、runs 文件夹⭐

      runs文件夹是我们运行模型进行检测或训练时产生的一些输出文件,每一次运行就会对应生成一个exp的文件夹在runs文件夹下。

 5.1 detect 文件夹 ✨

detect 文件夹: 测试模型,输出图片并在图片中标注出物体和概率。如下图:

  5.2 train 文件夹 ✨

     train文件夹 : 成功运行一次train.py就在文件夹下产生一个expn(n=1,2,....),包含:训练模型,输出内容,模型(最好、最新)权重、混淆矩阵、F1曲线、超参数文件、P曲线、R曲线、PR曲线、结果文件(loss值、P、R)等.

1.expn: 第n次实验数据,顺序增加,也可以自命名,可在配置文件中修改训练出的文件名。

2.weights :权重文件夹。

  • best.pt :最好的权重。
  • last.pt :上次检测点权重。

3.confusion_matrix.png :混淆矩阵。

4.F1_curve.png:F1分数与置信度(x轴)之间的关系。

5.hyp.yaml: 超参数记录文件。

6.labels.jpg: 图里有4张图,从左到右,从上到下依次为:

  • 1. 表示每个类别的数据量
  • 2. 真实标注的 bounding_box
  • 3. 真实标注的中心点坐标
  • 4. 真实标注的矩阵宽高

7.labels_correlogram.jpg :图表示预测标签长宽和位置分布。 

8.opt.yaml:模型可选项记录文件。

9. P_curve.png :准确率与置信度的关系图线。

10.PR_curve.png  #  精准率与召回率的关系图线。

11.R_curve.png :精准率与置信度的关系图线。

12.results.csv:对应上面png的原始result数据。

13. results.png: 各种loss和metrics(p、r、mAP等,详见utils/metrics)曲线。

12.train_batchx.jpg :训练集图像x(带标注)(x=0,1,2...)。

13.val_batchx_labels.jpg :验证集图像x(带标注)(x=0,1,2...)。

14.val_batchx_pred.jpg:验证集图像x(带预测标注)(x=0,1,2...)。

六、其他一级目录文件⭐

1.dockerignore :docker的ignore文件。

2.gitattributes :用于将.ipynb后缀的文件剔除GitHub语言统计。

3.gitignore:docker的ignore文件。

4.CONTRIBUTING.md :markdown格式说明文档。

5.detect.py :目YOLOv5模型的预测脚本,可在里面改训练的相关参数。

6.export.py:模型导出。

7.hubconf.py : 与pytorch hub相关。

8.LICENSE: 证书。

9.README.md :markdown格式的说明文档。

10.requirements.txt: 可以通过 pip install requirement 命令进行依赖环境下载

11.setup.cfg:项目打包文件。

12.train.py :YOLOv5模型的训练脚本,可在里面改训练的相关参数。

13.tutorial.ipynb :目标检测上手教程。

14.val.py:目标检测验证脚本


       YOLOv5的目录结构源码超详细注释解读的学习就到这里啦!以后会为大家带来关于YOLOv5其他文件的解读或者其他YOLO版本的解读✨✨✨✨如果帮助到大家,可以一键三连支持下🚀🚀

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

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

相关文章

CTFshow pwn03

题目: 在做本道题前,我们先了解所必要的知识 Libc是什么? 英文名字:Standard C library,其翻译过来,C语言标准库 它是符合ANSI C标准的一个函数库 学过C语言会明白 ANSI C标准又是什么? 198…

Redo log

目录标题 前言为什么需要redo log redo log中的WAL(先写日志,再写磁盘)重要参数innodb_flush_log_at_trx_commit如何选择 redo log记录形式日志块(log block)redo log的格式 redo log何时刷入磁盘正常关闭服务器时事务提交时(inno…

【STL】string的使用

放在专栏【C知识总结】,会持续更新,期待支持🌹 STL简介 STL的诞生 STL为英文Standard Template Library的缩写,译为标准模板库。是C标准库的重要组成部分。 长久以来,软件届一直希望建立一种可重复运用的东西。所谓…

首个支持RWA交易的订单簿DEX-PoseiSwap,即将开启IEO

随着 DeFi 世界的发展,越来越多的链上协议支持以合成资产的方式,将传统金融资产以加密资产的形式映射至链上,包括美股、黄金期货等等,虽然这种方式进一步帮助投资者,以非许可的形式丰富了投资标的,但这种方…

GraphPad Prism 9.5.1 for Mac 操作简便功能强大且实用的医学绘图分析工具

GraphPad Prism简介 GraphPad Prism是一款非常实用的统计软件,其功能非常强大,能够帮助用户进行各类科研数据的处理和分析,快速绘制出各种专业的图像和数据报告。 GraphPad Prism软件的用户界面非常友好,易于学习和操作&#xf…

azkaban 安装 使用

目录 拷贝安装包 解压 改名 修改MySQL配置文件 创建数据库 导入数据表 修改配置文件 修改azkaban-exec下面文件 修改azkaban.properties文件 修改 commonprivate.properties 文件 修改MySQL的jar包 启动 azkaban-exec 修改azkaban-web下面文件 修改azkaban.prop…

Amazon EKS 上有状态服务启用存储加密

1.背景 用户通过 Deployment, Replication Controller 可以方便地在 Kubernetes 中部署一套高可用、可扩展的分布式无状态服务。这类应用不在本地存储数据,通过简单的负载均衡策略可实现请求分发。 Deployment 以及 Replication Controller 是为无状态服务而设计的…

关于Alibaba开发手册中提到的Manager层解析(对于传统MVC三层架构的改进)

Manager层的理解 MVC三层架构 MVC(Model View Controller)是软件工程中的一种软件架构模式,它把软件系统分为模型、视图和控制器三个基本部分。用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面…

scanf函数的用法

有时候刷题经常遇到如下这种输入&#xff1a; 1 2 3 4 ...... 就是不知道什么时候结束输入&#xff0c;反正就是一直在输入&#xff0c;这个时候怎么写呢&#xff1f;我们知道 scanf()的返回值是成功赋值的变量数量, 发生错误时返回EOF. 看如下代码&#xff1a; #include<st…

mysqlbinlog 生产环境问题排查实践

binlog 简介 MySQL 的二进制日志是通过二进制文件形式记录的&#xff0c;可以通过以下方式设置其格式&#xff1a; 打开 MySQL 配置文件&#xff08;my.cnf&#xff09;&#xff0c;找到 [mysqld] 段&#xff0c;添加以下语句以开启二进制日志功能&#xff1a; log-bin /pat…

Git 工作原理和分支管理

Git是一个开源的分布式版本控制系统&#xff0c;可以有效、高速地处理从很小到非常大的项目版本管理 Git工作原理 Git 会把仓库中的每次提交串成一条时间线&#xff0c;这条时间线就是一个分支。在 Git 里&#xff0c;每个仓库都会有一个主分支&#xff0c;即master分支。HEAD…

2023面试自动化测试面试题【含答案】,建议收藏

1、你做了几年的测试、自动化测试&#xff0c;说一下 selenium 的原理是什么&#xff1f; 我做了五年的测试&#xff0c;1年的自动化测试&#xff1b; selenium 它是用 http 协议来连接 webdriver &#xff0c;客户端可以使用 Java 或者 Python 各种编程语言来实现&#xff1b…

路径规划算法:基于蜻蜓算法的路径规划算法- 附代码

路径规划算法&#xff1a;基于蜻蜓优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于蜻蜓优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化算法蜻蜓…

MyBatis项目的创建和使用

什么是MyBatis? MyBaits是一个更简单的完成程序与数据库交互的工具。MyBatis将复杂的JDBC进行了封装&#xff0c;让使用者可以通过简单的xml和注解对数据库进行记录。 MyBatis的执行流程 创建MyBatis项目 添加依赖 还是SpringBoot的创建流程&#xff1a;SpringBoot项目创建…

SpringMvc笔记-教程-快速回忆

title: SpringMvc笔记 date: 2023-05-14 09:50:02 categories: 后端Java tags:JavaSpring 三层架构&#xff1a; web层主要由servlet来处理&#xff0c;负责页面请求和数据的收集以及响应结果给前端service层主要负责业务逻辑的处理dao层主要负责数据的增删改查操作 MVC设计…

点餐小程序实战教程03-店铺信息展示

目录 1 创建模型应用2 创建用户3 创建自定义应用4 创建页面5 页面搭建6 定义变量7 数据绑定8 绑定事件9 预览发布总结我们上一篇设计了店铺信息数据源,并且录入了测试数据,本篇我们就介绍一下店铺信息展示功能的开发。 1 创建模型应用 我们在上篇讲解的是通过数据源的管理数…

【redis】redis经典五大类型源码及其底层实现

【redis】redis经典五大类型源码及其底层实现 文章目录 【redis】redis经典五大类型源码及其底层实现前言一、面试题redis数据类型的底层数据结构阅读源码的意义 二、在哪找redis的源码&#xff1f;三、SRC下的源码该怎么看&#xff1f;1、redis基本的数据结构&#xff08;骨架…

路径规划算法:基于樽海鞘算法的路径规划算法- 附代码

路径规划算法&#xff1a;基于樽海鞘优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于樽海鞘优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化算法…

桂院校园导航小程序 静态项目 二次开发教程 1.0.1

Gitee代码仓库&#xff1a;桂院校园导航小程序 GitHub代码仓库&#xff1a;GLU-Guide 先 假装 大伙都成功安装了静态项目&#xff0c;并能在 微信开发者工具 和 手机 上正确运行。 接着就是 将项目 改成自己的学校。 代码里的注释我就不说明了&#xff0c;有提到 我的学校 …

现代软件测试中的自动化测试工具

自动化测试的重要性和优势 引言&#xff1a;随着软件开发的不断发展&#xff0c;自动化测试工具在现代软件测试中扮演着重要角色。提高效率&#xff1a;自动化测试可以加快测试流程&#xff0c;减少人工测试所需的时间和资源。提升准确性&#xff1a;自动化测试工具可以减少人…