SORT和DeepSORT是多目标跟踪中两个知名度比较高的算法。DeepSORT是原团队对SORT的改进版本。现在来解析一下SORT和DeepSORT的基本思路。

1.SORT

SORT核心是卡尔曼滤波匈牙利匹配两个算法。流程图如下所示,可以看到整体可以拆分为两个部分,分别是匹配过程卡尔曼预测加更新过程,都用灰色框标出来了。

关键步骤:轨迹卡尔曼滤波预测→ 使用匈牙利算法将预测后的tracks和当前帧中的detecions进行匹配(IOU匹配) → 卡尔曼滤波更新

卡尔曼滤波分为两个过程:预测更新。SORT引入了线性速度模型与卡尔曼滤波来进行位置预测,先进行位置预测然后再进行匹配。运动模型的结果可以用来预测物体的位置。

匈牙利算法解决的是一个分配问题,用IOU距离作为权重(也叫cost矩阵),并且当IOU小于一定数值时,不认为是同一个目标,理论基础是视频中两帧之间物体移动不会过多。在代码中选取的阈值是0.3。scipy库的linear_sum_assignment都实现了这一算法,只需要输入cost_matrix即代价矩阵就能得到最优匹配。

2.DeepSort

DeepSORT是SORT的续作,整体框架没有大改,还是延续了卡尔曼滤波加匈牙利算法的思路,在这个基础上增加了鉴别网络Deep Association Metric

下图是deepSORT流程图,和SORT基本一样,就多了级联匹配(Matching Cascade)和新轨迹的确认(confirmed)。

关键步骤:轨迹卡尔曼滤波预测→ 使用匈牙利算法将预测后的tracks和当前帧中的detecions进行匹配(级联匹配IOU匹配) → 卡尔曼滤波更新

级联匹配流程图如下所示:

其中上半部分就是相似度估计,也就是算这个分配问题的代价函数。下半部分依旧使用匈牙利算法进行检测框和跟踪框的匹配。


总结:

1.SORT算法

SORT是利用强大的CNN检测器的检测结果来进行多目标跟踪使用基于卡尔曼滤波(Kalman filter)与匈牙利算法(Hungarian algorithm)的方法来进行跟踪。

2.deepSORT算法

DeepSORT是在SORT基础上进行的修改,增加了级联匹配和目标的确认,还是使用卡尔曼滤波加匈牙利算法进行目标跟踪。


1.SORT核心是卡尔曼滤波和匈牙利算法。流程图如下所示,可以看到整体可以拆分为两个部分,分别是匈牙利匹配过程和卡尔曼预测加更新过程,都用灰色框标出来了。关键步骤:--> 卡尔曼滤波预测出预测框--> 使用匈牙利算法将卡尔曼滤波的预测框和yolo的检测框进行IOU匹配来计算相似度 --> 卡尔曼滤波使用yolo的检测框更新卡尔曼滤波的预测框2.卡尔曼滤波分为两个过程:预测过程和更新过程。SORT引入了线性速度模型与卡尔曼滤波来进行位置预测,先进行位置预测然后再进行匹配。运动模型的结果可以用来预测物体的位置。匈牙利算法解决的是一个分配问题,用IOU距离作为权重(也即cost代价矩阵),并且当IOU小于一定数值(IOU阈值)时,不认为是同一个目标,理论基础是视频中两帧之间物体移动不会过多。在代码中选取的IOU阈值是0.3。scipy库的linear_sum_assignment实现了匈牙利算法,只需要输入cost_matrix代价矩阵(全部预测框和全部检测框两两IOU计算结果)到linear_sum_assignment中就能得到预测框和检测框两两最优匹配的组合。

1.跟踪器链(列表):实际就是多个的卡尔曼滤波KalmanBoxTracker自定义类的实例对象组成的列表。每个目标框都有对应的一个卡尔曼滤波器(KalmanBoxTracker实例对象),KalmanBoxTracker类中的实例属性专门负责记录其对应的一个目标框中各种统计参数,并且使用类属性负责记录卡尔曼滤波器的创建个数,增加一个目标框就增加一个卡尔曼滤波器(KalmanBoxTracker实例对象)。把每个卡尔曼滤波器(KalmanBoxTracker实例对象)都存储到跟踪器链(列表)中。2.unmatched_detections(列表):检测框中出现新目标,但此时预测框(跟踪框)中仍不不存在该目标,那么就需要在创建新目标对应的预测框/跟踪框(KalmanBoxTracker类的实例对象),然后把新目标对应的KalmanBoxTracker类的实例对象放到跟踪器链(列表)中。3.unmatched_trackers(列表):当跟踪目标失败或目标离开了画面时,也即目标从检测框中消失了,就应把目标对应的跟踪框(预测框)从跟踪器链中删除。unmatched_trackers列表中保存的正是跟踪失败即离开画面的目标,但该目标对应的预测框/跟踪框(KalmanBoxTracker类的实例对象)此时仍然存在于跟踪器链(列表)中,因此就需要把该目标对应的预测框/跟踪框(KalmanBoxTracker类的实例对象)从跟踪器链(列表)中删除出去。
DeepSORT是SORT的续作,整体框架没有大改,还是延续了卡尔曼滤波加匈牙利算法的思路,并且在这个基础上增加了鉴别网络Deep Association Metric。
下图是deepSORT流程图,和SORT基本一样,就多了级联匹配(Matching Cascade)和新轨迹的确认(confirmed)。

关键步骤:--> 卡尔曼滤波预测出预测框--> 使用匈牙利算法将卡尔曼滤波的预测框和yolo的检测框进行级联匹配加IOU匹配两者分别来计算相似度 --> 卡尔曼滤波使用yolo的检测框更新卡尔曼滤波的预测框级联匹配计算相似度的流程图如下所示:上半部分为相似度估计,也就是计算这个分配问题的代价矩阵。下半部分依旧是使用匈牙利算法进行检测框和预测框的匹配。

智慧交通day02-车流量检测实现09:SORT/deepSORT相关推荐

  1. 智慧交通day02-车流量检测实现01:总览

    随着城市交通量的迅猛增加,车流量统计已成为智能交通系统中一项关键技术和热门研究方向.高效而精确的车流量检测可以交通管理者和决策者,以及驾驶员提供数据支撑,从而为交通调度,降低拥堵情况的发生,提高道路利 ...

  2. 智慧交通day02-车流量检测实现02:多目标追踪

    1.多目标跟踪分类 多目标跟踪,即MOT(Multi-Object Tracking),也就是在一段视频中同时跟踪多个目标.MOT主要应用在安防监控和自动驾驶等领域中. 1.1 初始化方法 多目标跟踪 ...

  3. 智慧交通day02-车流量检测实现14:代码汇总+问题修正

    代码+权重文件+资源https://download.csdn.net/download/qq_39237205/43072746https://download.csdn.net/download/ ...

  4. 智慧交通day02-车流量检测实现10:多目标追踪实现

    在这里我们主要实现了一个多目标跟踪器,管理多个卡尔曼滤波器对象,主要包括以下内容: 初始化:最大检测数,目标未被检测的最大帧数 目标跟踪结果的更新,即跟踪成功和失败的目标的更新 初始化 def __i ...

  5. 智慧交通day02-车流量检测实现12:基于yoloV3的目标检测

    在本章节代码编写中,发现之前的代码所处的环境是python3,因此导致了cv2.dnn.readNetFromDarknet()在代码运行中导致了i[0]的获值失败,故总结如下: cv2.dnn.re ...

  6. 智慧交通day02-车流量检测实现11:yoloV3模型

    yoloV3以V1,V2为基础进行的改进,主要有:利用多尺度特征进行目标检测:先验框更丰富:调整了网络结构:对象分类使用logistic代替了softmax,更适用于多标签分类任务. 1.算法简介 Y ...

  7. 智慧交通day02-车流量检测实现08:目标跟踪中的数据关联(将检测框bbox与卡尔曼滤波器的跟踪框进行关联匹配)

    # 将YOLO模型的检测框和卡尔曼滤波的跟踪框进行匹配 def associate_detection_to_tracker(detections,trackers,iou_threshold=0.3 ...

  8. 智慧交通day02-车流量检测实现07:匈牙利算法

    匈牙利算法(Hungarian Algorithm)与KM算法(Kuhn-Munkres Algorithm)是用来解决多目标跟踪中的数据关联问题,匈牙利算法与KM算法都是为了求解二分图的最大匹配问题 ...

  9. 智慧交通day02-车流量检测实现06:目标估计模型-卡尔曼滤波(汇总)

    from __future__ import print_function from numba import jit import numpy as np from scipy.optimize i ...

最新文章

  1. 2021-2027年中国医联体(医疗联合体)建设深度调研及投资前景预测报告
  2. 虚拟机中RedHat Linux系统安装
  3. Android截屏方法总结
  4. js 面向对象例子
  5. “睡服”面试官系列第二篇之promise(建议收藏学习)
  6. 配置网站之后500.19错误
  7. css html 语法,CSS基础语法
  8. 报错xmlbase 不兼容 expecting up to 23, got 24
  9. Oracle伪列(ROWNUM)的使用
  10. java语言飞机大战代码_飞机大战JAVA代码
  11. imhist()函数使用
  12. win7、win8手动安装AHCI驱动
  13. 正好股票开户有色金属应声大涨
  14. Windows环境下用C语言实现CS模型(基于TCP协议)
  15. 项目管理知识体系指南 (八)
  16. 修改服务器的ip地址的命令,使用命令提示符更改IP地址和DNS服务器 | MOS86
  17. 【计算机网络】(4)什么是路由+ARP协议
  18. word如何添加下滑线
  19. Altium designer2020基础使用教程
  20. 如何使用餐饮互动游戏进行拓客?餐饮加盟h5线下互动游戏能收获什么?

热门文章

  1. 惜缘-致家乡的一位女孩[原创]
  2. mysql concat例子_MYSQL中CONCAT详解
  3. Python 第三方库之 docxtpl (处理word文档)
  4. Django 部署基础【使用 Nginx + uWSGI 的方式来部署来 Django】
  5. 远程控制python
  6. 热血街头Java,下载_我爱法语 V3.01 多国语言版_6z6z下载站
  7. html加载js文件失败,firefox/chrome动态设置script加载js文件失败
  8. 第七季2:MP4v2库的移植与播放实战
  9. 字符串循环右移的一道题目
  10. Windows-server-2008-R2安装Oracle-11g-R2-dataguard