在目标跟踪问题中,我们经常会遇到一些对公式的求导(特别是偏导)运算。由于公式中的变量大多数是向量,矩阵,还有些实数和复数的操作,因此针对他们的求导运算可能会和普通变量的操作有些不一样。下面将详细介绍一下经典的跟踪算法-MOSSE方法中的求导运算。
MOSSE跟踪算法的简单介绍
假设
f
是输入的图像,
g
是对应的理想输出, MOSSE算法的目标就是找到一个合适的滤波器
h
,使得其满足以下公式:
h=minh∑i|fi⋆h−gi|2
其中
⋆
表示训练表示两者卷积的操作,接下来将其转化到频域可得:
H=minH∑i|Fi⊙H∗−Gi|2
注意这里的
F
,
G
和
H
都是频域中的变量,
F
是对原输入图像
f
做2D的傅里叶变化而得到的,有
F=F(f)
。
⊙
表示对应元素相乘,
∗
表示共轭操作,
i
表示训练数据的个数,即这里有
i
组训练数据
{fi,gi}
。因为这里的操作都是以元素为单位进行的,不同位置的元素之间的运算都是独立的,所以上式可以写成:
Hwv=minHwv∑i|FiwvHwv∗−Giwv|2
其中
Hwv
表示矩阵
H
中的第
w
行第
v
列的元素。一般的求解方法就是,求出上面式子对于变量
H
的偏导,进而求出最优解。由于在上面的式子中包含
H
的共轭部分,因此需要对
Hwv
和
Hwv∗
分别进行求导。
求偏导过程
对
Hwv∗
求偏导:
0=∂∂Hwv∗∑i|FiwvHwv∗−Giwv|2
,将该式展开可得:
0=∂∂Hwv∗∑i(FiwvHwv∗−Giwv)(FiwvHwv∗−Giwv)∗
0=∂∂Hwv∗∑i[(FiwvHwv∗)(FiwvHwv∗)∗−(FiwvHwv∗)Giwv∗−Giwv(FiwvHwv∗)∗+GiwvGiwv∗]
0=∂∂Hwv∗∑iFiwvHwv∗HwvFiwv∗−FiwvHwv∗Giwv∗−GiwvFiwv∗Hwv+GiwvGiwv∗
0=∂∂Hwv∗∑iFiwvHwv∗HwvFiwv∗−FiwvHwv∗Giwv∗−GiwvFiwv∗Hwv+GiwvGiwv∗
这里面的
Fiwv
,
Hwv∗
等变量均为单一的数,因此可以互换位置,如下所示:
0=∂∂Hwv∗∑iFiwvFiwv∗HwvHwv∗−FiwvGiwv∗Hwv∗−Fiwv∗GiwvHwv+GiwvGiwv∗
0=∑iFiwvFiwv∗Hwv−FiwvGiwv∗
这样就可以计算
Hwv
的值:
Hwv=∑iFiwvGiwv∗∑iFiwvFiwv∗
,将其转化为矩阵形式如下:
H=∑iFi⊙Gi∗∑iFi⊙Fi∗
参数更新方式
Hi=∑iFi⊙Gi∗∑iFi⊙Fi∗
,所以有
Hi∗=∑iGi⊙Fi∗∑iFi⊙Fi∗
,令
Ai=∑iGi⊙Fi∗
,
Bi=∑iFi⊙Fi∗
,有
Hi∗=AiBi
更新时有:
Ai=ηGi⊙Fi∗+(1−η)Ai−1
,
Bi=ηFi⊙Fi∗+(1−η)Bi−1
,即当前帧中的滤波器
Hi∗
与前一帧中的滤波器
Hi−1∗
的关系为:
Hi∗=ηGi⊙Fi∗+(1−η)Ai−1ηFi⊙Fi∗+(1−η)Bi−1=ηAi+(1−η)Ai−1ηBi+(1−η)Bi−1
参考文献资料
Visual object tracking using adaptive correlation filters[C]// CVPR, 2010:2544-2550.