论文地址:http://openaccess.thecvf.com/content_cvpr_2017/papers/Han_BranchOut_Regularization_for_CVPR_2017_paper.pdf
一、概述:
本篇论文使用神经网络来进行目标跟踪。相比于之前的方法,最大的创新点在于:神经网络包含多个分支,其中每个分支都是一个小型的全连接网络(每个分支仅包含一层或两层全连接层),每次需要训练网络时,每个分支都有一定的概率被丢弃而不进行权值更新,这也是‘BranchOut’名字的由来;而最终训练完成的网络进行分类时则所有的分支都会被使用。本文的思想类似于深度学习中的Dropout,不同之处在于Dropout丢弃的是神经元,而BranchOut丢弃的则是分支。
二、网络结构:
神经网络的结构如下图所示:
由上图可以看到,神经网络大概可以分为三部分:
(1)前三层是卷积层,这三层卷积层是使用VGG-M网络来进行初始化的。而且这些卷积层在训练神经网络时是不需要更新的。
(2)卷积层之后则是网络的多个分支,每个分支包含一层或者两层全连接层(之所以全连接层的层数这么少是因为在跟踪中样本有限,太多的参数无法更好的学习到,并且目标跟踪对实时性要求较高,层数太多计算复杂度也会增加),这里是本文的重点,训练神经网络时只有这些分支需要进行更新。而且训练时每个分支都会有一定的概率被丢弃而不进行更新,但是在分类时所有的分支都要被使用。
(3)分支之后是average pool层和fc-softmax层,它们的作用是用来分类,神经网络最终输出的是样本是目标的概率和不是目标的概率。
神经网络的损失函数定义为:
其中Mb表示mini-batch的大小;K表示共有K个分支;为0时表示第k个分支被丢弃,为1时表示第k个分支被保留;表示第k个分支中全连接层的参数。反向传播和普通的神经网络相同。
三、算法流程:
首先,对神经网络进行初始化,将所有的全连接层的权重初始化为均值为0的高斯分布,而卷积层则使用VGG-M来进行初始化。然后将第一帧中提取到的正负样本作为训练样本对神经网络进行训练。然后在随后帧中,以上一帧的目标位置为中心,进行高斯密采样,得到一些候选样本,训练完成后的神经网络对这些候选样本进行分类,正样本概率最高的那个候选样本作为这一帧的目标。但是由于目标可能位于样本的任何位置,所以最后再对这个样本应用bounding box regressor来确定最终的目标位置(bounding box regressor在第一帧时选取1000个样本进行训练得到)。
由于目标表面会发生变化,所以第一帧训练得到的神经网络必要时需要进行更新。在本文中,两种情况下需要重新训练神经网络进行更新,一是每间隔一定的帧数后,比如每10帧更新一次;二是当被判定为目标的候选样本的正样本概率低于0.5时,也需要进行更新。在更新神经网络时,使用的样本来自于当前帧之前的t帧图像。
四、实验结果:
在OTB100数据集上做了实验,结果如下图所示,实验结果表明BranchOut达到了非常好的性能。