前言

前面简单介绍了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 

目录

前言

 一、项目目录结构

 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的yolov3yolov3-tiny.yaml  # 精简版yolov3yolov3.yaml  # yolov3yolov5-bifpn.yaml  # 带二值fpn的yolov5lyolov5-fpn.yaml  # 带fpn的yolov5yolov5-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的yolov5lyolov5n6.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.0yolov5m.yaml   # yolov5m网络模型配置文件,middle版本,深度0.67,宽度0.75yolov5n.yaml   # yolov5n网络模型配置文件,nano版本,深度0.33,宽度0.25yolov5s.yaml   # yolov5s网络模型配置文件,small版本,深度0.33,宽度0.50yolov5x.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逐文件详解

查看原文