Siamese Instance Search for Tracking 阅读笔记

这是一篇CVPR2016的用DL思想解决Tracking的文章。文章思想简单易懂,但是效果却很好,在OTB50上获得了 state-of-the-art。

核心思想:

通过Siamese网络学习一个匹配函数。在得到第一帧目标信息后,接下来的所有帧采样后都和第一帧目标进行匹配度计算,得分最高的即为目标。(ps:这里,算法设计的核心思想在于永远和第一帧的目标进行匹配度计算,这样就会有一下几个好处:目标被遮挡后不用担心无法找回,因为网络不更新,则遮挡物不会影响网络性能;目标丢失在视频中后不用担心再出现的时候找不到,原因同上)

首先,作者突出强调,他们的方法有如下几个特点:

1,模型一旦训练完成,在跟踪的过程中不需要模型更新(这在DL用于tracking中基本上是速度快所必需的,MDNet很慢主要是因为他需要在线finetune,如果不需要finetune过程的话,那么仅仅前向传播速度会很快)

2,仅仅一个模型就可以搞定,不需要额外的东西(比如TLD需要检测部分)

3,匹配函数的训练不需要指定特定类别的目标,即在使用中可以跟踪训练过程中没有见过的目标,也就是说即使训练过程中没有狗这幅图像,也可以在使用的过程中跟踪狗这个目标(换一种思路解决跟踪问题,这种思路鲁棒性很强)

作者的思想出发点:

跟踪问题归根结底在学习一个匹配模型,使得在即将到来的一帧图像中目标物体可以和模型有最好的匹配度,然而,当目标收到遮挡、变形、旋转等不利因素的影响后会大大降低匹配的可信度,当然,我们可以根据随意一种特殊情况(比如旋转)设计一个跟踪器,那么它很有可能对目标旋转的情况有良好的匹配效果,但是对其它情况并不见得会有好的表现。文章作者的意图在于学习“匹配机制”,作者认为如果我的训练数据集足够的大,包含了各种目标可能的变化,那么当我的网络训练成功后自然地就学习到了目标如何和它经过各种不利变化后的形态进行匹配!如此一来,我的网络就可以支持目标与其各种目标不利变化后的成功匹配(只要我的训练集中有这种情况)。所以说,就算网络在使用过程中遇到训练过程中没有遇到过的物体也没有关系,因为网络是在学习如何匹配,而不是如何识别!

加速手段:

由于跟踪问题中一个重要的性能就是速度!在检测过程中,如果每提取一个样本就和第一帧图片计算一次匹配度,那么显然是十分耗时的。作者参考Fast-Rnn的思想(reginon pooling layer),从一副大的图片经过CNN后的输出特征图中寻找想要的小patch的特征部分,从而在前面几层只需要一次的CNN前向计算即可,最后根据给定的bounding box regions选取n个feature map在后面几层进行传播计算。

下面逐一介绍本文网络的各个组成部分。

1,匹配函数。

本文使用DL中的Siamese网络,网络每次的输入自然是一对数据(x1,x2)。在Siamese的CNN部分,作者在两个网络上做了实验并对比性能,分别是常用的AlexNet和VGGNet。

注意!由于在跟踪问题中我们对定位精度有所要求,而在传统的CNN中pooling操作的一个目的就是降低特征维度,但是这同时也大大降低了定位准确度(简单的说,在KCF跟踪其中使用4*4 cell size的HOG特征,那么最终的定位精度也只能是4*4了),考虑到这一点,作者减少了AlexNet和VGGNet中的pooling操作。那么问题来了,如此简单粗暴的减少池化操作,不会对网络性能造成影响吗?这里作者给出如下答复:CNN中引入pooling主要是为了解决物体分类问题,在物体分类任务中,物体的外形会发生很大的改变,这样pooling操作可以在一定程度上对目标变形具有特征值不变性,但是在跟踪问题中,在一个视频序列中即使目标外形发生改变也始终跟踪同一个目标,所以在一定程度上减少polling操作会对匹配精度有很大的影响。所以,最终作者去掉了AlexNet中所有pooling操作,仅仅保留VGGNet中前两个pooling操作,因为在浅层感受野较小,保留pooling操作对抵抗噪声的鲁棒性有益。

在CNN中,我们知道,浅层提取的特征主要是边缘信息和边角信息,深层提取的特征则更接近物体信息,但是在跟踪问题中,我们最初并不知道我们的跟踪目标是什么,如果仅仅使用深层的输出值进行损失函数计算,那么如果在训练集中没有某个物体,那么在检测过程中就会存在不可预测的问题,所以作者提出使用CNN中多层信息输出来通过损失函数计算损失值。

在传统的CNN中存在的一个问题在于,网络的输出值容易受到特征维度的影响。为了解决这个问题,作者提出在损失层前增加一个2次归一化层,也就是说,任何一层的特征在进入损失层之前都要经过一个2次归一化层,这么做可以使得不同尺度的特征维度得到同样范围的损失输出!

即使作者对AlexNet和VGGNet做了小小的改变,但是为了能使用原始AlexNet和VGGNet网络的初始值,作者设计的网络还是最大程度上保持了和原始AlexNet和VGGNet的一致!

2,网络训练的输入

本文Siamese网络的两个分支分别为query stream和search stream.

query stream:输入为训练数据集中一个视频序列中任何一帧图片的的ground truth

search stream:输入为随机选取训练数据集中拎一个视频序列的一帧图片的随机的bbox,如果此bbox与此图片中的ground truth的iou大于某个阈值,则此样本对为正样本对,否则为负样本对

3,损失函数设计

具体损失函数见文章。作者说,这样设计的目的是对正样本对有足够的响应能力

4,训练数据需求

本文所提出的网络架构对训练数据要求非常简单,只要大量,并且不要在一个目标类别上过多即可!这也是本文突出的地方之一。

5,跟踪部分

(后续补充)

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值