YOLOv5源码逐行超详细注释与解读(1)——项目目录结构解析

前言

前面简单介绍了YOLOv5的网络结构和创新点(直通车:【YOLO系列】YOLOv5超详细解读(网络详解))

在接下来我们会进入到YOLOv5更深一步的学习,首先从源码解读开始。

因为我是纯小白,刚开始下载完源码时真的一脸懵,所以就先从最基础的项目目录结构开始吧~因为相关解读不是很多,所以有的是我根据作者给的英文文档自己翻译的,如有不对之处欢迎大家指正呀!这篇只是简单介绍每个文件是做什么的,大体上了解这个项目,具体的代码详解后期会慢慢更新,也欢迎大家关注我的专栏,和我一起学习呀!

源码下载地址:mirrors / ultralytics / yolov5 · GitCode

【写论文必看】深度学习纯小白如何从零开始写第一篇论文?看完这篇豁然开朗! 

🍀本人YOLOv5源码详解系列:  

YOLOv5源码逐行超详细注释与解读(1)——项目目录结构解析

YOLOv5源码逐行超详细注释与解读(2)——推理部分detect.py

YOLOv5源码逐行超详细注释与解读(3)——训练部分train.py

YOLOv5源码逐行超详细注释与解读(4)——验证部分val(test).py

YOLOv5源码逐行超详细注释与解读(5)——配置文件yolov5s.yaml

YOLOv5源码逐行超详细注释与解读(6)——网络结构(1)yolo.py

YOLOv5源码逐行超详细注释与解读(7)——网络结构(2)common.py


🌟本人YOLOv5入门实践系列: 

YOLOv5入门实践(1)——手把手带你环境配置搭建

YOLOv5入门实践(2)——手把手教你利用labelimg标注数据集

YOLOv5入门实践(3)——手把手教你划分自己的数据集

YOLOv5入门实践(4)——手把手教你训练自己的数据集

YOLOv5入门实践(5)——从零开始,手把手教你训练自己的目标检测模型(包含pyqt5界面) 


  🌟本人YOLOv5改进系列: 

YOLOv5改进系列(0)——重要性能指标与训练结果评价及分析

YOLOv5改进系列(1)——添加SE注意力机制

YOLOv5改进系列(2)——添加CBAM注意力机制

YOLOv5改进系列(3)——添加CA注意力机制

YOLOv5改进系列(4)——添加ECA注意力机制

YOLOv5改进系列(5)——替换主干网络之 MobileNetV3

YOLOv5改进系列(6)——替换主干网络之 ShuffleNetV2

YOLOv5改进系列(7)——添加SimAM注意力机制

YOLOv5改进系列(8)——添加SOCA注意力机制

YOLOv5改进系列(9)——替换主干网络之EfficientNetv2

​​​​​​YOLOv5改进系列(10)——替换主干网络之GhostNet

YOLOv5改进系列(11)——添加损失函数之EIoU、AlphaIoU、SIoU、WIoU


YOLOv5改进系列(13)——更换激活函数之SiLU,ReLU,ELU,Hardswish,Mish,Softplus,AconC系列等

YOLOv5改进系列(14)——更换NMS(非极大抑制)之 DIoU-NMS、CIoU-NMS、EIoU-NMS、GIoU-NMS 、SIoU-NMS、Soft-NMS

YOLOv5改进系列(15)——增加小目标检测层

YOLOv5改进系列(16)——添加EMA注意力机制(ICASSP2023|实测涨点)

YOLOv5改进系列(17)——更换IoU之MPDIoU(ELSEVIER 2023|超越WIoU、EIoU等|实测涨点)

YOLOv5改进系列(18)——更换Neck之AFPN(全新渐进特征金字塔|超越PAFPN|实测涨点)

YOLOv5改进系列(19)——替换主干网络之Swin TransformerV1(参数量更小的ViT模型)

YOLOv5改进系列(20)——添加BiFormer注意力机制(CVPR2023|小目标涨点神器)

YOLOv5改进系列(21)——替换主干网络之RepViT(清华 ICCV 2023|最新开源移动端ViT)

YOLOv5改进系列(22)——替换主干网络之MobileViTv1(一种轻量级的、通用的移动设备 ViT)

YOLOv5改进系列(23)——替换主干网络之MobileViTv2(移动视觉 Transformer 的高效可分离自注意力机制)

YOLOv5改进系列(24)——替换主干网络之MobileViTv3(移动端轻量化网络的进一步升级)

持续更新中。。。  


目录

前言

 一、项目目录结构

 1.1 .github文件夹

 1.2 datasets

 1.3 data文件夹

 1.4 models文件夹

 1.5 runs文件夹

 1.6 utils文件夹

 1.7其他一级目录文件

 一、项目目录结构

将源码下载好并配置好环境之后,就可以看到YOLOv5的整体目录如上图所示。

接下来我们逐一分析

 1.1 .github文件夹

 github是存放关于github上的一些“配置”的,这个不重要,我们可以不管它。


1.2 datasets

我们刚下载下来的源码是不包含这个文件夹的,datasets用来存放自己的数据集,分为images和labels两部分同时每一个文件夹下,又应该分为train,val。.cache文件为缓存文件,将数据加载到内存中,方便下次调用快速。可以自命名,比如我的火焰数据集就叫“fire_yolo_format”。


 1.3 data文件夹

 

data文件夹主要是存放一些超参数的配置文件(如.yaml文件)是用来配置训练集和测试集还有验证集的路径的,其中还包括目标检测的种类数和种类的名称;还有一些官方提供测试的图片。YOLOv5 有大约 30 个超参数用于各种训练设置。更好的初始猜测会产生更好的最终结果,因此在演化之前正确初始化这些值很重要。

如果是训练自己的数据集的话,那么就需要修改其中的yaml文件。不过要注意,自己的数据集不建议放在这个路径下面,建议把数据集放到YOLOv5项目的同级目录下面。

详解:

  • hyps文件夹   # 存放yaml格式的超参数配置文件
    • hyps.scratch-high.yaml  # 数据增强高,适用于大型型号,即v3、v3-spp、v5l、v5x

    • hyps.scratch-low.yaml  # 数据增强低,适用于较小型号,即v5n、v5s

    • hyps.scratch-med.yaml  # 数据增强中,适用于中型型号。即v5m

  • images  # 存放着官方给的两张测试图片
  • scripts  # 存放数据集和权重下载shell脚本
    • download_weights.sh  # 下载权重文件,包括五种大小的P5版和P6版以及分类器版
    • get_coco.sh   下载coco数据集

    • get_coco128.sh  # 下载coco128(只有128张)

  • Argoverse.yaml  # 后面的每个.yaml文件都对应一种标准数据集格式的数据

  • coco.yaml   # COCO数据集配置文件
  • coco128.yaml   # COCO128数据集配置文件
  • voc.yaml   # VOC数据集配置文件

 1.4 models文件夹

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

详解:

  • hub  # 存放yolov5各版本目标检测网络模型配置文件
    • anchors.yaml  # COCO数据的默认锚点
    • yolov3-spp.yaml  # 带spp的yolov3
    • yolov3-tiny.yaml  # 精简版yolov3
    • yolov3.yaml  # yolov3
    • yolov5-bifpn.yaml  # 带二值fpn的yolov5l
    • yolov5-fpn.yaml  # 带fpn的yolov5
    • yolov5-p2.yaml  # (P2, P3, P4, P5)都输出,宽深与large版本相同,相当于比large版本能检测更小物体
    • yolov5-p34.yaml  # 只输出(P3, P4),宽深与small版本相同,相当于比small版本更专注于检测中小物体
    • yolov5-p6.yaml  # (P3, P4, P5, P6)都输出,宽深与large版本相同,相当于比large版本能检测更大物体
    • yolov5-p7.yaml  # (P3, P4, P5, P6, P7)都输出,宽深与large版本相同,相当于比large版本能检测更更大物体
    • yolov5-panet.yaml  # 带PANet的yolov5l
    • yolov5n6.yaml  # (P3, P4, P5, P6)都输出,宽深与nano版本相同,相当于比nano版本能检测更大物体,anchor已预定义
    • yolov5s6.yaml  # (P3, P4, P5, P6)都输出,宽深与small版本相同,相当于比small版本能检测更大物体,anchor已预定义
    • yolov5m6.yaml   # (P3, P4, P5, P6)都输出,宽深与middle版本相同,相当于比middle版本能检测更大物体,anchor已预定义
    • yolov5l6.yaml   # (P3, P4, P5, P6)都输出,宽深与large版本相同,相当于比large版本能检测更大物体,anchor已预定义,推测是作者做实验的产物
    • yolov5x6.yaml   # (P3, P4, P5, P6)都输出,宽深与Xlarge版本相同,相当于比Xlarge版本能检测更大物体,anchor已预定义
    • yolov5s-ghost.yaml   # backbone的卷积换成了GhostNet形式的yolov5s,anchor已预定义
    • yolov5s-transformer.yaml  # backbone最后的C3卷积添加了Transformer模块的yolov5s,anchor已预定义
  • _int_.py   # 空的
  • common.py   # 放的是一些网络结构的定义通用模块,包括autopad、Conv、DWConv、TransformerLayer等
  • experimental.py   # 实验性质的代码,包括MixConv2d、跨层权重Sum等
  • tf.py  # tensorflow版的yolov5代码
  • yolo.py  # yolo的特定模块,包括BaseModel,DetectionModel,ClassificationModel,parse_model等
  • yolov5l.yaml   # yolov5l网络模型配置文件,large版本,深度1.0,宽度1.0
  • yolov5m.yaml   # yolov5m网络模型配置文件,middle版本,深度0.67,宽度0.75
  • yolov5n.yaml   # yolov5n网络模型配置文件,nano版本,深度0.33,宽度0.25
  • yolov5s.yaml   # yolov5s网络模型配置文件,small版本,深度0.33,宽度0.50
  • yolov5x.yaml   # yolov5x网络模型配置文件,Xlarge版本,深度1.33,宽度1.25

1.5 runs文件夹

runs是我们运行的时候的一些输出文件。每一次运行就会生成一个exp的文件夹。

 详解:

  • detect   # 测试模型,输出图片并在图片中标注出物体和概率
  • train    # 训练模型,输出内容,模型(最好、最新)权重、混淆矩阵、F1曲线、超参数文件、P曲线、R曲线、PR曲线、结果文件(loss值、P、R)等expn
     
    • expn   # 第n次实验数据
    • confusion_matrix.png   # 混淆矩阵
    • P_curve.png   # 准确率与置信度的关系图线
    • R_curve.png  # 精准率与置信度的关系图线
    • PR_curve.png  #  精准率与召回率的关系图线
    • F1_curve.png   # F1分数与置信度(x轴)之间的关系
    • labels_correlogram.jpg   # 预测标签长宽和位置分布
    •  results.png   # 各种loss和metrics(p、r、mAP等,详见utils/metrics)曲线
    • results.csv  # 对应上面png的原始result数据
    • hyp.yaml  #  超参数记录文件
    • opt.yaml  # 模型可选项记录文件
    • train_batchx.jpg  # 训练集图像x(带标注)
    • val_batchx_labels.jpg  # 验证集图像x(带标注)
    • val_batchx_pred.jpg  # 验证集图像x(带预测标注)
    • weights  #  权重
    • best.pt  # 历史最好权重
    • last.pt   # 上次检测点权重
    • labels.jpg  # 4张图, 4张图,(1,1)表示每个类别的数据量

                                                               (1,2)真实标注的 bounding_box

                                                               (2,1) 真实标注的中心点坐标

                                                               (2,2)真实标注的矩阵宽高


1.6 utils文件夹

   

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

    详解:

  • aws   #  恢复中断训练,和aws平台使用相关的工具
  • flask_rest_api  # 和flask 相关的工具
  • google_app_engine   # 和谷歌app引擎相关的工具
  • loggers    # 日志打印
  • _init_.py    # notebook的初始化,检查系统软件和硬件
  • activations.py  #  激活函数
  • augmentations  # 存放各种图像增强技术
  • autoanchor.py    #  自动生成锚框
  • autobatch.py   # 自动生成批量大小
  • benchmarks.py   #  对模型进行性能评估(推理速度和内存占用上的评估
  • callbacks.py   #  回调函数,主要为logger服务
  • datasets  # dateset和dateloader定义代码
  • downloads.py   #  谷歌云盘内容下载
  • general.py   # 全项目通用代码,相关实用函数实现
  • loss.py   #  存放各种损失函数
  • metrics.py   # 模型验证指标,包括ap,混淆矩阵等
  • plots.py   #  绘图相关函数,如绘制loss、ac曲线,还能单独将一个bbox存储为图像
  • torch_utils.py   # 辅助函数

1.7其他一级目录文件

 详解:

  • .dockerignore   # docker的ignore文件
  • .gitattributes   用于将.ipynb后缀的文件剔除GitHub语言统计
  • .gitignore   #  docker的ignore文件
  • CONTRIBUTING.md  # markdown格式说明文档
  • detect.py   # 目标检测预测脚本
  • export.py  #  模型导出
  • hubconf.py  # pytorch hub相关
  • LICENSE    # 证书
  • README.md    # markdown格式说明文档
  • requirements.txt  # 可以通过pip install requirement进行依赖环境下载
  • setup.cfg  #  项目打包文件
  • train.py   # 目标检测训练脚本
  • tutorial.ipynb  #  目标检测上手教程
  • val.py  # 目标检测验证脚本
  • yolov5s.pt   #  coco数据集模型预训练权重,运行代码的时候会自动从网上下载

本文参考:

YOLOV5学习笔记(四)——项目目录及代码讲解

YOLOv5-6.2版本代码Project逐文件详解

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

EXCHANGE PARTITION 方法处理(挽救)大型分区表中的块损坏的步骤

当在巨大的表分区块(例如 ORA-01578)中发现损坏时,并且我们没有备份(例如 RMAN、操作系统级别、导出或任何外部资源)来恢复损坏,我们仍然可以尝试挽救使用 10231 事件处理表中的剩余数据(由于跳…

扩展学习|商业智能和大数据分析的研究前景(比对分析)

文献来源: Liang T P , Liu Y H .Research Landscape of Business Intelligence and Big Data analytics: A bibliometrics study[J].Expert Systems with Applications, 2018, 111(NOV.):2-10.DOI:10.1016/j.eswa.2018.05.018. 信息和通信技术的快速发展导致了数字…

养老院|基于Springboot的养老院管理系统设计与实现(源码+数据库+文档)

养老院管理系统目录 目录 基于Springboot的养老院管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、老人信息管理 2、家属信息管理 3、公告类型管理 4、公告信息管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选…

西瓜书读书笔记整理(十二) —— 第十二章 计算学习理论(下)

第十二章 计算学习理论(下) 12.4 VC 维(Vapnik-Chervonenkis dimension)12.4.1 什么是 VC 维12.4.2 增长函数(growth function)、对分(dichotomy)和打散(shattering&…

【Linux系统】文件系统和软硬链接

前言 之前的博客介绍过了打开的文件是如何被操作系统管理起来的,但是绝大多数文件是没有被打开的,静静地躺在磁盘上。 这些文件也应该要被操作系统管理起来,以方便系统快速地在磁盘上查找它们,进而加载到内存。 这套管理方式就…

vue使用json格式化

安装 npm i bin-code-editor -S // Vue2 npm install vue-json-viewer --save 在main.js引用 //引入bin-code-editor相关插件和样式 import CodeEditor from bin-code-editor; import bin-code-editor/lib/styles/index.css; import JsonViewer from vue-json-viewer //vue使用…

golang开源的可嵌入应用程序高性能的MQTT服务

golang开源的可嵌入应用程序高性能的MQTT服务 什么是MQTT? MQTT(Message Queuing Telemetry Transport)是一种轻量级的、开放的消息传输协议,设计用于在低带宽、高延迟或不可靠的网络环境中进行通信。MQTT最初由IBM开发&#xf…

python webdriver 测试框架数据驱动json文件驱动的方式

简介: 数据驱动excel驱动方式,就是数据配置在excel里面,主程序调用的时候每次用从excel里取出的数据作为参数,进行操作, 需要掌握的地方是对excel的操作,要灵活的找到目标数据 测试数据.xlsx: 路径-D:\test\0627 E…

产品原型图设计规范大全

目前,市场上许多产品经理或设计师都在使用一些优秀的原型设计规范,这些规范几乎涵盖了原型设计的许多方面。一套好的、完整的原型设计规范可以统一产品设计风格,检验产品的可用性,有效提高产品经理绘制原型图的效率,更…

力扣238. 除自身以外数组的乘积(前后缀和)

Problem: 238. 除自身以外数组的乘积 文章目录 题目描述思路复杂度Code 题目描述 思路 思路1: 1.先求取数组的包括当前下标值得前后缀乘积(利用两个数组记录下来分别为leftProduct和rightProduct) 2.当求取一个下标为i的数组中的元素&#x…

构建基于Flask的跑腿外卖小程序

跑腿外卖小程序作为现代生活中的重要组成部分,其技术实现涉及诸多方面,其中Web开发框架是至关重要的一环。在这篇文章中,我们将使用Python的Flask框架构建一个简单的跑腿外卖小程序的原型,展示其基本功能和实现原理。 首先&…

linux --中断管理 -- irq的自动探测机制

irq自动探测机制 如果一个设备的驱动程序无法确定它说管理的设备的软件中断号irq,此时设备驱动程序可以使用irq的自动探测机制来获取其正在使用的irq。 使用自动探测机制的条件 内核与驱动,必须共同努力才能完成只限于非共享中断的情况 探测前&#…

如何查看某一页面在在谷歌有哪些关键词

随着跨境贸易的不断发展,谷歌SEO也被越来越多的人群所了解,所接受。我们在日常操作SEO的时候,往往都会远见这样的事情,那就是自己网站的某一个页面原本只是简单的承载着某一个关键词,但是随着时间的推移,这…

Shell脚本之 -------------免交互操作

一、Here Document 1.Here Document概述 Here Document 使用I/O重定向的方式将命令列表提供给交互式程序 Here Document 是标准输 入的一种替代品,可以帮助脚本开发人员不必使用临时文件来构建输入信息,而是直接就地 生产出一个文件并用作命令的标准…

Linux——动静态库

在进行开发过程中,我们不可避免地会使用到人家的库,那么库到底是什 么?而库又分为动态库和静态库,那么这两个又是什么?这篇博客由我来 简单介绍动静态库。文章目录 1. 库2. 静态库a. 静态库的制作b. 使用静态库 3. 动态…

打击者H5小游戏

欢迎来到程序小院 打击者 玩法&#xff1a;点击飞机上下左右移动躲过子弹射击&#xff0c;打掉上方敌人飞机&#xff0c; 遇到药包会增加能量&#xff0c;弹药包会升级武器&#xff0c;快去射击吧^^。开始游戏https://www.ormcc.com/play/gameStart/262 html <div id"…

基于矢量控制的交流电机驱动simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 交流电机基础 4.2 矢量控制原理 4.3 矢量控制的实现 5.完整工程文件 1.课题概述 基于矢量控制的交流电机驱动simulink建模与仿真。系统仿真输出电压&#xff0c;电流&#xff0c;电机转速以及扭矩…

语言革命:NLP与GPT-3.5如何改变我们的世界

文章目录 &#x1f4d1;前言一、技术进步与应用场景1.1 技术进步1.2 应用场景 二、挑战与前景三、伦理和社会影响四、实践经验五、总结与展望 &#x1f4d1;前言 自然语言处理&#xff08;Natural Language Processing&#xff0c;NLP&#xff09;是人工智能领域的一个重要分支…

快速入门存内计算—助力人工智能加速深度学习模型的训练和推理

存内计算&#xff1a;提高计算性能和能效的新技术 传统的计算机架构是将数据存储在存储器中&#xff0c;然后将数据传输到计算单元进行处理。这种架构存在一个性能瓶颈&#xff0c;即数据传输延迟。存内计算通过将计算单元集成到存储器中&#xff0c;消除了数据传输延迟&#…

中国的茶文化:现代生活中的茶文化

中国的茶文化&#xff1a;现代生活中的茶文化 引言 在现代社会的快节奏生活中&#xff0c;茶文化并未随时间流逝而褪色&#xff0c;反而以其独特的方式融入了全球各地人们的日常生活。它超越了饮品本身的范畴&#xff0c;成为一种连接历史、人文与现代生活方式的艺术形式。本文…