Meta-Tracker: Fast and Robust Online Adaptation for Visual Object Trackers

这篇论文发表在2018年ECCV上
论文地址:Meta-Tracker:Fast and Robust Online Adaptation for Visual Object Trackers
代码地址:github

看到题目的online adaptation,那怎么在线自适应呢?和之前的在线自适应有什么区别呢?请看详解
文章的摘要部分就提到了,这篇文章使用在线自适应提高了最好的视觉目标跟踪。

参考背景知识 meta-learning

这篇论文采用基于预测梯度的策略学习方法(元学习)获得普适性的初始化模型,可以使得跟踪自适应于后续帧特征的最佳梯度方向。该方法引入了两个待学习参数:初始化参数 θ 0 \theta_0 θ0 和梯度更新参数 α \alpha α 。目标跟踪的元训练过程主要分为两步:1.随机初始化参数,将第一帧图像输入跟踪模型进行预测,利用预测误差函数以及梯度更新参数,反复迭代T次作为 θ 1 \theta_1 θ1;2.检查参数 θ 1 \theta_1 θ1,对后续帧(每次迭代随机取一帧)的鲁棒性,累积损失函数对 θ 1 \theta_1 θ1 α \alpha α的梯度,采用ADMM梯度下降算法优化参数 θ 0 \theta_0 θ0 α \alpha α的梯度。

论文将此方法应用于MDNet方法中,在训练的过程使用了元学习来训练网络从而得到更好的初始网络模型和梯度更新参数(一般的网络初始参数、学习率都是手工设定的,这里是要学习这些参数,使得更好更快的收敛),训练的时候就是考虑到在线跟踪只能使用第一帧快速的训练一个模型,因此元训练就是用训练视频的第一帧去学习两个参数,然后泛化到后续的帧,使得在线跟踪的时候,只需要用给定的第一帧训练一次网络,就能达到和MDNe相当的结果,没有使用多域、正则化等trick。

Our core contribution is an offline meta learning-based method to adjust the initial deep networks used in online adaptation-based tracking.

The meta learning is driven by the goal of deep networks that can quickly be adapted to robustly model a particular target in future frames.

By enforcing a small number of update iterations during meta-learning,the resulting networks train significantly faster.

The model learned during tracking should be flexible to account for appearance variations of the target due to viewpoint change,occlusion,and deformation.

文章提出了现在联合深度学习特征和在线自适应的方法存在的问题,首先有很小的训练样本(初始帧),后续视频帧因为有相同的目标和背景,所以大部分是冗余的,而且,深度模型很容易对小数据集overfitting。第二个问题是,最好的跟踪器在初始训练阶段花费大量的时间。因此,急需在初始帧快速的获得鲁棒的目标跟踪模型。

During the meta-training phase, we aim to find a generic initial representation and gradient directions that enable the target model to focus on features that are useful for future frames.

Our meta-training approach has two goals.One is that initialization for a tracker on a sequence can be performed by starting with θ 0 \theta_0 θ0 and applying one or a very small number of iterations of a update function M parameterized by α \alpha α.Another goal is that the resulting tracker be accurate and robust on later frames.

update function M:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
以上两幅图是meta-train的可视化图和算法,先初始化数据集和网络模型
接着按照上述Meta-training算法,进行初始化参数,如下,你能看出两个参数有什么区别吗?

 ## Initialize Meta Alpha(learning rate) Net##
    meta_init= OrderedDict()
    for k,p in tracker_net.get_learnable_params().items():
        meta_init[k] = Variable(p.data.clone(), requires_grad=True)#meta_init就是网络要学习的参数
    meta_init_params = [p for k,p in meta_init.items()]
    meta_init_optimizer = optim.Adam(meta_init_params, lr = opts['meta_init_lr'])

    ## Initialize Meta Alpha(learning rate) Net##
    meta_alpha = OrderedDict()
    for k,p in tracker_net.get_learnable_params().items():
        alpha = Variable(p.data.clone(), requires_grad=True)
        alpha.data.fill_(opts['tracker_init_lr'])
        meta_alpha[k]=alpha
    meta_alpha_params = [p for k,p in meta_alpha.items()]
    meta_alpha_optimizer = optim.Adam(meta_alpha_params, lr = opts['meta_alpha_lr'])

上述算法的N为8,T为1,总共训练15000次,前5000次只训练FC层,后5000次训练整个网络。进入一个batchsize:
对应算法4、5、6、7、8

tracker_net.copy_meta_weights(meta_init)
init_g, alpha_g, loss[j], lh_loss[j], acc[j], lh_acc[j] = train_init(tracker_net, 
                    meta_alpha, criterion, pos_regions, neg_regions, lh_pos_regions, lh_neg_regions, evaluator, train_all)


# the first iteration
    pos_score = tracker_net.forward(pos_regions)
    neg_score = tracker_net.forward(neg_regions)
    loss = loss_fn(pos_score,neg_score)
    grads = torch.autograd.grad(loss, tracker_init_weights.values(), create_graph=True)
    tracker_weights = OrderedDict((name, param - torch.mul(meta_alpha,grad)) for
                                  ((name, param),(_,meta_alpha),grad) in
                                  zip(tracker_init_weights.items(),
                                      meta_alpha.items(), grads))
 # compute meta grads for lookahead dataset
    grads = torch.autograd.grad(lh_loss, tracker_init_weights.values(), retain_graph=True)
    alpha_grads = torch.autograd.grad(lh_loss, meta_alpha.values())
    
return meta_init_grads, meta_alpha_grads, loss.data[0], lh_loss.data[0], acc, lh_acc
#对应于以上算法 15,16行,进行更新两个参数
def meta_update(meta_init, meta_init_grads, meta_alpha, meta_alpha_grads, 
                meta_init_optimizer, meta_alpha_optimizer):

在minibatch的时候两个参数是不变的,一个batch后才更新两个参数。
在这里插入图片描述
训练后会得到meta_init_vot_ilsvrc.pth模型,在测试的时候进行加载使用,当然测试的时候也用预训练的模型。
在数据集VOT2016的结构如下:
在这里插入图片描述
那时间如何呢?论文说是MDNet的30倍,结构如下,B表示训练之前,A表示训练之后,LH表示应用在后续帧
在这里插入图片描述
测试代码课参考博客:metasdnet testing

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值