Tracking by Instance Detection: A Meta-Learning Approach论文详解

跟踪器的整体把握

  1. 之前基本上都是遵循“检测—跟踪”的思路,将检测器的“头部件”与跟踪器相结合,达到良好的跟踪效果。但是,该跟踪器的作者独辟蹊径,认为跟踪器既然使用了检测器的“头部件”能实现良好的跟踪效果,那我何不直接将检测器转换成跟踪器?于是基于这种想法作者创造了该跟踪器。
  2. 直接将检测器转换为跟踪器,可以在保留最需要的“头部件”的前提下,还能保留基本检测器的总体设计。这样,我们就不用再去创建一个新的跟踪框架,也不必去思考跟踪框架是否与“头部件”兼容的问题。但是,存在一个问题:检测器是对于全局的检测,它并不能始终只检测一个物体。那么,现在问题转换为:如何使得检测器只检测一个物体?
  3. 要使检测器只检测一个物体,就必须要告诉检测器想要只检测一个物体,这个过程在论文中称为“域自适应(Domain Adaptation)。如下图所示:

Tracking by Instance Detection: A Meta-Learning Approach论文详解

可以很清楚的看到,当经过域自适应后,检测器可以很轻松的检测到想要跟踪的物体。

  1. 由上述看来,“域自适应”是将检测器转换为跟踪器的重要步骤。值得一提的是,该过程应该发生在跟踪器的初始化阶段,即在第一帧选定跟踪对象后。那么结合上图和具体跟踪过程,“域自适应”的实施前提是检测器必须拥有强大的学习能力。
  2. 在跟踪过程中,要实现“域自适应”有两个阻力:样本少(给予的第一帧样本),时间少(初始化时间不能太长,跟踪追求速度)。换句话说,我们必须在很短的时间、很少的样本的下,实现模型的快速学习,达到“域自适应”的目的。因此检测器必须拥有强大的学习能力。
  3. 如下图所示,

Tracking by Instance Detection: A Meta-Learning Approach论文详解

我们可以清楚的看到MAML在小样本的情况下,只经过3-4次梯度更新,就能快速实现梯度下降,这正是我们所要的!而MAML的目的是训练出优秀的初始化参数。于是,设计该跟踪器的最终思想是:通过MAML训练赋予检测器良好的初始化参数,使其只在一帧信息的情况下,快速学习待跟踪对象的特征,使检测器只检测待跟踪对象,从而实现跟踪。

  1. 跟踪器的构建步骤:
    1. 选择任何经过梯度下降训练的检测器
    2. 使用MAML在大量跟踪序列上训练检测器
    3. 当给出测试序列的初始帧时,通过几步梯度下降来微调检测器。 在该域适应步骤之后,可以获得体面的跟踪器。

离线预训练

  1. 离线预训练的目的是获得检测器良好的初始化参数。
  2. 离线预训练的示意图如下所示:

Tracking by Instance Detection: A Meta-Learning Approach论文详解

  1. 因为可以选择任何经过梯度下降训练的检测器,所以损失函数的形式不固定。下文统一用L(.)表示。

  2. 离线训练中的优化分为两种优化:外层优化和内层优化(以训练一对图像为例)

    1. 内层优化,可以理解为在support set单纯的梯度下降(SGD优化器),上图中用蓝色的线表示,其中“update”代表一次梯度下降。用公式表示为:

    θk=θk1α1Dis(x,y)ϵDisθk1L(h(x;θk1),y) \theta_k=\theta_{k-1}-\alpha\frac{1}{|D_i^s|}\sum_{(x,y)\epsilon D_i^s}\nabla_{\theta_{k-1}}L(h(x;\theta_{k-1}),y)

    其中α\alpha代表步长,L(h(x;θk1),y)L(h(x;\theta_{k-1}),y)代表损失。

    1. 外层优化,就是将每次梯度更新后的模型带入target set,然后按照不同的权重将每次梯度的对应的损失相加,取平均,最后进行一次梯度下降(Adam优化器)。用公式表示为(其中NN为视频数):

    F(θ0,Di)=1Dit(x,y)ϵDitk=0KγkL(h(x;θk),y)θ=argminθ01NiNF(θ0,Di) F(\theta_0,D_i)=\frac{1}{\mid D_i^t\mid}\sum_{(x,y)\epsilon D_i^t}\sum_{k=0}^K\gamma_kL(h(x;\theta_k),y)\\ \theta^{*}=\arg \min_{\theta_0}\frac{1}{N}\sum_i^NF(\theta_0,D_i)

离线训练流程

  1. 首先,在相同或者不同的序列中采样32×1000032\times10000对图像,每32对图像形成一个batch,则一共有10000个batch形成一个epoch。
  2. 按照上图所示,将一对图像输入到训练管中,得到一对图像的F1(θ0,Di)F_1(\theta_0,D_i)损失。假设一个视频中采样了k对图像(k<=32),那么这k对图像的平均损失为:

Favgk=1ki=1kFi(θ0,Di) F_{avg_k}=\frac{1}{k}\sum_{i=1}^k F_i(\theta_0,D_i)

  1. 假设使用了NN个视频采样了32对图像,那么我们可以得到这32对图像的平均损失,即一个batch的损失:

Favgbatch=1Ni=1NFi(θ0,Di) F_{avg_{batch}}=\frac{1}{N}\sum_{i=1}^NF_i(\theta_0,D_i)

  1. 这时对一个batch的损失进行梯度下降,运用的优化器为Adam。也就是论文中的公式:

θ=argminθ01NiNF(θ0,Di) \theta^{*}=\arg \min_{\theta_0}\frac{1}{N}\sum_i^NF(\theta_0,D_i)

  1. 当我们完成了一个batch后,以当前的θ\theta^{*}为初始参数,再进行训练。
  2. 我们考虑了10000个批次,也就是梯度下降10000次,权重更新10000次,这仅仅完成了一个epoch。
  3. 我们选择了20个epoch,也就是对数据集循环使用20次,在如此巨大的训练量下,我们的初始参数当然会获得强大的学习能力。

在线跟踪过程

在线跟踪的算法图如下所示:

Tracking by Instance Detection: A Meta-Learning Approach论文详解

  1. 前期准备:

    1. 视频序列(Ii)i=1N(I_i)_{i=1}^N:N帧的视频;
    2. 检测器模型h(.;θ)h(.;\theta):第一个是输入参数,第二个是模型参数;
    3. 在第一帧选定的框:B1B_1
    4. 在线更新的帧数间隔:uu
  2. 进行跟踪

    1. 根据选定的框B1B_1,制定图片补丁(263×263263\times 263).S1<SR(I1,B1)S_1<-SR(I_1,B_1)

    2. 初始化support set(数据增强).Ds<D^s<-{DataAug(S1)DataAug(S_1)}

    3. 经过5次梯度下降,更新模型参数θ\theta,使得检测器适合检测目标物体。(快速学习)。θ<GD5(θ,Ds)\theta<-GD_5(\theta,D^s)

    4. for循环:取第2帧到最后一帧

      1. 在第ii帧中按照第i1i-1帧框的位置进行截取补丁,之后将补丁输入检测器中,获得M个候选区域的分类置信度和回归偏差坐标。(可以看做检测器是Fast R-CNN,Retina与其相似

      [Bdetj,cj]j=1M<h(SR(Ii,Bi1);θ) [B^j_{det},c_j]_{j=1}^M<-h(SR(I_i,B_{i-1});\theta)

      1. 如果M个分类置信度都小于0.1,那么我们将第ii帧的跟踪框设为i1i-1帧的跟踪框
      2. 经过余弦惩罚和形状惩罚后选择分数最大的cc^{*},并将其对应的回归偏差坐标转换为回归框BiB_i
      3. 线性插值平滑的将跟踪框的形状过渡,不会让两帧之间跟踪框形状变化过于剧烈。
      4. 更新新的support set。即将第ii帧的图片替换第i1i-1帧图片成为模板图片。
        _i$
      5. 线性插值平滑的将跟踪框的形状过渡,不会让两帧之间跟踪框形状变化过于剧烈。
      6. 更新新的support set。即将第ii帧的图片替换第i1i-1帧图片成为模板图片。
      7. 每隔uu帧或检测干扰峰时进行模型参数θ\theta更新