目标跟踪初步了解

卡尔曼滤波

与 光流法 :  都可以用来预测当前帧中的目标在下一帧的位置(用于得到上一帧目标更新到当前帧的位置等)------本质上是一个运动模型,来预测目标在当前帧时刻运动到的位置

3个矩阵:

  1. 状态转移矩阵F: F * x_previous[x,y,h,w,vx,vy,vh,vw] = x_current[x,y,h,w,vx,vy,vh,vw],在卡尔曼滤波模型中认为目标是匀速的!
  2. 噪声矩阵
  3. 测量矩阵

匈牙利算法:

找出当前帧的某个目标,是否与前一帧的某个目标(而这个前一帧的目标并不是从前一帧取,而是用卡尔曼滤波等预测得到的前一帧目标在当前帧的位置)相同。
( 位置距离 + 特征距离 = 是同一目标衡量)

#本质上是匹配模型,但是多目标的全局匹配,被匹配的对象是运动预测到的上一帧目标在当前帧时刻的所有目标(位置) 及 检测到的当前帧所有目标(位置)
		
		
		解决的是基于代价的分配问题.那么只需要将目标间的距离作为代价,来分配ID
			    Person_c1       person_c2         person_c3
		
		person_p1      d11             d12                d13
		
		person_p2      d21	       d22                d23
		
		person_p3      d31             d32                d33
		  
		最终设定一个d阈值,如果最终分配的路径结果中,比如为d11 d22 d33,但是d11>d_thresh则,认为当前帧的person_c1是没有分配成功的目标,认为其为新增目标,分配新增ID!!!

因此先用卡尔曼滤波或光流法对将上一帧目标更新到当前帧,然后用这些与当前帧的新的检测detections进行匈牙利匹配,来确定是直接分配前帧已有ID还是新增ID.
结果:有些前帧的ID与当前帧的detections匹配上了,有些没匹配可能导致前帧的ID在当前帧没了(跟丢),也可能导致当前帧的detections没有匹配(新增ID))

跟踪调研

现在主流的跟踪基于检测的,tracking by detecting
目标跟踪更多考虑的是对目标的表达,跟踪过程中对目标表示的更新,跟踪中对周围环境变化信息、对时空信息的利用等等;
跟踪的难点在于关联和状态估计(位置/速度/旋转)
正因如此,跟踪任务才即可被看作是生成式任务,也可以被看作为判别式任务,既可以通过深度学习的方法来暴力解决,也可以通过传统统计学、机器学习的方法来解决优化。

关于跟踪:

基于颜色特征
基于相关滤波
基于深度学习

MOTA指标:multiple objects tracking accuracy

多目标跟踪准确率 = 1-(所有帧中未正确跟踪的目标数/所有帧中包含的目标数)

最大是1, 最小是-infinity;越小模型越不准!

跟踪不需要识别,但是现在主流的跟踪都是基于检测的跟踪

运动目标检测(从背景中分离出运动的前景):

  1. 帧间差分
  2. 背景差分
  3. 光流法

运动目标跟踪:

  1. 卡尔曼滤波
  2. 均值飘移
  3. 相关滤波(上个时代的巅峰)
  4. 深度学习:基于SiamFC系列发展

人的行为识别

(属于模式识别,有一段典型动作编码,只需与此编码比对,区分行为动作类型。
目的:给一段视频序列打动作类型标签)

应用:视频检索,视频推荐

  1. 模板匹配法:鲁棒性差(13年论文,传统方法)
  2. 状态空间法:(概率转移法):通过将系列动作构建状态图,然后通过某种概率将这些状态节点的依存关系联系起来
    动态贝叶斯网络
    隐马科夫模型
  3. 图卷积

DeepSORT:

track by detect

demo结果可见明显的问题:(why)
  1. 当两个目标靠的较劲有overlap,id会被影响,赋予最新的ID(作为新目标出现)
  2. 目标即使没有靠的近,也会发生跟丢,进而分配最新的ID的情况

处理问题1中的短时间遮挡导致的id交叉:

  1. 同时考虑了运动信息deep motion features---DMF表观特征信息deep appearance features---DAF,来计算tracks和detections的代价矩阵,基于卡尔曼滤波预测下一帧位置
  2. 且对检测的每一帧都用一个小型的Reid网络来记录特征信息,如果同时满足两种信息则不会赋予新的ID
原文地址:https://www.cnblogs.com/Henry-ZHAO/p/13918284.html