1. 模型文件(YAML 配置文件)
在models文件夹下面这些 yolov5s.yaml
, yolov5m.yaml
等 YAML 文件实际上是用来定义模型结构的。它们指定了 YOLOv5 模型的层数、通道数、输入输出维度等架构信息。例如,yolov5s.yaml
代表 YOLOv5 小型版本的架构,yolov5m.yaml
代表 YOLOv5 中型版本的架构。
(此外其实data文件夹里面也有很多的yaml文件,那些其实是关于数据是如何加载配置的文件也挺重要的)
模型结构文件中的参数告诉网络框架如何构建模型。例如,它会指定模型中有多少个卷积层、每个层的特征图大小、如何进行下采样和上采样等信息。
模型结构的文件中的信息并不包含模型训练后学习到的参数,它只是模型的“骨架”或“架构蓝图”。
2.权重文件
模型训练后学习到的参数其实就是最后的权重文件
这个红色框框里面的后缀为pt(PyTorch)的这些是权重文件,当然权重文件不只有pt文件,如下:
3.权重文件和模型文件是如何关联的?
-
权重文件保存了模型的所有参数,而这些参数是基于某个模型结构训练出来的。
-
模型文件定义了网络的结构,比如 YOLOv5s(小型版本)和 YOLOv5x(超大型版本)的网络层数和通道数不同。你可以加载相应的权重文件来恢复经过训练的模型。
-
模型文件和权重文件的关系
当你训练模型时,使用的是某种模型结构(由 YAML 文件定义的架构)。在训练过程中,模型学习到了具体的参数(权重和偏置),这些参数保存在权重文件中。
yolov5s.yaml
:定义了 YOLOv5 的小型版本(small)的网络架构。yolov5s.pt
:保存了基于yolov5s.yaml
结构的模型在 COCO 数据集上训练后的权重。
训练自己的数据集和权重
1. 基于预训练权重进行微调
-
当你指定
--weights yolov5s.pt
时,模型会加载预训练好的权重(例如yolov5s.pt
),然后在你自己的数据集上继续训练。这种方式叫做微调(fine-tuning)。 -
微调是利用预训练模型在大规模数据集(如 COCO)上已经学习到的特征,再通过你自己的数据集进行微调,以适应你的特定任务。这通常能让模型更快收敛,并且得到更好的效果,因为预训练模型已经学会了很多基本特征(如边缘、形状等),不需要从头开始学。
适用场景:如果你自己的数据集规模不大,或者与你的任务类别与预训练模型的数据集类别有一定的重合,微调通常是非常有效的。
`python train.py --img 640 --batch 16 --epochs 50 --data /path/to/your/data.yaml --weights yolov5s.pt --cfg models/yolov5s.yaml`
这种情况下,yolov5s.pt
的权重会被用作初始模型权重,而你通过训练进一步调整它。
2. 从头开始训练
-
如果你想完全从头开始训练,不使用任何预训练权重,只使用你自己的数据集来训练模型,可以通过将
--weights ''
设置为空来忽略预训练权重。 -
这意味着模型会随机初始化所有权重,所有参数都要从零开始训练。也就是说,模型没有任何先验知识,需要完全依赖你提供的数据集进行学习。
适用场景:如果你的任务与预训练模型差别很大(比如类别完全不同,或者输入数据格式、领域差异较大),从头开始训练可能会更适合。不过,这样通常需要更多的数据、更长的训练时间,以及更强的计算资源。
代码示例:
python train.py --img 640 --batch 16 --epochs 50 --data /path/to/your/data.yaml --weights '' --cfg models/yolov5s.yaml
在这种情况下,模型的所有参数都会被随机初始化,然后基于你自己的数据集进行训练,不依赖任何预训练权重。
3. 两者的区别
- 微调:加载预训练权重(如
yolov5s.pt
),利用已经训练好的模型进行进一步优化,通常能加快收敛速度并提高性能。适用于数据集规模较小或者与你的任务比较接近的场景。 - 从头开始训练:完全不依赖预训练模型,所有参数从零开始随机初始化。适用于与预训练模型差异很大的任务。
3. 选择微调还是从头训练权重呢?
- 如果你希望加快训练速度并利用预训练模型的优势,可以选择加载
yolov5s.pt
,在其基础上进行微调。 - 如果你希望模型完全根据自己的数据进行训练,并不依赖任何预训练权重,则可以将
--weights
参数设置为空,来从头开始训练。
大概步骤:
准备符合 YOLOv5 格式的数据集(图片和标签)。目标检测—数据集格式转化及训练集和验证集划分_目标检测随机划分训练集和测试集的代码-优快云博客(我觉得这个博主给的数据集的划分非常好)
创建数据集配置文件 .yaml
。(其实就是更该已有的data下面的配置文件,告诉模型从哪里加载数据集,如何分配)目标检测—教你利用yolov5训练自己的目标检测模型_目标检测 教你利用-优快云博客(这个博主也给了如何改动配置文件,改哪些,怎么改)
使用 train.py
开始训练,生成你自己的模型权重。(重要的我就写在下面了)
ok如果你训练成功了,就会有runs文件夹:
还有就是这些曲线curve,以后我学精通了再讲,要不然就是误人子弟了
使用 detect.py
进行推理。
最后的检测结果也在runs里面,最后的结果也比较好能检测出来目标