菜单

核心功能

相关源文件

本页面概述了YOLOv5的核心功能,解释了构成该框架的主要操作和组件。它涵盖了三个主要流程:训练、推理和验证,以及支持通用模型部署的多后端检测系统。

有关模型架构或数据处理等单个组件的详细解释,请分别参阅模型架构数据处理

概述

YOLOv5提供了一个全面的目标检测框架,具有三个主要操作流程。

  1. 训练 - 在自定义数据集上从头训练或微调现有的YOLOv5模型
  2. 推理 - 运行训练好的模型以检测图像、视频或流中的目标
  3. 验证 - 使用标准指标(mAP、精确率、召回率)评估模型性能

这些操作实现为独立的脚本(train.pydetect.pyval.py),但也可以通过Python API进行编程导入和使用。

来源: train.py1-988 detect.py1-439 val.py1-605 utils/general.py1-1355

训练流程

训练流程在train.py中实现,并提供从头开始训练YOLOv5模型或在自定义数据集上微调预训练模型的功能。

训练过程概述

来源: train.py103-541

关键组件

  1. 模型初始化:

    • 模型可以从头开始使用YAML配置进行初始化
    • 可以加载预训练权重用于迁移学习或微调
  2. 优化器和学习率调度器:

    • 可配置优化器(SGD、Adam、AdamW)
    • 学习率调度(余弦或线性衰减)
  3. 指数移动平均(EMA):

    • 在训练过程中维护模型权重的移动平均
    • 用于推理以提高稳定性和性能
  4. 自动锚框:

    • 自动调整锚框尺寸以匹配数据集统计数据
    • 提高不同尺寸目标的检测性能
  5. 训练过程中的验证:

    • 在训练过程中定期验证模型
    • 根据验证指标保存最佳模型
  6. 实验跟踪:

    • 与各种日志系统集成(Weights & Biases、TensorBoard、ClearML、Comet ML)
    • 跟踪指标、超参数并生成可视化

来源: train.py103-541 utils/general.py15-100 utils/torch_utils.py

推理管道

推理流程在detect.py中实现,支持在图像、视频、流或网络摄像头等各种输入源上运行训练好的YOLOv5模型。

推理过程概述

来源: detect.py70-321

关键组件

  1. 模型加载:

    • 使用DetectMultiBackend支持各种模型格式(PyTorch、ONNX、TensorRT等)
    • 处理不同的设备目标(CPU、CUDA等)
  2. 输入源:

    • 图像(单个文件或目录)
    • 视频(本地文件或URL)
    • 流(RTSP、HTTP等)
    • 网络摄像头
    • 屏幕截图
  3. 预处理:

    • 缩放到模型输入尺寸
    • 归一化
    • 批处理
  4. 后期处理:

    • 非极大值抑制(NMS)以消除重复检测
    • 将边界框缩放到原始图像大小
    • 类别过滤
  5. 输出格式:

    • 带标注的图像/视频
    • 包含检测坐标的文本文件
    • CSV文件
    • JSON 格式
  6. 可视化:

    • 结果实时显示
    • 可自定义的边界框外观

来源: detect.py70-321 utils/general.py1010-1120

验证管道

验证流程在val.py中实现,并提供使用平均精度(mAP)、精确率和召回率等标准指标评估YOLOv5模型性能的功能。

验证过程概述

来源: val.py188-467

关键组件

  1. 指标计算:

    • 精确率和召回率
    • mAP@0.5(PASCAL VOC指标)
    • mAP@0.5:0.95(COCO指标)
    • 混淆矩阵
  2. 批处理:

    • 高效的验证数据批处理
    • 支持不同的设备目标(CPU、CUDA)
  3. IoU阈值:

    • 在多个IoU阈值(0.5至0.95)下进行评估
    • 报告每个阈值下的性能
  4. 结果分析:

    • 每个类别的性能指标
    • 混淆矩阵可视化
    • 精确率-召回率曲线
  5. COCO评估:

    • 使用COCO API进行可选评估
    • 生成兼容的JSON输出
  6. 性能剖析:

    • 跟踪和报告推理速度
    • 分解处理时间组件

来源: val.py188-467 utils/metrics.py

DetectMultiBackend:模型加载与执行

DetectMultiBackend类是核心组件,为跨多个后端框架加载和执行YOLOv5模型提供统一的接口。这使得YOLOv5能够支持广泛的部署场景。

支持的模型格式

来源: detect.py17-28 val.py9-19

模型加载过程

来源: models/common.py detect.py166-167 val.py270-275

主要功能

  1. 统一接口:

    • 无论后端格式如何,都采用通用API
    • 一致的输入/输出处理
  2. 自动检测:

    • 根据文件扩展名自动检测模型格式
    • 加载适当的后端进行执行
  3. 半精度支持:

    • 在支持的硬件上执行FP16
    • 提高兼容硬件上的推理速度
  4. 预热推理:

    • 预运行推理以初始化优化
    • 确保后续推理的准确计时
  5. 设备目标:

    • 支持CPU、CUDA和其他专用硬件
    • 根据可用硬件优化执行

来源: models/common.py detect.py166-184 val.py270-282

通用工具

YOLOv5 在 utils 目录中包含一套丰富的实用工具,它们支持核心功能。以下是一些最重要的实用函数和类:

边界框操作

功能描述文件
xyxy2xywh将边界框格式从 [x1, y1, x2, y2] 转换为 [x, y, w, h]utils/general.py
xywh2xyxy将边界框格式从 [x, y, w, h] 转换为 [x1, y1, x2, y2]utils/general.py
xywhn2xyxy将归一化 [x, y, w, h] 转换为像素 [x1, y1, x2, y2]utils/general.py
xyxy2xywhn将 [x1, y1, x2, y2] 转换为归一化 [x, y, w, h]utils/general.py
scale_boxes将边界框从一个图像尺寸缩放到另一个尺寸utils/general.py
clip_boxes将边界框裁剪到图像边界utils/general.py

来源: utils/general.py873-998

非极大值抑制

non_max_suppression 函数是一个关键的实用工具,用于过滤重复的检测结果。

来源: utils/general.py1010-1120

数据加载

数据加载工具为不同的输入类型创建适当的数据加载器

来源: utils/dataloaders.py detect.py170-179 val.py304-314 train.py285-322

其他重要工具

实用工具描述文件
colorstr格式化的彩色控制台输出utils/general.py
check_img_size确保图像尺寸是步长的倍数utils/general.py
increment_path创建唯一的输出目录utils/general.py
select_device配置计算设备utils/torch_utils.py
check_dataset验证数据集配置utils/general.py
init_seeds设置随机种子以实现可重现性utils/general.py
ModelEMA模型的指数移动平均utils/torch_utils.py
time_sync精确计时函数utils/torch_utils.py
配置文件性能剖析工具utils/general.py

来源: utils/general.py436-447 utils/general.py723-750 utils/general.py1234-1256 utils/torch_utils.py

总结

YOLOv5 的核心功能围绕三个主要操作:训练、推理和验证。这些操作由灵活的多后端系统支持,用于模型加载和执行,以及一套全面的实用工具,用于数据处理、边界框操作、非极大值抑制等。

这种架构使 YOLOv5 既强大又适应性强,支持从研究和开发到跨各种硬件平台的生产部署的各种用例。

来源: train.py1-988 detect.py1-439 val.py1-605 utils/general.py1-1355