Siamese RPN论文阅读

此论文就是将两种网络结构Siamese和RPN连接在一起得到了一个新的网络,虽然没有很大的改动,但是这个网络的效果居然非常好。

一、相关知识

目标跟踪(tracking):对于一组连续的视频帧,给定第一帧中物体的位置,要求输出剩余帧中该物体的位置。(物体是训练集里没有出现过的)
目标检测(detection):给一幅图像,输出图片中的在训练集中出现过的物体的类别与位置。
多尺度检测:每次都是随机选择一个尺度来进行学习和计算
anchor box:翻译为锚点框,就是通过RPN对每个锚点上的k个矩形分类和回归,得到感兴趣区域。每个anhcor box要分前景和背景,所以cls=2k;而每个anchor box都有[x, y, w, h]对应4个偏移量,所以reg=4k
元学习:学会学习(通过基于预测梯度的方法,来加快学习)
一次性学习(单目标检测):只知道一张图片上的信息,用这些信息来匹配出要检测的图片
Siamese子网络:主要用于特征提取
RPN子网络:Region Proposal Network直接翻译是区域提议网络,我觉得解释成提取候选框网络比较恰当。主要用于目标检测,来选择感兴趣的区域。分为两个支路,一个用于分类前景和背景,一个用于边界框回归。

二、网络结构

1、Siamese子网络

在这里插入图片描述
可以看见,Siamese网络有两个分支:上面是模板分支,输入是历史帧中的目标patch(第一帧需要追踪的物体的特征框);下面是检测分支,输入是当前帧中的目标补丁(就是含有追踪物体的特征框)。
但是这两个分支的网络结构是完全一样的。作者在文中说,网络是修改后的AlexNet,我去看了一下AlexNet的结构,没有很看明白是怎么改的。有人说这个的结构和Siamese-FC差不多,我看了一下,确实很像。(在网络的代码里面看网络结构)
在这里插入图片描述
可以看见采用的是无填充的全卷积网络,下面是计算移除所有填充的算式:
在这里插入图片描述
这个网络比较简单,不多介绍。

2、RPN子网络

网络结构如下所示:
在这里插入图片描述
假设有k个特征框,那么2k个通道进行分类(分别对应特征框的前景和背景),4k个通道进行回归(对应特征框的坐标x,y,w,h)
在相关部分中,使用卷积操作,将信道增加到两个分支,并且增加通道数;
在监督部分中,使用卷积操作,将信道增加到两个分支,但通道数不变。
在这里插入图片描述
(一)分类分支
模板帧
首先把6x6x256的feature map卷了一下,就变成一个4x4x(2kx256)的feature map了。根据前面对6x6x256 feature map 的定义,6x6个区域,每个区域256个特征。这个卷积是一次性分析3x3区域内每个区域内的256维特征(卷积核3x3x256),然后是从背景前景的角度从256个不同的指标产生一个feature map(一共有256个不同的卷积核)。
简单来说就是用256个3x3x256的卷积核去卷积6x6x256的feature map,最后就得到了4x4x256的包含前景背景相关特征的feature map。
图里面虽然写的是4x4x(2kx256),但是应该不是4x4x2kx256的意思,应该是有4x4x256和4x4x2k的意思,前面的4x4x256是4个区域上每个区域跟前景背景相关的256种特征,后面的4x4x2k则是在这4x4个区域的中心点预测了k个框,每个框是前景可能性和背景可能性的评分。
Siamese-RPN对模板帧"抛锚",实际上是为了进一步细化Ground Truth,把Ground Truth修的特别精准(上下左右框都能贴着要跟踪的物体).然后每个区域的中心点都画了k个框,每个框都有前景分和背景分。而且这k个框后面卷积了之后还能用于给检测区划分区域。
检测帧
卷积方式与参数都是与前面一样的,不一样的就是不进行“抛锚”。
卷积后就得到了一个20x20x256的、检测帧的、跟模板帧使用同一个前景背景评价特征的一个feature map。
再两个卷积,然后会得到2k张score map,在响应程度、前背景分数(实际上就用了前景分数)三者之间取某种权重,选择17x17x2k中的一个框映射回去,框的中心点就是object大致位置。(这里之所以说是大致位置,是因为后面还要靠regression分支的结果来修正)
(二)回归分支
先对模板帧“抛锚”
模板帧
卷积都跟上面是一样的,不过这里用的卷积核提取出来的特征可能意义还是有点不一样(毕竟用途不一样,这里是为了得到偏移量和预测框的规格)。
简要说明一下这里的得到的这个4x4x(4kx256)是什么含义
首先是4x4x256,这就是提取出来的和用于regression判断的特征
然后是4x4x4k,这表示4x4个区域上的k个框的4个修正值(分别为dx,dy:中心的横纵偏移量和dw,dh:预测框的宽高偏移量)。
检测帧
检测帧的处理跟前面classification branch对检测帧的处理一模一样,也没有对RPN“抛锚”,只是简单地提取高级特征,然后一样是用模板帧的feature map去卷积检测帧的feature map,得到最终的score map。
在这里插入图片描述
ps:式子表示的是在分类分支与回归分支中,分别将模板帧和检测帧进行卷积计算。,得到两张score map。
产生结果
等模板帧和检测帧从网络里输出之后,我们得到了两张score map
一张是由classification branch产生的,17x17x2k
一张是由regression branch产生的,17x17x4k
前面已经提到,预测框的大致位置是由classification branch产生的,所以首先我们是根据classification branch产生的17x17x2k的score map的响应大小以及前景分数,确定我们选择了17x17中的哪个区域,以及选择了那个区域的哪一个框。
然后需要修正,修正就不用再判断了(判断是classification branch的活),直接去找regression branch产生的那个17x17x4k score map对应的那个区域的4个偏移量就能算出最终的预测框了。
损失函数:
在这里插入图片描述

三、网络训练

我们在跟踪任务中比检测任务中选择更少的锚点,因为我们注意到两个相邻帧中的相同对象不会有太大变化。所以只采用一种不同锚固比的尺度,我们采用的锚固比是[0.33,0.5,1,2,3]。
在我们提出的框架中,选择正和负训练样本的策略也很重要。这里采用了目标检测任务中使用的标准,即我们将IoU与两个阈值一起用于测量。正样本定义为IOu > thhi的锚及其对应的地面真实值。负锚被定义为满足IoU < thlo的锚。我们设置了0.3和0.6。我们还限制了最多16个阳性样本和来自一个训练对的总共64个样本。
训练过程中,首先要获取训练数据集的所有视频序列(每个视频序列的所有帧),我采用的是GOT-10k数据集训练;获取数据集之后进行图像预处理,对每一个视频序列抽取两帧图像并作数据增强处理(包括裁剪、resize等过程),分别作为目标模板图像和搜索图像;把经过图像处理的所有图像对加载并以batch_size输入网络得到预测输出;建立标签和损失函数,损失函数的输入是预测输出,目标是标签;设置优化策略,梯度下降损失,最终得到网络模型。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值