Advertisement

第二篇论文SiamFC【Fully-Convolutional Siamese Networks for Object Tracking】

阅读量:

文章目录

  • 地址

  • 摘要

  • 模型结构

  • 一些细节补充

    • 输入图像大小问题

      • 训练
    • 损失函数

  • 参考代码

地址

Fully-Convolutional Siamese Networks for Object Tracking

摘要

The problem of arbitrary object tracking has traditionally been tackled by learning a model of the object’s appearance exclusively online, using as sole training data the video itself. Despite the success of these methods, their online-only approach inherently limits the richness of the model they can learn. Recently, several attempts have been made to exploit the expressive power of deep convolutional networks. However, when the object to track is not known beforehand, it is necessary to perform Stochastic Gradient Descent online to adapt the weights of the network, severely compromising the speed of the system. In this paper we equip a basic tracking algorithm with a novel fully-convolutional Siamese network trained end-to-end on the ILSVRC15 dataset for object detection in video. Our tracker operates at frame-rates beyond real-time and, despite its extreme simplicity, achieves state-of-the-art performance in multiple benchmarks.

提出了一种新的基于CNN的端到端的SOTA的通用目标跟踪网络。

模型结构

文中的模型本质上是一个孪生网络,孪生网络本质上就是两个完全相同的网络。
Siamese

其中z是模板图像,在视频的第一帧中通过bounding box指定,x为搜索图像,即在后续生成的可能是模板图像z的待定图像。\varphi是一个函数,本质上是一个CNN(backbone),原文中用的AlexNet,图中的两个\varphi是包括模型结构以及参数等完全相同的网络。\varphi的结构如下
backbone

  1. 前两个卷积层后面都有MaxPooling操作;
  2. 除了最后的conv5之外,每一个Conv操作后面都有一个ReLU函数;
  3. 每一个线性层后面都有一个BatchNorm;
  4. 所有操作的padding都是0.

因为AlexNet用到了2个GPU,所以这里会发现conv3-5的Chan. map和chans列并不对应,而是刚好成2倍的关系。

模板图像大小为[127,127,3],经过\varphi之后变成[6,6,256];搜索图像大小为[255,255,3],经过\varphi之后变成[22,22,256]。后面的*表示互相关操作,本质上还是卷积,\varphi(z)作为卷积核,以步距1对\varphi(x)做卷积并经过变换,结果大小为[17,17,1],即为最终的结果。

一些细节补充

输入图像大小问题

训练

输入的模板图像要求127\times127,搜索图像要求255\times255,但是多数情况下视频帧的大小并不是完全符合规格的,那么如何得到符合要求大小的输入呢?

文中的2.4节有提到这部分内容:

s(w+2p)\times{s}(h+2p)=A

A=127^2[w,h]是bbox的宽和高,p是边距,大小等于\frac{w+h}{4}

这个公式主要是针对一个训练数据,根据bbox中心点坐标以及宽高对目标区域进行裁剪,假设bbox信息为[x,y,w,h]分别表示bbox中心点坐标以及宽高,则需要裁剪的区域的宽高为[w+\frac{w+h}{2},h+\frac{w+h}{2}],中心点不变。因为要保证裁剪区域面积是127^2,所以公式中右乘上一个缩放因子s,实际上这个s的意义就是保证对裁剪区域的宽高做等比例缩放。则裁剪出来的z的面积是127^2,但大小不一定是127\times127,所以裁剪之后需要将它resize到127\times127。搜索图像的处理与模板图像相同,只是将127变为255。

裁剪的时候会出现两种情况

  1. 裁剪的区域全部在图像中,这种直接裁剪就行;
  2. 裁剪的区域有一部分不在图像中,这种情况需要对不足的区域填充当前图像中每个维度对应维度像素的平均值。

损失函数

原文中2.2节有描述,损失函数如下:

L(y,v)=\frac{1}{|\mathcal{D}|}\sum_{u\in\mathcal{D}}\mathcal{l}(y[u],v[u])

其中,\mathcal{D}就是上图中最后的17x17x1的响应矩阵,u表示矩阵中的点,l(y,v)=log(1+exp(-yv))y表示为正样本(+1)还是负样本(-1),v为矩阵中的值。

关于正负样本的判断,有公式如下:

y[u]=\left \{ \begin{array} {ll} +1 & \textrm{if k||u-c||\leq{R}} \\ -1 & \textrm{otherwise} \\ \end{array} \right .

u为矩阵上的点,c为目标的中心点,R为半径,k是步长;表示目标中心点周围半径R范围内的点都属于正样本,否则属于负样本。

参考代码

siamfc-pytorch

SiameseX.PyTorch

全部评论 (0)

还没有任何评论哟~