深度学习Tracking(1)——Learning to Track at 100 FPS with Deep Regression Networks

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_22201697/article/details/56304490

发生了一些很奇葩的事情,因此我可能要开始学习深度学习了。研究生开始这么久了才开始做深度学习,我真的要担心自己的毕业问题了。好的吧,加油吧。虽然不懂,现在开始吧。


原文地址:【http://davheld.github.io/GOTURN/GOTURN.pdf
项目地址:【http://davheld.github.io/GOTURN/GOTURN.html
一篇更详尽的翻译:【https://zhuanlan.zhihu.com/p/25338674?utm_medium=social&utm_source=wechat_session&from=singlemessage&isappinstalled=1


本文介绍的算法利用深度回归网络,输入为视频流,输出为每一帧中目标的位置。该算法的highlight在于,其利用的是线下的训练,获取目标外观和运动之间的联系,以此来实现对任意(甚至全新、从未见过的)目标的tracking。并且由于网络已经学会了tracking的技巧,因此可以实现100fps的实时应用。

论文第3章主要介绍了该算法。

3.2 网络的输入/输出格式
首先要明确的问题是,what to track,即我们要跟踪的目标是什么。因此,当需求出现的时候,将追踪目标的图像输入进网络中。对于前一帧图像进行剪裁和尺度的调节,使得被追踪目标位于输入图像中间。(如图figure2)

这里写图片描述

即便该目标在训练数据集里从未出现过,只要输入格式满足上述要求,都可对其进行跟踪。(在网络中,会对该目标进行适当的填补(pad)来获取目标周边的一些信息。)

假设在第t-1帧中,目标被标记为中心位置为c(cx,cy),宽度和高度分别为w和h的矩形框。那么在t时刻,我们在第t-1帧中抠取以c(cx,cy)为中心,宽度和高度分别为k1w和k1h的图像块。该图像块即指定了下一帧即t帧将要跟踪的目标。k1的数值决定了网络从前一帧中获取到的目标周围环境信息的多少。

下一步要决定的是where to look,即去哪里找下一帧的目标。要想知道当前帧中目标的位置,tracker首先要知道在前一帧中目标的位置(相邻两帧之间目标移动相对平缓)。这一步骤的实现思想是,根据目标在前一帧的位置,我们在本帧为tracker选择一个搜索域。确定了搜索域之后,将本帧的完整图像进行剪裁,只留下搜索域对应位置的图像块,然后将该图像块输入至网络,如图figure2所示。那么网络的目标就是通过回归来预测搜索域中目标的位置。

具体来说,本帧图像的剪裁出的搜索域,后面称其为P,以c’(cx’,cy’)为中心,即c’是我们期望的目标的平均位置。这里我们令c’=c,即将其视为一个中心位置不变的运动模型(尽管实际上可能会有更多复杂的运动模型)。P的宽度和高度分别为k2w和k2h,w和h分别为前一帧中标记目标的矩形框的宽和高,k2为目标的搜索半径。在实际应用中,我们设k1=k2=2。

只要目标没有被遮挡或者移动过快,都将会被在搜索域内被找到并定位。对于移动较快的目标或者遮挡的目标的追踪,将是下一步工作。

网络输出: 网络输出当前帧中目标的坐标(相对于搜索域的坐标),形式为目标的左上角和右下角的坐标。

3.3 网络架构

在该网络模型中,我们将要跟踪的目标以及搜索域输入值一系列的卷积层中,卷积层的输出是一组特征集,对于图像能够进行高阶的表示(a high-level representation)。

卷积层的输出随后被送入若干全连接层。全连接层的作用是比较目标的特征和当前帧的特征,来确定目标的移动位置。在帧与帧之间,目标可能发生了平移、旋转、光线变化、遮挡或者变形。因此,全连接层实现的是一个复杂的函数,通过其之前学习过的中多样本,使得其对于多种因素(平移、旋转、光线变化、遮挡或者变形)鲁棒,并能够输出目标的相对运动。

具体来说,我们利用的卷积层是CaffeNet的前五层卷积层。将这些卷积层的输出串联称为一个向量,然后输入至3个全连接层,每层有4096个节点。最终,我们将最后一层全连接层与一个包含4个节点的输出层项链,这4个节点就代表着输出的矩形框。

3.4 跟踪
通过第一帧中使用矩形框对于目标的确定,后续就可以实现单目标的追踪了。对于后续帧,我们将帧t-1和帧t中剪裁出来的图像块输入至网络中,来预测本帧中目标的位置。

第4章介绍了网络的训练。

没有更多推荐了,返回首页