热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

[MOT]DeepSORT简单理解

DeepSORT是一种tracking_by_detection框架的算法虽然性能一般,但速度不错,GitHub上有很多基于不同检测器的实现而且JD

DeepSORT是一种tracking_by_detection框架的算法

虽然性能一般,但速度不错,GitHub上有很多基于不同检测器的实现

而且JDE、FairMOT、CSTrack等JDE的追踪器,匹配思路其实都是DeepSORT的思路

给出yolov3、yolov4和centernet的开源链接

GitHub - mikel-brostrom/Yolov3_DeepSort_Pytorch: Real-time multi-person tracker using YOLO v3 and deep sort

https://github.com/theAIGuysCode/yolov4-deepsort

https://github.com/kimyoon-young/centerNet-deep-sort

基础知识:

1. 卡尔曼滤波  应用非常广的一种多传感器融合算法

对理论不感兴趣的话,最开始学的时候其实可以把MOT中的卡尔曼滤波当做一个运动预测的黑箱来使用,用于预测当前帧中目标在下一帧的位置

(ps:我大二的时候robomater的比赛中就一直在用这个算法,融合摄像头数据和机器人云台电机数据进行目标预测,但迷迷糊糊用了一年多,是到后来用卡尔曼滤波搞简单的slam,才大概弄懂的原理)

这部分原理很典型的是温度/小车的例子,网上原理很多,这里主要讲在MOT中的使用

协方差矩阵:描述内部变量的相关性的矩阵

MOT中kalman主要用于运动预测,在DeepSORT中只使用了一个最简单的匀速运动模型

在DeepSORT中,描述一个检测框需要四个状态:


  1. 中心点横坐标
  2. 中心点纵坐标
  3. 检测框大小
  4. 检测框长宽比

对应的,匀速运动模型还需要有:


  1. 中心点横坐标的变化速度
  2. 中心点纵坐标的变化速度
  3. 检测框大小的变化速度
  4. 检测框长宽比的变化速度

该代码定义了个KalmanFilter类,总共分为6部分:


  • (1)类初始化__init__
  • (2)初始化状态(mean)与状态协方差(covariance)的函数initiate
  • (3)预测阶段函数predict
  • (4)分布转换函数project
  • (5) 更新阶段函数update
  • (6) 计算状态分布测量(检测框)之间距离函数gating_distance

2. 匈牙利算法

匈牙利算法(Hungarian Algorithm)与KM算法(Kuhn-Munkres Algorithm)都是用来解决多目标跟踪中的数据关联问题的

匈牙利算法与KM算法都是为了求解二分图的最大匹配问题。二分图的描述参考自这里

带你入门多目标跟踪(三)匈牙利算法&KM算法 - 知乎

匈牙利算法解决的是一个分配问题。SK-learn库的linear_assignment_和scipy库的linear_sum_assignment都实现了这一算法,只需要输入cost_matrix即代价矩阵就能得到最优匹配。不过要注意的是这两个库函数虽然算法一样,但给的输出格式不同。

DeepSORT的优化主要就是基于匈牙利算法里的这个代价矩阵。它在IOU Match之前做了一次额外的级联匹配,利用了外观特征马氏距离

正文:

DeepSORT是在SORT基础上进行改进的。

        SORT算法利用卡尔曼滤波算法预测检测框在下一帧的状态,将该状态与下一帧的检测结果进行匹配,实现车辆的追踪。但由于遮挡和漏检等情况的影响,SORT容易出现大量的ID切换。

        为了降低ID切换,DeepSORT利用了前面检测到的物体的外观特征,DeepSORT中采用了一个简单(运算量不大)的CNN来提取被检测物体(检测框物体中)的外观特征(低维向量表示),在执行完每帧检测+追踪后,进行一次物体外观特征的提取并保存。

         之后每执行一步时,都要执行一次当前帧被检测物体外观特征之前存储的外观特征相似度计算,这个相似度将作为一个重要的判别依据(不是唯一的,因为作者说是将运动特征外观特征结合作为判别依据,这个运动特征就是SORT中卡尔曼滤波做的事)

        DeepSORT只使用了一个简单的CNN网络(也所以速度才更能快),网络的输出是一个128维的特征向量。

DeepSORT对追踪的初始化、新生与消失进行了设定。


  • 初始化:如果一个检测没有和之前记录的track相关联,那么从该检测开始,初始化一个新的目标(并不是新生)
  • 新生:如果一个目标被初始化后,且在前三帧中均被正常的捕捉关联成功,那么该物体产生一个新的track,否则将被删除。
  • 消失:如果超过了设定的最大保存时间(原文中叫做predefined maximum age)没有被关联到的话,那么说明这个物体离开了视频画面,该物体的信息(记录的外观特征和行为特征)将会被删除。

SORT中解决分配问题使用的是匈牙利算法(仅使用运动特征来计算代价矩阵),该算法卡尔曼滤波算法预测的位置与下一帧目标检测出来的位置间的匹配。DeepSORT中,作者结合外观特征(由上述的CNN提取的128维特征向量)和运动特征(卡尔曼滤波预测的结果)来计算代价矩阵,从而根据该代价矩阵使用匈牙利算法进行目标的匹配。


  • 运动特征:其实就是使用预测框和新bbox的距离(马氏距离)

        马氏距离通过测量卡尔曼滤波器的追踪位置均值(mean track location)之间的标准差检测框来计算状态估计间的不确定性,即 D(i,j)  为第i个追踪分布和第j个检测框之间的马氏距离(不确定度)。使用对马氏距离设定一定的阈值,可以排除那些没有关联的目标。


  • 外观特征

        作者对每个目标k创建了一个gallery,该gallery用来存储该目标在不同帧中的外观特征(128维向量),论文中用 Rk 表示(k表示track ID)。在某一时刻,作者获得出检测框(编号为j)的外观特征,记作 Rj 。然后求解所有已知的gallery中的外观特征与获得的检测框(编号为j)的外观特征最小余弦距离


  • 两个特征的融合

       在DeepSORT中, motion特征和appearance特征是相辅相成


  1. motion特征(由马氏距离计算获得)提供了物体定位的可能信息,主要用于短期预测。
  2. appearance特征(由余弦距离计算获得)可以在目标被长期遮挡后,恢复目标的ID编号,减少ID切换次数。

        DeepSORT中使用一个简单的加权运算进行特征融合

这里的 为马氏距离,为余弦距离。  为权重系数。所以当  时,那么就是改进版的SORT,  时,仅仅依靠外观特征进行匹配也是可以进行追踪的。

部分参考自

【MOT】详解DeepSORT多目标追踪模型 - 知乎

【多目标跟踪】FairMOT(原理与代码详解)_怡宝2号-CSDN博客_fairmot代码详解

感谢大佬们


推荐阅读
  • 最近学习了数据挖掘常用的两种算法:FP-Growth和K-Means。现在把我的学习结果分享给大家。以下是本文的目录,大家可以根据需要跳过一些章节:1.FP-Grow ... [详细]
  • Lodash中文文档(v3.10.1)–“Collection”要领TranslatedbyPeckZegOriginalDocs:Lodashv3.10.1Docs乞助翻译文档的 ... [详细]
  • Mask-RCNN源码阅读笔记
    阅读了https:blog.csdn.netu011974639articledetails78483779?locationNum9&fps1这篇博客这篇博客介 ... [详细]
  • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
    本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
  • 【论文】ICLR 2020 九篇满分论文!!!
    点击上方,选择星标或置顶,每天给你送干货!阅读大概需要11分钟跟随小博主,每天进步一丢丢来自:深度学习技术前沿 ... [详细]
  • UILabel的混合显示动画效果
    UILabel的混合显示动画效果 ... [详细]
  • 42VERSE & 圆圈徽章,Web3 社交的流派之争——针对两个国内案例的调研
    01 行业分析本文所研究的细分赛道为:Web3应用层——社交与内容场景——DID/创新场景(以元宇宙3D空间为 ... [详细]
  • 图像处理(7) : 边缘检测
    边缘检测是图形图像处理、计算机视觉和机器视觉中的一个基本工具,通常用于特征提取和特征检测,旨在检测一张数字图像中有明显变化的边缘或者不连续的区域 ... [详细]
  • 系数|量纲_机器学习基础一文带你用sklearn做特征工程
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了机器学习基础一文带你用sklearn做特征工程相关的知识,希望对你有一定的参考价值。使用sklearn做特 ... [详细]
  • 都会|可能会_###haohaohao###图神经网络之神器——PyTorch Geometric 上手 & 实战
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了###haohaohao###图神经网络之神器——PyTorchGeometric上手&实战相关的知识,希望对你有一定的参考价值。 ... [详细]
  • kafkamanager(cmak)安装及使用
    1.软件下载kafka-manager工具目前改名为cmak,下载地址为:https:github.comyahooCMAKreleasestag3.0.0.5现在 ... [详细]
  • 外层|条件下_MySQL还能这样玩第五篇之视图应该这样玩
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了MySQL还能这样玩---第五篇之视图应该这样玩相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 语义分割系列3SegNet(pytorch实现)
    SegNet手稿最早是在2015年12月投出,和FCN属于同时期作品。稍晚于FCN,既然属于后来者,又是与FCN同属于语义分割网络 ... [详细]
  • 上一章讲了如何制作数据集,接下来我们使用mmcls来实现多标签分类。 ... [详细]
author-avatar
嘉苹民智79
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有