YOLO26 计算机视觉 - 训练自己的 YOLO26 模型

大家好,我是 Java1234 小锋老师。最近正在更新《一天学会 YOLO26 计算机视觉 机器视觉 视频教程》系列专辑,感谢大家的支持与关注。

本课程将系统讲解 YOLO26 的完整知识体系,涵盖 YOLO26 简介、HelloWorld 项目实现、模型架构解析、图片与视频推理 、摄像头实时检测、数据集与标注、训练自己的 YOLO26 模型、多任务(分割 / 姿态 / 分类 / OBB)以及模型导出等内容。

视频教程+课件+源码打包下载 :

链接:https://pan.baidu.com/s/1_NzaNr0Wln6kv1rdiQnUTg

提取码:0000

具体位置:进入【第三十一期】技术目录即可找到。

YOLO26 计算机视觉 - 训练自己的 YOLO26 模型

我们用前面的helloWorld.py测试一个图片,没检测到安全帽。

YOLO26默认识别的80个目标里面是没有"安全帽"的。我们今天来训练一个能够识别"安全帽"的YOLO26模型。当然这个是模型微调(Fine-tuning),利用官方在COCO(80类)上预训练的权重作为起点,训练出自己的模型,微调的优势在于收敛更快、所需数据更少,因为模型已经学会了通用的视觉特征(如边缘、纹理)。这能极大地降低我们的训练成本和时间。

首先我们准备8张图片。以及用Label Studio进行数据标注。

Label Studio安装命令:

复制代码
pip install label-studio -i https://pypi.tuna.tsinghua.edu.cn/simple  --trusted-host pypi.tuna.tsinghua.edu.cn

Label Studio启动命令:

复制代码
label-studio start

启动后,进入http://localhost:8080/

进入首页:

先点击注册一个账号,然后再登录进去。

第一步,项目名称设置

第二步:导入数据图片

第三步:标签设置,选基于边界的目标检测

默认的标签删除掉;

接着输入 helmet,点击Add按钮,添加一个标签。

接下来就是给图片标注了。全选后,点 Lavel 8 Tasks

先键盘按1,(选安全帽标签),然后图上 鼠标选中安全帽位置

再点 submit提交按钮即可。其他7个图片一样的操作。

全部标注完毕后,我们就可以导出标注文件,进入项目,点 Export 导出

我们选 yolo 格式,然后点Export导出按钮即可。

得到标注压缩项目文件,解压下

labels下就是我们需要的标注文件。

为了和图片名称一一对应,我们要重命名下标注文件。

按照标准格式,把图片和标签放到置顶目录。四张训练图片和四张验证图片。

新建helmet_train.py

python 复制代码
from ultralytics import YOLO

model = YOLO("yolo26n.pt")  # 加载预训练权重
results = model.train(data="helmet.yaml", epochs=100, imgsz=640)

运行后,得到权重文件。

我们用得权重文件去预测识别目标,新建helmet_predict.py

python 复制代码
# -*- coding: utf-8 -*-
"""
使用自己训练的安全帽检测模型进行图片推理。
训练图分辨率很高,默认 imgsz=640 时安全帽过小,容易漏检,因此推理时加大输入尺寸。
"""

from pathlib import Path
import sys

from ultralytics import YOLO

sys.path.append(str(Path(__file__).resolve().parents[1]))
from utils.common import print_detections, ensure_dir

# 脚本所在目录,避免工作目录不对时找不到权重和图片
HERE = Path(__file__).resolve().parent
WEIGHTS = HERE / "best.pt"
IMAGE = HERE / "helmet2.png"


def main() -> None:
    """加载自定义权重并对单张图片推理、打印并保存结果。"""
    if not WEIGHTS.exists():
        raise FileNotFoundError(f"未找到模型权重: {WEIGHTS}")
    if not IMAGE.exists():
        raise FileNotFoundError(f"未找到待推理图片: {IMAGE}")

    model = YOLO(str(WEIGHTS))  # 加载自己训练的安全帽模型
    out_dir = ensure_dir(HERE / "runs")  # 推理结果保存目录

    results = model.predict(
        source=str(IMAGE),
        conf=0.25,  # 置信度阈值,低于该值的框会被丢掉
        imgsz=960,  # 比训练默认 640 更大,适配高分辨率原图
        save=True,  # 保存带检测框的图片
        project=str(out_dir),
        name="helmet_predict",
        exist_ok=True,
    )

    print(f"类别: {model.names}")
    print_detections(results[0], model.names)
    print(f"结果已保存到: {out_dir / 'helmet_predict'}")

    results[0].show()  # 弹窗显示检测结果


if __name__ == "__main__":
    main()

运行结果,能够识别。

虽然可以识别,但是由于我们训练的数据太少,如果要提高识别率,需要进行大量的图片进行训练,提高泛化能力。

训练train方法核心参数:

参数 作用 默认值 建议
data 指定数据集配置文件.yaml格式)的路径。 这是必须设置的参数,没有默认值。
epochs 训练轮数,即整个数据集被模型完整学习的次数。 100 小数据集 (如几百张):50-100轮;大数据集200轮以上。
imgsz 输入图像的尺寸。所有图片会被统一缩放至此大小(宽高相等)后再训练。 640 小目标 检测:用1280追求速度 :用320数值必须是32的倍数
batch 批次大小,即每次迭代输入模型进行训练的图片数量。 16 在显存允许的范围内尽可能设大 ,通常建议不低于8。也可设为-1让模型自动选择。
device 指定训练使用的计算设备 None (自动选择) 单GPU:device=0;多GPU:device=0,1,2,3;CPU:device=cpu
workers 用于数据加载的线程数,负责将数据从硬盘读入内存并预处理。 8 Windows系统需特别注意 ,常因多线程问题报错,建议设为 0。Linux服务器可适当增大。
patience 早停(Early Stopping)的"耐心值"。若验证集精度连续这么多轮没有提升,训练将自动停止。 50 可有效防止过拟合和节省时间。若想禁用此功能,可设为一个极大值,如10000

实例代码:

python 复制代码
from ultralytics import YOLO

# 加载预训练模型
model = YOLO('yolov8n.pt')

# 开始训练
results = model.train(
    data='path/to/your/data.yaml',  # 数据集配置文件
    epochs=100,                     # 训练100轮
    imgsz=640,                      # 输入图片尺寸640x640
    batch=16,                       # 每批16张图
    device=0,                       # 使用第一张GPU
    workers=4,                      # 使用4个线程加载数据
    patience=50                     # 50轮无提升则停止
)

训练完成后,会生成一些图片文件,是 Ultralytics YOLO 训练完成后自动保存的标准评估结果 。它们主要分为三类:置信度阈值曲线混淆矩阵训练过程汇总

下面我为你逐一解读它们的含义和实际用途:

1. 核心性能曲线(用于选"置信度阈值")

这四张图都是关于目标框(Box) 的指标,横轴是置信度阈值(从 0 到 1)。

文件名 含义 实际用途(怎么看)
BoxP_curve.png 精确率曲线(Precision)。随着阈值提高,模型变"严格",精确率通常上升(检测到的更少但更准)。 如果误检让你很头疼(比如把背景当目标),就参考这张图,选一个高精确率对应的阈值。
BoxR_curve.png 召回率曲线(Recall)。随着阈值提高,召回率通常下降(漏检变多)。 如果漏检让你很头疼(比如没检测出目标),就参考这张图,选一个高召回率对应的阈值。
BoxF1_curve.png F1 分数曲线 。它是精确率和召回率的调和平均值,是综合性能指标。 最常用的参考图 。曲线最高点对应的横坐标(如 0.3 或 0.45),就是你推理时设置 conf 参数的最佳平衡点。
BoxPR_curve.png PR 曲线图(横轴召回率,纵轴精确率)。它不涉及具体阈值,反映模型全局性能。 曲线越靠近右上角(面积越大),模型性能越好。训练日志中的 mAP 值就是基于这条曲线计算出来的。

2. 混淆矩阵(用于看"分错哪里")

这两张图展示了模型在验证集上的分类和定位结果。

文件名 含义 关键看点
confusion_matrix.png 绝对数值混淆矩阵。行列代表真实标签和预测标签,数字代表具体的检测框数量。 对角线(深色)数值越大越好。如果非对角线上有亮色格子,说明模型常把 A 类误检为 B 类。
confusion_matrix_normalized.png 归一化混淆矩阵(百分比)。将每行的总数视为 1,看比例。 主要用于排除"样本数量多"带来的视觉误导。如果某行对角线颜色很浅,说明该类别的召回率极低(漏检严重)。
额外列(Background FN/FP) 最右侧是漏检 (没框出来),最下侧是误检(框错了背景)。 如果最右侧数值很高,说明漏检严重 ;如果最下侧很高,说明误检严重

3. 训练过程与数据概览

文件名 含义 怎么用
labels.jpg 训练集标注可视化。随机抽取了一批训练图片,展示真实的标注框(GT)分布。 快速检查你的数据集标注是否正确,以及目标大小是否合理(框太大或太小会影响训练)。
results.png 最重要的汇总图 。包含了整个训练过程中,随着 epochs 增加,损失值(Loss)和精度指标(mAP)的变化曲线。 看收敛 :Loss 曲线是否平稳下降?mAP 曲线是否趋于平缓?如果 mAP 最后还在上升,说明可以增加 epochs;如果 Loss 震荡剧烈,说明 batch 可能太小或学习率不合适。
results.csv 训练过程的原始数据表格。记录了每一轮的 Loss、mAP 等具体数值。 供数据分析师使用,可以用 Excel 或 Python 读取,绘制更个性化的图表,或对比不同训练跑出来的具体差异。

💡 实际应用中的"三步走"建议

  1. 看 results.png:确认模型训练是否充分收敛(mAP曲线变平)。
  2. 看 BoxF1_curve.png :找到 F1 最高点对应的置信度 x,将这个值设置为你后续 yolo predict conf=x 的参数,能达到最佳平衡。
  3. 看 confusion_matrix_normalized.png
    • 如果最右侧(漏检)颜色深,就适当降低置信度阈值。
    • 如果最下侧(误检)颜色深,就适当提高置信度阈值。
    • 如果某两个类别之间颜色深,说明它们太像了,需要检查数据集标注或考虑合并类别。
相关推荐
小程序设计21 分钟前
机械设计之大蒜茎叶粉碎抛送装置设计
人工智能·数据挖掘
满怀冰雪27 分钟前
23-PaddleClas 数据集、配置文件与训练参数详解
人工智能·python·深度学习·paddlepaddle
Akir.weiwen27 分钟前
③ 约束显化:把隐含的语义假设变成显式规则
人工智能·编译·设计规范·语义
tachibana228 分钟前
AI Agent 的记忆机制
人工智能·ai·大模型·llm·agent
苦猿的大模型日记29 分钟前
Day52|从0学习Claude Code(二):从一台机床到一个工具箱,循环一行没改
人工智能
richard_first32 分钟前
从 ChatGPT 到机器人:NVIDIA Jetson Orin Nano 2 背后的 Physical AI 浪潮
人工智能·chatgpt·机器人
余俊晖33 分钟前
Self-OPD:去掉教师机的流匹配模型 On-Policy 蒸馏
人工智能·算法·机器学习
手写码匠34 分钟前
华为云Flexus+DeepSeek征文|华为云MaaS DeepSeek推理服务 × Flexus云服务器 × Dify一键部署:性能评测实战
人工智能·深度学习·算法·aigc
tzc_fly36 分钟前
Claude Science设计哲学:把 AI Agent 设计成可校准的科研仪器
人工智能