1. 引言
中国是世界上最大的发展中国家,城市化进程快速推进,城市人口不断增加,城市规模不断扩大。根据《第七次全国人口普查》[1]显示,2020年,我国城镇总人口达到90,199万人,城镇化率达到63.89%。随着城市化的加速发展,城市交通管理、安保和智慧城市建设等领域面临着越来越多的挑战和需求。其中,行人作为城市交通和安保的重要组成部分,对于城市的运行和发展具有重要的影响。因此,如何对行人进行有效的检测、定位、跟踪和识别,是城市交通管理、安保和智慧城市建设等领域的关键技术问题之一。然而,由于道路复杂多变的环境条件、行人密度高、遮挡问题等因素,当前的行人检测和跟踪技术在实际应用中仍存在一定的局限性。因此,研究高效、准确、实时的行人定位和追踪系统具有重要的研究意义和实用价值。
近年来,计算机视觉和人工智能领域的发展为行人定位和追踪技术的研究提供了新的机遇。基于深度学习的算法和框架已经成为了行人定位和追踪的主流方法。深度学习能够从大量的数据中自动学习有效的特征表示,并利用强大的分类器或回归器来实现目标检测、跟踪和识别。因此,行人定位和追踪技术作为计算机视觉和人工智能领域的一个重要研究方向,有着广泛的应用前景,如:视频监控,人机交互,无人驾驶等[2]。随着科技的不断发展,无人驾驶技术的应用前景将越来越广阔。未来,无人驾驶技术将在更多的领域得到应用,例如,在农业、医疗、航空等领域。而行人定位和追踪技术是无人驾驶技术的重要组成部分,能够有效地保障行人的安全和便利。此外,行人定位和追踪技术还可以与行人识别和行人重识别技术相结合,实现跨摄像头跨场景下行人的识别与检索。这对于城市交通管理、安保智慧城市建设等领域具有重要的价值。行人定位与追踪技术是智慧城市安防的核心支撑,其性能直接影响视频监控、人流统计的准确性。
尽管近年来行人定位和追踪技术取得了长足的进步,特别是利用深度学习的方法取得了令人满意的效果,但是在实际应用中仍然面临一些挑战,例如:
道路复杂多变的环境条件,如光照变化、天气变化、遮挡等,给行人定位和追踪带来困难;
行人密度高、运动快速、姿态多样、外观变化等,给行人特征提取和匹配带来困难;
行人跨摄像头跨场景下的识别与检索,需要考虑不同摄像头之间的视角变化、分辨率变化、时间差异等因素;
行人定位和追踪系统的实时性、准确性、鲁棒性等性能指标还有待提高。
因此,如何克服这些挑战,设计并实现一个高效、准确、实时的行人定位和追踪系统,是本课题需要解决的核心问题。
对此,本研究提出方案来展开研究,详细来说由以下几部分组成:
行人定位与跟踪:使用计算机视觉和人工智能相关的算法和框架,实现对行人的定位和跟踪。本文采用YOLOv5 [3]算法进行行人检测,DeepSORT [4]算法进行行人跟踪。
目标运动轨迹绘制:通过对行人进行定位和跟踪,绘制出目标运动轨迹。
行人重定位:实现行人重定位,即在行人从画面中消失或重新进入画面时,能够准确地重新定位和跟踪该行人。本文采用ResNet50 [5]算法进行行人重识别。
视频检测:支持从本地导入视频,对视频中的行人进行检测、定位、跟踪和绘制运动轨迹。
实时检测:支持实时调用摄像头进行行人检测、定位、跟踪和绘制运动轨迹。
系统界面设计:使用QT制作系统界面,能够直观地显示检测、定位、跟踪和运动轨迹的结果,并且具备相应的交互性和易用性。
2. 研究方法
2.1. 目标行人检测
目标行人检测是指在给定的图像或视频中,通过计算机视觉算法自动识别出行人在图像中的位置和边界框。目标行人检测是行人追踪的第一步,因此准确性直接影响整个行人追踪系统的效果。准确的目标行人检测算法可以提高行人追踪系统的准确性和稳定性。其中,目前最为流行的目标检测算法便是YOLO (You Only Look Once) [3]算法。
YOLOv5 (You Only Look Once version 5)是一种端到端的目标检测算法。它的核心思想是将目标检测问题转化为回归问题,将图片分割为SxS个网格,每个网格负责预测K个边界框和它们的置信度。YOLOv5相较于其他目标检测算法,如Faster R-CNN和SSD,具有更高的实时性和准确性。
如图1所示,YOLOv5的网络架构主要包括三个模块:backbone,neck和head。这些模块在目标检测任务中起到不同的作用,共同构成了整个网络结构。
Backbone (主干网络)是YOLOv5网络结构的核心部分,负责从输入图像中提取特征。YOLOv5采用了CSPDarknet53 [7]作为主干网络。CSPDarknet53基于Darknet53设计,加入了Cross Stage Hierarchical (CSH)模块,用于在不同层次之间实现特征融合。这种设计提高了网络的特征提取能力和计算效率,有助于检测不同尺度的目标。
Neck (颈部网络)是YOLOv5网络结构中用于进行特征融合的部分。在YOLOv5中,颈部网络主要包括PANet (Path Aggregation Network) [8]和SPP (Spatial Pyramid Pooling) [9]模块。PANet负责将不同层次的特征图融合在一起,使模型能够利用多尺度特征进行检测。SPP模块通过对特征图进行多尺度池化操作,增强了模型对于不同尺度目标的检测能力。颈部网络的设计使YOLOv5在处理多尺度、多姿态、遮挡等复杂场景时具有较高的检测性能。
Figure 1. YOLOv5 network architecture diagram
图1. YOLOv5网络架构图
Head是YOLOv5网络结构的最后部分,负责将提取到的特征转化为具体的目标检测结果。YOLOv5的头部网络采用了anchor-free的设计,简化了网络结构,减少了超参数数量,降低了模型复杂度。头部网络根据提取到的特征图,预测目标的类别、位置和尺寸等信息,生成最终的检测结果。
通过这三个模块的协同作用,YOLOv5在目标检测任务中实现了高效且准确的检测性能。在行人检测任务中,这些模块共同提高了模型对不同尺度、多姿态、遮挡等复杂场景的检测能力。
2.2. 目标行人跟踪
目标行人跟踪算法DeepSORT [4]的原理、基于卡尔曼滤波和匈牙利算法[10]的多目标跟踪机制,分析了DeepSORT算法在行人跟踪任务上的性能和优势。
DeepSORT (Deep Association Metric Learning for Multiple Object Tracking)算法是一种基于深度学习的多目标跟踪算法。DeepSORT在SORT (Simple Online Realtime Tracking)算法的基础上,引入了一个深度学习模型来计算特征空间中目标之间的距离。DeepSORT算法主要包括两个部分:卡尔曼滤波和匈牙利算法。
卡尔曼滤波(Kalman Filter)是一种线性最优估计算法,用于预测和估计系统状态。在DeepSORT中,卡尔曼滤波被用于预测目标在连续帧之间的位置变化。通过对每个目标的状态进行建模,卡尔曼滤波可以根据历史信息预测目标在下一帧中的位置,从而减少误匹配的可能性。
匈牙利算法(Hungarian Algorithm)是一种用于解决最优分配问题的算法。在DeepSORT中,匈牙利算法被用于将新检测到的目标与已跟踪的目标进行关联。通过计算目标间的成本矩阵,匈牙利算法可以找到最优的目标关联方式,从而保证目标在连续帧中的连续跟踪。
DeepSORT算法在行人跟踪任务上展现出显著的优势。首先,算法具有较强的鲁棒性,基于深度学习的特征提取使其能够适应遮挡、光照变化等复杂场景。其次,DeepSORT能够在实时视频流中进行多目标跟踪,满足实时性能要求。最后,通过引入卡尔曼滤波和匈牙利算法,该算法在多目标跟踪任务上具有较高的精确度。综上所述,DeepSORT算法在行人跟踪任务上具有显著的优势。
2.3. 行人重识别
行人重识别算法ResNet50 [5]的原理、网络结构以及其在行人重识别任务上的优势。通过对ResNet50算法的分析,为后续实现行人重定位提供理论基础。
行人重识别(Person Re-Identification, Person Re-ID)是指在不同场景下,通过图像或视频序列识别出同一个行人[11]。行人重识别任务主要包含特征提取和相似度度量两个步骤。传统的方法思路为手工提取图像来学习最佳的相似度度量。然而,在处理复杂场景下的大数据量任务时,传统方法达到的效果有限。目前,基于深度学习的方法已成为行人重识别任务的主要求解方法。基于深度学习的行人重识别方法主要分为深度度量学习、局部特征学习、生成对抗学习和序列特征学习。
2.3.1. 深度度量学习
通过学习一个嵌入空间来实现行人重识别的,其目标是让同一身份的行人在嵌入空间中的距离更近,不同身份的行人在嵌入空间中的距离更远。深度度量学习方法的优点在于能够准确地区分行人身份,具有较高的识别准确率。三元组损失(Triplet loss) [12]是行人重识别任务中使用最广泛的深度度量损失之一,该方法学习一个特征空间,使得同一行人的特征点更加接近,不同行人的特征点更加远离。然而,Triplet loss方法的缺点在于,难以选择合适的三元组,如果选取不好容易导致模型性能下降。传统的三元组损失在训练期间随机从训练集中选择三个图像,这可能导致简单的样本组合,并缺乏难样本组合的训练,使得训练模型的泛化能力降低。为了解决三元组损失方法中的缺陷,研究者们提出了四元组损失(Quadruplet loss) [13]。该方法在三元组损失的基础上,引入了第四个样本,称为负负样本。四元组损失的目标是使正样本之间的距离更近,负样本之间的距离更远,同时使正负样本之间的距离差值大于某个阈值。这种方法可以有效地选择难样本,并使训练过程更具挑战性,从而提高模型的泛化能力。
2.3.2. 局部特征学习
通过提取行人图像的局部特征来实现行人重识别的,它利用了行人图像中局部区域的信息,通过组合不同的局部特征来表示一个行人的身份。局部特征学习方法的优点在于具有较好的鲁棒性,对于遮挡和姿态变化有较好的适应性。其中一种基于局部特征学习的方法是Dual Part-Aligned Representation (DPAR) [14],该方法将行人图像分成两个部分:上身和下身。然后,使用两个不同的卷积神经网络来提取上下身的特征。在特征提取后,使用一个对齐模块来将两个特征向量对齐,从而获得最终的特征表示。该方法可以捕捉不同行人的部位差异,从而提高行人重识别的准确性。
2.3.3. 生成对抗学习
通过训练一个生成器和一个判别器来实现行人重识别的,其目标是让生成器生成的假样本尽可能地接近真实样本,同时让判别器能够区分真假样本。生成对抗学习方法的优点在于能够生成更多样的行人图像,从而提高模型的泛化能力。Chen等人提出了一种联合生成对抗和对比学习的方法(GCL) [15],用于无监督行人重识别。在这个方法中,通过一个生成模型来生成行人图像,同时使用一个对比模型来对生成的图像进行评估。生成模型和对比模型共享一些参数,并通过对抗训练来使生成模型生成更具挑战性的图像,从而提高对比模型的准确性。该方法不需要对相似度度量进行任何特定的假设,可以在缺乏标注数据的情况下进行训练,这使得它可以在更广泛的应用场景中使用。
2.3.4. 序列特征学习
通过学习行人轨迹序列来实现行人重识别的,其目标是将行人在不同时间段内的特征表示连接起来,形成一个序列特征表示。序列特征学习方法的优点在于能够考虑行人在不同时间段内的姿态和动态信息,从而提高行人重识别的准确率。其中一种基于序列特征学习的方法是STA (Spatial-Temporal Attention) [16],用于基于视频的大规模行人重识别。STA方法采用了注意力机制,以强调视频序列中的关键帧和空间区域,并利用这些关键帧和区域来进行重识别。他们使用一个空间注意力模块来强调行人的身体部位和行人之间的空间关系,使用一个时间注意力模块来强调视频序列中的关键帧和时间上的动态信息。该方法可以有效地处理视频序列数据,并在大规模行人重识别数据集上实现了87.7%的mAP值。
3. 设计架构
基于视觉的行人定位和追踪系统主要包括以下几个模块:行人检测模块,行人跟踪模块,行人重识别模块,视频流处理模块,用户交互界面模块。系统的主要架构如图2所示。
Figure 2. Architecture diagram of a vision-based pedestrian localization and tracking system
图2. 基于视觉的行人定位和追踪系统架构图
该系统在整体设计上可以主要分为两种模式:多目标行人跟踪模式和行人重识别模式。本章将详细描述这两种模式下系统的工作流程和关键技术,以及用户界面的设计。在多目标跟踪模式中,系统可以检测和追踪视频中的多个行人,为追踪到的每一个行人匹配一个独立的ID,同时进行实时的行人计数,并绘制出所有跟踪对象的运动轨迹。在行人重识别模式中,系统可以通过从本地导入目标行人图片,对特定的行人进行识别和追踪,并绘制其运动轨迹。
4. 系统实现和测试
随着人工智能技术发展,基于视觉的行人定位和追踪系统需求广泛,该系统旨在实现精准行人检测、多目标追踪,同时具备行人重识别、运动轨迹绘制等功能,可应用于安全监控、人流统计、智能交通等领域。其主要需求涵盖行人检测、多目标追踪、实时计数、目标重识别、轨迹绘制等核心功能,还提供轨迹绘制长度、检测框大小、置信度阈值和交并比阈值等用户自定义设置,以及帧率实时显示和检测过程管理(暂停、继续、播放)功能。系统有两种运行模式,多目标跟踪模式下用YOLOv5和DeepSORT模型检测追踪、绘制轨迹并实时统计人数,行人重识别模式用YOLOv5检测并通过重识别模型追踪用户所选目标及绘制轨迹,此外系统还需满足实时性、稳定性和易用性等非功能需求,具体的功能、非功能及性能需求分析将在后续小节详述。
4.1. 实验环境
本文采用Python作为编程语言,以PyTorch为深度学习框架,借助PySide2 (连接QT界面)和QT Designer (设计系统界面)进行界面开发,使用PyCharm Community Edition 2020 3.5作为开发工具,计算设备包括训练用GPU (如RTX 3080)、高清摄像头、Intel i5-9300H CPU等,在该开发和运行环境下实现了基于视觉的行人定位和追踪系统,且通过公开数据集(如Market-1501数据集) [6]和现实场景数据测试评估,证明系统具备良好性能和鲁棒性。
4.2. 系统实现
4.2.1. 用户交互
用户交互界面设计的目标是让用户能够方便地访问和操作系统的所有功能。在设计用户交互界面时,我们注重界面的直观性和易用性,以便用户能够快速理解和使用系统。界面设计的主要部分包括:视频源选择,模式选择,目标行人图片导入,启动或停止视频播放,检测参数动态调节,以及追踪结果显示。本系统主要使用了Pyside2作为GUI库来创建用户界面。用户操作界面的设计主要分为两个模式:多目标行人跟踪模式和目标行人重识别模式。
如图3所示,在多目标行人跟踪模式下,用户操作界面会实时显示系统检测结果,并在右上角实时计算并更新帧率(FPS)。在本系统中,FPS的计算方式是,每次获取一帧视频时,都会记录开始时间,然后调用多目标行人跟踪模型DeepSORT对当前帧视频进行处理,并记录处理结束的时间,最后计算出,并使用Pyside2的setText()函数将FPS实时显示到对应的界面模块上。此外,系统实现了每处理一定数量的帧后,就计算和更新当前的FPS显示。这样既能实时反馈视频处理的速度,又避免了频繁更新带来的计算开销。用户操作界面的setting模块下,用户可以通过点击对于的按钮(Pyside2中的PushButton控件),选择从本地文件导入视频(.mp4或.avi)或者从IP摄像头连接边缘设备获取视频流。除此之外,在setting模块下,本系统通过使用Pyside2的ValueChanged()函数以及connect()函数,实现了在系统运行过程中动态调整行人检测参数设置,包含了检测框大小设置(对应UI中的Box Size模块)行人检测置信度阈值设置(对应UI中的Confidence Threshold模块),行人检测交并比阈值设置(对应UI中的IOU Threshhold模块)以及行人运动轨迹长度设置(对应UI中的Track Length模块)。此外,多目标行人跟踪模式下的Statistics模块下通过获取每一帧DeepSORT模型处理的结果并使用Pyside2的addItem()函数将该帧视频检测到的任务书了实时更新到该模块上。除了允许用户自定义调节检测参数,该用户界面还能同时允许用户通过点击队友的PushButton控件对检测的视频流进行暂停,继续和提前终止操作。如果输入视频流是本地导入视频,用户界面还会实时更新视频进度条以达到更好的视觉效果。
GUI交互与算法参数的绑定通过PySide2的信号–槽机制实现:
Figure 3. Multi-target pedestrian tracking user interface
图3. 多目标行人跟踪用户操作界面
如图4所示,在目标行人重识别模式下,用户操作界面的setting模块下同样支持用户自定义动态调节行人检测参数,并能实时显示帧率。除此之外,用户也能灵活对行人重识别检测进行暂停,继续和终止等操作。与图4.2.1中的界面设计不同的是,在目标行人重识别模式下,用户需要在选择输入检测视频流之前先通过点击Person Re-ID模块下的PushButton控件加载检测目标(.jpg或.png),然后检测目标图像会被显示到用户操作界面进行可视化,系统才能正常进行对该目标的重识别检测。
Figure 4. Target pedestrian re-identification user interface
图4. 目标行人重识别用户操作界面
4.2.2. 视频流处理
视频流处理模块是整个系统的基础。首先,它接收从文件或摄像头获取的视频流。然后,它将视频流分解为帧序列,并将每一帧作为独立的图像传递给行人检测模块。这个模块的设计和实现包括了视频读取、播放、暂停、继续以及进度更新等操作。
视频流处理模块首先通过用户的点击用户界面下相应的PushButton控件来选择从本地导入一个视频文件或者打开IP摄像头连接边缘设备捕获实时视频流。在成功获取视频帧之后,系统会将当前视频帧传递给对应的检测模型进行处理。如果当前系统模式是多目标行人检测模式,视频帧则会被传递到多目标行人检测模块下进行处理,并返回处理完的视频帧,即在原始视频帧上通过opencv的rectangle()函数和line()函数分别会指出行人检测框和行人运动轨迹后的视频帧;如果当前系统模式是目标行人重识别模式,视频帧同样会被传递到该模块下进行处理并返回处理完毕的视频帧。在成功处理完当前视频帧后,该系统会将处理过后的视频帧显示到用户界面上。这一步需要获取输入的视频帧的尺寸(高度和宽度)和用户界面下对应的QT控件的尺寸。然后,根据比例调整视频帧的尺寸,以便它可以适应目标控件的尺寸,同时保持视频帧的长宽比。最后通过Pyside2的QImage类将调整大小后的视频帧转换为Qt可以处理的格式显示到用户界面上。在完成视频流的显示之后,该系统需要更新视频进度条以同步检测处理进度。
视频流处理流程为:
本地视频通过cv2.VideoCapture (video_path)读取,每帧格式为(H, W, 3)的BGR矩阵;
调用resize_frame函数将帧调整为YOLOv5输入尺寸(640 × 640),通过cv2.resize (frame, (640, 640))实现;
处理后的帧通过Qimage (frame.data, W, H, QImage.Format_BGR888)转换为Qt格式,再通过label.setPixmap (QPixmap.fromImage())显示。
视频进度条更新实现过程如下:首先绑定对应的控件(在QT中是QProgressBar),然后通过opencv的CAP_PROP_FRAME_COUNT()方法获取输入视频的总帧数(),在每次完成一帧视频流的处理后将计数器()的值加1,记录当前已经处理的视频帧的数量,最后用计数器的值与总帧数的比例乘以进度条的最大长度()获取当前进度条的长度()。具体的计算公式如下:
最后,系统会动态检测视频流是否被暂停或者终止,以判断是否需要继续获取下一帧视频流并进行新一轮的处理和显示。
4.2.3. 行人检测
行人检测模块的核心任务是在每一帧图像中准确且快速地识别出行人。在实现这个目标的过程中,我们选择了YOLOv5作为我们的行人检测算法。YOLOv5 (You Only Look Once version 5)是一种创新且极其高效的目标检测方法,它在保证了检测精度的同时,也能实现高速的检测,满足了我们系统对实时性的需求。
YOLOv5的工作原理是将输入的图像划分为一系列的网格单元,然后在每个网格单元上预测多个边界框和与之相关的类别概率,这种方法允许模型在一个单独的前向传播过程中完成整个目标检测任务。边界框的预测包括框的中心位置,宽度和高度,以及每个类别的置信度。YOLOv5的预训练模型支持对包括行人之类的80个类别进行预测,在本系统中我们只需要预测行人(person)这个类别,所以极大地减少了模型的计算量。这些预测结果之后会被送入非极大值抑制(NMS)的处理阶段。非极大值抑制是一种用于消除多余和重复检测的技术。简单来说,NMS通过计算两个预测框之间的交并比(IoU: Intersection over Union)来评估它们的相似性,并根据预定的阈值来决定是否保留或丢弃某个预测框。
非极大值抑制(NMS)首先根据置信度(confidence)对所有预测框进行排序,置信度最高的框被选为参考框。然后计算参考框与其他所有框的IoU。IoU是两个框的交集面积与并集面积的比值。如果任何其他框与参考框的IoU超过预设阈值(例如0.5),则将其删除。这是因为高IoU值意味着两个框高度重叠,它们可能是对同一个物体的重复检测。最后一直重复上面两步直到所有框都被作为参考框处理过,或者没有更多的框可以删除后结束。通过这种方式,非极大值抑制确保了我们的模型只保留最有可能的预测,消除了重复的和过度的预测,从而使得目标检测结果更加精确和清晰。
在本系统的行人检测模块中,系统会对于每一帧视频流首先进行预处理,将其调整为YOLOv5模型需要的输入尺寸,并对像素值进行归一化。然后,我们将处理过的帧通过YOLOv5模型进行预测,模型将返回一系列的预测边界框和对应的类别概率。我们将设置一个阈值来过滤出那些置信度低于阈值的预测结果。最后,我们将保留下来的预测结果(行人的边界框在当前视频帧的坐标位置和大小)储存在一个列表里,以此完成行人检测。在后续的视频帧处理中,多目标行人检测模块和目标行人重识别模块可以获取该列表以进行进一步的检测。
为了提升检测效率,我们选择了YOLOv5s,这是YOLOv5家族中最小但同时也是最快的模型。尽管其性能略低于其它更大的版本,但YOLOv5s仍然提供了足够的精度以满足我们的需求,并且它的高速性使得我们的系统能够在实时视频流上进行行人检测,从而实现实时监控。
4.2.4. 多目标行人跟踪
多目标行人跟踪是我们基于视觉的行人定位和追踪系统的关键功能之一,它基于深度学习的目标检测算法YOLOv5和目标跟踪算法DeepSORT进行实现。多目标行人跟踪模块接收行人检测模块的输出,对每一个检测到的行人进行追踪。我们采用了DeepSORT (Deep Association Metric Learning for Object Tracking)算法,这是一种高效的多目标追踪算法。它是SORT (Simple Online and Real-time Tracking)算法的扩展。DeepSORT通过引入深度学习的特征提取方法,增加了对目标外观的识别,解决了SORT在处理目标遮挡和相互交叉等复杂场景时的问题。
DeepSORT的主要思想是结合目标运动信息(即目标在连续帧之间的移动和速度)和目标外观信息(即目标的视觉特征)来进行目标的关联和跟踪。DeepSORT通过一个预训练的深度神经网络提取目标的视觉特征,再将这些特征输入到一个度量学习模型中,以计算不同目标之间的相似度。然后,DeepSORT使用这些相似度以及目标的运动信息,通过卡尔曼滤波(Kalman Filter),匈牙利算法(Hungarian Algorithm)以及级联匹配(Matching Cascade)机制进行目标的跟踪。
级联匹配是DeepSORT中的一种策略,用于处理未匹配的跟踪和检测。在每一帧中,我们首先通过卡尔曼滤波预测目标的位置,然后使用匈牙利算法进行匹配。如果有一些跟踪和检测没有被匹配,我们就使用级联匹配。级联匹配的基本思想是,对于每一个未匹配的跟踪,我们从时间最近的检测开始,如果该检测和跟踪的马氏距离(Mahalanobis Distance)小于一个阈值,并且这个检测没有被其他跟踪匹配,那么我们就将这个检测和跟踪进行匹配。级联匹配确保了自上次更新以来经过的时间最长的轨迹首先被分配给检测项,而且每个检测只能被分配一次。马氏距离被用作衡量预测状态和新检测状态之间的不相似度。在DeepSORT的级联匹配中,马氏距离用于测量预测的目标状态(通过卡尔曼滤波器得到)和检测到的目标状态之间的距离。这样可以考虑目标状态的不确定性和目标状态之间的相关性,使得匹配更为准确。
YOLOv5输出的边界框坐标(x, y, w, h)通过detect_results列表传递给DeepSORT的update()函数,该函数返回包含跟踪ID和更新后边界框的tracks对象。级联匹配的阈值参数设为0.8,通过config.yaml文件配置。
4.2.5. 目标行人重识别
在行人重识别模式中,系统需要识别并追踪指定的行人。我们引入了行人重识别模块来实现这个功能。如2.3小节所示,目前基于深度学习的行人重识别方法大致可以分为深度度量学习,局部特征学习,生成对抗学习和序列特征学习等。在本系统中,该模块是基于深度度量学习方法,使用三元组损失(Triplet loss),训练ResNet50网络结构进行特征提取,通过对比目标行人和检测到的行人的特征相似度,实现对目标行人的识别和追踪。
ResNet是一种深度残差网络,旨在解决深层神经网络训练过程中的梯度消失和模型退化问题。该网络通过引入跳跃连接(shortcut connections)和残差模块(residual blocks)来构建深层网络。
Figure 5. Residual learning module
图5. 残差学习模块
如图5所示残差模块是ResNet网络中的基本构建块,由两个或三个卷积层组成。每个残差模块都包含了两条路径:主路径和跳跃连接路径。主路径用于提取特征,而跳跃连接路径用于直接将前一层的输出添加到后面的层级上。在残差模块中,主要操作是通过跨层连接实现信息的绕道传递,从而解决了梯度消失和模型退化问题。
本系统使用预训练ResNet50的torch.hub.load()接口加载模型,输入图像经preprocess()函数(Resize至256 × 128,Normalize均值[0.485, 0.456, 0.406])处理后,通过model.extract_features()提取2048维特征向量。三元组损失的margin参数设为0.5,在train.py中通过Triplet loss (margin = 0.5)定义。三元组损失函数可以定义为:
最后,如图6所示,我们使用训练好的行人重识别模型来识别和追踪目标行人。系统首先读取原视视频帧和待检索行人图像,对于原视视频帧中检测到的行人框,我们提取其特征向量,并将其与已知目标行人(即待检索行人图像)的特征向量进行比较。通过计算特征向量之间的相似度,我们可以判断是否为同一目标行人,并进行相应的追踪和识别。
Figure 6. Target pedestrian re-identification module
图6. 目标行人重识别模块
4.2.6. 运动轨迹绘制
追踪结果的可视化是系统的重要部分。通过对行人的定位和跟踪,我们能够准确地绘制出行人的运动轨迹,从而提供更为丰富和直观的行人行为信息。此外,我们还提供了一个特性,允许用户自定义调节行人运动轨迹的长度,以显示不同时间段内的运动轨迹。行人运动轨迹的绘制主要在多目标跟踪模式和行人重识别模式中进行。在多目标跟踪模式下,我们通过将每个行人的历史位置进行连线,绘制出行人的运动轨迹。而在行人重识别模式下,我们直接通过将目标行人的历史位置进行连线,绘制出目标行人的运动轨迹。
当函数接收到一帧图像后,首先通过YOLOv5模型进行行人检测,并获得行人的边界框。接着,DeepSORT模型进行行人跟踪,并将每个行人的ID绑定到其对应的边界框上。然后,我们就可以通过访问每个行人的历史检测框坐标信息,计算出其检测框中心点坐标位置,再使用Opencv提供的cv2.line()函数,根据用户所设置的运动轨迹长度,即保留的最近历史检测框中心点坐标数量,为每个行人绘制出其运动轨迹。
4.3. 系统测试
4.3.1. 功能测试(见表1)
Table 1. Modify detection box size test
表1. 修改检测框大小测试
测试编号 |
功能模板 |
测试目的 |
预设条件 |
测试数据 |
预期结果 |
实际结果 |
TT-001 |
用户操作 |
修改检测框大小 |
检测进行中 |
检测框从2修改为3 |
修改成功 |
修改成功 |
TT-002 |
用户操作 |
修改置信度阈值大小 |
检测进行中 |
修改框从0.25修改为0.5 |
修改成功 |
修改成功 |
TT-003 |
用户操作 |
修改交并比阈值大小 |
检测进行中 |
修改框从0.5修改为0.8 |
修改成功 |
修改成功 |
TT-004 |
用户操作 |
修改轨迹长度大小 |
检测进行中 |
检测框从20修改为50 |
修改成功 |
修改成功 |
TT-005 |
视频流播放 |
暂停/继续检测视频 |
检测进行中 |
先暂停,然后继续播放 |
成功暂停再继续播放 |
测试成功 |
TT-006 |
视频流播放 |
终止检测 |
检测进行中 |
先终止,然后点击播放 |
终止检测再继续检测 |
测试成功 |
TT-007 |
多目标行人跟踪 |
是否能正常进行多目标跟踪 |
系统导入检测视频流 |
MP4视频流,包含多个行人运动 |
成功跟踪且匹配到正确ID |
测试成功 |
TT-008 |
多目标行人跟踪 |
是否能正常进行多目标跟踪 |
系统导入检测视频流 |
MP4视频流,不包含行人 |
无法检测和跟踪行人 |
测试成功 |
TT-009 |
行人计数 |
是否能正常统计行人数 |
系统导入检测视频流 |
MP4视频流,包含多个行人 |
统计结果与实际相符 |
测试成功 |
TT-0010 |
行人运动轨迹绘制 |
是否能正常绘制行人轨迹 |
系统导入检测视频流 |
MP4视频流,包含多个行人 |
正常绘制行人运动轨迹 |
测试成功 |
TT-0011 |
目标行人重识别 |
是否成功检测到目标行人 |
系统导入检测视频流和目标行人 |
MP4视频流,包含多个行人和目标行人 |
系统正确检测出目标行人 |
测试成功 |
TT-0012 |
目标行人重识别 |
容错机制 |
系统只导入检测视频流 |
MP4视频流,包含多个行人和目标行人 |
系统不识别并提示导入目标 |
测试成功 |
4.3.2. 性能测试
多目标行人跟踪测试:主要测试系统在连续的视频帧中对多个行人目标进行跟踪的能力。我们使用了多个包含多个行人目标的测试视频进行测试。测试结果显示,该系统可以准确地在连续的视频帧中跟踪多个行人目标。当视频流中目标行人较少时,系统能在NVIDIA RTX 2060型号GPU上取得30~40的平均帧率,但当视频流中行人目标较为密集时,平均FPS会下降[17]到20左右。此外,当行人间发生严重的遮挡和重叠时,行人的ID有可能会发生交换,导致跟踪错误匹配。此类问题在本系统采用的DeepSORT框架下难以解决,使用其他的最新的MOT框架,例如ByteTrack可以针对发生遮挡关系的行人进行二次匹配,从而在行人ID交换问题上有更好的表现。
目标行人重识别测试:主要测试系统在不同场景和时间下对用户选择的同一目标行人进行准确识别的能力。我们使用了包含同一行人在不同时间出现的测试视频以及不同行人在同一视频中出现的测试视频进行测试。测试结果显示,该系统在目标行人特征本身变化不大的情况下,能取得很好地检测效果。由于该模块采用地resnet50模型深度较深,系统能在NVIDIA RTX 2060型号GPU上取得的平均帧率相比多目标行人跟踪,有略微的下降,只能达到15~20的平均帧率。此外,该模型在Market1501数据集得到的mAP (Mean Average Precision)值和Rank1 (Rank-1指标衡量的是算法在将查询图像与库中图像进行一对多匹配时,将查询图像正确地排在第一位的准确率)分别达到了69.2%和86.1%。但是对于本系统采用的重识别模型对目标行人的特征提取是基于全局特征的,即让网络对目标行人整体图像进行提取,所以在一些更加复杂的场景下无法准确识别目标行人。例如目标行人的衣服、头发等局部特征发生改变时,模型就无法仅仅通过全区特征检测出目标行人。想要解决此类问题,可以选择使用基于局部特征提取的方法,将检测目标图像进行切块,让模型去关注关键的局部区域,从而提高在复杂场景下的检测成功率。
行人运动轨迹绘制:主要测试系统的行人运动轨迹绘制功能。我们使用了多个包含行人运动的测试视频进行测试。测试结果显示,在大多数情况下,该系统可以较为准确地绘制出行人的运动轨迹,并且可以自由根据用户输入动态调整行人轨迹的长度,有较高的交互性。然而,如果目标被其他物体遮挡,可能会导致检测和跟踪的准确性下降。除此之外,在某些情况下,目标可能在一帧或多帧中没有被检测到,这可能导致跟踪器在后续帧中错误地将目标与其他检测结果匹配。导致这些问题的本质原因还是因为系统对于行人的跟踪能力有限。采用更加稳定的MOT跟踪算法能够有效地解决这类问题。
5. 结论
在本论文中,我们设计和实现了一个基于视觉的行人定位和追踪系统。该系统具备行人检测、多目标行人跟踪、行人实时计数、目标行人重识别、行人运动轨迹绘制等功能,并提供了用户界面进行交互操作。
在系统设计方面,我们采用了YOLOv5和DeepSORT等算法来实现行人检测和多目标行人跟踪。同时,引入了行人重识别算法,通过基于Resnet50网络结构实现的重识别模块对选择的目标行人进行跟踪,实现了跨摄像头的行人身份识别。系统界面采用了Pyside2和QT进行开发,提供了用户友好的操作界面。在系统实现过程中,我们进行了系统架构设计、功能设计和类的设计,并进行了原型设计。通过实现用户交互界面、视频流处理、行人检测、多目标行人跟踪、目标行人重识别和运动轨迹绘制等功能模块,完成了整个系统的搭建和实现。在系统测试方面,我们对系统进行了功能测试和性能测试。功能测试验证了系统的各项功能是否正常运行,性能测试评估了系统的运行性能和实时性。
通过本文的研究和实现,我们成功地开发出了一个功能齐全的基于视觉的行人定位和追踪系统。该系统具有较高的准确性和实时性,并且可以适应不同场景和需求。它可以广泛应用于监控系统、安防领域等需要对行人进行实时定位和跟踪的应用场景中。然而,本系统仍然存在一些局限性和改进空间。例如,行人检测和跟踪算法在复杂背景和遮挡情况下的准确性仍有待提高。行人重识别模型的准确性和鲁棒性也可以进一步改进。此外,系统界面的用户体验和交互性也可以进行进一步优化。
综上所述,本研究提出的基于视觉的行人定位和追踪系统具有一定的实用性和应用前景。通过进一步改进和优化,该系统在实际应用中将能够提供更准确、高效和可靠的行人定位和追踪服务,满足不同领域的需求。未来将引入粒子滤波优化遮挡场景下的轨迹预测,其核心思路为通过粒子采样与权重更新补全缺失轨迹。
基金项目
警务物联网应用技术公安部重点实验室开放课题(JWWLWKFKT2022002)。
NOTES
*通讯作者。