目标遮挡、目标消失、运动模糊、目标和环境的剧烈变化、目标的高速运动、相机的抖动、光照变化、背景杂波、低分辨率等。
早期跟踪模型:大部分是生成式模型。细分主要包括:
(1)基于目标模型建模:基于区域匹配、基于特征点跟踪、基于主动轮廓的跟踪算法、光流法等。
(2)基于搜索的方法:为了减少搜索范围,一种方式通过预测减少搜索范围,如:Kalman滤波、粒子滤波等。另一种为内核算法,运用最速下降法的原理, 向梯度下降方向对目标模板逐步迭代, 直到迭 代到最优位置。如:Meanshift、Camshift。
相关滤波模型:属于判别式模型,相关滤波之前,所有的跟踪都是在时域上进行,涉及复杂的矩阵求逆计算,速度慢。相关滤波在频域上进行,利用 循环矩阵可以在频域对角化的性质,减少了运算量。常用算法:MOSSE、CSK、KCF、 BACF、SAMF。
深度学习模型:基于相关滤波,使用深度学习对特征提取、特征搜索等方向进行改进。
Meanshift不能自适应物体大小。camshift做了改进,可以实现自适应物体大小尺寸。算法流程:
卡尔曼滤波主要包括两个部分:预测过程、修正过程。
步骤:
(1)初始化阶段—提取目标特征:手动选取目标,并提取目标区域的特征,即目标颜色直方图。
(2)初始化粒子:a)将粒子均匀撒在整个图像上。b)在上一帧目标附近按高斯分布散布粒子。
(3)搜索阶段:统计每个粒子的颜色直方图,与目标模型颜色直方图对比,根据巴氏距离计算权值,再对权值进行归一化处理,使得所有粒子的权值相加为1。
(4)粒子重采样:在相似度较低的地方放少量的粒子,相似度高的地方放多放粒子。(抛弃权重低的粒子)
(5)状态转移:根据 s t = A s t − 1 + w t − 1 s_t = As_{t-1}+w_{t-1} st=Ast−1+wt−1计算下一时刻粒子的位置。
(6)观测阶段:计算各个粒子与目标特征的相似度,更新粒子的权重。
(7)决策阶段:计算坐标与相似度的加权平均值,得到跟踪目标下一帧的位置。
(8)根据预测出的位置,重复(3),(4),(5),(6),(7)。
2010年,CVPR上《visual object tracking using adaptive correlation filters》首次将相关滤波用到跟踪算法上。后面接着出现了一些经典的相关滤波算法。这里主要介绍MOSSE、CSK、CN、KCF、SAMF、SRDCF。相关滤波大佬:Martin Danelljan(MD)。相关滤波的发展可以总结为:
(1)从单特征到多特征:CSK、CN、KCF。
(2)尺度的变换:SAMF。
(3)模型的改进:SRDCF。
根据图像处理相关操作的原理以及最小二乘法可以推导出滤波器的模版函数:
H ∗ = 1 N ∑ i = 1 N G i ⊙ F i ∗ F i ⊙ F i ∗ H^{*} =\frac{1}{N}\sum_{i=1}^{N}\frac{G_i\odot F^*_i}{F_i\odot F^*_i} H∗=N1∑i=1NFi⊙Fi∗Gi⊙Fi∗
其中, N N N为样本数, G i G_i Gi为输出的频域表达式(预测结果), F i F_i Fi为输入的频域表达式。
算法步骤:
(1)初始化
在初始帧的训练集 f i f_i fi用的是第一帧里8个在追踪窗里随机生成干扰,训练集的输出 g i g_i gi就是通过他们的峰值生成,相当于图片的中心。
H ∗ = 1 N ∑ i = 1 N G i ⊙ F i ∗ F i ⊙ F i ∗ H^{*} =\frac{1}{N}\sum_{i=1}^{N}\frac{G_i\odot F^*_i}{F_i\odot F^*_i} H∗=N1∑i=1NFi⊙Fi∗Gi⊙Fi∗
(2)参数更新
CSK算法通过使用高斯核计算相邻两帧之间的相关性,取响应最大的点为预测的目标中心。该算法是固定目标大小的,对发生尺度变化的目标不鲁棒,速度150FPS。CSK是MOSSE的一个改进,改进主要包括:
(1)在滤波器的函数中,引入正则化项。
m i n w , b ∑ i n L ( y i , f ( x i ) ) + λ ∣ ∣ ω ∣ ∣ 2 min_{w,b} \sum_{i}^n L(y_i,f(x_i))+\lambda||\omega||^2 minw,b∑inL(yi,f(xi))+λ∣∣ω∣∣2
(2)生成的样本方式,不再是通过随机扰动产生。而是引入了循环矩阵得到样本。(在KCF中描述)
(3)引入核函数, w = ∑ α i ϕ ( x i ) w = \sum\alpha_i\phi(x_i) w=∑αiϕ(xi),最优 α \alpha α为:
(4)计算响应:
CN是在CSK基础上的改进,采用多通道的颜色color names。
KCF是CSK的改进,在CSK的基础上引入了多通道hog特征
KCF的基本思路:
(1)在 I t I_t It帧中,在当前位置 p t p_t pt附近采样(利用循环矩阵得到),训练一个回归器。这个回归器可以计算一个小窗口的响应。
(2)在 I t + 1 I_{t+1} It+1帧中,在前一帧位置 p t p_t pt附近采样,用前述回归器判断每个采样窗口的响应(即做相关操作)。
(3)取响应值最大的采样作为本帧的位置。
(4)重复(1),(2),(3)
回归器的训练
(1)获取样本—循环矩阵
一维循环矩阵:
二维循环矩阵可以分别通过x和y的一位循环实现向量的位移。样例:
(2)一维脊回归
通过求解:
min ω ∣ ∣ X ω − y ∣ ∣ 2 + λ ∣ ∣ ω ∣ ∣ 2 \min_\omega||X\omega-y||^2+\lambda||\omega||^2 minω∣∣Xω−y∣∣2+λ∣∣ω∣∣2
得到:
ω = ( X H X + λ ) − 1 X H y \omega =(X^HX+\lambda)^{-1}X^Hy ω=(XHX+λ)−1XHy
(3)循环矩阵傅氏对角化
所有的循环矩阵都能够在傅氏空间中使用离散傅里叶矩阵进行对角化, X = F d i a g ( x ) F H X = Fdiag(x)F^H X=Fdiag(x)FH,其中 F F F为:
将 X X X对角化结果带入一维脊回归中:
(3)将线性映射换为非线性映射
α = F d i a g ( K x x + λ ) − 1 F H y \alpha =Fdiag(K^{xx}+\lambda)^{-1}F^Hy α=Fdiag(Kxx+λ)−1FHy
其中, K x x = ϕ ( x ) T ϕ ( X ) T K^{xx} = \phi(x)^T\phi(X)^T Kxx=ϕ(x)Tϕ(X)T。
(4)计算响应
f ( z ) = k x z ⊙ α f(z)=k^{xz}\odot\alpha f(z)=kxz⊙α
特征:HOG多通道特征
优点:速度很快,172FPS,tracking by detection。
缺点:不能适应尺度变化和快速变化。
相关滤波:CSK–CN–KCF可参考:
https://blog.csdn.net/ycc2011/article/details/84111182
VOT2014第一名。7FPS,在KCF等基础上做了以下改进:
(1)多特征融合:HOG+CN+灰度。
(2)多尺度:引入尺度池,缩放比例:{0.985,0.99,0.995,1.0,1.005,1.01,1.015}。
其流程大致如下:
将当前帧的图像输入,经过尺度池,得到不同尺度的图像,然后,将这些经过缩放后的图像送入上一帧训练得到的KCF相关滤波器,得到不同尺度下的坐标以及响应值。响应值最大的即为最合适的尺度。
由于相关滤波是模板类方法, 如果目标快速运动或者发生形变, HOG 特征不能实时地跟上目标的变化, 会 产生错误样本造成分类器性能下降, 导致边界效应 的产生. SRDCF 针对这一问题, 扩大了搜索区域, 加入空间正则化约束。
加入正则化约束具体:
(1)相关滤波的响应图可以通过如下公式计算
S S S是响应图, x x x是检测图像片, f f f是滤波器。
(2)优化方程为:
w w w为惩罚函数,中间小,周围大。作用:离得越远的样本对滤波器的影响越小。 w w w的图像为:
深度学习的特点在于其特征提取能力,可以通过大量的数据训练,提取比传统方法更好的能够代表目标的特征。基于深度学习的跟踪可以分为:
(1)对相关滤波算法改进:C-COT、ECO。
(2)利用辅助图片数据预训练深度模型,在线跟踪时微调:DLT、SO-DLT。
(3)利用现有大规模分类数据集预训练的CNN分类网络提取特征:FCNT。
(4)利用跟踪序列预训练,在线跟踪时微调:MDNet
(5)运用递归神经网络进行目标跟踪的新思路:RTT、DeepTracking
2016年VOT冠军,结合深度学习提取特征(CNN+HOG+CN)。速度较慢。
(1)第一列:针对搜索区域,提取不同分辨率的特征(VGG),不同分辨率采用插值的方式(0.96,0.98,1.00,1.02,1.04)五种缩放方式。
(2)第二列:通过针对不同层训练的相关滤波器进行计算(卷积层,训练得到,每帧以目标为中心提取一个样本)。
(3)第三列:通过对特征图卷积得到响应图(Confidence Scores)。
(4)第四列:将第三列的响应图进行加权平均,就得到了第四列的结果,响应图极大值位置就是预测的目标位置。
在C-COT基础上做了改进,速度比C-COT更快,60FPS。主要包括以下几个改进。
(1)减少了特征的维度,从D维特征中选择了其中C维;减少了滤波器个数,C-COT每一维对应一个滤波器,而ECO只选择了其中共献较多的滤波器。
(2)减少相同样本,ECO用了高斯混合模型(GMM)来生成不同的component,每一个component基本就对应一组比较相似的样本,不同的component之间有较大的差异性。这样就使得训练集具有了多样性。
(3)减小模型更新频率,ECO这里的做法很简单,就是简单地规定每隔Ns帧更新一次。注意这里的Ns只是对模型的更新,样本的更新是每一帧都要做的。最后的实验中,Ns设置为6。
首次将深度学习应用到跟踪上,2013年OTB50数据集上排名第5。
FCNT主要对VGG-16的Conv4-3和Conv5-3层输出的特征图谱(feature map)做了分析,并得出以下结论:
(1) CNN 的feature map可以用来做跟踪目标的定位。
(2) CNN 的许多feature map存在噪声或者和物体跟踪区分目标和背景的任务关联较小。
(3) CNN不同层的特征特点不一。高层(Conv5-3)特征擅长区分不同类别的物体,对目标的形变和遮挡非常鲁棒,但是对类内物体的区分能力非常差。低层(Conv4-3)特征更关注目标的局部细节,可以用来区分背景中相似的distractor,但是对目标的剧烈形变非常不鲁棒。
FCNT的框架:
(1) 对于Conv4-3和Conv5-3特征分别构建特征选择网络sel-CNN(1层dropout加1层卷积),选出和当前跟踪目标最相关的feature map channel。
(2) 对筛选出的Conv5-3和Conv4-3特征分别构建捕捉类别信息的GNet和区分distractor(背景相似物体)的SNet(都是两层卷积结构)。
(3) 在第一帧中使用给出的bounding-box生成热度图(heat map)回归训练sel-CNN, GNet和SNet。
(4) 对于每一帧,以上一帧预测结果为中心crop出一块区域,之后分别输入GNet和SNet,得到两个预测的heatmap,并根据是否有distractor决定使用哪个heatmap 生成最终的跟踪结果。
小结:FCNT根据对CNN不同层特征的分析,构建特征筛选网络和两个互补的heat-map预测网络。达到有效抑制distractor防止跟踪器漂移,同时对目标本身的形变更加鲁棒的效果,也是ensemble思路的又一成功实现。但实测鲁棒性不高,现有的更新策略还有提高空间。
MDNet网络分为两个部分,前部分为共享层,提取特征,后部分Domain-specific层针对不同的跟踪目标建立不同的任务。
训练时:每个mini-batch训练一个类别的序列,训练完后,共享层获得了对序列共有特征的表达能力。
在线跟踪阶段,针对不同的跟踪序列:
(1) 随机初始化一个新的fc6层。
(2) 使用第一帧的数据来训练该序列的bounding box回归模型。
(3) 用第一帧提取正样本和负样本,更新fc4, fc5和fc6层的权重。
(4) 之后产生256个候选样本,并从中选择置信度最高的,之后做bounding-box regression得到最终结果。
(5) 当前帧最终结果置信度较高时,采样更新样本库,否则根据情况对模型做短期或者长期更新。
(1) 首先对每一帧的候选区域进行网状分块,对每个分块提取HOG特征,最终相连获得基于块的特征。
(2) 得到分块特征以后,RTT利用前5帧训练多方向RNN来学习分块之间大范围的空间关联。通过在4个方向上的前向推进,RNN计算出每个分块的置信度,最终每个块的预测值组成了整个候选区域的置信图(confidence map)。受益于RNN的recurrent结构,每个分块的输出值都受到其他关联分块的影响,相比于仅仅考虑当前块的准确度更高,避免单个方向上遮挡等的影响,增加可靠目标部分在整体置信图中的影响。
(3) 由RNN得出置信图之后,RTT执行了另外一条pipeline。即训练相关滤波器来获得最终的跟踪结果。值得注意的是,在训练过程中RNN的置信图对不同块的filter做了加权,达到抑制背景中的相似物体,增强可靠部分的效果。
(4) RTT提出了一个判断当前跟踪物体是否被遮挡的策略,用其判断是否更新。即计算目标区域的置信度和,并与历史置信度和的移动平均数(moving average)做一个对比,低于一定比例,则认为受到遮挡,停止相关滤波器模型更新,防止引入噪声。
近年来,跟踪算法主要思路均采用判别式模型,以下是跟踪必要的几个模块:特征提取(选择特征的方法),关联匹配模块(相关滤波采用相关滤波器,部分跟踪算法则采用欧式距离),检测器(相关滤波采用训练一个回归器,部分跟踪算法则选择深度学习检测)。