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 格式的数据集(图片和标签)。目标检测—数据集格式转化及训练集和验证集划分_目标检测随机划分训练集和测试集的代码-CSDN博客我觉得这个博主给的数据集的划分非常好)

创建数据集配置文件 .yaml。(其实就是更该已有的data下面的配置文件,告诉模型从哪里加载数据集,如何分配)目标检测—教你利用yolov5训练自己的目标检测模型_目标检测 教你利用-CSDN博客(这个博主也给了如何改动配置文件,改哪些,怎么改)

使用 train.py 开始训练,生成你自己的模型权重。(重要的我就写在下面了)
在这里插入图片描述

ok如果你训练成功了,就会有runs文件夹:
在这里插入图片描述

还有就是这些曲线curve,以后我学精通了再讲,要不然就是误人子弟了在这里插入图片描述

使用 detect.py 进行推理。

在这里插入图片描述

最后的检测结果也在runs里面,最后的结果也比较好能检测出来目标在这里插入图片描述

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐