乐趣区

关于人工智能:SiamRPN孪生网络与RPN的结合

原文链接

论文地址:http://openaccess.thecvf.com/…

摘要

大多数性能优越的视觉指标跟踪器很难有实时速度。在这篇文章中,咱们提出了孪生候选区域生成网络(Siamese region proposal network),简称 Siamese-RPN,它可能利用大尺度的图像对离线端到端训练。具体来讲,这个构造蕴含用于特征提取的 孪生子网络 (Siamese subnetwork)和 候选区域生成网络 (region proposal subnetwork),其中候选区域生成网络蕴含 分类 回归 两条支路。在跟踪阶段,咱们提出的办法被结构成为单样本检测工作(one-shot detection task)。

咱们事后计算孪生子网络中的模板支路,也就是第一帧,并且将它结构成一个检测支路中区域提取网络外面的一个卷积层,用于在线跟踪。得益于这些改进,传统的多尺度测试和在线微调能够被舍弃,这样做也大大提高了速度。Siamese-RPN 跑出了 160FPS 的速度,并且在 VOT2015,VOT2016 和 VOT2017 上获得了当先的问题。

1. 引言

与适当设计的最先进的基于相干滤波器的办法相比,基于离线训练的基于深度学习的跟踪器能够取得较好的后果。要害是候选的孪生候选区域生成网络(Siamese-RPN)。它由 模板分支 检测分支 组成,它们以端到端的形式对大规模图像对进行离线训练。受到最先进的候选区域提取办法 RPN 的启发,咱们对相干 feature map 进行提议提取。与规范 RPN 不同,咱们应用两个分支的相干特色映射进行提议提取。在跟踪工作中,咱们没有预约义的类别,因而咱们须要模板分支将指标的外观信息编码到 RPN 因素图中以辨别前景和背景。

在跟踪阶段,作者将此工作视为单指标检测工作(one-shot detection),什么意思呢,就是把第一帧的 bb 视为检测的样例,在其余帧外面检测与它类似的指标。

综上所述,作者的奉献有以下三点:

1. 提出了 Siamese region proposal network,可能利用 ILSVRC 和 YouTube-BB 大量的数据进行离线端到端训练。

2. 在跟踪阶段将跟踪工作结构出部分单指标检测工作。

3. 在 VOT2015, VOT2016 和 VOT2017 上获得了当先的性能,并且速度能都达到 160fps。

2. 相干工作

2.1 RPN

RPN 即 Region Proposal Network,是用 RON 来抉择感兴趣区域的,即 proposal extraction。例如,如果一个区域的 p >0.5,则认为这个区域中可能是 80 个类别中的某一类,具体是哪一类当初还不分明。到此为止,网络只须要把这些可能含有物体的区域选取进去就能够了,这些被选取进去的区域又叫做 ROI(Region of Interests),即感兴趣的区域。当然 RPN 同时也会在 feature map 上框定这些 ROI 感兴趣区域的大抵地位,即输入 Bounding Box。

RPN 具体介绍:https://mp.weixin.qq.com/s/VX…

2.2 One-shot learning

最常见的例子就是人脸检测,只晓得一张图片上的信息,用这些信息来匹配出要检测的图片,这就是单样本检测,也能够称之为一次学习。

3 Siamese-RPN framework

3.1 SiamFC

SiamFC 具体介绍:https://mp.weixin.qq.com/s/kS…

所谓的 Siamese(孪生)网络,是指网络的主体构造分高低两支,这两支像双胞胎一样,共享卷积层的权值。下面一支(z)称为模板分支(template),用来提取模板帧的特色。φ 示意一种特征提取办法,文中提取的是深度特色,通过全卷积网络后失去一个 6×6×128 的 feature map φ(z)。上面一支(x)称为检测分支(search),是依据上一帧的后果在以后帧上 crop 出的 search region。同样提取了深度特色之后失去一个 22×22×128 的 feature map φ(x)。模版支的 feature map 在以后帧的检测区域的 feature map 上做匹配操作,能够看成是 φ(z)在 φ(x)上滑动搜寻,最初失去一个响应图,图上响应最大的点就是对应这一帧指标的地位。

Siamese 网络的长处在于,把 tracking 工作做成了一个检测 / 匹配工作,整个 tracking 过程不须要更新网络,这使得算法的速度能够很快(FPS:80+)。此外,续作 CFNet 将特征提取和特色判断这两个工作做成了一个端到端的工作,第一次将深度网络和相干滤波联合在一起学习。

Siamese 也有显著的缺点:

1. 模板支只在第一帧进行,这使得模版特色对指标的变动不是很适应,当指标产生较大变动时,来自第一帧的特色可能不足以表征指标的特色。至于为什么只在第一帧提取模版特色,我认为可能因为:

(1)第一帧的特色最牢靠也最鲁棒,在 tracking 过程中无奈确定哪一帧的后果牢靠的状况下,只用第一帧特色足以失去不错的精度。

(2)只在第一帧提取模板特色的算法更精简,速度更快。

2.Siamese 的办法只能失去指标的核心地位,然而得不到指标的尺寸,所以只能采取简略的多尺度加回归,这即减少了计算量,同时也不够准确。

网络训练原理

如图所示,上一帧的指标模板与下一帧的搜寻区域能够形成很多对的模板 - 候选对(exemplar-candidate pair),然而依据判别式跟踪原理,仅仅下一帧的指标与上一帧的指标区域(即 exemplar of T frame-exemplar of T+1 frame)属于模型的正样本,其余大量的 exemplar-candidate pair 都是负样本。这样就实现了网络结构的端到端的训练。

3.2 Siamese-RPN

右边是孪生网络结构,高低支路的网络结构和参数完全相同,下面是输出第一帧的 bounding box,靠此信息检测候选区域中的指标,即模板帧。上面是待检测帧,显然,待检测帧的搜寻区域比模板帧的区域大。两头是 RPN 构造,又分为两局部,上局部是分类支路,模板帧和检测帧的通过孪生网络后的特色再通过一个卷积层,模板帧特色通过卷积层后变为 2k×256 通道,k 是 anchor 数量,因为分为两类,所以是 2k。上面是边界框回归支路,因为有四个量[x, y, w, h],所以是 4k 左边是输入。

3.3 孪生特征提取子网络

预训练的 AlexNet,剔除了 conv2 conv4 两层。φ(z)是模板帧输入,φ(x)是检测帧输入

3.4 候选区域提取子网络

分类支路和回归支路别离对模板帧和检测帧的特色进行卷积运算:

$$
A^{cls}_{w×h×2k}=[\psi(x)]_{cls}×[\psi(z)]_{cls}\\
A^{reg}_{w×h×4k}=[\psi(x)]_{reg}×[\psi(z)]_{reg}
$$

$A^{cls}_{w×h×2k}$ 蕴含 2k 个通道向量,中的每个点示意正负激励,通过穿插熵损失分类;$A^{reg}_{w×h×4k}$ 蕴含 4k 个通道向量,每个点示意 anchor 和 gt 之间的 dx,dy,dw,dh,通过 smooth L1 损失失去:

$$
\delta[0]=\frac{T_x-A_x}{A_w},
\delta[1]=\frac{T_y-A_y}{A_h}\\
\delta[2]=ln\frac{T_w}{A_w},
\delta[3]=ln\frac{T_h}{A_h}
$$

Ax, Ay, Aw, Ah 是 anchor boxes 中心点坐标和长宽;Tx, Ty, Tw, Th 是 gt boxes,为什么要这样呢,因为不同图片之间的尺寸存在差别,要对它们做正规化。

smoothL1 损失:

$$
smooth_{L1}(x,\sigma)=\begin{cases} 0.5\sigma^2x^2, & \text |x|<\frac{1}{{\sigma^2}} \\ |x|-\frac{1}{{2\sigma^2}}, & \text |x|≥\frac{1}{{\sigma^2}} \end{cases}
$$

3.5 训练阶段:端到端训练孪生 RPN

因为跟踪中间断两帧的变动并不是很大,所以 anchor 只采纳一种尺度,5 种不同的长宽比(与 RPN 中的 3×3 个 anchor 不同)。当 IoU 大于 0.6 时是前景,小于 0.3 时是背景。

4. Tracking as one-shot detection

均匀损失函数 L:

$$
\min_{W’} \frac{1}{n} \sum_{i=1}^n L(\psi(x_i;w(z_i,W’)),l_i)
$$

如上所述,让 z 示意模板 patch,x 示意检测 patch,函数 φ 示意 Siamese 特征提取子网,函数 ζ 示意区域倡议子网,则一次性检测工作能够示意为:

$$
\min_{W} \frac{1}{n} \sum_{i=1}^n L(\zeta(\psi(x_i;W);\psi(z_i;W)),l_i)
$$

如图,紫色的局部像原始的 Siamese 网络,通过同一个 CNN 之后失去了两个 feature map,蓝色的局部是 RPN。模板帧在 RPN 中通过卷积层,$ \phi (x)_{reg}$ 和 $ \phi (x)_{cls}$ 当作检测所用的核。

简略的说,就是预训练模版分支,利用第一帧的指标特色输入一系列 weights,而这些 weights,蕴含了指标的信息,作为检测分支 RPN 网络的参数去 detect 指标。这样做的益处是:

(1)模板支能学到一个 encode 了指标的特色,用这个特色去寻找指标,这会比间接用第一帧的 feature map 去做匹配更鲁棒。

(2)相比原始的 Siamese 网络,RPN 网络能够间接回归出指标的坐标和尺寸,既准确,又不须要像 multi-scale 一样浪费时间。

通过网络后,咱们将分类和回归特色映射示意为点集:

$$
A^{cls}_{w×h×2k}={(x_i^{cls},y_j^{cls},c_l^{cls})}\\
A^{reg}_{w×h×4k}={(x_i^{reg},y_i^{reg},dx_p^{reg},dy_p^{reg},dw_p^{reg},dh_p^{reg})}\\
i∈[0,w),j∈[0,h),l∈[0,2k),p∈[0,k)
$$

因为分类特色图上的奇数通道代表正激活,咱们收集所有 $A^{cls}_{w×h×2k}$ 中的前 K 个点,其中 l 是奇数,并示意点集为:

$$
CLS^*={(x_i^{cls},y_j^{cls},c_l^{cls})_{i∈I,j∈J,l∈L}}
$$

其中 I,J,L 是一些索引集。

变量 i 和 j 别离编码相应锚点的地位,l 编码相应锚点的比率,因而咱们能够导出相应的锚点汇合为:

$$
ANC^*={(x_i^{an},y_j^{an},w_l^{an},h_l^{an})_{i∈I,j∈J,l∈L}}
$$

此外,咱们发现 $A^{cls}_{w×h×2k}$ 上 ANC* 的激活失去相应的细化坐标为:

$$
FEG^*={(x_i^{reg},y_j^{reg},dx_l^{reg},dy_l^{reg},dw_l^{reg},dh_l^{reg})_{i∈I,j∈J,l∈L}}
$$

因为是分类,$A^{cls}_{w×h×2k}$ 选前 k 个点,分两步抉择:

第一步,舍弃掉间隔核心太远的 bb,只在一个比原始特色图小的固定正方形范畴里抉择,如下图:

核心间隔为 7,认真看图能够看出,每个网格都有 k 个矩形。

第二步,用余弦窗(克制间隔过大的)和尺度变动惩办(克制尺度大变动)来对 proposal 进行排序,选最好的。具体公式可看论文。

用这些点对应的 anchor box 联合回归后果得出 bounding box:

$$
x_i^{pro}=x_i^{an}+dx_l^{reg}*w_l^{an}\\
y_j^{pro}=y_j^{an}+dy_l^{reg}*h_l^{an}\\
w_l^{pro}=w_l^{an}*e^{dw_l}\\
h_l^{pro}=h_l^{an}*e^{dh_l}
$$

an 就是 anchor 的框,pro 是最终得出的回归后的边界框 至此,proposals set 就选好了。

而后再通过非极大克制(NMS),顾名思义,就是将不是极大的框都去除掉,因为 anchor 个别是有重叠的 overlap,因而,雷同 object 的 proposals 也存在重叠。为了解决重叠 proposal 问题,采纳 NMS 算法解决:两个 proposal 间 IoU 大于预设阈值,则抛弃 score 较低的 proposal。

IoU 阈值的预设须要审慎解决,如果 IoU 值太小,可能失落 objects 的一些 proposals;如果 IoU 值过大,可能会导致 objects 呈现很多 proposals。IoU 典型值为 0.6。

5. 施行细节

咱们应用从 ImageNet [28]预训练的改良的 AlexNet,前三个卷积层的参数固定,只调整 Siamese-RPN 中的最初两个卷积层。这些参数是通过应用 SGD 优化等式 5 中的损耗函数而取得的。共执行了 50 个 epoch,log space 的学习率从 10- 2 升高到 10-6。咱们从 VID 和 Youtube-BB 中提取图像对,通过抉择距离小于 100 的帧并执行进一步的裁剪程序。如果指标边界框的大小示意为(w,h),咱们以大小 A×A 为核心裁剪模板补丁,其定义如下:

$$
(w+p)×(h+p)=A^2
$$

其中 p =(w + h)/2

之后将其调整为 127×127。以雷同的形式在以后帧上裁剪检测补丁,其大小是模板补丁的两倍,而后调整为 255×255。

在推理阶段,因为咱们将在线跟踪制订为一次性检测工作,因而没有在线适应。咱们的试验是在带有 Intel i7,12G RAM,NVidia GTX 1060 的 PC 上应用 PyTorch 实现的。

学习更多编程常识,请关注我的公众号:

代码的路

退出移动版