论文标题 “Visual Object Tracking using Adaptive Correlation Filters”
原文地址
用滤波器对目标外观进行建模,并通过卷积操作来执行跟踪。
参考阅读:
目标跟踪经典算法——MOSSE(Minimum Output Sum Square Error)
目标跟踪整理(1)之MOSSE
基于以初始帧中给定的bounding box来选择目标,并基于示例图像上(基于初始帧得到)训练滤波器来建模目标的外观。在接下来的每一帧中,通过训练好的关联滤波器来跟踪目标,相关输出中最大值对应的位置表示目标的新位置,然后根据该新位置执行在线更新。
MOSSE算法的基本思想:首先根据第一帧图像框选的目标构建一个响应,该响应在所绘制的目标框的中心处的响应值最大,向四周缓慢衰减(二维高斯分布)。然后我们希望找到一个滤波器使得图像和这个滤波器进行相关运算之后刚好得到的就是这个响应,那么就可以根据响应值最大处得到目标的位置了。当新的一帧图像进来时,用之前得到的滤波器与新的图像进行相关运算,就可以得到新的目标位置了。
f f f:搜索窗口,即全局图像的局部区域
h h h:滤波器
相关操作: g = f ∗ h g=f*h g=f∗h
为了让跟踪过程更快,应用相关过滤器的过程在频域内,即使用傅里叶变换(FFT),其使卷积运算变成元素乘法运算(切记)。
F F F:输入图像的2D傅里叶变换,即 F = F ( f ) F=\mathcal{F}(f) F=F(f)。
H H H:滤波器的2D傅里叶变换,即 H = F ( h ) H=\mathcal{F}(h) H=F(h)。
则上式可写为:
G = F ⊙ H ∗ G=F \odot H^* G=F⊙H∗
其中, ⊙ \odot ⊙表示逐元素相乘操作,而 H ∗ H^* H∗表示 H H H的复共轭。
为什么是复共轭呢?
因为相关和卷积在某些地方(深度学习领域,如图像卷积操作)可能当成相同的运算,但实际上两者是有差别的(数学意义上的卷积,比如信号处理/传统图像处理)。
f f f与 h h h做相关实际上是 f f f和旋转了180度的 h h h做卷积。关于这点,也有疑问,相关为什么是翻转了180度的卷积操作呢?
GPT4的回答如下:
为什么卷积的定义和深度学习中的卷积不一样呢?这篇回答中提到了,本质原因是:数学中的卷积和卷积神经网络中的卷积严格意义上是两种不同的运算。具体来说:
OK,重新捋一下思路,整个过程可以总结为:
预处理操作如下:
MOSSE是一种从较少的训练图像中生成滤波器的算法。因此,其需要一组训练图像 f i f_i fi和训练输出 g i g_i gi。
参照原文, g i g_i gi是基于ground truth生成的,其为训练图像中以目标中心为中心的紧凑2D高斯形状峰值( σ = 2 \sigma=2 σ=2)。
为了找到将训练输入映射到所需训练输出的滤波器,MOSSE找到了一个滤波器 H H H,该滤波器 H H H可以最小化实际输出与真实输出之间的平方误差之和,即:
min H ∗ ∑ i ∣ F i ⊙ H ∗ − G i ∣ 2 \mathop{\min}_{H^*} \sum_{i}{|F_i\odot H^*-G_i|}^2 minH∗i∑∣Fi⊙H∗−Gi∣2
所以可以明白为什么叫MOSSE(Minimum Output Sum of Squared Error)了吧?
对 H ∗ H^* H∗求导,令其为0,可得到闭式解:
H ∗ = ∑ i G i ⊙ F i ∗ ∑ i F i ⊙ F i ∗ H^*=\frac{\sum_{i}G_i \odot F_i^*}{\sum_{i}F_i \odot F_i^*} H∗=∑iFi⊙Fi∗∑iGi⊙Fi∗
初始化
为了训练滤波器,需要一组训练图像,但是能够得到的只有初始帧图像。因此使用随机仿射变换构建训练图像,以及对应的训练输出 g i g_i gi,其峰值对应于目标中心。
在线更新
在跟踪过程中,通常会面临由旋转、尺度缩放、光照变化,甚至进行非刚性变形等因素引起的外观变化。因此,滤波器需要在线更新才能适应跟踪目标的变化,如下所示:
H i ∗ = A i B i A i = η G i ⊙ F i ∗ + ( 1 − η ) A i − 1 B i = η F i ⊙ F i ∗ + ( 1 − η ) B i − 1 H^*_i=\frac{A_i}{B_i} \\ A_i= \eta G_i \odot F_i^* + (1-\eta)A_{i-1}\\ B_i= \eta F_i \odot F_i^* + (1-\eta)B_{i-1} Hi∗=BiAiAi=ηGi⊙Fi∗+(1−η)Ai−1Bi=ηFi⊙Fi∗+(1−η)Bi−1
其中, η \eta η表示学习率,其值越大,则对当前帧保留的信息越多,对历史信息保留的越少。文中给出 η \eta η的最佳值为0.125。
衡量峰值强度的一个简单方法为peak to sidelobe ratio(PSR),即峰值旁瓣比。
The Peak-to-Sidelobe Ratio (PSR), which measures the strength of a correlation peak, can be used to detect occlusions or tracking failure, to stop the online update, and to reacquire the track if the object reappears with a similar appearance.
这篇大概讲了一下,但还是不是很明白到底什么是Peak-to-Sidelobe Ratio。
还是看原文,PSR的定义为:
P S R = g m a x − μ s σ s PSR=\frac{g_{max}-\mu_s}{\sigma_s} PSR=σsgmax−μs
其中,旁瓣是窗口中除了峰值之外的周围11 × 11区域的像素, g m a x g_{max} gmax为滤波结果的峰值, μ s \mu_s μs和 σ s \sigma_s σs分别为旁瓣区域的平均值和标准差。
对于MOSSE来说,PSR值在20-60时代表峰值较稳定,当其值在7左右时代表跟踪失败或者发生遮挡。