原文来自 Joao F. Henriques 等人的“High-Speed Tracking with Kernelized Correlation Filters”,原工作见12年的ECCV,现有工作见15年的PAMI。
本文后面提及的“我们”默认指原作者。
另外,为与算法课程的内容区分,将“algorithm”译为“方法”。你管我~ ╭( ̄m ̄*)╮
大多目前的滤波器的核心部分是一个可分性滤波器,该滤波器的任务是区分目标与周围环境。为解决自然图像中的变化,典型的方法是用平移和缩放的样本块(patches)来训练分类器。这样的样本集充满冗余 - 将所有重叠的像素约束为相同的像素。基于这一简单的观察,为包含上千个平移的图像块的数据集提出了一分析模型。可用离散傅立叶变换对角化已有的循环矩阵,极大降低了存储和计算量。有趣的是,对于线性回归,我们的公式与相关滤波器等价(一些最快的有竞争力的跟踪器常用相关滤波器);然而,对于核回归,不同于其它核方法(复杂度与其线性部分相同),提出新的核化的相关滤波器(Kernelized Correlation Filter)。在核化的相关滤波器的基础上,提出通过线性核,扩展线性相关滤波器至多通道,我们称为“对偶的相关滤波器(Dual Correlation Filter)”。尽管每秒运行上百帧,且用到的代码行数很少(方法 1),KCF和DCF仍在包含 50 个视频的基准数据集上超越了Struck或TLD。为进一步发展,该跟踪框架已开源。
此处偷懒,略去 n 个字。o(‵▽′)ψ
之前提出该工作的初版。首次表明,用循环平移的样本关联岭回归(Ridge Regression)与经典的相关滤波器。从而可用 O(nlogn) 的快速傅立叶变换来快速学习(而不是计算代价高昂的矩阵代数)。尽管受限于单通道图像,仍提出了第 1 个核化的相关滤波器。另外,提出计算所有循环平移的闭式解。其计算代价同样为 O(nlogn) ,并被派生至径向基与点积核。
目前的工作很大程度上附加了初版的工作。用更简单的对角化来获得原结果( 4−6 节)。扩展原工作至多通道,用先进的特征使效果有很大提升( 7节 )。在原结果的基础上添加大量新的分析和直观的解释。也将原实验从 12 个视频扩展至 50 个视频,并添加基于方向梯度直方图(HOG,而不是原像素(raw pixel))的KCF跟踪器的变种。用线性核,另外提出计算代价很低但效果逼近非线性核的一个线性多通道滤波器。称之为对偶的相关滤波器(DCF),并表明DCF如何关联一系列最近的计算代价更高的多通道滤波器。实验上,KCF已优于无特征提取的线性滤波器。使用HOG特征后,使线性DCF与非线性KCF的效果远优于顶级跟踪器(Struck或TLD),同时以每秒上百帧舒适运行。
本节,为不同平移后提取的图像块提出一分析模型,计算线性回归的影响。并表明线性回归与经典的相关滤波器间的联系。这些组件使我们能研究 5−7 节中更复杂的算法。
这里将关注岭回归,因为岭回归可输出简单的闭式解,并可实现接近更成熟方法(如支持向量机)的效果。训练的目的,是为寻找函数 f(z)=wTz ,该函数可最小化样本 xi 与它们的回归目标 yi 上的平方误差。
总的来说,求解大的线性方程阻碍了解的实时计算。所以,下一段将看到可超越该限制的 xi 的特例。
为表述简洁,这里将关注单通道的一维信号。可直接泛化至多通道的二维图像( 7 节)。
考虑一个 n×1 的向量 x ,该向量表示感兴趣物体的 1 个图像块,将其看作基样本(base sample)。目标是训练基样本( 1 个正例)和平移基样本得到的若干个假样本(视为反例)。用循环移位操作符来平移一维向量,得到置换矩阵(permutation matrix),
则乘积 Px=[xn,x1,x2,...,xn−1]T 为 x 平移 1 个元素,形成小平移。可用矩阵的乘方 Pux 来链式移位 u 次,从而实现更大平移。 u 为负数时朝反方向移位。用该方法水平移动后的 1 维信号和 2 维图像的移动,见下图。
细心的读者会注意到最后一个元素的环绕引起相对真实平移的畸变。然而,可用填充(padding)和取窗口(windowing)减轻这些不想要的属性。实际上,甚至对大平移,仍会正确建模信号的大多数元素(上右图),这一事实解释了循环移位在实际中效果不错。
由于循环属性,每周期性地 n 次平移会得到相同的信号 x 。这意味着整个平移后的信号可用
又由于循环属性,等价地,可将该集合的前半部分视为正向移位,且将该集合的后半部分视为反向移位。
为了用移位后的样本计算回归,可用方程 (5) 来计算数据矩阵 X 的行:
得到的模式见上左图,它是循环矩阵,具有一些有趣的特性。注意到该模式是确定的,完全由生成的 x (X的第 1 行)指定。
最有意思和有用的事实也许是,对所有的生成向量 x ,经过离散傅立叶变换(DFT)后,所有的循环矩阵都是对角阵。可表达为
常数矩阵 F 被称为DFT矩阵,计算任意输入向量的DFT时,DFT矩阵是唯一的矩阵,即 F(z)=n√Fz 。这是可能的,因为DFT为线性操作。
方程 (7) 表达了一般循环矩阵的特征分解。共享的,确定的特征向量 F 位于许多罕见特征(如交换性或闭式反演)的根处(?)。
当循环数据包含循环移位时,现在可用这一新知识来简化方程 (3) 。能够仅用到对角阵是吸引人的,因为对角阵上所有的操作都是按元素操作。
考虑项 XHX ,可视该项为非中心的协方差矩阵。用方程 (7) 替换该项中的内容,
XH=Fdiag(x^∗)FH.
因对角阵是对称阵,对角阵的Hermitian转置仅得到该矩阵的复数共轭 x^∗ 。另外,可消除元素 FHF=I 。该属性为 F 的单位性,可在许多表达式中删除它。剩下的部分,
上述步骤概述了用循环矩阵对角化表达式的一般方法。递归地应用循环矩阵至线性回归的完整表达式(方程 (3) ),能将大多数内容放入对角阵,
该分数表示按元素除。所以易用反向DFT来恢复空间域中的 w ,恢复的计算代价与前向DFT相同。递归的对角化生成方程 (12) ,见附录 A.5 。
此时,从经典信号处理发现一意外的公式 - 它的解为正则化的相关滤波器。
进一步探索这一关联前,必须与明确提取图像块并求解一般回归问题相比,强调方程 (12) 的计算效率。比如,受限于矩阵的求逆与乘积,岭回归的计算代价为 O(n3) 。另外,除了DFT,代价接近线性 O(nlogn) 。方程 (12) 中所有的操作都是按元素操作( O(n) )。但对典型的数据大小,它大大降低了存储和计算。
相关滤波器从80年代起,已成为信号处理的一部分,它是无数傅立叶域中目标函数的解。直到最近,它们因MOSSE滤波器重现,尽管它们很简单且帧率很高,但在跟踪上显示了出色的效果。
这些滤波器的解貌似方程 (12) (见附录 A.2 ),但两者有两点关键的区别。首先,从目标函数(具体地,在频域中构造的目标函数)推导 MOSSE 滤波器。其次,以特别的形式添加 λ 以避免除 0 。上述的推导更为深入,通过指定以带循环移位的岭回归为起点,并得到相同的解。
对于用经典的信号处理和现代的相关滤波器提出的工具集,循环矩阵丰富了工具集,并应用傅立叶的技巧至新的方法。下一节,我们将看到关于非线性滤波器训练的例子。
用“核方法”来构造更强大的非线性函数 f(z) 。最吸引人的特点是尽管优化问题的变量集不同(对偶空间),但它仍然是线性的。缺点是评估 f(z) 的复杂度一般会随样本数目增加。
然而,无论是为训练还是评估,用我们新的分析工具,将显示可能突破这一限制,并获得与线性相关滤波器一样快的非线性滤波器。
该部分简单回顾核方法,并定义相关术语。
用核方法来映射线性问题的输入到非线性的特征空间 ψ(x) ,包括:
1) 将解 w 表达为样本的线性组合:
2) 用点积的形式 ψT(x)ψ(x′)=k(x,x′) 来写入方法,该方法用核函数 k (如高斯核或多项式核)计算。
所有样本对间的点积通常保存在 1 个 n×n 的核矩阵 K ,元素值为:
给定循环数据,后面几节将呈现如何能避免核方法的大多缺点。
核化的岭回归的解为,
现在,如果能证明对于循环移位的数据集, K 是循环的,则可对角化方程 (16) 并获得线性情况的快速解。这貌似是对的,但并不总是成立。任何线性映射 ψ(x) 不会保证保留任何结构。然而,我们能强加使 K 循环的条件。得到的核矩阵非常多,且可使用大多数核。
定理 1. 给定循环数据 C(x) ,对任意置换矩阵 M ,当核函数满足 k(x,x′)=k(Mx,Mx′) ,对应的核矩阵 K 是循环矩阵。
证明见附录 A.2 。这意味着,对于保留循环结构的核,它必须平等对待数据的所有维度。幸运的是,这包含大多有用的核。
例 2. 下述的核满足定理1:
很容易检查这一事实,因为同时重排序 x 和 x′ 的维度并不改变这些核的 k(x,x′) 。这适用于任何通过交换操作(和,乘积,最小和最大)结合维度的核。
了解哪些核可用于使 K 循环,就可能像线性情况一样来对角化方程 (16) ,得到
为更好地理解 kxx 的角色,发现定义更一般的核相关很有用。两个任意向量( x 与 x′ )的核相关是向量 kxx′ ,该向量的元素为
可类比得更远。因为核等价于高维空间 ψ(⋅) 中的点积。另一角度看方程 (18)
注意我们如何仅需在核的自相关( 1 个 n×1 向量,随样本数目线性增加)上计算和操作。与核方法上传统的智慧(要求计算 1 个 n×n 核矩阵,随样本数目二次缩放)相反。对 K 确切结构的了解使我们比一般性方法做得更好。
因检测后跟踪(tracking by detection)设定中普遍存在被平移的图像块,所以,优化 α 并不是唯一一个可被加速的问题。后面一段将研究循环移位模型对检测,甚至计算核相关的影响。
很少想单独对一个图像块来评估回归函数 f(z) 。为快速检测感兴趣物体,一般希望在若干图像(即对若干候选图像块)位置上评估 f(z) 。这些块可用循环移位来建模。
用 Kz 表示所有训练样本与所有候选块间的(对称的)核矩阵。因所有的训练样本和图像块都分别为基样本 x 和基块 z 的循环移位,所以, k(Pi−1z,Pj−1x) 给定了 Kz 的每个元素。易证明该核矩阵满足定理 1 ,并对该核矩阵循环。
类似 5.2节 ,仅需第一行来定义核矩阵:
从方程 (15) ,可计算所有候选块的回归函数
注意到 f(z) 为向量,它包含所有 z 循环移位的输出,即全检测响应。为有效计算方程 (21) ,对角化 f(z) 得到
尽管我们发现更快的训练和检测方法,这些方法仍每次(分别对 kxx 和 kxz )都要计算核相关。回忆到核相关包含两个输入向量的所有相对移位的核计算。它为最后的计算瓶颈,因为原来 n 核评估大小为 n 的信号会有二次复杂度。然而,用循环移位模型可在代价高昂的计算中有效利用冗余。
对某函数 g ,点积核有形式 k(x,x′)=g(xTx′) 。那么, kxx′ 具有元素
尤其是,对多项式核 k(x,x′)=(xTx′+a)b ,
对某些函数 h ,RBF核具有形式 k(x,x′)=h(||x−x′||2) 。 kxx′ 的元素为
实际上,方程 (27) 是点积核(见方程 (29) )的特例。只要展开模,
同前面一样,计算全部的核相关的时间仅为 O(nlogn) 。
前两节的方法取决于酉变换(如DFT)后不变的核值。这对其它核并不总成立,如交叉核(intersection kernel)。我们仍可用快速训练和检测的结果( 5.2 节和 5.3 节),但
必须用计算代价更昂贵的滑窗法来评估核相关。
本节,将表明对偶空间中计算的优势是多通道(如HOG描述子的方向箱(bin))仅须简单地在傅立叶域中相加。该特性扩展到线性情况后,在特定条件下,显著简化了近期提出的多通道相关滤波器。
为处理多通道,本节将假定向量 x 连接了 C 个通道的单通道向量(如HOG变种的31个方向箱), x=[x1,...,xC] 。
注意到第 6 节中所有的核基于参数的点积或模。仅相加每个通道的点积即可计算点积。DFT的线性使我们可在傅立叶域中每个通道求和点积的结果。具体举例,可应用该论断至高斯核,得到类似方程 (30) 的多通道核,
对线性核 k(x,x′)=xTx′ ,简化前一节的多通道扩展,得到
最近有 3 组单独将线性相关滤波器扩展至多通道。他们将问题分解成每个DFT频率 1 个线性系统(就岭回归而言),训练速度快过非结构方法。另外Henriques等人泛化分解至其它训练方法。
然而,方程 (32) 表明,对偶空间中用线性核可训练多通道的线性分类器,但仅用按元素操作。这可能一开始意想不到,因为那 3 组工作要求代价更加昂贵的矩阵求逆。
解决上述分歧是可能的,因为我们仅考虑单个基样本 x 。此时,不管特征和通道的数目,核矩阵 K=XXT 的大小为 n×n 。该核矩阵关联基样本的 n 个循环移位,并可通过DFT的 n 个基来对角化。由于 K 完全是对角阵,使用按元素操作即可。然而,若考虑两个基样本, K 的大小变为 2n×2n ,且 n 个DFT的基不再能完全对角化 K 。不完全对角化(块对角化)要求代价更昂贵的操作,即以前那些工作提出的操作。
用有趣的对称参数,多个基样本和单通道的训练可在原空间中完成(仅用按元素操作,见附录 A.6 )。接着推理非中心的协方差矩阵 XXT (而不是 XXT )。此时获得最初的MOSSE滤波器。
总之,对快速的按元素操作,可选择多通道(对偶空间中,得到DCF)或多基样本(原空间中,得到MOSSE),但两者不能同时选择。这对时间敏感的应用(如跟踪)有重要的影响。一般情况的计算代价更昂贵且大多适合离线训练。
Matlab中用两个基于KCF(用高斯核)和DCF(用线性核)的简单滤波器。因多项式核的结果与高斯核的结果实际上相同且要求更多的参数,所以并未给出多项式核的结果。进一步测试变种:直接操作原像素值,具有 4 个像素的单元的 HOG 描述子,特别是 Felzenszwalb 的变种。注意到当约束在单通道(原像素)时,我们的线性DCF等价于MOSSE,但它也支持多通道(如HOG)。跟踪器几乎不要求参数,所有视频用到的参数值见表 2 。
KCF的方法主题见Matlab代码的 方法1 。不像该工作的早期版,该工作准备处理多通道(作为输入数组的第 3 维)。它使用了 3 个函数: train (Eq. 17 ), detect (Eq. 22 )与 kernel_correlation (Eq. 31 ), kernel_correlation 用到前两个函数。
跟踪器的流程非常简单,且不包含误检测或运动建模的任何启发式信息。第 1 帧,用图像块在目标的初始位置 train 模型。该图像块大于目标,以提供些上下文。对每个新帧,在以前的位置上 detect 图像块,并将输出最大值的目标位置更新为 1 。最后,在新的目标位置上 train 新的模型,并为使跟踪器具有些记忆,用前面帧与当前新帧,线性插入 α 和 x 获得的值。
用最近包含 50 个视频序列的基准数据集来测试我们的跟踪器。该数据集包含许多以前工作用到的视频,所有可避免对小数据集过拟合。
至于评估跟踪器的标准,并未选择平均位置误差或其它帧间平均的测量标准,因为此时跟丢的跟踪器的效果取决于偶然因素(即跟丢的位置),而它们会对跟丢的跟踪器强加任意的惩罚,使得跟踪器无法相互比较。类似的替换方法为边界框覆盖(bounding box overlap),即使目标位置完美被跟踪,该方法仍不利于对尺度间不跟踪的跟踪器以巨大的惩罚。
为评估选择另一种日渐受欢迎的方法,精度曲线(precision curve)。当预测的目标中心位于真实目标中心的距离阈值内时,则可认为该帧被正确跟踪。精度曲线仅表明一系列距离阈值时正确被跟踪的帧的百分比。注意到绘制所有距离阈值的精度时,不需要任何参数。这使曲线无二义性且易于解释。低距离阈值时的高精度意味着跟踪器更加精确,同时在大的阈值范围时跟丢的目标将被避免获得完美的精度。当需要有代表性的精度分数时,与以前工作相同,选择距离阈值为 20 个像素点。
先总结表 1 和上图中所有视频的结果。为比较,也报告了其它几个系统的结果(包括一些适应性最强的跟踪器—Struck和TLD)。与我们简单的应用(方法 1 )不同,这些跟踪器包含大量的工程改造。Struck对许多种特征和一不断增大的支持向量池操作。TLD专门面向重检测,它使用的一系列结构化规则具有很多参数。
尽管存在这样的不对称性,KCF仅操作原像素即可达到有力表现(见上图)。此时,高斯核引入的丰富的隐式特征明显优于DCF。
理论上,单通道特征(原像素)DCF等价于MOSSE滤波器。为直接比较,上图包含原作者的MOSSE跟踪器的结果。DCF与MOSSE滤波器的表现很接近,显示用它俩时任何特别的差异貌似不太重要。然而,核化的方法(KCF)性能明显提高。
用HOG替换原像素,使KCF和DCF以相对巨大的幅度超越了TLD和Struck。这表明,与其它使用相似特征的跟踪器相比,高性能最关键的因素是有效结合来自目标所在环境的上千个负样本,且结合负样本时计算费用很低。
记时。如前面提到,闭式解的总体复杂度为 O(nlogn) ,因此求解很快。跟踪器的速度与被跟踪区域的大小直接相关。当比较基于相关滤波器的跟踪器时,区域大小是重要的因素。
MOSSE跟踪与目标物体相同大小的区域,而我们跟踪的区域大小为目标物体大小的 2.5 倍(平均大小为 116×170 )。缩小被跟踪区域大小可使FPS逼近 615 (见表 1 ),但发现这会降低性能,尤其对核化的变种。另一来自表 1 的有趣发现是,即使考虑计算HOG特征的费用,操作HOG特征(每个空间单元有 31 个HOG特征)也能比操作原像素稍微更快些。由于 1 个HOG描述子表示 1 个 4×4 的像素单元,小尺寸的DFT平衡了迭代特征通道的代价。使用 4 核台式机,KCF/DCF处理所有 50 个视频(约 29,000 帧)的时间不到 2 分钟。
每个序列中跟踪器将面临挑战—如,光照变化或遮挡,用描述这些挑战的属性来表示基准数据集中的视频。不必分析单个视频,这些属性有助于表征大数据集中跟踪器的行为。下图给出 4 个属性的结果:非刚体变形,遮挡,视野外的目标和背景干扰。
考虑非刚体变形和遮挡,我们跟踪器的HOG变种当然会鲁棒,因为据了解,这些特征都高度可分。然而,用核来弥补特征上的缺陷,原像素上仅用KCF仍可改善至几乎与Struck和TLD效果一样好。
因缺乏跟丢恢复机制,所以我们系统的挑战是视野外的物体。这方面TLD比大多其它跟踪器的效果要好,说明它侧重重检测与跟丢恢复。这样的工程改善可能会有利于我们的跟踪器,但实际上,KCF/DCF效果优于TLD,说明重检测和跟丢恢复并非为决定性因素。
背景干扰会严重影响几乎所有的跟踪器,包括提到的Struck和TLD(对Struck影响略轻)。对我们的跟踪器变种,用隐式包含(被跟踪物体周围的上千个负样本)来解释背景干扰。此时,连我们跟踪器的原像素变种都很接近最有性能,同时TLD,CT,ORIA和MIL显示较差的效果,我们猜想是负样本欠采样造成的。
下图给出其它属性的结果。总的来说, 7 项挑战中,提出的跟踪器在其中 6 项最鲁棒,除了低分辨率项,效果和其它跟踪器差不多,但劣于Struck。
本文工作中,我们表明可对自然图像的平移来分析建模,显示在某些条件下,生成的数据与核矩阵是循环的。用DFT对角化核矩阵为快速处理平移的方法提供了整体思路。将该思路用于线性和核化的岭回归,获得的跟踪器运行上百FPS且仅用了少量代码。我们的基本方法的扩展貌似适用于其它问题。自从该工作的初版以来,检测和视频时间恢复中的其它方法都曾成功运用循环数据。未来工作的一有趣方向是放宽周期性边界的假设,放宽假设有可能会提高性能。从其它使用循环数据的目标函数(包括经典的滤波器,如SDF或MACE),和更鲁棒的损失函数(而不是平方误差)的研究中,也可能获得很多有用的方法。我们也希望将该框架泛化至其它操作符,如仿射变换和非刚体变形。
作为相关滤波器的标准,用余弦窗来加权输入图像块(原像素或提取的特征通道),以平滑地移除循环假设引起的图像边界处的不连续性。为提供些上下文与额外的负样本,被跟踪区域的大小为目标大小的 2.5 倍。
回顾到训练样本包含基样本的移位,所以必须为 y 中的每个训练样本指定 1 个回归目标。回归目标 y 仅用 1 个高斯函数,居中的目标取值为1,其它移位根据空间带宽 s 平滑衰减至 0 。高斯目标比二值标签更平滑,并有益于减少傅立叶域中的振铃效应。
一个小问题是决定 y 的哪个元素为居中样本的回归目标。尽管直观上它貌似为输出平面的中央(见下图 (a) ),但实际上正确的选择为左上角元素(见下图 (b) )。对此的解释是计算傅立叶域中两幅图像间的互相关和转换回空间域后,正是得到的左上角元素对应 0 移位。当然,因为总处理循环信号,高斯函数的尖峰必须从左上角绕到其它角,如下图 (b) 所示。在一些滤波器应用中,将高斯函数的尖峰置于回归目标的中间是常见的,且会使相关输出不必移位半个窗口(移位半个窗口必须事后修正,通常Matlab中可用 fftshift 函数)。
快速傅立叶变换(FFT)的大多应用不会计算单位DFT(unitary DFT),另一常见错误来自于该事实。这意味着除非常数因子修正FFT的输出,否则不会保留信号的 L2 模。可以说可能如下来计算单位DFT
该定理假设 k(x,x′)=k(Mx,Mx′) ,对任意置换矩阵 M ,有
现在,根据循环矩阵的元素 X=C(x) (方程 (6) )满足
该部分显示方程 (17) 更细节的推导。先替换岭回归公式(即方程 (16) )中的 K=C(kxx) ,对其对角化
对角化方程 (21) ,使用前面几节中相同的属性。有
这里是来自 4.4 节步骤的更细节版本。很类似核化的情况。先用方程 (10) 替换岭回归(方程 (3) )部分公式,
这里,不知是原作者推得蒙,还是我看得蒙,见原文方程 (57) 。
进一步地,因对角矩阵与向量的乘积仅为它俩的按元素乘积。
方程 (12) 与MOSSE滤波器间唯一的不同是MOSSE滤波器在多个基样本 xi (的循环移位)上最小化误差,而仅用单个基样本 x 即可定义方程 (12) 。方程 (12) 表示清晰,易推导一般情况。也注意到用对偶的公式来支持多通道,但MOSSE滤波器不支持多通道。
在循环矩阵 Xi 中表示每个基样本 xi 的循环移位。接着,用数据矩阵 X′=[X1 X2 …]T 替换方程 (3) ,得
以灰度图像块为例(HOG特征的获取查看fhog.m文件,反正没几行~)来看看整个跟踪的流程。按原作者的思路,分别说明第 1 帧(帧1)和后面的新帧(帧1+)。
后面有新帧(im)到来时,需更新被跟踪目标的位置。
patch = get_subwindow(im, pos, window_sz);
zf = fft2(get_features(patch, features, cell_size, cos_window));
kzf = gaussian_correlation(zf, model_xf, kernel.sigma);
response = real(ifft2(model_alphaf .* kzf));
[vert_delta, horiz_delta] = find(response == max(response(:)), 1);
if vert_delta > size(zf,1) / 2,
vert_delta = vert_delta - size(zf,1);
end
if horiz_delta > size(zf,2) / 2,
horiz_delta = horiz_delta - size(zf,2);
end
pos = pos + cell_size * [vert_delta - 1, horiz_delta - 1];
目标的位置更新后(除了第 1 帧使用标定的目标位置),需更新模型的参数和变化的图像块模版。
patch = get_subwindow(im, pos, window_sz);
xf = fft2(get_features(patch, features, cell_size, cos_window));
kf = gaussian_correlation(xf, xf, kernel.sigma);
alphaf = yf ./ (kf + lambda);
if frame == 1,
model_alphaf = alphaf;
model_xf = xf;
else
model_alphaf = (1 - interp_factor) * model_alphaf + interp_factor * alphaf;
model_xf = (1 - interp_factor) * model_xf + interp_factor * xf;
end
插值更新 模型更新 α^ 时,涉及到输出 y^ ,但 y^ 并不直接参与更新。
假设窗口大小为 [32,32] ,单元大小为 1 ,高斯标签的标准差为 10 ,计算 y^ 。
yf = fft2(gaussian_shaped_labels(output_sigma, floor(window_sz / cell_size)));
高斯形标签和 y^ 的输出如下图所示,两者的大小为窗口大小。
所以, y^ 一直保持不变,因为与整幅图像中的目标位置不同,理想的目标图像块中心一定响应最大(循环移位后左上角最大)。相当于前者是全局标签,而后者是局部标签。
模型从上一帧图像块映射到理想的目标图像块响应。可理解成整幅图像块模版对整幅输入图像块匹配,响应最大的位置视作模版在输入上的中心,但匹配规则不同(这里选择计算加权,而不是距离)。
更新参数是为让模型可以去做到用上一帧去预测当前帧的最大响应位置;更新模版是为让模版逐渐逼近当前帧的目标图像块,换句话说,模版通过简单的插值来记忆目标的历史图像块序列。
亲测好用(但我不否认TLD也好用),但它简单啊~ 对自己新拍的视频,我主要调padding(目标图像块往外扩一些)。
原文首先介绍循环矩阵,但实际应用时找不到循环矩阵的计算。其实,Joao老爷强调循环矩阵是为说明循环矩阵与求解核回归的关系,以及循环矩阵与相关滤波器的关系。
类似高斯核等的核函数的矩阵都是循环矩阵;循环矩阵经过离散傅立叶变换后可得到对角阵;对角阵的计算使核化的岭回归可快速求解输入和输出的非线性函数;对目标图像块边更新位置边采样,在线更新目标图像块的局部响应模型。
从推导,模型到代码… Joao,不要对读者太贴心好吗? ヾ(。 ̄□ ̄)ツ゜゜゜
不是什么新文章,所以可能有些人看过。理解有误之处欢迎指出~