在七月算法上报了《无人驾驶实战》课程,老师讲的真好。好记性不如烂笔头,记录一下学习内容。 课程入口,感兴趣的也可以跟着学一下。
—————————————————————————————————————————
跟踪是在连续帧中根据物体信息关联(确定)同一物体
运动模型(motion model):根据历史的位置和速度 ( 大小和方向) 建立模型,预测当前帧中物体的大致位置
外观模型(appearance model):根据历史外观(颜色 尺寸 2D/3D框 轮廓等)建立特征模型,在预测位置附近进行搜索得到更准确的位置信息。
Online:根据物体的历史信息(位置 颜色 形状等)找到当前帧中的位置 (单目标跟踪的常见模式 ),随视频实时跟踪。
Offline:根据每一帧中每个物体的信息在整个时间序列上关联得到轨迹(多目标跟踪 / 统筹考虑),视频已结束,回放跟踪。
跟踪的意义:
- 跟踪保持ID一致
- 跟踪辅助检测:检测失败时,有些跟踪可以处理
- 跟踪比检测更快: 检测没有利用历史信息每一次都是从0开始。 而跟踪可以提前知道要跟踪物体的“历史”信息,基于这些信息可以大致预测下一帧的位置,在附近做小幅搜索匹配得到最终预测框。
- 检测辅助跟踪:跟踪可能会跟丢(遮挡 运动模糊等)
- 检测纠正跟踪的累计误差:一般间隔执行检测,检测中间执行跟踪,每隔一段时间用检测来重新纠正跟踪
- 检测使用大规模样本数据训练出来的它对某一类别理解更深刻,跟踪对某一具体物体理解更深刻
跟踪分为单目标跟踪与多目标跟踪
单目标跟踪的分类:
- 产生式模型:经典目标跟踪方法(2010年之前), Meanshift、Particle Filter、Kalman Filter、基于特征点光流跟踪 (无法处理和适应复杂的跟踪变化,鲁棒性和准确度都被前沿的算法所超越)
- 鉴别式模型:检测与跟踪相结合的方法,BOOSTING、MIL、MEDIANFLOW 、TLD(2010之后)
- 基于相关滤波的跟踪算法: MOSSE KCF(2012)
- 基于深度学习的跟踪方法: GOTURN ........
1.产生式模型
Meanshift:
- 对目标建模(比如利用目标的颜色分布来描述目标,计算目标在下一帧图像上的概率分布)
- 目标的搜索一直沿着概率梯度上升的方向,迭代收敛到概率密度分布的局部峰值上
- 适用于目标的色彩模型和背景差异比较大的情形,计算速度快
基于特征点的光流算法:
- 对目标进行建模:在目标上提取一些特征点(用特征点的集合来表征目标)
- 下一帧计算这些特征点的光流匹配点,统计得到目标的位置(稀疏光流法)
- 在跟踪的过程中,不断补充新的特征点,删除置信度不佳的特征点,以适应目标在运动中的形状变化
Kalman Filter
本质上就是这五个公式
运动方程、观测方处、卡尔曼增益等。
Particle Filter
一个形象的比喻:放一群警犬去寻找犯人
- step1: 让狗熟悉犯人的气味:对目标建模(例如颜色直方图)得到目标特征表达
- step2: 均匀分布几只狗的初始位置(开始时不知道犯人的大概位置)让他们通过附近的气味判断是否有犯人的踪迹:按照均匀分布撒下一些“粒子”,提取“粒子”附近的特征,通过某种形似读度量确定“粒子”与目标的匹配程度
- step3: 有些狗发现了犯人的踪迹,有些没有发现。那就把没有发现踪迹的那些狗放置到发现踪迹的位置附近继续进行搜索。按照高斯分布在可疑点附近撒下更多粒子,提取特征,判断与目标的匹配度。确保更大概率跟踪上目标。
- step4: 重复step3
2.判别式模型
运动模型:一般在上一帧位置附近生成几个候选框
外观模型:利用分类器计算候选框得分(“物体” or “背景”),判断候选框是否是预测位置
跟检测的思路几乎一样(候选框+分类) 判别式跟踪方法更能适应跟踪过程中的复杂变化,利用检测来做跟踪(Tracking By Detection)逐渐成为主流
BOOSTING
外观模型: onlie版本的AdaBoost,正样本:初始框 负样本: 正样本之外许多图片块
原理:在新图像中“之前框位置”附近的每一个位置计算分类得分。取得分最高的做为新的位置。 新位置的框再次作为正样本训练分类器(每一帧都如此)
特点:算法比较老,效果一般,跟踪失败不可知
MIL
外观模型: 改进正样本选择: 物体框+框周围的小区域生成的框;大多数正样本框内物体不居中(包括新位置框),正负样本包(“bags”) 只需要正样本包里有一个居中的正样本即可
原理:在新图像中“之前框位置”附近的每一个位置计算分类得分。取得分最高的做为新位置。 新位置+周围生成的框再次作为正样本训练分类器(每一帧都如此)
特点:效果很好,部分遮挡的情况下表现也不错,相比BOOSTING偏移没有那么大,跟踪失败不可知, 全遮挡不行
MEDIANFLOW
原理:前后向都进行跟踪,最小化两段轨迹的误差
特点:可靠的反馈跟踪丢失,可靠的轨迹, 适用于小幅运动无遮挡场景,大幅运动容易跟踪失败
TLD (Tracking-Learning-Detection
原理:
跟踪器:帧间跟踪物体,用经典的方法跟踪目标,论文中采用基于光流的特征点统计方法确定目标在下一帧的跟踪位置
检测器:检测所有出现过的物体,并与跟踪结果综合得到最终的输出结果
学习器:评估检测器的错误并更新检测器防止再次出现类似错误。确定目标的最佳位置之后,学习模块(Learning)负责对跟踪器和检测器进行修正(在目标的周围选取更多的正负样本在线更新检测器的模型)
特点:适用于尺度变化大的物体,运动物体,多帧被挡住,遮挡较多(例如被另外一个物体完全挡住)过多错误的正样本导致它几乎不可用(容易跟踪非目标物体)
3.基于相关滤波的跟踪算法
始于2012 年 P.Martins 提出的 CSK 方法,从数学上完美解决密集采样与分类器学习问题。密集采样的过程可以通过循环矩阵来实现,分类器的学习过程可以用快速傅立叶变换转化成频域内的计算,不受 SVM 或 Boost 等学习方法的限制。无论是用线性分类还是核分类,整个学习过程十分高效
- 优点:实时性
- 缺点:目标的快速移动,形状变化大导致更多背景被学习进来等都会对 CF 系列方法造成影响
MOSSE(Minimum Output Sum of Squared Error )
外观模型:adaptive correlation for object tracking which produces stable correlation filters (引入CF:一种可学习的相似性度量)
特点:
- 光照,尺度,姿态,非刚体形变都很鲁棒
- 可以检测遮挡(peak-to-sidelobe ratio)暂停并恢复跟踪
- 高帧率(450 fps )
- 容易实现但是精度和复杂的跟踪算法差不多
- 效果不如基于深度学习的方法
KCF(Kernelized Correlation Filters)
外观模型:利用多个正样本间的重叠关系同时提升跟踪的速度和精度: 新位置极其周围产生的正样本可以通过循环矩阵来快速生成,循环矩阵傅利叶对角化性质大大简化计算加速分类器的学习过程,基于 HOG 特征的分类器,(DeepSRDCF:深度学习提取的特征+KCF 的方法)
特点:精度速度都比MIL高,反馈跟踪失败比BOOSTING and MIL更好, 无法解决全遮挡情况
4.基于深度学习的跟踪法
GOTURN
原理:卷积神经网络
特点:对视角变化 光照变化 形状变化 都很鲁棒。无法有效处理遮挡情况
多目标跟踪
单个目标 -> 多个目标 既有单目标的难点又新增了多目标自身的难点
按照轨迹形成的时间顺序:
- 在线:逐帧,类似人眼实时跟踪目标,获得每帧图像检测结果,把检测结果跟已有的跟踪轨迹进行关联
- 离线:跟踪算法运行是在视频已经获取结束,所有检测结果都已经提前获取。离线多目标跟踪算法把检测结果集合作为观察,把轨迹看作检测集合的一种划分,因此跟踪问题转化为子集优化的过程。
- 按照算法机制: 预测校正 / 关联方式
- 按照算法的数学表示: 概率统计最大化 / 确定性推导
匈牙利算法
二分图匹配是很常见的算法问题,一般用匈牙利算法解决二分图最大匹配问题
- 什么是二分图? 二分图又称作二部图,是图论中的一种特殊模型。 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i in A,j in B),则称图G为一个二分图。
- 什么是匹配? 把右图想象成3位工人和4种工作,连线代表工人愿意从事某项工作,但最终1个工人只能做一种工作,最终的配对结果连线就是一个匹配。匹配可以是空。 对应到跟踪任务中就是运动轨迹与当前帧内物体的匹配
- 什么是最大匹配? 在愿意从事工作的基础上,能够最多配成几对。