菜单

推理

相关源文件

本页面详细介绍了YOLOv5的推理系统,说明了如何使用预训练模型或自定义模型对图像、视频和流进行目标检测。有关模型训练的信息,请参阅训练,有关模型性能验证的信息,请参阅验证

概述

YOLOv5 中的推理是指使用训练好的模型来检测新图像或视频中的对象。该系统支持各种输入源(图像、视频、网络摄像头、流)和模型格式(PyTorch、ONNX、TensorRT 等),并具有灵活的管道,可在不同硬件上高效进行推理。

图示:YOLOv5 推理系统概述

来源:detect.py69-321 hubconf.py16-103

运行推理

YOLOv5 提供了多种运行推理的方式,包括命令行界面、Python API 和 PyTorch Hub。

命令行界面

运行推理的最简单方法是使用 detect.py 脚本

来源:detect.py3-28 detect.py324-405

Python API

您也可以在 Python 中以编程方式运行推理

来源:detect.py69-321

PyTorch Hub

YOLOv5 模型可通过 PyTorch Hub 获得,方便集成

来源:hubconf.py16-103 hubconf.py106-135

推理管道

YOLOv5 的推理管道包含几个关键阶段,处理从输入到检测的整个过程。

图示:YOLOv5 推理管道详解

来源:detect.py69-321 detect.py151-310

来源处理

YOLOv5 通过专门的数据加载器处理各种输入源

图示:YOLOv5 推理中的来源处理

来源:detect.py151-180 utils/dataloaders.py

模型后端系统

YOLOv5 通过 DetectMultiBackend 类支持多种推理后端

图示:DetectMultiBackend 架构

来源:models/common.py detect.py164-168

关键推理参数

下表概述了控制推理行为的重要参数

参数描述默认来源
weights模型路径yolov5s.ptdetect.py369
source输入源(文件/目录/URL/网络摄像头)data/imagesdetect.py370
imgsz推理尺寸(像素)640detect.py372
conf_thres置信度阈值0.25detect.py373
iou_thresNMS IoU 阈值0.45detect.py374
max_det每张图像的最大检测数1000detect.py375
deviceCUDA 设备或 CPU'' (自动)detect.py376
view_img显示结果detect.py377
save_txt将结果保存到 *.txtdetect.py378
save_csv将结果保存到 CSVdetect.py385
save_conf在 txt 标签中保存置信度detect.py386
save_crop保存裁剪后的检测框detect.py387
nosave不保存图像/视频detect.py388
classes按类别索引过滤detect.py389
agnostic_nms类别无关的 NMSdetect.py390
增强增强推理detect.py391
half使用FP16半精度detect.py400
dnn使用OpenCV DNN进行ONNX推理detect.py401
vid_stride视频帧率步幅1detect.py402

来源: detect.py368-403

设备选择

YOLOv5 会自动选择最佳的计算设备进行推理(如果可用则选择 CUDA GPU,否则选择 CPU),或者您可以显式指定设备。

select_device 函数负责设备选择、CUDA 初始化和设备信息日志记录。

来源: utils/torch_utils.py114-148 detect.py165

图像预处理

在推理之前,图像会经过以下步骤进行预处理:

  1. 将图像调整到模型的输入尺寸(默认 640×640 像素)。
  2. 转换为 PyTorch 张量。
  3. 归一化(将像素值从 0-255 缩放到 0-1)。
  4. 可选的半精度(FP16)转换,以加快推理速度。
  5. 批处理以提高处理效率。

图示:图像预处理流程

来源: detect.py185-191 utils/dataloaders.py

非极大值抑制

模型推理后,YOLOv5 会应用非极大值抑制(NMS)来过滤冗余的边界框。

  1. 模型输出原始预测(边界框、置信度得分、类别概率)。
  2. 按置信度阈值过滤预测(conf_thres,默认为 0.25)。
  3. 使用 IoU 阈值应用 NMS(iou_thres,默认为 0.45)。
  4. 限制每个图像的最大检测数(max_det,默认为 1000)。
  5. 可以选择按特定类别进行过滤。

图示:非极大值抑制过程

来源: detect.py209-210 utils/general.py

输出处理

YOLOv5 提供灵活的输出选项。

可视化

  • 用边界框、标签和置信度分数标注图像/视频。
  • 通过 line_thicknesshide_labelshide_conf 参数控制可视化。
  • 使用 view_img 实时显示结果。

保存结果

  • 图像/视频:保存标注的图像或视频文件。
  • 文本文件:以 YOLO 或 Pascal VOC 格式保存检测结果。
  • CSV 文件:保存结构化结果以供进一步分析。
  • 剪裁:将检测到的对象提取为单独的图像文件。

来源: detect.py243-280 detect.py292-309

推理性能

YOLOv5 为每次推理运行提供详细的性能指标。

  • 预处理时间
  • 推理时间
  • NMS 处理时间

为了优化推理性能

  1. 根据速度/精度要求使用合适的模型大小(n/s/m/l/x)。
  2. 在兼容的 GPU 上启用半精度(--half)。
  3. 调整批处理大小以获得最佳吞吐量。
  4. 选择合适的推理尺寸(--imgsz)。
  5. 考虑使用 TensorRT 或 ONNX 进行优化部署。

来源: detect.py311-316 utils/torch_utils.py

程序化推理示例

以下是一个运行程序化推理和处理结果的完整示例。

来源: detect.py182-310

推理系统与 YOLOv5 的其他组件相连接。

  • 模型架构:推理系统加载并使用架构系统中定义的模型。有关详细信息,请参阅 模型架构
  • 数据加载:推理与训练和验证共享数据加载组件。有关更多信息,请参阅 数据加载
  • 模型导出:为了优化部署,模型可以导出为各种格式。有关导出过程,请参阅 模型导出

推理系统设计灵活,易于集成到更大的应用程序和工作流程中。