【LSART(CVPR2018 Spotlight)】论文阅读笔记

Learning Spatial-Aware Regressions for Visual Tracking 论文地址 代码

写在前面

这篇文章是CVPR2018的Spotlight,在VOT2017上的效果超过了ECO和CCOT,表现还是很强的。这篇文章是将相关滤波和CNN相结合,首先提出了一个新的核函数,然后再将相关滤波的损失计算转化为用网络计算,简化了计算过程与计算复杂度。然后又使用了一个Space-Aware的CNN来做目标的提取,最后直接将这两个部分线性结合来一起跟踪,总体思路就是两个部分比较简单的结合,我觉得亮点应该就是使用神经网络来解相关滤波中的对偶计算(本人相关滤波只看过KCF的,有错见谅)。

Motivation

  • 相关滤波和CNN的跟踪方法只注重一些全局的特征,没有注意到一个空间信息,也没有意识到不同的区域应当有不同的权重;
  • 相关滤波需要生成很多的负样本,导致了冗余计算;
  • 相关滤波方法需要的参数很少,生成的模型不够有区分度,但是CNN的方法参数又太多,容易过拟合,所以可以考虑将这两种方法互补结合。

Contribution

  • 提出了一个跨patch的相似性核,使得KRR(Kernelized ridge regression)具有识别空间特征的能力;
  • 使用深度神经网络来计算KRR的参数,这些参数可以在端到端的网络中一次计算出来;
  • 在CNN中使用了空间正则化的滤波核,使得每个滤波核集作用于局部区域(有点像Attention),又使用了two-stream的网络来避免过拟合;
  • 将KRR和CNN互补结合,KRR致力于全局的特征,CNN则负责小和局部的区域。

Algorithm

1 Spatial-Aware KRR

这一节主要解释如何从最原始的脊回归问题到对偶空间,如何做到Cross-Patch, 还有如何使用神经网络来计算脊回归。

1.1 KRR with Cross-Patch Similarity(KRRCPS)

给定第 t t t 帧的 N N N个训练样本 { ( x i , y i ) } i = 1 N \{(x_i,y_i)\}_{i=1}^N {(xi,yi)}i=1N,传统的脊回归方程如下:
在这里插入图片描述
其中 x i x_i xi代表样本 i i i , y i y_i yi 代表此样本的标签,我们可以上式转化到对偶空间计算(对偶空间其实就是使用不同的基表示向量,该向量在这个空间线性可分):
在这里插入图片描述
其中 k i . j k_{i.j} ki.j 代表特征 x i x_i xi x j x_j xj 的核函数值,目前都是用线性和高斯核来计算 k i . j k_{i.j} ki.j,但是这样没有充分利用目标的空间信息,所以这里他们将一个sample分成M个patch,分别计算两个sample的每个patch的和函数值:
在这里插入图片描述
其中 m , n m,n m,n代表 M 个patch,即计算 x i x_i xi x j x_j xj 每个patch的一一对应值。使用这个核函数至少有两个优点:
(a)这个核函数的参数是通过网络学习到的,可以自适应于模型,也可使模型更加focus on那些可靠区域的相似性;
(b)patch之间更相似的部分被考虑到,可以使模型更加具有区分度。

所以为了求脊回归,我们的优化问题变成以下:
在这里插入图片描述
将上面式子带入得:
在这里插入图片描述
其中K表示核函数值矩阵:

K i j = ∑ m , n = 1 M β m , n t x i m T x j n K_{ij} = \sum_{m,n= 1}^M \beta_{m,n}^t{x_i^m}^Tx_j^n Kij=m,n=1Mβm,ntximTxjn

1.2 Network Structure for KRRCPS

观察式子 J ( α , β ) J(\alpha ,\beta) J(α,β)的最后一行,后面两项都是正则化项,所以我们计算出第一项,就可以得到后面两项了,文章将:
∑ m , n = 1 M f m T β m , n t f n α t \sum_{m,n=1}^Mf_m^T\beta_{m,n}^tf_n\alpha_t m,n=1MfmTβm,ntfnαt
分为三个部分来计算:
在这里插入图片描述
分成了这三个部分后,就可以使用神经网络来解了,这三个部分对应一下网络的三个部分,这个网络输入是特征图,输出是该特征图上的heat map,用来定位目标:
在这里插入图片描述
Module A
由上一帧得到的目标位置,先是割出一个矩形区域(一般是比上一帧的尺寸大),得到的特征图尺寸: H × W × C H \times W \times C H×W×C,然后在上面进行密集采样,得到的每个sample尺寸为 d = ( h × w × C ) d = (h \times w \times C) d=(h×w×C),采样后的特征矩阵: D t ∈ R d × N D_t \in \R^{d\times N} DtRd×N,然后对每个sample进行权值整合得:
z = D t α t z = D_t \alpha _t z=Dtαt
其中 α t ∈ R N × 1 \alpha_t \in \R^{N\times 1} αtRN×1 N N N表示采样到的样本数, α t \alpha_t αt是需要学习的参数。得到的 z z z 是一个 h × w × C h \times w \times C h×w×C 的矩阵,再把 z z z 分割成 M = M × M M = \sqrt{M}\times \sqrt{M} M=M ×M 个子区域,每个区域的尺寸为 ( h / M ) × ( w / M ) × C (h/\sqrt{M})\times (w/\sqrt{M})\times C (h/M )×(w/M )×C,然后用 v 1 t . . . v m t v_1^t ... v_m^t v1t...vmt 表示这些子区域,也就是式子A的值。

Module B
这个部分是用来算上面的B式,可以转化为于一个卷积层,使用的卷积核就是上一个部分算出来的 v 1 t . . . v m t v_1^t ... v_m^t v1t...vmt。这个部分是先把 X t X_t Xt划分为M个子区域,其中 f m f_m fm代表的是 X t X_t Xt的第m个子区域,然后每个子区域都与 v 1 t . . . v m t v_1^t ... v_m^t v1t...vmt分别做卷积,所以对每个子区域都会得到一个通道数为M的输出,因为我们一共有M个子区域,所有最终有M个输出。(这边比较难理解,文章的描述不够清晰,想要搞懂需要看代码)
在这里插入图片描述

Module C
这个部分就是把模块B得到的M个输出连接在一起,然后使用一个尺寸为 1 × 1 × M 2 1\times 1\times M^2 1×1×M2的卷积核(也就是式C中的 β m , n t \beta_{m,n}^t βm,nt)对该输出进行卷积,最后得到的就是只有一个 r r r,也就是预测到的标签。最后的参数更新公式如下(与SRDCF相似):

2 Spatial-Aware CNN

目前基于CNN的跟踪器都忽略了目标的空间结构,这样每个卷积核只作用与一个局部区域,由于CNN的目标跟踪具有局限性,所以这个文章使用了two-stream的方法(这个地方十分耗时)。主要过程如下图:
在这里插入图片描述

2.1 Spatial Regularized Kernels

这个网络主要为了提取目标的空间信息,他们先是把输入特征图按通道分成 C 1 / 4 C1/4 C1/4 个组,每个组的特征map尺寸: 46 × 46 × ( C 1 / 4 ) 46\times 46\times (C_1/4) 46×46×(C1/4),其中 C 1 C_1 C1为前两层卷积后输出的通道数,然后每个组负责目标的一个部分。先是利用伯努利分布给特征图上蒙一层mask,在这一组中所有卷积核权重定义如下:
W c ( p , q , r ) = M c ( p , q ) W_c(p,q,r) = M_c(p,q) Wc(p,q,r)=Mc(p,q)
也就是这整个组的核都作用于一个区域。经过这个层卷积后的输出:
O c = ( F c ⊙ W c ) ∗ W c + b O_c = (F_c \odot W_c)*W_c +b Oc=(FcWc)Wc+b
上式中的 ⊙ \odot 是指值对值的乘积,也就是把权重作用在一个具体值上, ∗ * 代表卷积值。 F c ∈ R K h × K w × K c F_c \in \R^{K_h \times K_w \times K_c} FcRKh×Kw×Kc,代表通道c的卷积核。

在计算完四个部分的输出之后,使用一个距离转移池化层(Distance Transform Pooling Layer)来整合四个部分。公式如下:
D f ( s ) = max ⁡ t ∈ ϱ ( f ( t ) − d ( s − t ) ) D_f(s) = \max_{t \in \varrho}(f(t)-d(s-t)) Df(s)=tϱmax(f(t)d(st))
其中 d ( s − t ) d(s-t) d(st)是一个二次凸函数,其实这边的思路就是将这四个通道中值最大的整合起来,得到最有可靠的特征map。

2.2 Two-Stream Training Strategy

由于该网络训练需要的参数太多,但是数据不够,容易出现一些过拟合的情况,所以文章使用两个共享分支来计算,上一个分支就跟图三左边的网络一样,上面那个分支使用的原始的目标训练,下面使用的是旋转后的图片训练,这样可以增强网络对一些in-plane-rotation的鲁棒性,然后使用一个Maxout池化方法来将两个部分结合起来,其效果如下:
在这里插入图片描述

Tracking

跟踪的时候就简单把KRR和SRK-CNN结合结合起来:
f ( X t ) = f K R R + λ f C N N ( X t ) f(X_t) = f_{KRR} + \lambda f_{CNN}(X_t) f(Xt)=fKRR+λfCNN(Xt)
就是需要过两个网络,得到的response线性结合,得到最终结果。

模型更新
使用SGD来更新模型,两个模型都要更新。

Experiment

在这里插入图片描述
在这里插入图片描述

总结

其实这篇文章花了很大的篇幅在讲公式推导,如果对公式的推导不是特别关注的话,其实看想法就可以了,沉迷公式推导反倒会陷入里面出不来~

优点
  • 分析了基于相关滤波方法和CNN的方法的局限性和两个之间的互补情况,并将二者的优点香结合,得到精度高、鲁棒性强的效果;
  • 利用神经网络来解回归问题,十分具有开创性,节约了很多计算耗费;
  • 使得CNN更加注重目标的空间信息。
缺点
  • 十分耗费时间,对于每个测试视频,都需要过两个网络,然后再结合;
  • 相关滤波和CNN的结合十分简单,就是一个线性组合;
  • 后面为了防止过拟合和旋转应用了两个网络,个人感觉十分浪费时间和空间,因为相关滤波对旋转还是具有一定鲁棒性的。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值