导 读
本文主要介绍如何使用Yolo-V5 DeepSORT实现多目标检测与跟踪。(公众号:OpenCV与AI深度学习)
背景介绍 目标跟踪是一种利用检测到对象的空间和时间特征在整个视频帧中跟踪检测到对象的方法。本文中,我们将与YOLOv5一起实现一种最流行的跟踪算法DeepSORT,并使用MOTA和其他指标在MOT17数据集上进行测试。
目标跟踪简介
深度学习中的跟踪是使用对象的空间和时间特征预测整个视频中对象位置的任务。从技术上讲,跟踪是获取初始检测集,分配唯一的 id,并在整个视频源的帧中跟踪它们,同时保持分配的 id。目标跟踪通常可以分为两步:
- 目标定位检测模块:
该模块负责使用一些对象检测器(如 YOLOv4、CenterNet 等)检测和定位画面中的对象。
- 运动预测器:
该模块负责使用其过去的信息预测对象的未来运动 【1】目标跟踪的必要性 您可能会疑惑,为什么我们需要对象跟踪?为什么我们不能只使用物体检测?需要目标跟踪的原因很多,例如:
- 对象检测失败时的跟踪: 在许多情况下,对象检测器可能会失败。但是如果我们有一个对象跟踪器,它仍然能够预测帧中的对象。例如,考虑一个视频,其中一辆摩托车穿过树林,我们应用检测器来检测摩托车。这是在这种情况下会发生的情况,每当自行车被树遮挡或重叠时,检测器就会失效。但是,如果我们有一个跟踪器,我们仍然能够预测和跟踪摩托车。
- ID 分配: 在使用检测器时,它只显示对象的位置,如果我们只查看输出数组,我们将不知道哪个坐标属于哪个框。另一方面,跟踪器为其跟踪的每个对象分配一个 ID,并保持该 ID 直到该对象在该帧中的生命周期。
- 实时预测: 跟踪器非常快,通常比检测器快。由于这个特性,跟踪器可以在实时场景中使用,并且在现实世界中有很多应用。
【2】目标跟踪的应用
目标跟踪可以有许多实际应用:- 交通监控:
跟踪器可用于监控交通和跟踪道路上的车辆。它们可用于判断交通、检测违规行为等等。
- 体育运动/赛事:
跟踪器也可用于体育运动,如球跟踪或球员跟踪。这反过来又可以用来检测犯规、比赛中的得分手等等。
- 多摄像头监控:
- 在跟踪中,可以应用多摄像头监控。在这方面,核心思想是重新识别。如果一个人在一个带有 id 的摄像机中被跟踪,并且该人走出画面并在另一台摄像机中返回。然后该人将保留他们以前的相同身份。此应用程序可以帮助重新识别重新出现在不同相机中的对象,并可用于入侵检测。
【3】目标跟踪的类型
跟踪器可以根据许多类别进行分类,例如跟踪方法或要跟踪的对象数量。下面我们将通过一些示例来了解不同的跟踪器类型。- 单目标跟踪:
即使帧中存在许多其他对象,这些类型的跟踪器也仅跟踪单个对象。它们首先在第一帧中初始化对象的位置,然后在整个帧序列中跟踪它。这些类型的跟踪方法非常快。其中一些是使用传统计算机视觉构建的 CSRT、KCF 等等。然而,现在证明基于深度衰减的跟踪器比传统跟踪器准确得多。例如,GOTURN 和 SiamRPN 是基于深度学习的单目标跟踪器的示例。
- 多目标跟踪:
这些类型的跟踪器可以跟踪帧中存在的多个对象。与传统跟踪器不同,多个对象跟踪器或 MOT 是在大量数据上训练的。因此,它们被证明更准确,因为它们可以同时跟踪多个对象甚至不同类别的对象,同时保持高速。其中一些算法包括 DeepSORT、JDE 和 CenterTrack,它们是非常强大的算法,可以处理跟踪器面临的大部分挑战。
- 通过检测跟踪:
- 目标检测器检测帧中的对象,然后跨帧执行数据关联以生成轨迹从而跟踪对象的跟踪算法类型。这些类型的算法有助于跟踪多个对象并跟踪框架中引入的新对象。最重要的是,即使对象检测失败,它们也有助于跟踪对象。
- 无检测跟踪:
- 跟踪算法的类型,其中手动初始化对象的坐标,然后在进一步的帧中跟踪对象。如前所述,这种类型主要用于传统的计算机视觉算法。
DeepSORT简介 DeepSORT 是一种计算机视觉跟踪算法,用于在为每个对象分配 ID 的同时跟踪对象。DeepSORT 是 SORT(简单在线实时跟踪)算法的扩展。DeepSORT 将深度学习引入到 SORT 算法中,通过添加外观描述符来减少身份切换,从而提高跟踪效率。要了解 DeepSORT,首先让我们看看 SORT 算法是如何工作的。
【1】简单的在线实时跟踪(SORT) SORT 是一种对象跟踪方法,其中使用卡尔曼滤波器和匈牙利算法等基本方法来跟踪对象,并声称比许多在线跟踪器更好。SORT 由以下 4 个关键组件组成:
- 检测: 这是跟踪模块的第一步。在此步骤中,对象检测器检测帧中要跟踪的对象。然后将这些检测传递到下一步。FrRCNN、YOLO 等检测器是最常用的。
- 估计: 在这一步中,我们将检测从当前帧传播到下一帧,使用恒速模型估计下一帧中目标的位置。当检测与目标相关联时,检测到的边界框用于更新目标状态,其中速度分量通过卡尔曼滤波器框架得到最优解。
- 数据关联: 我们现在有了目标边界框和检测到的边界框。因此,成本矩阵被计算为每个检测与来自现有目标的所有预测边界框之间的交并比 (IOU) 距离。分配是使用匈牙利算法优化解决的。如果检测和目标的 IOU 小于称为 IOUmin 的某个阈值,则该分配被拒绝。该技术解决了遮挡问题并有助于维护 ID。
- 跟踪目标ID的创建与删除: 该模块负责ID的创建和删除。根据 IOUmin 创建和销毁唯一身份。如果检测和目标的重叠小于IOUmin,则表示未跟踪目标。如果没有为 TLost 帧检测到轨道,则会终止轨道,您可以指定 TLost 的帧数。如果一个对象重新出现,跟踪将隐含地在一个新的身份下恢复。
SORT 算法做目标跟踪非常成功,可以击败许多最先进算法 。目标检测器为我们提供检测,卡尔曼滤波器为我们提供跟踪,匈牙利算法执行数据关联。那么,为什么我们还需要 DeepSORT?
【2】深度排序
SORT 在跟踪精度和准确度方面表现非常出色。但是 SORT 返回具有大量 ID 开关的轨道,并且在遮挡的情况下失败。这是因为使用了关联矩阵。 DeepSORT 使用结合了运动和外观描述符的更好的关联度量。DeepSORT 可以定义为跟踪算法,它不仅基于对象的速度和运动,而且还基于对象的外观来跟踪对象。
出于上述目的,在实施跟踪之前离线训练一个具有良好区分性的特征嵌入。该网络在大规模人员重新识别数据集上进行训练,使其适用于跟踪上下文。在 DeepSORT余弦度量学习方法中训练深度关联度量模型。根据 DeepSORT 的论文,“余弦距离考虑了外观信息,当运动的判别力较低时,这对于在长期遮挡后恢复身份特别有用。” 这意味着余弦距离是一种度量,可帮助模型在长期遮挡和运动估计失败的情况下恢复身份。使用这些简单的东西可以使跟踪器更加强大和准确。
【3】DeepSORT实现
DeepSORT 可以用于各种现实生活中的应用程序,其中之一就是体育运动。在本节中,我们将在足球和 100m短跑等运动中实现 DeepSORT。与 DeepSORT一起,YOLOv5 将用作检测器来检测所需的对象。该代码是在 Tesla T4 GPU 上的 Google Colab 上实现的。
YOLOv5实现:
首先,我们将克隆 YOLOv5 官方存储库以访问功能和预训练的权重。
代码语言:javascript复制!mkdir ./yolov5_deepsort
!git clone https://github.com/ultralytics/yolov5.git
安装requirements.
代码语言:javascript复制� ./yolov5
!pip install -r requirements.txt
现在我们已经准备好 YOLOv5,让我们将DeepSORT与它集成。
集成DeepSORT
同样,我们将克隆 DeepSORT 的官方实现以访问其代码和功能。
代码语言:javascript复制!git clone https://github.com/nwojke/deep_sort.git
最后,一切就绪!但是 DeepSORT 将如何与检测器集成呢?YOLOv5detect.py file负责推理。我们将使用该detect.py文件并将使用它的 DeepSORT 功能添加到新文件中detect_track.py.
代码语言:javascript复制%%writefile detect_track.py
# YOLOv5