当前位置: 首页 > news >正文

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

前言

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

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

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

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


目录

前言

 一、项目目录结构

 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逐文件详解

相关文章:

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

前言 前面简单介绍了YOLOv5的网络结构和创新点(直通车:【YOLO系列】YOLOv5超详细解读(网络详解)) 在接下来我们会进入到YOLOv5更深一步的学习,首先从源码解读开始。 因为我是纯小白,刚开始下…...

前端开发总结的一些技巧和实用方法(2)

本文主要介绍一些JS中用到的小技巧和实用方法,可以在日常Coding中提升幸福度,也可以通过一些小细节来增加代码可读性,让代码看起来更加优雅,后续将不断更新1.数组 map 的方法 (不使用Array.Map) Array.from 还可以接受第二个参数…...

Docker搭建jenkins(Vue自动化部署)

前言 需要提前准备的条件 Docker环境 一、jenkins镜像 # 查询镜像 docker search jenkins# 下载镜像 # lts稳定版 docker pull jenkins/jenkins:lts#查看镜像 docker images二、启动Jenkins容器 创建挂载文件夹,并且进行文件授予权限 #创建文件夹 mkdir -p /home/j…...

ADCS攻击之CVE-2022–26923

CSDN自动博客文章迁移漏洞简介该漏洞允许低权限用户在安装了 Active Directory 证书服务 (AD CS) 服务器角色的默认 Active Directory 环境中将权限提升到域管理员。在默认安装的ADCS里就启用了Machine模板。漏洞利用添加机器账户,并将该机器账户dnsHostName指向DC[…...

AO3401-ASEMI低压P沟道MOS管AO3401

编辑:ll AO3401-ASEMI低压P沟道MOS管AO3401 型号:AO3401 品牌:ASEMI 封装:SOT-23 最大漏源电流:-4.2A 漏源击穿电压:-30V RDS(ON)Max:0.05Ω 引脚数量&#xff1…...

【STM32MP157应用编程】3.控制PWM

目录 PWM文件 指令操作PWM 程序操作PWM 程序说明 程序代码 3_PWM_1.c 启动交叉编译工具 编译 拷贝到开发板 测试 PWM文件 在/sys/class/pwm目录下,存放了PWM的文件。 pwmchip0和pwmchip4目录对应了MP157 SoC的2个PWM控制器,pwmchip0对应的是M…...

基于Python的selenium

一、安装 1.1安装Python,安装Python时需要勾选增加环境变量 如果之前已经安装过Python,需要将Python相关文件以及环境变量删除 1.2安装成功:在命令行界面下输入Python,最终展示>>>即可成功 2.1安装pycharm,直接自定义安装…...

Go底层原理:一起来唠唠GMP调度(一)

目录前言一、进程、线程、Goroutine1、进程与线程2、Goroutine二、Go调度器设计思想1、线程模型1.1 内核级线程模型1.2 用户级线程模型1.3 混合型线程模型2、 被废弃的 G-M 调度器2.1 了解 G-M 调度如何工作3、如今高效的 GMP 模型3.1 GMP模型调度流程3.2 GMP调度设计策略3.3 G…...

前端——1.相关概念

这篇文章主要介绍前端入门的相关概念 1.网页 1.1什么是网页? 网站:是指在因特网上根据一定的规则,使用HTML等制作的用于展示特定内容相关的网页集合 网页:是网站中的一“页”,通常是HTML格式的文件,它要…...

java四种线程池(基本使用)

标题java四种线程池及使用示例 1、线程工厂 1、我们先来写ThreadFactory,在创建线程池时候可以传入自定义的线程工厂,线程工厂说白了就是用来定制线程的一些属性:名字、优先级、是否为守护线程。直接看代码即可。 当然创建线程池的时候可以…...

float的表示范围为什么比long大

●很多人会有一个疑问, 一个用来表示小数的 float 为什么表示的范围会比 long 还要大呢 ? ●这次, 咱们就来详细说一说这个事情 从长计议 ●聊到这个话题, 我们就要从计算机存储数字这个位置说起了 ●计算机存储数字的方式其实就是 : 二进制 二进制是计算机中最基本的数字存储…...

Flutter Android 打包保姆式全流程 2023 版

大家好,我是 17。 为什么要写这篇文章呢?对于一没有 android 开发经验,从未有过打包经历的新人来说,要想成功打包,是很困难的。因为受到的阻碍太多,是完全陌生的领域,几乎是寸步难行。如果有老…...

C++笔记之lambda表达式

引言 Lambda表达式是从C 11版本引入的特性,利用它可以很方便的定义匿名函数对象,通常作为回调函数来使用。大家会经常拿它和函数指针,函数符放在一起比较,很多场合下,它们三者都可以替换着用。 语法 [ captures ] (…...

flink大数据处理流式计算详解

flink大数据处理 文章目录flink大数据处理二、WebUI可视化界面(测试用)三、Flink部署3.1 JobManager3.2 TaskManager3.3 并行度的调整配置3.4 区分 TaskSolt和parallelism并行度配置四、Source Operator(资源算子)五、Sink Operator(输出算子)六、Flink滑…...

Java面试题(二十三)DCL单例

懒汉式单例 private static SingletonInstance INSTANCE;private SingletonInstance(){}public static SingletonInstance getInstance() {if (INSTANCE null) {INSTANCE new SingletonInstance();}return INSTANCE;}构造方法私有化,然后判断是否为空,…...

UML-类图

一、类 一个类由三个格子组成,从上至下分别表示: 第一格:类名称(接口和抽象类,使用斜体) 第二格:类的属性(成员变量,可以没有) 第三格:类的操作&…...

PostgreSQL 数据库和 pgAdmin 4

PostgreSQL 数据库和 pgAdmin 4PostgreSQLPostgreSQL 数据库安装PostgreSQL 数据库安装 (Ubuntu)PostgreSQL 数据库其他系统安装PostgreSQL 数据库快速使用入门登录数据库访问数据库参考pgAdmin 4pgAdmin 4 安装使用 pgAdmin 4 登录数据库参考PostgreSQL PostgreSQL 数据库安装…...

quarkus 搭建与基础开发环境配置总结

quarkus搭建与基础开发环境配置总结 大纲 基础概念quarkus2.13.7脚手架工程配置配置maven3.8.7quarkus快速启动quarkus的三种打包方式quarkus将程序打包为二进制文件window环境下quarkus云原生二进制文件打包环境搭建使用GraalVM-java11替换本地java8运行二进制文件 基础概念…...

扩散模型DDPM开源代码的剖析【对应公式与作者给的开源项目,diffusion model】

扩散模型DDPM开源代码的剖析【对应公式与作者给的开源项目,diffusion model】一、简介二、扩散过程:输入是x_0和时刻num_steps,输出是x_t三、逆扩散过程:输入x_t,不断采样最终输出x_0四、具体参考算法流程图五、模型mo…...

C语言 学生记录管理系统

学生记录管理系统 1--添加 2--删除 3--查询:按姓名 4--查询:按班级 5--查询:按学号 0--退出 请选择操作序号(0—5):1 请输入新学生的学号:1 请输入新学生的…...

vscode里如何用git

打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...

2023赣州旅游投资集团

单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)

安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...

wpf在image控件上快速显示内存图像

wpf在image控件上快速显示内存图像https://www.cnblogs.com/haodafeng/p/10431387.html 如果你在寻找能够快速在image控件刷新大图像(比如分辨率3000*3000的图像)的办法,尤其是想把内存中的裸数据(只有图像的数据,不包…...

零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程

STM32F1 本教程使用零知标准板(STM32F103RBT6)通过I2C驱动ICM20948九轴传感器,实现姿态解算,并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化,适合嵌入式及物联网开发者。在基础驱动上新增…...