#私藏项目实操分享#原理讲解-项目实战 <-; 多目标跟踪算法之DeepSORT
Posted 码农的后花园
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#私藏项目实操分享#原理讲解-项目实战 <-; 多目标跟踪算法之DeepSORT相关的知识,希望对你有一定的参考价值。
目标跟踪(Object-Tracking)问题是目前深度学习中研究的热点问题,主要用在安防监控和自动驾驶上,其中目标跟踪问题又分为单目标跟踪问题和多目标跟踪问题。目前多目标跟踪典型算法有DeepSORT,今天就讲解一起使用DeepSORT算法。
多目标跟踪算法基本实现流程
第一步:给定视频原始帧。
第二步:运行对象检测器,如Faster Rcnn、YOLO等目标检测算法,检测以获得对象的边界框。
第三步:将所有目标检测框中对应的目标抠出来,进行特征提取(包括表观特征或者运动特征)。
第四步: 进行相似度计算,计算前后两帧目标之间的匹配程度(前后属于同一个目标的之间的距离比较小,不同目标之间的距离比较大)。
第五步:数据关联,为每个对象分配目标的ID,常用匈牙利算法。
1.什么是DeepSORT算法
DeepSORT算法的核心思想主要分为两块,一块可以简单称为Deep,另外一个可以称为SORT,背后的算法支持分别基于深度学习模型与卡尔曼滤波,是典型的结合深度学习与传统方法的混合算法框架实现了比较稳定的跟踪效果。从上图可以看出,最初的DeepSORT从输入视频流开始,首先通过目标检测算(YOLOv3)法实现检测,然后基于YOLOv3检测结果标记利用卡尔曼滤波和匈牙利算法实现目标的最终的跟踪。当然随着YOLOv4、YOLOv5的出现,现在也有基于YOLOv4、YOLOv5的DeepSORT算法。
2.什么是SORT算法
上面说到DeepSORT算法的核心思想有两块,一块是SORT,那什么是SORT呢?其实DeepSORT算法是在SORT算法(Simple Onlineand RealTime Tracking)基础上进行改进得来。不同的是SORT最大特点是基于FasterR-CNN的目标检测方法,并利用卡尔曼滤波算法+匈牙利算法,极大提高了多目标跟踪的速度,同时达到了SOTA的准确率,SORT算法工作流程下:
- 使用Faster R-CNN作为检测目标算法
- 使用不同框的IOU作为前后帧间目标关系度量指标,也就是关联代价矩阵
- 利用卡尔曼滤波算法预测目标当前帧所在位置
- 通过匈牙利算法关联检测框到具体的目标
3.卡尔曼滤波算法 ->状态估计模型
u:表示目标中心点的水平坐标
v:表示目标中心的垂直坐标
s:表示目标检测边界框的尺寸大小(面积)
r:表示目标检测框的框的高宽的纵横比
u ’ v’ s’:表示下一帧检测目标中心的水平坐标、垂直坐标、检测框的尺寸。
注意:没有r,目标追踪中,认为目标物体纵横比为常量。
预测每个目标在当前帧的位置,估计其边界形状,预测的功能通过卡尔曼滤波来实现。卡尔曼滤波可以基于目标前一时刻的位置,来预测当前时刻的位置,并且可以比传感器(在目标跟踪中即目标检测器,比如Yolo等)更准确的估计目标的位置。
卡尔曼滤波算法分为两个过程,预测和更新。该算法将目标的运动状态定义为8个正态分布的向量。
预测:当目标经过移动,通过上一帧的目标框和速度等参数,预测出当前帧的目标框位置和速度等参数。
更新:预测值和观测值,两个正态分布的状态进行线性加权,得到目前系统预测的状态。
4.匈牙利算法->数据关联
匈牙利算法可以告诉我们当前帧的某个目标,是否与前一帧的某个目标相同。使用的代价矩阵为原有目标 在当前帧中的预测位置和当前帧目标检测框之间的IOU。
5.SORT算法流程
SORT算法具体流程:目标检测器得到Detecions,卡尔曼滤波预测→计算代价矩阵→ 使用匈牙利算法将预测后的tracks和当前帧中的Detecions进行IOU关联匹配 →卡尔曼滤波更新。
目标检测器得到目标框Detections,同时卡尔曼滤波器预测当前的帧的Tracks, 然后将Detections和Tracks进行IOU匹配,最终得到匹配结果分为:
Unmatched Tracks:失配,Detection和Track无法匹配,如果失配持续了 T_lost次,该目标ID将从图片中删除。
Unmatched Detections:这部分说明没有任意一个Track能匹配Detection, 所以要为这个Detection分配一个新的track。
MatchedTrack:目标得到了匹配。卡尔曼滤波可以根据Tracks状态预测下一帧的目标框状态
Detections是通过目标检测器得到的目标框,Tracks是一段轨迹。核心是匹配的过程与卡尔曼滤波的预测和更新过程。卡尔曼滤波更新是对观测值(匹配上的Track)和估计值更新所有track的状态。
6.Deepsort算法
Deep SORT 算法在SORT 算法的基础上加入了外观信息,同时考虑外观信息的关联和目标运动信息的关联,使用融合度量的方式计算检测结果和跟踪结果的匹配程度->也就是外观和运动信息的级联匹配。
通过结合目标框的马氏距离和特征余弦距离两个度量来整合运动信息和外观信息,一方面,马氏距离基于运动信息,提供了有关目标的可能位置的信息,这对短期预测是有效的;另一方面,余弦距离考虑外观信息,这对长期遮挡的目标找回ID比较有效,因为此时运动不具有辨别力。也就是说DeepSORT算法的代价矩阵是由马氏距离和欧式距离两个计算得到的。
用一个8维空间表示目标在某时刻的状态:
其中(u,v)是bounding box的中心坐标,r是长宽比,h表示高度。其余四个变量表示对应的在图像坐标系中的速度信息。使用一个基于常量速度模型和线性观测模型的标准kalman滤波器进行目标运动状态的预测,预测的结果为(u,v,r,h)。
6.1运动信息的关联
Deep SORT算法使用检测框和跟踪器预测框之间的马氏距离来描述运动信息的关联:
其中,dj表示第j个检测框的位置,yi表示第i个跟踪器对目标的预测位置,Si表示检测位置与平均跟踪位置之间的协方差矩阵。也就是说,马氏距离通过计算检测位置和平均跟踪位置之间的标准差将状态测量的不确定性进行了考虑。并且,deep sort通过以从逆χ2分布计算得来的95%置信区间对马氏距离进行阈值化处理。
如果某次关联的马氏距离小于指定的阈值t(1),则设置运动状态的关联成功。
6.2目标外观信息的关联
只有当运动的不确定性很低时, 上述6.1的马氏距离的运动度量方法才比较准确. 当本体相机有较大的位移时,相机存在运动时会在图像平面中引入快速位移,会使得遮挡情况下马氏距离度量非常不准确的使得关联方法失效,造成ID switch 的现象。因此作者引入第二种关联度量方法: 对每一个追踪的目标通过神经网络提取一个外观特征向量, 通过计算当前帧的检测与历史追踪的目标特征向量之间的最小余弦距离来确定关联->目标外观信息关联。目标外观信息关联代价矩阵计算公式如下
(1)
最后对运动和外观两种度量方式进行线性加权作为最终的度量,最终匈牙利算法关联的代价矩阵计算公式:
(2)
如果公式(2)计算得到的距离小于指定的阈值,那么这个关联就是成功的。
只有当外观和运动两个指标都满足各自阈值条件的时候才进行公式2的融合:距离度量对短期的预测和匹配效果很好,但对于长时间的遮挡的情况,使用外观特征的度量比较有效。
7.基于YOLOv5的DeepSORT算法跟踪效果图
8.代码下载和环境设置
后台回复:项目实战,即可获取下载基于YOLOv5的DeepSORT算法的论文和代码,下期给大家带来基于多目标跟踪算法DeepSORT车辆跟踪计数和是否违规检测的实战落地项目,敬请期待。
YOLOv5_DeepSORT地址:GitHub - mikel-brostrom/Yolov5_DeepSort_Pytorch: Real-time multi-object tracker using YOLO v5 and deep sort
以上是关于#私藏项目实操分享#原理讲解-项目实战 <-; 多目标跟踪算法之DeepSORT的主要内容,如果未能解决你的问题,请参考以下文章
#私藏项目实操分享#Spring专题「实战系列」spring注解@ConditionalOnExpression详细使用说明
#私藏项目实操分享#Maven实战技巧「插件使用专题」Maven-Archetype插件创建自定义maven项目骨架
#私藏项目实操分享#Python爬虫实战,pymysql模块,Python实现抓取音乐评论
#私藏项目实操分享#Python爬虫实战,requests模块,Python实现爬取网站漫画