上一篇文章介绍了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版本的解读✨✨✨✨如果帮助到大家,可以一键三连支持下🚀🚀