目标跟踪初步了解
卡尔曼滤波
与 光流法 : 都可以用来预测当前帧中的目标在下一帧的位置(用于得到上一帧目标更新到当前帧的位置等)------本质上是一个运动模型,来预测目标在当前帧时刻运动到的位置
3个矩阵:
- 状态转移矩阵F: F * x_previous[x,y,h,w,vx,vy,vh,vw] = x_current[x,y,h,w,vx,vy,vh,vw],在卡尔曼滤波模型中认为目标是匀速的!
- 噪声矩阵
- 测量矩阵
匈牙利算法:
找出当前帧的某个目标,是否与前一帧的某个目标(而这个前一帧的目标并不是从前一帧取,而是用卡尔曼滤波等预测得到的前一帧目标在当前帧的位置)相同。
( 位置距离 + 特征距离 = 是同一目标衡量)
#本质上是匹配模型,但是多目标的全局匹配,被匹配的对象是运动预测到的上一帧目标在当前帧时刻的所有目标(位置) 及 检测到的当前帧所有目标(位置)
解决的是基于代价的分配问题.那么只需要将目标间的距离作为代价,来分配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;越小模型越不准!
跟踪不需要识别,但是现在主流的跟踪都是基于检测的跟踪
运动目标检测(从背景中分离出运动的前景):
- 帧间差分
- 背景差分
- 光流法
运动目标跟踪:
- 卡尔曼滤波
- 均值飘移
- 相关滤波(上个时代的巅峰)
- 深度学习:基于SiamFC系列发展
人的行为识别
(属于模式识别,有一段典型动作编码,只需与此编码比对,区分行为动作类型。
目的:给一段视频序列打动作类型标签)
应用:视频检索,视频推荐
- 模板匹配法:鲁棒性差(13年论文,传统方法)
- 状态空间法:(概率转移法):通过将系列动作构建状态图,然后通过某种概率将这些状态节点的依存关系联系起来
动态贝叶斯网络
隐马科夫模型 - 图卷积
DeepSORT:
track by detect
demo结果可见明显的问题:(why)
- 当两个目标靠的较劲有overlap,id会被影响,赋予最新的ID(作为新目标出现)
- 目标即使没有靠的近,也会发生跟丢,进而分配最新的ID的情况
处理问题1中的短时间遮挡导致的id交叉:
- 同时考虑了运动信息deep motion features---DMF及表观特征信息deep appearance features---DAF,来计算tracks和detections的代价矩阵,基于卡尔曼滤波预测下一帧位置
- 且对检测的每一帧都用一个小型的Reid网络来记录特征信息,如果同时满足两种信息则不会赋予新的ID