MDNet
MDNet是2015年VOT的冠军,将深度学习引入目标跟踪,这篇文章的创新点是用深度学习抽取运动的特征,将运动特征添加到目标跟踪中。
文章全称:Learning Multi-Domain Convolutional Neural Networks for Visual Tracking(MDNet)
团队:Korea的POSTECH团队
相关成果:TCNN CNN-SVM
网络结构
基本结构
- 输入层
>输入层接受107*107的RGB图像。
-
隐藏层
conv1-3:采用VGG-M的卷积层,每两个卷基层之间分别有relu层、normalize层和pool层;
>fc4-5:全连接层,每层有512个神经元,全连接层之间,包含dropout层。
-
输出层
fc6层之后是softmaxloss层,用于计算损失;
>其中fc6是分支层,跟踪和检测的最大不同是:跟踪需要在线学习,根据目标特征不断更新权重矩阵,而检测只需要离线学习即可。因此,在线学习与待跟踪的目标特征有关。因此fc6层没有共享的意义。该层的每个分支对应不同的视频序列。
网络特点
- 网络较浅:分类任务简单,只有目标和背景,无需较深的网络;
- 精确定位:使用较浅的网络模型,有利于精确定位;
- 目标小:目标本身一般比较小,较深的模型,会使得目标的特征矩阵为一个像素点;
- 实时性高:较深的网络,不利于特高跟踪的实时性。
Offline Learning
目标
通过在标注的视频序列上训练模型,使得模型学习跟踪任务的公共属性,如:光照变化,尺度变化以及运动模糊等。训练策略
-
训练样本:
在K个标注的视频序列,每帧抽取样本数:
()
()
- 学习率:卷积层的学习率为0.0001,全连接层的学习率为0.001。
- 训练过程:SGD迭代100次训练,或训练误差收敛到一定阈值后结束;每次迭代按以下方法处理:第迭代中,minibatch(大小:128)由视频序列中的随机八帧图像随机产生,其中32个正样本和96个负样本,对应的全连接层**;
- 训练结果:前5层共享权重(学习跟踪视频的公共属性),最后一层针对特定目标选择特定的层(配合训练);
Online Tracking
初始训练fc6层
-
训练样本:根据给定的初始bounding 按照以下策略随机产生5500个样本:
()
()
- 学习率:的学习率为0.0001(由于已经进行离线训练过),的学习率为0.001。
- 训练过程:batch(大小:128)由32个正样本和96个负样本,迭代30次。
- 训练结果:根据特定的跟踪目标,fine-tune层权重参数。
Bounding Box Regression训练
-
训练样本:根据给定的初始bounding 按照以下策略随机产生1000个正样本:
()
- 训练过程:batch=256正样本,迭代次
- 训练结果:fine-tune边界回归权重参数。
Tracking Strategy
- 候选样本:以前一帧目标位置为均值,以为协方差,产生256个候选样本,其中:r为前一帧目标宽和高和的平均值;
-
样本评估:将样本通过网络前向传播计算样本scores:和,目标位置有下式产生:
在线跟踪及学习
跟踪成功
- 样本采集:根据跟踪的目标区域,在当前帧采集50个正样本() 和200个负样本(),并加入总的正负样本数据集;由于卷积层参数不变,将样本以卷积后的特征保存,可以节省空间;
-
总样本集维护:
总的正样本集保存最近100次跟踪成功帧的正样本(此处作者的程序包含了没有跟踪成功的样本,这样帧对应的样本为空,不合理)
总的负样本集保存最近20次跟踪成功帧的负样本(此处作者的程序包含了没有跟踪成功的样本,这样帧对应的样本为空,不合理) - 跟踪成功:记录跟踪成功的帧
short-term训练:
- 更新规则:目标得分小于0更新(目标外观变化越快,模型更新越快)
-
训练样本:
正样本:最近20帧成功跟踪收集的正样本(第一帧训练的500个正样本直接添加进去,随后每帧添加50个正样本);从这些样本中随机挑选32*10个样本作为正样本;
负样本:最近20帧成功跟踪收集的负样本(_第一帧训练的5000个负样本丢弃,每帧产生200个负样本);(过期的负样本和当前帧的相关度不大),从中随机选出1024*10个负样本,进行hard negative mining后得到96*10个负样本。这些负样本更具有代表性,如下图所示;随着跟踪帧数增加,负样本越来越难分 - 学习率:全连接层的学习率为0.0003。
- 训练过程:batch(大小:128)由32个正样本和96个负样本,迭代10次。
- 训练结果:fine-tune权重参数。
long-term训练:
更新规则:10帧更新一次 - **训练样本**:正样本:最近100帧成功跟踪收集的正样本(第一帧训练的500个正样本直接添加进去,随后每帧添加50个正样本);从这些样本中随机挑选32*10个样本作为正样本;
负样本:最近20帧成功跟踪收集的负样本(_第一帧训练的5000个负样本丢弃,每帧产生200个负样本);(过期的负样本和当前帧的相关度不大),从中随机选出1024*10个负样本,进行hard negative mining后得到96*10个负样本。这些负样本更具有代表性,如下图所示;
- 学习率:全连接层的学习率为0.0003。
- 训练过程:batch(大小:128)由32个正样本和96个负样本,迭代10次。
- 训练结果:fine-tune权重参数。
不在线更新
- 条件:当未满足short-term和long-term条件时,不更新模型,直接跟踪下一帧;
Hard Minibatch Mining
参考这个博客
程序调试
作者主页可以下载源码,具体调试详见README.md
调试遇到问题及解决方案:
1. 作者给的README.md要求MATLAB2014a,目前MatConvNet要求MATLAB2015b以上的版本,因此,按照MatConvNet的要求安装MATLAB2015b以上的MATLAB版本。
2. Attempt to execute SCRIPT vl_nnconv as a function:/home/fssj/Tracking/MDNet/MDNet/matconvnet/matlab/vl_nnconv.m该错误主要是由于MDNet工程中的MatConvNet文件和MATLAB自带的文件名有冲突,将该工程中的该文件的MATLAB搜索路径下移即可解决该问题。