Lazy loaded image
🧐YOLO-v5使用和训练简述
字数 3681阅读时长 10 分钟
2025-2-23
2025-2-24
type
status
date
slug
summary
tags
category
icon
password

YOLO-V5 – You Only Look Once version 5

YOLO-V5 的模型介绍

  • 目标检测
    • 目标检测的任务是识别图像中的物体,并确定它们的位置(通常用边界框表示)。例如,在一张街道照片中,你不仅要识别出“汽车”、“行人”和“交通灯”,还要标出它们在图像中的具体位置
  • YOLO
    • 就如同YOLO的名字一样 - “只看一次”,区别传统的目标检测方法(如 R-CNN)要多次处理图像,YOLO 通过单次前向传播即可生成所有检测结果(边界框 + 类别),相比两阶段检测模型(如 Faster R-CNN),速度提升显著,适用于实时场景(如摄像头监控、自动驾驶)

YOLO-V5 中常见的专业术语

我们用一张图在介绍常见的术语⬇️
  1. 边界框 (Bounding Box) 边界框是一个矩形框,用来标出物体在图像中的位置和大小。在这里我们标注了猕猴桃的位置和大小,蓝色的框就是边界框
  1. 类别预测 (Class Prediction) 除了检测物体的位置,YOLOv5 还会预测每个物体的类别(如“汽车”、“行人”等)。就像你在街上看到一辆车,不仅要标出它的位置,还要知道它是汽车而不是自行车。 YOLOv5 的预训练模型基于 COCO 数据集(80 类通用物体),但针对特定任务(如猕猴桃检测),需要重新训练以适配自定义类别。
  1. 置信度 (Confidence Score) 置信度表示模型对检测结果的信心。例如,模型可能会认为某个框内有 90% 的可能性是汽车,10% 的可能性是其他物体。置信度越高,模型的预测越可信。比如在这张图片中物体kiwi的置信度就是68% (因为我是用cpu跑的模型,所以模型参数比较小,置信度自然不高)

模型的部署

这里我用Windows11作为展示,别的操作系统可以去B站搜
  1. 安装Anaconda
      • Anaconda是一个管理Python环境和库的工具
      • 下载地址:
      • 输入自己的邮箱就可以下载了
      • 直接点Download就可以了
      • 在CMD中查看是否安装成功,如果版本号就是成功了
        • notion image
  1. 创建并激活Python环境 这里使用Python 3.9,因为最新的pytorch需要3.9及以上的py版本
      • 创建虚拟环境:打开命令提示符,运行以下命令创建一个新的虚拟环境(例如命名为yolov5_test)
      • conda会自动帮你下载一些包,键入y就行了
      • 激活虚拟环境:运行以下命令激活虚拟环境:
      • 到这里就算Python环境创建和激活成功
  1. 安装Pytorch
      • Pytorch是一个开源的Python的机器学习框架
      • 下载地址:
      • 选择对应的指令在命令行运行
      • ❗️值得注意的是,默认的下载源都是在国外的,下载速度很慢甚至连不上;我们在下载的时候要指定清华的下载源
      • 使用 pip 指定清华源安装 PyTorch
  • 在命令行中运行以下命令来安装 PyTorch,并指定清华源作为下载源:
  • pip永久使用清华源
  • 验证Pytorch是否安装成功,进入Python交互
如果没有报错,并且输出了 PyTorch 的版本号,说明安装成功
  1. YOLO-v5 的下载
有两种下载源代码的方式: 1. 直接登录githup的仓库下载 2. 用git来clone仓库 ❗️这两种方法都需要科学上网❗️
  • 通过git下载(这个要先下载git,具体操作上网搜一下就ok了)
  • 直接仓库下载
  • 下载解压到对应的文件夹就能用了
  • 之后我们还需要下载yolov5依赖的包
  1. YOLO模型的使用 我们通过pycharm打开刚才我们下载解压的yolov5的文件夹
      • 编译器配置刚才我们所创建的环境
那我们现在前期的所有环境配置就都ok了,我们还需要在官网下载发行的模型即可是否yolo模型
  • 下载 .pt 模型
  • 这里我们在yolov5这个文件夹下再创建一个文件夹,取名为weights,并且把模型都下载到这个文件夹中

模型的使用

在pycharm中打开终端 输入以下指令
  • 运行过后的结果在runs/detect/exp
notion image
 

训练YOLO-V5模型

  • 首先我们要标注数据 -> 图片中什么东西在什么位置
    • 使用labelimg进行数据标记
      • 在命令行输入 pip install labelimg 下载
      • 在命令行输入 labelimg 启用
notion image
 
在目标检测任务中,LabelImg 是一个常用的图像标注工具,支持多种标注格式,包括 YOLO 格式。以下是对 LabelImg 中标记 YOLO 格式的详细讲解,包括标记结果、注意事项以及操作步骤。

1. YOLO 格式的标记结果

YOLO 格式的标注文件是一个 .txt 文件,每个标注文件对应一张图像,文件名与图像文件名相同。文件内容如下:
  • <class_id>:目标类别的索引(从 0 开始)。例如,0 表示第一个类别,1 表示第二个类别,依此类推。
  • <x_center>:目标边界框中心点的 x 坐标,归一化到图像宽度(范围是 [0, 1])。
  • <y_center>:目标边界框中心点的 y 坐标,归一化到图像高度(范围是 [0, 1])。
  • <width>:目标边界框的宽度,归一化到图像宽度(范围是 [0, 1])。
  • <height>:目标边界框的高度,归一化到图像高度(范围是 [0, 1])。

示例

假设有一张图像 image.jpg,尺寸为 800x600,标注了一个类别为 dogclass_id=0)的目标,边界框的左上角坐标为 (200, 100),右下角坐标为 (600, 400)。那么 YOLO 格式的标注文件 image.txt 内容如下:
计算过程: - x_center = (200 + 600) / 2 / 800 = 0.5 - y_center = (100 + 400) / 2 / 600 = 0.4166666666666667 - width = (600 - 200) / 800 = 0.5 - height = (400 - 100) / 600 = 0.5

2. 在 LabelImg 中标记 YOLO 格式的步骤

步骤 1:安装 LabelImg

如果尚未安装 LabelImg,可以通过以下命令安装:
安装完成后,运行 labelImg 启动工具:

步骤 2:设置标注格式

  1. 打开 LabelImg 后,点击菜单栏的 Format
  1. 选择 YOLO 格式。

步骤 3:加载图像

  1. 点击 Open Dir 按钮,选择包含待标注图像的文件夹。
  1. 图像会显示在主界面中。

步骤 4:创建类别文件

  1. 点击 Change Save Dir 按钮,选择保存标注文件的文件夹。
  1. 软件会自动创建一个类别文件(classes.txt),列出所有类别名称,每行一个类别。例如:

    步骤 5:标注目标

    1. 点击 Create RectBox 按钮(或按快捷键 W),在图像中绘制目标边界框。
    1. 在弹出的对话框中输入目标类别名称(如 dog)。
    1. 标注完成后,LabelImg 会自动生成一个 .txt 文件,保存 YOLO 格式的标注信息。

    步骤 6:保存并切换图像

    1. 点击 Save 按钮(或按快捷键 Ctrl + S)保存当前标注。
    1. 点击 Next Image 按钮(或按快捷键 D)切换到下一张图像。

    3. 注意事项

    (1)图像和标注文件的对应关系

    • 每张图像对应一个 .txt 文件,文件名与图像文件名相同。
    • 确保图像和标注文件放在同一文件夹中,或者按照 YOLO 数据集的目录结构组织。

    (2)类别文件(classes.txt

    • 类别文件必须包含所有类别名称,且顺序与 class_id 对应。
    • 类别名称不能包含空格或特殊字符。

    (3)边界框的绘制

    • 边界框应紧密贴合目标,避免包含过多背景。
    • 对于部分遮挡的目标,尽量根据可见部分绘制边界框。

    (4)归一化坐标

    • YOLO 格式的坐标是归一化的,范围是 [0, 1]
    • 如果手动修改标注文件,确保坐标值正确归一化。

    (5)标注一致性

    • 对于同一类别的目标,标注风格应保持一致。
    • 避免遗漏目标或重复标注。

    (6)图像尺寸

    • 标注时确保图像尺寸与训练时使用的尺寸一致。
    • 如果图像尺寸发生变化,需要重新计算归一化坐标。

    YOLO 数据集的目录结构

    YOLO 数据集通常按以下目录结构组织:
    • images/:存放图像文件。
    • labels/:存放标注文件。
    • classes.txt:类别,会自动放在labels/train或者val 中
    • train 表示训练集val表示验证集(Validation Set)
      • 一般按照7:3进行划分

    训练模型

    • 在数据集都准备好之后我们就可以开始训练模型了
      • 首先我们要在data文件夹下创建一个 .yaml 的文件,名字都可以
      • 创建kiwi_train.yaml文件中这样填写
        • notion image
    • 然后就可以开始训练了
      • 在命令行运行
    • 参数详解
      • --data:指定数据集的配置文件路径(如 data/coco.yaml)。
      • --cfg:指定模型的配置文件路径(如 models/yolov5s.yaml)。
      • --weights:指定预训练权重文件的路径(如 yolov5s.pt)。如果从头开始训练,可以设置为空。
      • --epochs:指定训练的轮次(如 100)。
      • --batch-size:指定每个批次的图像数量(如 16)。
      • --device:指定训练设备,cpu0(表示使用第一个 GPU)。
    notion image
     
    之后就是等电脑运行完毕查看训练效果 在 runs/train/exp 中能看到训练生成的模型和各种图片

    检查训练结果

    notion image

    训练结果的各种参数解析

    runs/train/exp 目录下,关键结果图像及参数说明如下:

    1. results.png(综合训练指标)

    notion image
    • 左上:训练损失(Train Loss)
      • box_loss:边界框定位损失(越小说明位置预测越准)
      • obj_loss:目标存在性置信度损失(越小说明检测遗漏越少)
      • cls_loss:类别分类损失(越小说明类别预测越准)
    • 左下:验证损失(Val Loss)- validation loss
      • 与训练损失对应,用于检测过拟合(若验证损失远高于训练损失,说明模型泛化能力差)。 这里我们讲解一下什么是“泛化能力
      • 泛化能力是指机器学习模型在 从未见过的数据(测试集或真实场景数据) 上表现良好的能力。简单来说,就是模型是否“死记硬背”了训练数据,还是真正“学会”了规律
      • 为什么重要?
        • 过拟合(Overfitting):模型在训练集上表现极好,但在新数据上表现差(考试前只背答案,但不会举一反三)
        • 欠拟合(Underfitting):模型在训练集和新数据上都表现差(没学懂知识点)
    • 右下:mAP(Mean Average Precision)- 平均精度均值
      • 这里我们重点讲一下mAP这个指标:
      • mAP 是目标检测任务中最核心的评估指标,综合衡量模型的检测精度召回能力
        • 计算过程:对每个类别计算平均精度(AP),再对所有类别的 AP 取平均,得到 mAP
      • mAP@0.5:IoU 阈值为 0.5 时的平均精度(常用核心指标)、
      • mAP@0.5:0.95:IoU 阈值从 0.5 到 0.95 的平均精度(更严格)
    • 右上:精准率(Precision)与召回率(Recall)
      • 高精准率:检测结果中误报少(False Positive 低)
      • 高召回率:真实目标被遗漏少(False Negative 低)

    2. F1_curve.png(F1 分数曲线)

    notion image
    横轴:置信度阈值(从 0 到 1)。
    纵轴:F1 分数(精准率与召回率的调和平均)。
    用途:选择最佳置信度阈值(通常取 F1 峰值点,如 0.4-0.6)。

    3. PR_curve.png(P-R 曲线)

    notion image
    横轴 :召回率(Recall)
    纵轴:精准率(Precision)
    曲线下面积(AUC)— 积分 :越大表示模型综合性能越好

    4. confusion_matrix.png(混淆矩阵)

    notion image
    对角线:正确预测的类别比例。
    非对角线:类别间的误检情况(如猕猴桃被误判为橙子)。

    5. val_batch0_labels.jpgval_batch0_pred.jpg

    • labels.jpg:验证集真实标注的可视化。
    • pred.jpg:模型预测结果的可视化。
    • 对比要点
        1. 边界框是否紧密贴合目标。
        1. 是否遗漏小目标(如远处的猕猴桃)。
        1. 误检的背景区域(如将树叶误判为猕猴桃)。
     

    有错误欢迎指正👌
    25/2/23
    廖朝正
     
    上一篇
    DeepSeek使用教程
    下一篇
    算法总复习

    评论
    Loading...