本页面详细介绍了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 中以编程方式运行推理
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.pt | detect.py369 |
source | 输入源(文件/目录/URL/网络摄像头) | data/images | detect.py370 |
imgsz | 推理尺寸(像素) | 640 | detect.py372 |
conf_thres | 置信度阈值 | 0.25 | detect.py373 |
iou_thres | NMS IoU 阈值 | 0.45 | detect.py374 |
max_det | 每张图像的最大检测数 | 1000 | detect.py375 |
device | CUDA 设备或 CPU | '' (自动) | detect.py376 |
view_img | 显示结果 | 否 | detect.py377 |
save_txt | 将结果保存到 *.txt | 否 | detect.py378 |
save_csv | 将结果保存到 CSV | 否 | detect.py385 |
save_conf | 在 txt 标签中保存置信度 | 否 | detect.py386 |
save_crop | 保存裁剪后的检测框 | 否 | detect.py387 |
nosave | 不保存图像/视频 | 否 | detect.py388 |
classes | 按类别索引过滤 | 无 | detect.py389 |
agnostic_nms | 类别无关的 NMS | 否 | detect.py390 |
增强 | 增强推理 | 否 | detect.py391 |
half | 使用FP16半精度 | 否 | detect.py400 |
dnn | 使用OpenCV DNN进行ONNX推理 | 否 | detect.py401 |
vid_stride | 视频帧率步幅 | 1 | detect.py402 |
来源: detect.py368-403
YOLOv5 会自动选择最佳的计算设备进行推理(如果可用则选择 CUDA GPU,否则选择 CPU),或者您可以显式指定设备。
select_device 函数负责设备选择、CUDA 初始化和设备信息日志记录。
来源: utils/torch_utils.py114-148 detect.py165
在推理之前,图像会经过以下步骤进行预处理:
图示:图像预处理流程
来源: detect.py185-191 utils/dataloaders.py
模型推理后,YOLOv5 会应用非极大值抑制(NMS)来过滤冗余的边界框。
conf_thres,默认为 0.25)。iou_thres,默认为 0.45)。max_det,默认为 1000)。图示:非极大值抑制过程
来源: detect.py209-210 utils/general.py
YOLOv5 提供灵活的输出选项。
line_thickness、hide_labels 和 hide_conf 参数控制可视化。view_img 实时显示结果。来源: detect.py243-280 detect.py292-309
YOLOv5 为每次推理运行提供详细的性能指标。
为了优化推理性能
--half)。--imgsz)。来源: detect.py311-316 utils/torch_utils.py
以下是一个运行程序化推理和处理结果的完整示例。
来源: detect.py182-310
推理系统与 YOLOv5 的其他组件相连接。
推理系统设计灵活,易于集成到更大的应用程序和工作流程中。