(7)机器学习小白入门 YOLOv:机器学习模型训练详解

(1)机器学习小白入门YOLOv :从概念到实践
(2)机器学习小白入门 YOLOv:从模块优化到工程部署
(3)机器学习小白入门 YOLOv: 解锁图片分类新技能
(4)机器学习小白入门YOLOv :图片标注实操手册
(5)机器学习小白入门 YOLOv:数据需求与图像不足应对策略
(6)机器学习小白入门 YOLOv:图片的数据预处理
(7)机器学习小白入门 YOLOv:模型训练详解

一、训练模型的基本概念和原理简介

原理简介

模型通过一个称为反向传播的过程反复进行预测、计算误差和更新参数。在此过程中,模型会调整其内部参数 (weights and biases) 以减少误差。通过多次重复这一循环,模型逐渐提高了准确性。随着时间的推移,它就能学会识别形状、颜色和纹理等复杂模式。
在这里插入图片描述

模型作用:

YOLOv8 是一个用于 目标检测 的深度学习模型。它的任务是在一张图片中识别出图像中存在的对象,并标记它们的位置(通常用边界框表示)以及每个对象的类别标签。

目标函数(Loss):

在训练过程中,我们需要最小化损失函数。YOLOv8 模型的损失主要包括以下几个部分:

  • 分类损失:判断模型输出的物体类别是否正确。
  • 定位损失:衡量边界框位置与真实目标之间的差距。
  • 置信度损失:判断一个预测框是否包含一个目标对象。

优化器的作用:

使用优化器来更新神经网络中的权重参数,以最小化损失函数。常见优化器有 SGDAdamRMSPropAdamW 等。


二、训练模型的步骤详解

以下是基于 Python 和 YOLOv8 训练目标检测模型的整体流程:

步骤 1:导入必要的库

import torch
from ultralytics import YOLO

注意:

  • ultralytics 是官方提供的对YOLOv8的封装。
  • 使用前需通过 pip 安装 ultralytics 包:
    pip install ultralytics
    

步骤 2:加载预训练模型

model = YOLO("yolov8n.pt")  # 加载YOLOv8小型目标检测预训练权重,也可以使用 'yolov8s.pt'、'yolov8m.pt' 等不同大小的模型
  • yolov8n.pt: 小型网络。
  • yolov8m.pt: 中型网络(默认)。
  • yolov8l.pt/yolov8x.pt: 大型网络,检测精度高但推理速度较慢。

步骤 3:定义训练配置

# 定义模型的训练配置参数
config = {
    "epochs": 100,         # 总共训练多少轮
    "imgsz": 640,          # 图像缩放大小
    "batch_size": 16,      # 每次送入网络的数据量(影响训练速度和内存占用)
    "workers": 8,          # 数据加载线程数,加速数据读取
    "device": 'cuda',      # 使用GPU进行训练,'cpu'也可以使用CPU进行训练但会更慢
    "project": "yolov8_training",     # 训练结果保存的根目录名称(可自定义)
    "name": "train_exp"        # 当前实验的名字,在 project 文件夹中形成子文件夹
}

步骤 4:开始训练模型

results = model.train(
    data='coco.yaml',           # 数据集配置文件路径,需要按照格式提供数据集信息
    epochs=config["epochs"],
    imgsz=config["imgsz"],
    batch_size=config["batch_size"],
    workers=config["workers"],
    device=config["device"],
    project=config["project"],
    name=config["name"]
)

data='coco.yaml' 是 Ultralytics 提供的 COCO 数据集配置文件路径,如果你有自定义的数据集,可以自己按照格式创建一个 .yaml 文件。


步骤 5:验证训练结果

# 在训练完成后对模型进行验证
metrics = model.val()
print(metrics)

val() 方法返回的是在验证数据上的检测指标(如 mAP、Recall 等)。


三、优化器的选择和使用(以 AdamW 为例)

YOLOv8 默认使用的是 AdamW 优化器,它是一个改进的 Adam 优化算法,支持 L2 正则化。

示例:

# 如果你需要手动控制训练过程,也可以直接使用 torch.optim.AdamW

from torch import optim, nn

# 假设你已经有了一个网络模型 model
model = Model()  # 自己定义的神经网络结构

optimizer = optim.AdamW(model.parameters(), lr=1e-3, weight_decay=0.01)
criterion = nn.BCELoss()

for epoch in range(config["epochs"]):
    for batch_data, batch_labels in train_loader:
        outputs = model(batch_data)
        loss = criterion(outputs, batch_labels)
        
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()

四、提前停止策略(Early Stopping)的实现

在模型训练过程中,如果验证集上的损失连续多轮没有下降,则可以考虑提前结束训练。

在这里插入图片描述

from sklearn.model_selection import train_test_split
import torch
from ultralytics import YOLO, EarlyStopping

model = YOLO("yolov8n.pt")

early_stopper = EarlyStopping(patience=10)  # 设置为10轮没有改进则提前停止

for epoch in range(100):
    model.train()
    train_loss = model.train()  # 训练
    val_loss = model.val()      # 验证
    
    if early_stopper(val_loss):
        print("Early stopping triggered.")
        break

五、如何确定训练纪元数(Epochs)

  • 如果是目标检测任务,建议设置为 100 ~ 500
  • 初始可设为 30,然后观察验证损失是否在下降,再适当增加。
  • 每次增加 20 或 50 轮左右即可。

注意:如果模型过拟合,可以通过早停、数据增强(如 CutMix)等方法缓解。


六、训练过程的监控与记录

输出日志:

YOLOv8 的训练会实时输出以下内容:

  • 每个 epoch 中损失的变化。
  • mAP(mean Average Precision),衡量检测准确率的一个指标。
  • 训练用时和每个 epoch 速度。

可视化工具:

使用 TensorBoard 来查看模型的训练过程,可以通过以下方式启用它:

from torch.utils.tensorboard import SummaryWriter

writer = SummaryWriter('runs/train')

for i, data in enumerate(train_loader):
    outputs = model(data)
    
    writer.add_scalar("Loss", loss.item(), i)  # 记录损失值

然后使用命令启动 TensorBoard:

tensorboard --logdir runs/train

📌 小结

模块内容
模型选择使用 YOLOv8 的预训练模型 yolov8n.pt
优化器AdamW 是目前最常用的选择,支持权重衰减(防止过拟合)
提前停止若验证损失连续10轮无改进,则终止训练以节省资源
训练纪元数初始设置为50~100,再根据结果增加即可
数据处理需要自定义 data.yaml 文件来描述训练和测试集的路径、类别等信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值