siamRPN论文理解与复现

**论文地址:http://openaccess.thecvf.com/content_cvpr_2018/papers/Li_High_Performance_Visual_CVPR_2018_paper.pdf
论文讲解:
siamRPN论文理解与复现_第1张图片
siamRPN的网络结构由两部分组成,siam+RPN
Siam部分:主要功能是提取特征
siamRPN论文理解与复现_第2张图片
RPN部分:功能为产生候选框以及二分类vector
siamRPN论文理解与复现_第3张图片
RPN流程:
①从主干网络得到template Frame 特征向量和detection Frame特征向量之后,对这两组特征向量分别使用3*3的卷积核卷积两次,一次用来计算回归框[t_r_k,d_r],一次用来预测类别[t_c_k,d_c];
② 分别对这两任务分支求相关,得到分别的回归候选框相关向量reg和二分类相关向量cls。
回归候选框流程:
①在x,y两个轴方向,以16为步长遍历detection Frame,得到289个anchor,为了解决自动调节目标框大小的问题,将每个anchor配备5个尺度{0.33,0.5,1,2,3},最终得到1445个anchor;
②用步骤①得到的1445个anchor与标准框作IOU处理,取前16个IOU最大的anchor作为正样本,后48个作负样本,于是得到64个回归框偏移{dx,dy,dw,dh}label以及对应二分类{0,1}label;
③上图中的reg节点,为网络回归框的输出,reg一行的通道数为4k的意思为每个anchor有4个需要归回的坐标偏移参数(dx,dy,dw,dh),每个anchor有5个尺度,最终的output size为[17,17,20];
④将reg的输出reshape处理,得到尺寸为[1445,4]的vector “per_box”;

pre_box=tf.reshape(pre_box,(-1,4))

⑤计算正样本与预处理框per_box之间的距离,负样本和无效样本与预处理框per_box之间的距离均置零;

inside=tf.multiply(target_inside_weight,tf.subtract(pre_box, target_box))

⑥将大于1的距离均置为1,保留小于1的距离

mask=tf.cast(tf.less(tf.abs(inside),1),tf.float32)

⑦0.5x^2

option1=tf.multiply(tf.multiply(inside,inside),0.5)

⑧|x|-0.5

option2=tf.subtract(tf.abs(inside),0.5)

⑨使用smooth_l1作回归框的损失函数
相当于在小于1的部分使用2范数(更smooth,且求导方便),在大于1的部分使用1范数(避免梯度,然后加起来最后求均值。

smooth_l1=tf.multiply(tf.add(tf.multiply(option1,mask),tf.multiply(option2,tf.subtract(1.,mask))),target_outside_weight)

(1)二分类流程:
①去掉label为-1的无效标签,只保留标签为0和1的那64个有效标签组成预测标签
②使用交叉熵函数作为分类损失函数。

cls_loss = tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits(logits=pre_score_valid, labels=label_valid))

复现:使用VOT2013训练模型
(一):下载工程
https://github.com/makalo/Siamese-RPN-tensorflow
(二)准备数据
①新建date文件到工程根目录
将vot2013下载加压后,将整个VOT2013目录放到date里(VOT2016数据集形式跟VOT2013不同,使用时,需要转化成VOT2013形式,否则跑不起来)
(三)修改数据集路径
siamRPN论文理解与复现_第4张图片
(四)训练
run train.py
训练自己的数据集时,只需要将数据集形式制作成VOT2013形式即可。
(五)跟踪过程
inference 阶段
siamRPN论文理解与复现_第5张图片
第一帧:
与训练template frame数据处理过程一样,在目标附近截取一块,然后resize到127* 127大小。送到训练好的模型中,保存Weight for Regression 与Weight for Classification。后不更新。
待跟踪帧:
以前一帧位置为中心,截取一个比较大的区域,然后resize到255* 255大小。送到训练好的模型中,到Classification Branch时,使用第一帧保留的Weight for Classification去卷积待跟踪帧提取的相应特征,得到17 * 17 * 10的分类vector输出;并行的,此处还有一个Regression Branch,使用第一帧保留的Weight for Regression去卷积待跟踪帧提取的相应特征,得到17* 17* 20的回归vector输出;用公式表示为:
siamRPN论文理解与复现_第6张图片
网络输出17* 17* 5=1445个偏移,这个阶段最后的输出也将是1445的回归框
②Proposal selection(论文中给出了两种Proposal selection,源码中只采用了第二种,我就只关注了第二种:cosine window and scale change penalty)
cosine window是为了抑制较大位移;scale change penalty是为了抑制目标尺寸有较大的变化;
(一)先进行scale penalty
siamRPN论文理解与复现_第7张图片
将得到的惩罚因子与网络Classification Branch的output相乘,得到惩罚后的得分预测psore;
(二)然后使用汉宁窗对上一步得到的分数预测psore进行加权余弦窗处理

使用nms得到最后的跟踪框,然后更新这帧的跟踪框作为下一帧需要跟踪帧的初始框。

你可能感兴趣的:(跟踪)