0


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的整体目录如上图所示。

接下来我们逐一分析

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


本文转载自: https://blog.csdn.net/weixin_43334693/article/details/129356033
版权归原作者 路人贾'ω' 所有, 如有侵权,请联系我们删除。

“YOLOv5源码逐行超详细注释与解读(1)——项目目录结构解析”的评论:

还没有评论