本文是浏览多篇博文后,总结供自学使用,因为有时间跨度上的原因,没有标明各原博文的引用,如有侵权,请告知我删除或标明出处,先在此感谢
一、目标跟踪分类
(1)根据目标分类
单目标
多目标
行人重检测(Person Re-ID)
姿态跟踪
多目标多摄像头跟踪(MTMCT)
工业检测的机器视觉中,我们更关心单目标跟踪(SOT)和多目标跟踪(MOT)问题
(2)根据时间分类
在线或离线跟踪
工业检测中,一般是实时在线检测
二、问题难点
形态变换、尺度变换、遮挡与消失、图像模糊等
工业检测中,我们更关心光照和图片模糊等问题,对于检修时进行零部件跟踪,需要考虑遮挡和消失问题。
三、模型分类
生成式模型:首先建立目标模型或提取目标特征,在后续帧进行相似特征搜索,逐步迭代实现目标定位
鉴别式模型:将目标和背景同时考虑在内,通过对比目标模型和背景信息的差异,将目标模型提取出来,从而得到当前帧目标位置
四、算法分类
1 传统算法
- 特征匹配 SIFT SURF Harris角点
- 光流法 通过用视频序列在相邻帧之间的像素关系 寻找像素的位移变化,来判断目标的运动状态
- Meanshift 基于概率密度分布的跟踪方法,适用于目标彩色模型和背景差异较大的情况,如人脸跟踪
- 粒子滤波 基于粒子分布统计,分多次随机撒下粒子,通过比较粒子和目标相似度分配粒子数目。该方法不适合对目标特征建模,而适合对运动模型建模
- 传统算法的缺点
- 没有考虑背景信息,目标遮挡、光照变化、运动模糊时,算法会失败
- 速度慢(FPS≈10),FPS > 30 才有实时性
2 基于核相关滤波的算法
MOSSE、CSK、KCF、BACF、SAMF
相关滤波,衡量两个信号的相似程度
速度快,数百帧每秒
MOSSE思想:越是相似的两个目标相关值越大
3 基于深度学习的算法
卷积网络学习特征 + 相关滤波或Struck(结构化) 的跟踪框架
卷积输出特征优于HOG或CN特征
五、为什么采用跟踪算法不用检测???
- 跟踪速度比检测快,因为不需要逐帧检测,而是通过一次检测后的先验信息,在接下来的n张图片上通过跟踪算法实现目标识别
- 检测失败时,通过跟踪器的运动预测,可以提供找回检测目标的帮助。
- 跟踪算法可以保留标识,可以区分同一类别的不同目标
六、目标检测的跟踪过程
第一步,运动模型 估计 对象的大概位置
第二步,外观模型 精确调整此位置
第三步, 如果目标简单且外观变化不大,对目标生成目标模板
如果对象外观有巨大变化,需要在线分类器训练
七、Opencv中核相关滤波算法比较
KCF:快、准、综合效果好
CSRT:精度最高,但速度慢
MSSE: 最快,但精度较差
多目标检测 MultiTracker :
就是多个单目标检测器同时跟踪不同目标,结合到一起
所消耗的时间是单目标检测算法的5~7倍
八、基于深度学习的多目标跟踪方案
Yolo作为检测器 + Deep_Sort作为跟踪器
九、补充
解决遮挡问题通常的解决方法是联系上下文信息,通过运动模型推导出消失物体的位置,有臆想成分。