广告

YOLOv5 视频目标检测 Python 实现:从零到实战的完整教程

1. 目标与实战路线

任务场景与目标定义

在本教程中,我们聚焦YOLOv5视频目标检测场景中的应用,目标是通过Python 实现一个从零到实战的完整流程。通过对视频帧的实时推理与标注,帮助读者理解如何把一个深度学习模型落地到实际的视频分析任务中,达到实时性与<准确性的平衡。

学习路径与产物

整个路线从环境搭建开始,逐步进入数据准备模型加载与推理视频处理与可视化,直到对性能的评估与简单的优化思路。完成后将得到一个可直接运行的示例程序,能够对视频输入进行目标检测并在输出视频中显示检测结果。

2. 环境准备与依赖安装

Python 环境与虚拟环境

需要一个干净的Python 环境,推荐使用虚拟环境(如 venvconda)来隔离依赖。通过本节你将掌握如何创建并激活环境,这一步对稳定性可重复性尤为重要。

核心依赖与模型权重

本节将引导你安装<强>PyTorch、Ultralytics实现库,以及下载并加载YOLOv5权重。通过这些组件,可以实现视频推理结果可视化的基础能力。

# 安装核心依赖
pip install torch torchvision torchaudio
pip install ultralytics# 下载并准备权重(示例 yolov5s)
# 也可以在代码中直接通过模型名称加载
from ultralytics import YOLO# 加载权重文件(本地也可指定 yolov5s.pt 或其他权重)
model = YOLO('yolov5s.pt')

3. 数据准备与标注

数据来源与格式

视频目标检测常用的数据来源包括公开数据集与自采集视频。你可以基于COCO格式或自定义标注格式来组织标签,确保每个帧的目标有明确的类别与边界框信息。

标注工具与流程

建议使用如LabelImgCVAT等标注工具来完成标注工作,并在后续阶段对标注数据进行格式转换与检查,以确保在训练/评估阶段的稳定性。

4. 核心实现:从视频读取到推理结果

模型加载与推理流程

核心思路是先加载预训练权重,再对每一帧进行推理,把检测结果映射到帧上。通过这种方式,我们能在视频流中实现对多类目标的识别与定位。

import numpy as np
from ultralytics import YOLO# 加载模型权重
model = YOLO('yolov5s.pt')# 对单帧进行推理示例
# frame 是一个 BGR 顺序的 NumPy 数组,来自 OpenCV 等
frame = np.zeros((480, 640, 3), dtype=np.uint8)
results = model(frame)# results[0] 包含检测到的边界框、类别及置信度信息
print(results[0].boxes)

视频读取、推理与结果可视化

下面演示如何通过OpenCV读取视频、逐帧进行推理、并将标注结果输出到新的视频文件,同时在窗口中实时展示结果。

import cv2
import numpy as np
from ultralytics import YOLOmodel = YOLO('yolov5s.pt')
cap = cv2.VideoCapture('input.mp4')# 获取视频参数
fps = cap.get(cv2.CAP_PROP_FPS)
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))fourcc = cv2.VideoWriter_fourcc(*'mp4v')
out = cv2.VideoWriter('output.mp4', fourcc, fps, (width, height))while True:ret, frame = cap.read()if not ret:break# 推理并将结果绘制到帧上results = model(frame)annotated = results[0].plot(frame)out.write(annotated)cv2.imshow('YOLOv5 Video', annotated)if cv2.waitKey(1) & 0xFF == ord('q'):breakcap.release()
out.release()
cv2.destroyAllWindows()

5. 性能评估与扩展思路

评估指标与基准数据集

对视频目标检测的核心评估通常关注mAPIoU、以及FPS,以衡量检测准确度推理速度之间的权衡。使用公开数据集的基准可以帮助你对比不同实现的性能。

推理加速与模型裁剪

在需要提升推理速度时,可以考虑降低模型大小、采用TensorRTONNX等跨框架优化方案,以及通过量化/裁剪等方法降低计算量,从而实现更高的帧率与更低的延迟。

YOLOv5 视频目标检测 Python 实现:从零到实战的完整教程

广告

后端开发标签