SPSTracker:消除次尖峰的简单实用方案

最近发现了一个很好的网站paperwithcode,这个网站汇总了大量机器学习论文及其代码。网站对机器学习领域做了详细的分类,可以很方便的在该网站找到感兴趣领域的最新成果和SOTA。SPSTracker便是其中一篇。

SPSTracker: Sub-Peak Suppression of Response Map for Robust Object Tracking发表于IIIA2020,代码可以在此处看到。

次尖峰


目标跟踪过程中若出现了两个以上的相似目标,次尖峰便会产生,次尖峰往往会影响跟踪效果,下图来自skating2的一帧,红框代表ground_truth,绿框为ASRCF跟踪器输出:

NxhUS.md.png

跟踪器在这一帧便跟踪错了,而且这个错误会持续积累,从而使跟踪器越来越差。该帧的response_map如下:

Nxjlt.md.png

消除方法


SPSTracker提出了一个十分简单却有效的方案,Peak Response Pooling(PRP),PRP是如下计算的:
\hat x_{rc} = max(x_{r1},x_{r2},…,x_{rn}) + max(x_{1c},x_{2c},…,x_{mc})
其中,x_{rc}代表位于原式响应的第r行第c列的值。直接看公式或许不太好理解,看下面的图会更直观些,如图,最左边的矩阵为原式矩阵,存在两个尖峰,峰值分别是4和3,经过中间的PRP后,得到的结果变成单尖峰了。

NxlMC.md.jpg

可以发现的是,最开始的响应图中的最大值(也就是4)的位置经过PRP后,仍是处理后响应图中的最大值的位置。那么PRP操作是不是就没有意义了呢?其实不是这样的,作者并不是在寻找目标阶段使用PRP,而是在目标函数中加入PRP操作。把原来的f(x,w)换成了PRP(f(x,w)),再进行反复迭代求解最优解。增加了PRP操作能够使每次的PRP(f(x,w))更接近于二维高斯函数,使得训练模型更加稳定。

但是,该方法很难运用在相关滤波类跟踪器上,因为在目标函数中加入PRP(f(x,w))这样非线性的操作会使得目标函数很难优化。