介绍
让我们首先了解对象检测和对象跟踪。
对象检测: 它被定义为在图像或视频帧中定位和识别事物的过程。在此过程中,确定输入数据中是否存在大量对象或项目,以便在它们周围创建边界框来表示它们的位置。
例如,代表对象位置的边界框坐标,然后也确定其类别,如"猫"、"人行横道"、"鸟"等。甚至还有一个置信度分数来表达算法对发现的保证水平都是由物体检测技术提供的。
重要的是要记住,对象识别通常是在单个帧或图像上完成的,并且不考虑对象在连续帧中的移动或轨迹。
对象跟踪: 它的定义是通过多个视频帧跟踪特定对象的运动。基本上,其动机是准确地保持被跟踪对象的识别不变,即使它在视频中移动。该技术在监控、自动驾驶汽车和视频分析等场景中特别有用。
什么是 YOLO?
YOLO 简单地代表"你只看一次"。它是一种对象识别技术,可以一次性定位视频或图像中的多个对象。YOLO 致力于将图像划分为网格,并同时预测每个网格单元的边界框、类概率和置信度分数,这与重复扫描图像的典型检测算法不同。YOLOV5 用例的一些示例包括面罩检测、对象识别、速度计算器、车辆跟踪器等。
在本文中,我们将研究如何使用YOLOV5进行视频中的目标跟踪。
应遵循的步骤是:
导入必要的库
python
import torch
from IPython.display import Image, clear_output
from IPython.display import HTML
from base64 import b64encode
现在让我们开始克隆该项目所需的存储库。
克隆存储库
因此,最初我们需要使用以下命令访问 YOLOV5 的 Github 存储库。
python
!git clone - -recurse-submodules https: // github.com/mikel-brostrom/Yolov5_DeepSort_Pytorch.git
完成这一步后,我们需要根据克隆的存储库更改目录。
python
%cd Yolov5_DeepSort_Pytorch
现在,我们将安装依赖项。
python
%pip install - qr requirements.txt
现在,我们将获取一些系统信息来有效地运行该模型。
python
# 清空 outpt
clear_output()
# 系统信息
print(
f"Setup complete. Using torch {torch.__version__}
({torch.cuda.get_device_properties(0).name if torch.cuda.is_available() else 'CPU'})")
现在,我们将使用预训练的 YOLOv5 预训练模型,该模型是在 Crowded 人类数据集上训练的。
python
# 下载预先训练好的模型
!wget -nc https://github.com/mikel-brostrom/Yolov5_DeepSort_Pytorch/releases/download/v.2.0/crowdhuman_yolov5m.pt -O /content/Yolov5_DeepSort_Pytorch/yolov5/weights/crowdhuman_yolov5m.pt
现在,让我们获取一个视频并进行测试。
python
# 获取测试视频
!wget - nc https: // github.com/mikel-brostrom/Yolov5_DeepSort_Pytorch/releases/download/v.2.0/test.avi
在此步骤之后,我们将提取视频开始部分的几秒钟。
python
# 提取2秒的视频
!y | ffmpeg - ss 00: 00: 00 - i test.avi - t 00: 00: 02 - c copy out.avi
现在,让我们获取要进行对象跟踪的源视频。
python
!python track.py - -yolo_model / content/Yolov5_DeepSort_Pytorch/yolov5/weights/yolov5n.pt - -source out.avi - -save-vid
为了对视频运行对象跟踪并显示它,我们首先需要将其转换为 MP4 格式。我们使用"ffmpeg"来完成此任务。
python
!ffmpeg - i / content/Yolov5_DeepSort_Pytorch/runs/track/exp3/out.avi output.mp4
现在,为了显示视频,我们使用 HTML 播放器。HTML 视频元素将首先读取 MP4 视频文件的二进制内容,然后使用 base64 对其进行编码,然后创建数据 URL。
python
mp4 = open('output.mp4','rb').read()
data_url = "data:video/mp4;base64," + b64encode(mp4).decode()
# 用HTML显示
HTML("""
<video controls>
<source src="%s" type="video/mp4">
</video>
""" % data_url)
输出:
结论 :
Yolov5 是用于对象检测和跟踪的最佳且高效的模型之一,在现实世界的应用中发挥着重要作用,例如监控和安全、特斯拉等自动驾驶车辆、体育分析等。为了获得更多增强功能,我们还可以利用此模型用于自定义数据集训练。