开始之前,需要了解一下傅立叶变换和卷积之间的关系:
公式中:
x
t
,
y
t
x_t,y_t
xt,yt分别为随时间变化的信号,假设
x
t
=
s
i
n
(
t
)
,
y
t
=
c
o
s
(
t
)
x_t=sin(t), y_t=cos(t)
xt=sin(t),yt=cos(t)。
x
t
x_t
xt和
y
t
y_t
yt的卷积,可以看做一个新的关于
t
t
t的函数。因此其傅立叶变换也是一个关于频率
f
f
f的函数。
F
(
x
t
)
=
X
(
f
)
\mathcal{F}(x_t)=X(f)
F(xt)=X(f)
F
(
y
t
)
=
Y
(
f
)
\mathcal{F}(y_t)=Y(f)
F(yt)=Y(f)
从上推导过程可以看出来,两个函数的卷积可以看做两个函数在傅立叶域的积,
X
(
f
)
X(f)
X(f)和
Y
(
f
)
Y(f)
Y(f)分别为两个关于频率
f
f
f的函数,因此直接相乘即可。
最后,可以看出
x ( t ) ∗ y ( t ) = F − 1 ( X ( f ) Y ( f ) ) x(t)*y(t)=\mathcal{F}^{-1}(X(f)Y(f)) x(t)∗y(t)=F−1(X(f)Y(f))
本文1在MOSSE2的基础上,引入了Dense Sampling的采样方法和核函数。
接下来按照论文的顺序进行分析
摘要
主要介绍了创新点的来源
1.介绍
这部分介绍了目标跟踪的相关研究内容,主要提出了Dense Sampling。
这是论文中的稠密采样(本文中提及的Dense Sampling)和随机采样的比较,随机采样是在target的附近随机的采集p个子框。稠密采样是采集所有的子框用来训练。那么稠密采样就带来了如何数据量大的问题,这将导致计算量大的问题,为了解决这个问题,本文将相关滤波的过程放在了傅立叶空间中进行计算,并且引入了核函数。这使得稠密采样的速度遥遥领先于随机采样。
随机采样的代码可以在MOSSE的代码3中发现,下面是随机采样的代码
def _rand_warp(self,img):
'''
该函数对第一帧的目标框进行随机重定位,刚性形变,减轻漂移。
'''
h, w = img.shape[:2]
C = .1
ang = np.random.uniform(-C, C). # 生成一个随机数
c, s = np.cos(ang), np.sin(ang)
# 根据随机数生成一个随机的仿射变换矩阵
W = np.array([[c + np.random.uniform(-C, C), -s + np.random.uniform(-C, C), 0],
[s + np.random.uniform(-C, C), c + np.random.uniform(-C, C), 0]])
center_warp = np.array([[w / 2], [h / 2]])
tmp = np.sum(W[:, :2], axis=1).reshape((2, 1))
W[:, 2:] = center_warp - center_warp * tmp
warped = cv2.warpAffine(img, W, (w, h), cv2.BORDER_REFLECT)
return warped
2. 稠密采样的学习
2.1 正则化风险最小值
这部分使用了核函数,参考核技巧(Kernel trick)解析
和【从入门到放弃】线性回归