MOSSE算法论文笔记以及代码解释

论文《Visual Object Tracking using Adaptive Correlation Filters》
代码github

1.论文idea

提出以滤波器求相关的形式,找到最大响应处的位置,也就是我们所跟踪的目标的中心,进而不断的更新跟踪目标框和滤波器。

2.跟踪策略

如图,根据初始帧圈出的目标框训练滤波器,最大响应处为目标框的中心
点,当移动到下一帧时,根据滤波器求相关的算法获得最大响应值,进而得
出下一帧图像上的跟踪目标框。
MOSSE算法论文笔记以及代码解释_第1张图片蓝色框为背景,黄色框为手动圈出的跟踪目标框,绿色点为目标框中心点,红色点为下一帧中目标移动后与滤波器相关得到的最大响应点,然后根据响应点画出跟踪目标框,之后按此规律不断更新迭代。

3.算法流程

(1) 目标滤波器H的计算公式
输入图像f,理想输出g

g = f ∗ h g=f*h g=fh

变换到频域中

G = F ⊙ H ∗ G=F⊙H^* G=FH
其中,⊙表示逐元素相乘,*表示的是共轭

H i ∗ = G i F i H_i^*=\frac{G_i} {F_i} Hi=FiGi

(2) 寻找合适的滤波器h
找到合适的滤波器h,使之满足下列的式子

m i n H ∗ ∑ i ∣ F i ⊙ H ∗ − G i ∣ 2 min_{H^*}\sum_i|F_i⊙H^*-G_i|^2 minHiFiHGi2

对H*求偏导,使得结果为0,可得到最优解

H ∗ = ∑ i G i ⊙ F i ∗ ∑ i F i ⊙ F i ∗ H^* = \frac{\sum_iG_i⊙F_i^*}{\sum_iF_i⊙F_i^*} H=iFiFiiGiFi

(3) 在线更新
A i = ∑ i G i ⊙ F i ∗ A_i=\sum_iG_i⊙F_i^* Ai=iGiFi B i = ∑ i F i ⊙ F i ∗ B_i=\sum_iF_i⊙F_i^* Bi=iFiFi,则
H i = A i B i H_i = \frac{A_i}{B_i} Hi=BiAi
A i = η G i ⊙ F i ∗ + ( 1 − η ) A i − 1 A_i=\eta G_i⊙F_i^*+(1-\eta)A_{i-1} Ai=ηGiFi+(1η)Ai1
B i = η F i ⊙ F i ∗ + ( 1 − η ) B i − 1 B_i=\eta F_i⊙F_i^*+(1-\eta)B_{i-1} Bi=ηFiFi+(1η)Bi1
η \eta η表示的是学习率,论文给出的是0.125
在这里表示更新的滤波器是由当前帧和前一帧来决定的。

4.代码解读

  1. 输入训练图片
    MOSSE算法论文笔记以及代码解释_第2张图片

  2. 在第一帧中圈出跟踪目标
    MOSSE算法论文笔记以及代码解释_第3张图片

  3. 画出理想的高斯输出
    MOSSE算法论文笔记以及代码解释_第4张图片
    MOSSE算法论文笔记以及代码解释_第5张图片
    凸出的部分即为圈住目标的响应处。

  4. 创造更多的训练集,以增强算法的鲁棒性
    MOSSE算法论文笔记以及代码解释_第6张图片
    利用rand_warp函数生成更多的训练样本,因为根据首帧图像的一个样本进行训练,是非常理想化的,但是根据一个样本训练出来的是过拟合的,为了去除过拟合,要得到更多的训练网络。另一方面,如果是第一张图片的目标做平移运动,滤波器可以非常好的跟踪,但如果是做一些伸缩等非刚性变换,则滤波器是无法跟踪的。

  5. 在线训练更新
    MOSSE算法论文笔记以及代码解释_第7张图片
    6.可视化
    MOSSE算法论文笔记以及代码解释_第8张图片

  6. 总结
    mosse算法是将相关滤波应用于跟踪的开山之作,因此还需要很多的地方需要完善,对我这个目前刚入门跟踪的小白来说,目前能看出的就是该算法的精度不够,当跟踪目标自身动作幅度过大时,容易出现跟丢的状态,我目前认为是训练样本过少的问题。

你可能感兴趣的:(计算机视觉,深度学习,机器学习)