首页 > 代码库 > cvpr2017:branchout——基于CNN的在线集成跟踪
cvpr2017:branchout——基于CNN的在线集成跟踪
1、引言
2017年CVPR上有不少关于跟踪的paper。CF方面最引人瞩目的应该是ECO了,CNN方面也有一些新的进展。Branchout是一个基于CNN用bagging集成的在线跟踪方法。
contributions:
(1)提出了一种简单有效的正则化技术branchout,减少了集成学习方法在模型多样化和训练样本中噪声标签较少的限制。
(2)网络中每个独立的branch有不同数量的FC,并保留了多层级特征。
(3)验证了方法的有效性,并在没有pretraining的情况下也取得了start-of-the-art的成果。
2、框架
notations:
D = { (xi,yi)| i = 1,2,...,M }为更新模型的训练样本集。其中xi表示image patch,表示xi对应的二进制标签,其中(1,0)表示positive,(0,1)表示negative。
框架如下图:
从图中可以看出,输入图片,大小为3*107*107,之后经过三层卷积层,得到512*3*3的特征图,之后进入branches。每个独立的branch中有多个fc层,论文在实验阶段采用了1层或两层。之后进入average pool,最后再经过fc6层,计算softmax得到最后的结果。
当训练网络时,用伯努利分布来选择一个branches子集,假设有K个branches,则有下面的分布 ak ~ Bernoulli(Pk),其中ak表示第k个branch被选中更新的二进制结果,Pk是分布的一个参数。Loss如下:
Mb是mni-batch的size,F是softmax输出的结果。梯度是直接对theta求导。只对FC层更新,而且只更新一到两个FC层。理由是很难在有限训练样本的情况下在线学习两个以上的全连接层。
对第一帧首先标出正负样本,也就是前景和后景,之后开始跟踪第一帧标出的目标。从上一帧中获取目标中心的xi高斯分布,改变维度,计算所有branches的softmax结果。目标状态由下面的公式得到:
为了提高定位的精确度,采用bounding box regression,用1000个训练样例训练 (at the first frame only),意思是由第一帧进行数据增大得到的?然后应用model到所有后续帧。因为学习目标框很耗时,而且因为没有gt,使用其他帧学习到的特征不一定可靠。
另外一个在线学习的要素是如何构造训练样例。由于没有gt,只能依靠预测得到的目标位置。从第t帧得到的正样本要包含IoU值高于0.7的bounding box。
更新策略:(1)每10帧整个model更新一次,(2)当xt*的值小于0.5时更新一次。
算法流程如下:
寻找每帧的目标时,提取256个样本用于观察。如果连续10帧从CNN获得的分类结果低于阈值就扩大搜索空间。当模型需要更新时,基于ak(Pk = 0.5)选择一个branches子集。每个mini-batch的大小是128.包含36个正样本和92个负样本。在线学习时,学习率设置为0.0001,迭代30次,momentum为0.9,weight decay为0.0005。
3、实验结果
与MDNet相比:
在VOT2015数据集上结果:
C-COT的结果出乎意料的不太好,不过ECO在robustness、EAO、EFO这些指标领先,在acc上SSAT最高(VOT2016)。
cvpr2017:branchout——基于CNN的在线集成跟踪