原论文是:《Learning Multi-Domain Convolutional Neural Networks for Visual Tracking》
本博客是该论文的阅读笔记,不免有很多细节不对之处。
还望各位看官能够见谅,欢迎批评指正。
更多相关博客请猛戳:http://blog.csdn.net/cyh_24
如需转载,请附上本文链接:http://blog.csdn.net/cyh_24/article/details/51590174
继Object Classification、Detection 之后,Tracking 也”沦陷”啦,又一个被deep learning拿下的领域,这篇论文提出的 MDNet 在wuyi老师发布的OTB50和OTB100数据库上面取得了惊人的成绩。
这篇论文的方法通过提取具有多domain,更generic的CNN特征进行single object的目标跟踪。
网络结构分为:shared layers + multiple branches of domain-specific layers
Train阶段,利用一些video来共同训练一个shared layers,每个video单独训练一个domain-specific的layer
Test阶段,利用训练好的shared layers + 新的二分类层,这个二分类层是online的更新。这个二分类层是用来判定一些candidate windows (随机的从上一帧target附近采样出来的) 是否为目标。
这个方法能够达到 state-of-art 的效果。我认为之所以能取得这么好的原因是因为:
- Pretrained CNN 特征具有很好的区分特性(Naiyan Wang 在他的iccv15的 论文 中指出,tracking中最重要的就是特征的表达能力,好的特征甚至配一个很一般的分类器都能达到很好的效果)
- Online fine-tuning 能够解决target的形变、遮挡、光照变化等等问题,可以使tracking更加robust
- Hard minibatch Mining 的使用,使得网络的训练更加成功,特征更加优秀
上图是本文提出的网络结构,它包含:
Shared Layers
Domain-speciic Layers
了解AlexNet跟VGG16的读者一定会觉得这个网络是一个很小的网络,这其实是作者刻意为之的,他给出的解释是:
- single object tracking 只需要区分两个类(background or target),这跟ImageNet 1000 类的任务比起来复杂度低很多,所以不需要太大的网络
- 随着网络越来越深,空间信息越来越稀释,这会使图像的目标定位不是那么精准。
- 因为tracking的target通常来说比较小,所以input size也需要小,自然的网络就不能太深
- 小网络显然在速度上会更快
这个网络结构的目的是为了让shared layers学到不同domain共同的特性(光照变换、运动模糊、尺度变换等),而让不同分支的 domain-specific layers 学到该domain特有的一些特征。
要想达到这种训练目的,以往的minibatch SGD的训练方式肯定是不行了,作者介绍了他是如何训练网络的。
SGD 的每一次迭代中只涉及一个特定domain。在第k次迭代中,mini-batch中只包含来自第(k mod K)个video的样本,K个domain-specific layers也只激活第(k mod K)个分支。
通过这个学习过程,跟特定domain无关的信息就被学习到并保存在共享层中,这些信息是非常有用的泛化特征表示。
前面的train阶段大家应该已经明白流程了,那么test阶段是如何操作的呢?
其实很简单:
当来了一个新的test序列,我们就online地对fc4~fc6做一个fine-tuning,具体做法如下
tracking 中有两个方面的事情比较重要:鲁棒性 和 自适应性。为了同时兼顾这两方面,作者使用了两种策略:long-term 和 short-term 进行模型更新:
然而不管是哪种策略,都使用short-term内检测到的负样本,因为旧的负样本对于当前帧通常是多余的、不相关的。
为了确定每一帧中目标的状态,在上一帧目标的位置附近sample出 N个候选目标,用网络模型对这N个候选目标进行估计,取得分最高的为最佳目标。
个人认为这是训练时候非常好的一个tricky,可以很容易推广到其他方法中。
通常在一些 tracking-by-detection 的方法中,获取的negative样本都是冗余无效的,只有一小部分负样本对分类器的训练比较有效。一个非常有效的解决方法就是采用 hard negative mining 的方法,在training 和testing 的过程中,交替地去识别出hard negative.
作者把hard negative mining 的过程融入到minibatch 选择阶段。
在训练阶段的每一次迭代中,一个mini-batch包含n个正样本和p个困难负样本。
如何选择困难负样本?
用模型测试 M(M >> p)个负样本,sort之后取top p个最困难负样本。
了解 object detection 的同学应该知道,resample 出来的bounding box 通常比较 “漂”,一般需要加一个 regression 来矫正位置,tracking 也需要如此。
给定第一帧的时候,会train一个简单的linear regression模型来预测target 的精准位置,在接下来的序列中,用这个模型来调整 (分数>0.5的) bounding box 的位置。
regression 只在第一帧 的时候进行训练(使用conv3特征),训练比较耗时;
regression 模型所采用的方法和参数都是跟 Ross 大神的 RCNN 中使用的是一样的;
Online tracking 的步骤如下图:
为了offline 的 multi-domain 学习,作者在每一帧中采样了50个正样本,200个负样本,采样时根据IoU(>=0.7 或者 <=0.5 )来决定样本正负。
因为有K个分支,所以需要100K次迭代来train模型。
卷积层的learning rate:0.0001;
全连接层的learning rate:0.001;
在测试阶段,第一帧训练的时候,迭代30次来训练fc层:
fc4-5的learning rate:0.0001
fc6的learning rate:0.001
为了online update 时候能够有快速的适应性
作者每次使用10次迭代去更新网络,并且使用的learning rate 是第一帧训练的3倍;
Hard Minibatch Mining 时候
每个mini-batch包含32个正样本,96个负样本(从1024个负样本中选出)
实验结果是state-of-art,简单贴一下结果图吧: