yolov5项目结构介绍,如何训练自己的模型推理,零基础小白适用

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里面,最后的结果也比较好能检测出来目标在这里插入图片描述

### 使用YOLOv8进行实例分割并训练定义数据集 #### 准备工作 为了使用YOLOv8进行实例分割,在自定义数据上完成这一过程,需先准备合适的开发环境。确保已安装Python及相关依赖库,如PyTorch等机器学习框架[^2]。 #### 创建项目结构 建立合理的文件夹结构有助于管理代码和资源。通常情况下,建议创建如下所示的基础架构: - `datasets/`:放置所有使用的数据集。 - `models/`:保存预训练模型权重和其他相关配置文件。 - `results/`:存储实验结果、日志信息等。 - `src/`:编写源码的位置,比如训练脚本。 #### 加载与预处理数据 对于特定的数据集,例如TrashCan 1.0 An Instance-Segmentation,其包含了用于检测和分割海底及其周围垃圾的水下图片。这类数据集可能需要额外的预处理步骤来适应YOLOv8的要求。这包括但不限于调整图像尺寸、转换标注格式为COCO风格JSON文件等形式[^1]。 ```python from ultralytics import YOLO model = YOLO('path_to_your_config.yaml').load('pretrained_weights_path') ``` 此段代码展示了如何加载预先存在的配置文件以及初始化网络权重。这里的路径应替换为你实际拥有的配置文件地址及预训练好的权重位置。 #### 开始训练 一旦完成了上述准备工作,则可以调用`.train()`方法启动训练流程。下面是一个简单的例子展示怎样设置一些基本参数来进行训练: ```python # Train the model with specified parameters model.train( data='path_to_data_yaml', # Path to dataset configuration file (e.g., COCO format) epochs=150, # Number of training iterations over entire dataset imgsz=640, # Input image size during training phase batch=2, # Batch size per GPU used while optimizing loss function workers=0 # Number of worker threads for loading batches into memory ) ``` 通过指定不同的超参选项,可以根据具体应用场景微调模型表现。值得注意的是,这里提到的工作线程数被设为零是为了简化示例;实践中可根据硬件条件适当增加以加速读取速度[^3]。 #### 后续操作 完成训练之后,还可以继续探索更多高级特性,如评估测试集上的性能指标、导出优化后的推理引擎供生产环境中部署等等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值