读'Simple Online and Realtime Tracking with a Deep Association Metric, arXiv:1703.07402v1 ' 总结

前言

这篇文章依然属于tracking-by-detection 类,其在匹配detections时使用的是传统的匈牙利算法。文章中需要注意的几点包括:

  1. 在计算detections和tracks之间的匹配程度时,使用了融合的度量方式。包括卡尔曼滤波中预测位置和观测位置在马氏空间中的距离 和 bounding boxes之间表观特征的余弦距离。

  2. 其中bounding box的表观特征是通过一个深度网络得到的128维的特征

  3. 在匈牙利匹配detections和tracks时,使用的是级联匹配的方式。这里要注意的是,并不是说级联匹配的方式就比global assignment效果好,而是因为本文使用kalman滤波计算运动相似度的缺陷导致使用级联匹配方式效果更好。

具体内容

We adopt a conventional single hypothesis tracking methodology with recursive kalman filtering and frame-by-frame data association.

轨迹处理和状态估计

  • 状态估计: 使用一个8维空间去刻画轨迹在某时刻的状态 ,分别表示bounding box中心的位置、纵横比、高度、以及在图像坐标中对应的速度信息。然后使用一个kalman滤波器预测更新轨迹,该卡尔曼滤波器采用匀速模型和线性观测模型。其观测变量为

  • 轨迹处理: 这个主要说轨迹什么时候终止、什么时候产生新的轨迹。首先对于每条轨迹都有一个阈值a用于记录轨迹从上一次成功匹配到当前时刻的时间。当该值大于提前设定的阈值则认为改轨迹终止,直观上说就是长时间匹配不上的轨迹认为已经结束。然后在匹配时,对于没有匹配成功的detections都认为可能产生新的轨迹。但由于这些detections可能是一些false alarms,所以对这种情形新生成的轨迹标注状态'tentative' ,然后观查在接下来的连续若干帧(论文中是3帧)中是否连续匹配成功,是的话则认为是新轨迹产生,标注为'confirmed',否则则认为是假性轨迹,状态标注为'deleted'。

分配

匹配自然是指当前有效的轨迹和当前的detections之间的匹配。所谓有效的轨迹是指那些还存活着的轨迹,即状态为tentative和confirmed的轨迹。轨迹和detection之间的匹配程度结合了运动信息和表观信息。

  • 运动匹配度
    使用detection和track在kalman 滤波器预测的位置之间的马氏距离刻画运动匹配程度。

表示第j个detection和第i条轨迹之间的运动匹配度,其中是轨迹由kalman滤波器预测得到的在当前时刻观测空间的协方差矩阵,是轨迹在当前时刻的预测观测量,时第j个detection的状态
考虑到运动的连续性,可以通过该马氏距离对detections进行筛选,文中使用卡方分布的0.95分位点作为阈值,定义如下示性函数

  • 表观匹配度

单独使用马氏距离最为匹配度度量会导致IDSwitch等情形严重,特别的当相机运动时可能导致马氏距离度量失效,所以这个时候应该靠表观匹配度补救。对于每一个detection,包括轨迹中的detections,使用深度网络提取出单位范数的特征向量$r$,深度网络稍后再说。然后使用detection和轨迹包含的detections的特征向量之间的最小余弦距离作为detection和track之间的表观匹配程度。当然轨迹太长导致表观产生变化,在使用这种最小距离作为度量就有风险,所以文中只对轨迹的最新的之内detections进行计算最小余弦距离。

同样的,该度量同样可以确定一个门限函数,这个阈值由训练集得到

两种度量的融合: 加权平均 
其中是超参数,用于调整不同项的权重。
门限函数 

总结: 距离度量对于短期的预测和匹配效果很好,而表观信息对于长时间丢失的轨迹而言,匹配度度量的比较有效。超参数的选择要看具体的数据集,比如文中说对于相机运动幅度较大的数据集,直接不考虑运动匹配程度。
另外还有一点我想说的是这两个匹配度度量的阈值范围是不同的,如果想取相通的重要程度,应该取0.1左右。

级联匹配

为什么采用级联匹配?
如果一条轨迹被遮挡了一段较长的时间,那么在kalman滤波器的不断预测中就会导致概率弥散。那么假设现在有两条轨迹竞争同一个detection,那么那条遮挡时间长的往往得到马氏距离更小,使detection倾向于分配给丢失时间更长的轨迹,但是直观上,该detection应该分配给时间上最近的轨迹。导致这种现象的原因正是由于kalman滤波器连续预测没法更新导致的概率弥散。这么理解吧,假设本来协方差矩阵是一个正态分布,那么连续的预测不更新就会导致这个正态分布的方差越来越大,那么离均值欧氏距离远的点可能和之前分布中离得较近的点获得同样的马氏距离值。
所以文中才引入了级联匹配的策略让'more frequently seen objects'分配的优先级更高。这样每次分配的时候考虑的都是遮挡时间相同的轨迹,就不存在上面说的问题了。具体的算法如下:

在匹配的最后阶段还对unconfirmed和age=1的未匹配轨迹进行基于IoU的匹配。这可以缓解因为表观突变或者部分遮挡导致的较大变化。当然有好处就有坏处,这样做也有可能导致一些新产生的轨迹被连接到了一些旧的轨迹上。但这种情况较少。

【妈蛋,这个编辑器稍微写长一点就卡成狗,卡的心情烦躁】

深度表观描述子

预训练的网络时一个在大规模ReID数据集上训练得到的,这个ReID数据集包含1261个人的1100000幅图像,使得学到的特征很适合行人跟踪。

然后使用该预训练网络作为基础网络,构建wide ResNet,用来提取bounding box的表观特征,网络结构如下:

该网络在Nvidia GeForce GTX 1050 mobile GPU下提出32个bounding boxes大约花费30ms,显然可以满足实时性要求。

实验

实验设置和结果

实验是在MOT16数据集上跑的,使用的detections并非公共检测结果。而是参考文献1中提供的检测结果. 实验结果如下表所示。

结论

  • 相对于没使用深度表观特征的原始sort方法,IDSw下降了约45%,可见该深度表观特征的有效性

  • 由于表观特征的使用,使轨迹因遮挡导致的motion 信息没用时不至于错误分配detection,使得ML更少,MT更多。

  • 该方法存在的一个问题使FP太大。。,论文中分析原因有两点。一方面是detections问题,两一方面是轨迹最大允许丢失匹配的帧数!$A_{max}$太大导致去多false alarms被分配到轨迹中。提高detections的置信度可以显著提升性能。

  • 速度够快,20Hz


总结

  1. 该方法相对简单,也容易理解。

  2. 我认为其优异性能很大程度上 取决于detections的质量很好,如果在提供的public detections上跑的话,可能要需要很复杂的预处理

  3. 在motion 匹配度时仅仅使用了距离关系,并不是真正的运动信息。我觉得这一点改用或结合速度信息,解决相似的人相遇而过导致的IDSw问题。

人脸跟踪:多目标跟踪deep_sort相关推荐

  1. opencv目标跟踪概述和人脸跟踪

    概述 opencv内部实现了一些单目标跟踪算法,可以很方便的使用. 这里说的目标跟踪不是多目标跟踪,往往是需要人工或程序给定初始目标位置. 资源及跟踪算法介绍 目前看到的比较好的opencv目标跟踪算 ...

  2. 非刚性人脸跟踪 —— 实用工具

    面向对象设计 与人脸检测和人脸识别一样,人脸跟踪也由两部分组成:数据和算法.算法通过预先储存(即离线)的数据来训练模型,然后对新来的(即在线)数据执行某类操作.因此,采用面向对象设计是不错的选择. 在 ...

  3. 非刚性人脸跟踪 —— 人脸跟踪

    人脸跟踪问题可认为是寻找一种高效和鲁棒性的方法,它能将各种面部特征的单独检测与这些特征的几何依赖性结合起来,已得到连续帧中每幅图像面部特征位置的精确估计.基于此,需仔细考虑几何依赖性的必要性.下图为用 ...

  4. DIY人脸跟踪电风扇送女朋友(4)

    成果展示: 如下视频所示为制作好的人脸跟踪电风扇 人脸跟踪风扇 相关代码已经放在百度网盘上面了. 链接:https://pan.baidu.com/s/188AylEd2QgOiA6YFv01N3A ...

  5. DIY人脸跟踪电风扇送女朋友(1)

    女朋友的生日快到了,作为一个屌丝程序员,想要送给女朋友一个特别的礼物,最终结合现在火热的深度学习技术,选择做一个人脸跟踪电风扇,能够跟踪人脸,始终对着人脸吹,让女友无时无刻不感受到"清风徐来 ...

  6. 孪生神经网络_基于局部和全局孪生网络的鲁棒的人脸跟踪

    论文名称 Siamese local and global networks for robust face tracking 引用:Qi, Yuankai, et al. "Siamese ...

  7. 开源极速的人脸跟踪-基于OpenTLD与RNet

    点击我爱计算机视觉标星,更快获取CVML新技术 想必上图这个既鲁棒又快速的人脸跟踪大家都见过,我第一次看到的时候还想着,这算法厉害啊,连人物转身的那一刻都能跟踪!难道是3D的跟踪?! 但是仔细一看就哈 ...

  8. 人脸系列:人脸检测、人脸关键点定位、人脸优选、人脸对齐、人脸特征提取、人脸跟踪、人脸活体检测

    一.一点想法 缘由:最近想整理下从事人脸方向的所有查阅过的论文,做过的相关实验,因为随着时间的推移,自己总会遗忘当初的一些想法,所以想好好整理下自己的学习笔记. 过程:本系列包括从人脸检测.人脸关键点 ...

  9. 《Master Opencv...读书笔记》非刚性人脸跟踪 II

    上一篇博文中,我们了解了系统的功能和模块,明确了需要采集哪些类型的样本点及利用类的序列化的保存方式.这次将介绍几何约束模块,通过统计形态分析法(Statistical Shape Analysis, ...

  10. [坠露木兰]Kinect Face Tracking SDK[Kinect人脸跟踪]2013-4-10更新

    Kinect人脸跟踪Kinect Face Tracking SDK 本文持续维护地址:http://guoming.me/kinect-face-tracking 箫鸣琴奏_CPP程序侠 相关资料免 ...

最新文章

  1. NCBI-SRA数据下载
  2. 随机邻域嵌入_「论文阅读」-学习用于通勤流嵌入的地理上下文嵌入
  3. golang版try..catch..
  4. 重启asp.net 命令
  5. CSS background-position 用法详细介绍
  6. PPC中检查某程序是否运行
  7. 信息系统项目管理师:第二三章:信息系统项目管理基础与立项管理
  8. C++虚析构和纯虚析构
  9. 修改RAC VIP IP
  10. code1167 树网的核
  11. 【我的Android进阶之旅】Android自定义Lint实践
  12. 操作系统之I/O管理:3、设备的分配与回收(设备控制表DCT、控制器控制表COCT、通道控制表CHCT、系统设备表SDT、逻辑设备表LUT)
  13. SQLServer的三种Recovery Model
  14. html导出表格为csv,可将HTML表格导出为Excel|csv|txt文件的jQuery插件
  15. 全球科研城市榜出炉:前二十强中国城市占6席,北京居首
  16. $.type 怎么精确判断对象类型的 --(源码学习2)
  17. Mockito + JUnit 单元测试实例
  18. HTML计算平均成绩,成绩平均分怎么算
  19. UCenter单点登录(简单版)
  20. 自适应simpson积分

热门文章

  1. canfestival 移植记录-eds使用
  2. 汇编指令对应的机器码_二进制如何变成汇编语言
  3. 最好最实用的二次开发教程 cms
  4. stylus vue 报错_【Vue】Re01 理论概念和入门上手
  5. 计算机模拟及其应用,计算机模拟的优缺点及其应用分析
  6. 新媒体管家Plus停服,新媒体民工如何接锅完成自救?
  7. Python连接Twitter API读取用户画像及推特评论
  8. 一文读懂查询sql的执行流程和底层原理
  9. openfiler简介
  10. 删除目录下的重复文件,优先删除副本