在Siam-FC中,作者提出的算法首次将孪生网络引入了目标跟踪的领域,实现了端到端的训练,它是一个兼容了速度和精度的算法,在3个尺度变换和5个尺度变换的条件下,跟踪的速率分别达到了86 fps和58 fps。
Siam-FC需要多尺度测试,在跟踪阶段分别生成不同尺度的搜索框,进行跟踪,选取得分结果最好的作为跟踪结果。
Siam-FC没有做回归去调整候选框的位置。
本篇论文提出的Siam-RPN可以说是对Siam-FC的改进,在速度和精度上都有提升。速度上达到了160 FPS,而RPN子网络进一步提升了对目标框预测的准确度。
首先看一下RPN网络,RPN网络是在Faster-RCNN中提出的代替了ss算法用来提取目标候选框的。
上图展示了RPN网络的具体结构。可以看到RPN网络实际分为2条分支,上面一条通过softmax分类anchors获得positive和negative分类,下面一条分支用于计算对于anchors的bounding box regression偏移量,以获得精确的proposal。而最后的Proposal层则负责综合positive anchors和对应bounding box regression偏移量获取proposals,同时剔除太小和超出边界的proposals。
具体的实现: 对于前面一个步骤通过特征提取网络得到的特征图,采用3 * 3大小的卷积核,同时padding=1来进行卷积操作。
如何选定Anchor?
对于特征图上的每一个点,我们可以计算出对应于原图的位置,然后生成9种anchor(这些anchor分别代表不同的大小和比例,大小有:[128 * 128,256 * 256, 512 * 512],比例有:[1 : 1、1 : 2、2 : 1])。然后我们可以根据anchor和ground_truth的IoU值来给anchor打上正负样本的标签。注意,这里生成的anchor特别多,在实际训练的时候一般是随机选取指定数量的anchor,比如:选取256个anchor,其中正负样本比例为1 : 1。
如何计算特征图中某一点和原图的位置对应关系?
特征图中的某一个点,对应的就是原图中某一个区域,也就是我们说的感受野大小,如果我们使用3 * 3的卷积核,同时padding=1来进行卷积操作的话,那么得到的特征图和原图是一样大小的,也就是说卷积操作不改变输入和输出的大小,只有在polling层会成倍减小特征图的输出。所以我们可以根据当前点在特征图中的位置,扩大相应的倍数来还原在原图中的位置。
如何定义正负样本?
正样本:
负样本:
分类分支和回归分支的计算过程?
上面的介绍中没有提到我们特征图的深度,这里的特征图是通过前一步骤的特征提取网络得到的,所以采用不同的网络会得到不同深度的特征图,在Faster-RCNN中,这里的维度是256维。我们在特征图上做3 * 3的卷积时保持通道数不变,所以每一次卷积会得到一个256维的向量,这里每一个特征256-d都对应于原图中的9个预测的anchor。然后在两个分支上分别做1 * 1的卷积得到预测结果。对于每一个Anchor,分类分支给出两个结果(获得2个score,正类是物体,负类是背景)、回归分支给出四个结果(获得4的值x,y,w,h)
Siam-RPN整体的网络结构分为两部分,一部分是Siamese Network,另一部分是Region Proposal Network, 前者用来提取特征,而RPN子网络又由两个分支组成,一个是用来区分目标和背景的分类分支,另外一个是微调候选区域的回归分支:
对于Siam-RPN网络来说,首先第一步,经过Siam-FC孪生网络完成模板图像和搜索图像的特征提取工作,然后,对于模板图像z的特征,分别经过3 * 3大小的卷积操作,同时需要提升通道数。对于检测分支,也是相同的卷积操作,但是保持通道数不变,然后借鉴Siam-FC,采用相似的互相关运算得到分类分支和回归分支的预测结果。
【参考: https://zhuanlan.zhihu.com/p/31426458】
分类分支,每一个Anchor有两个输出,分别代表预测的结果是前景和背景的概率。
回归分支,每一个Anchor有四个输出,分别代表预测的Anchor与Ground Truth之间的偏移量。
对于窗口一般使用四维向量 (x,y,w,h) 表示,分别表示窗口的中心点坐标和宽高。红色的框A代表原始的positive Anchors,绿色的框G代表目标的GT,我们的目标是寻找一种关系,使得输入原始的anchor A经过映射得到一个跟真实窗口G更接近的回归窗口G’
如何寻找这个关系呢? 简单的思路就是通过平移和缩放来实现:
所以回归分支的目的就是学习这四种变换的参数,让预测框更好的逼近真实值。
Siam-RPN的loss定义包括两部分,类似于Faster-RCNN:
l o s s = L c l s + λ L r e g loss = L_{cls} + \lambda L_{reg} loss=Lcls+λLreg
分类分支采用交叉熵损失函数
二分类
$$ -y_i 表示样本i的label,正类为1,父类为 \\ -p_i 表示样本i预测为正类的概率 $$多分类
$$ - M 类别的数量 \\ - y_{ic} 符号函数(0或1),如果样本i的真实类别等于c取1,否则取0 \\ - P_{ic} 观测样本i属于类别c的预测概率 $$回归分支采用Smooth L1 损失函数
选定5种不同比例的anchor:[0.33,0.5,1,2,3]
阈值上限: 0.6
阈值下限: 0.3
在Siam-RPN中,一个训练队包含64个样本,其中最多16个正样本。