大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE稳定放心使用
文章目录
前言
之前看了关于siamFC的论文、博客和代码,已经跑通了代码,但是,只是大概初步学习,没有认真的研究细节。为了后面更好的学习Siam系列的算法还是要重新认真的学习SiamFC。
先附上论文和代码。
论文:Fully-Convolutional Siamese Networks for Object Tracking
代码:基于pytorch框架的
https://github.com/huanglianghua/siamfc-pytorch
训练代码的话,需要下载GOT-10k数据集。
提示:以下是本篇文章正文内容,下面案例可供参考
一、SiamFC 论文学习
本文在ILSVRC15数据集上建立了一种端到端训练的新型全卷积Siamese 网络,为视频中的目标检测提供了一种基本的跟踪算法。该跟踪算法以超出实时的帧速率运行,尽管其极其简单,但在多个基准测试(benchmark)中实现了最先进的性能。
1.介绍
问题:
监督数据的稀缺性,算法的实时性,约束深度学习在目标跟踪中的应用。对此,有些研究利用预先训练好的深度卷积网络来克服。比如:使用网络内部表示作为特征的“浅(shallow)”方法(例如相关滤波器),执行SGD(随机梯度下降)来微调多层网络。但是,“浅”方法没有充分利用端到端学习的好处,使用SGD微调,虽然可以获得最优结果,但无法实时运行。
作者提出:
在初始离线阶段训练一个深卷积网来解决一个更一般的相似学习问题,然后在跟踪过程中简单地在线评估这个函数。本文的关键贡献是证明了该方法在目前的跟踪基准中获得了非常有竞争力的性能,其速度远远超过帧率要求。
具体来说,作者训练一个Siamese网络在一个更大的搜索区域中定位一个样本图像。进一步的贡献,是一种新颖的Siamese架构,它对于搜索图像是完全卷积的:通过双线性层计算两个输入的互相关联,实现了密集而高效的滑动窗口评估。
2.深度相似学习在跟踪中的应用
学习跟踪任意对象可以使用相似性学习来解决。提出一个函数 f ( z , x ) \ f(z,x) \, f(z,x),比较样本图像 z \ z\, z与相同大小的候选图像 x \ x\, x进行比较,如果两个图像描述相同的对象,则返回高分,否则返回低分。
为了在新的图像中找到目标的位置,我们可以穷举测试所有可能的位置,并选择与目标的过去外观相似度最大的候选。在实验中,将简单地使用对象的初始外观作为范例。函数f将从一组标有目标轨迹的视频中学习。
z \ z\, z表示样本图像(即跟踪目标模板), x \ x\, x表示待搜索图像,需要就是在x中找到z的位置
使用深度卷积网络作为 f \ f\, f函数,深度卷积网络的相似学习通常使用Siamese架构来解决。Siamese网络对两个输入进行相同的 φ \ φ \, φ变换,然后将函数输出送入 g \ g \, g函数,最后得到相似性度量函数为:
f ( z ) = g ( φ ( z ) , φ ( x ) ) f(z) = g(φ(z),φ(x)) f(z)=g(φ(z),φ(x))
当函数 g \ g \, g是一个简单的距离或相似度量, φ \ φ \, φ可以被认为是一个嵌入的函数(特征提取网络)。
2.1 全卷积孪生结构
提出的这个孪生网络,对候选图像x是完全卷积的,并且满足平移不变性的。
引入 L τ \ L_\tau\, Lτ来表示平移算子, ( L τ x ) [ u ] = x [ u − τ ] \ (L_{\tau}x)[u]=x[u – \tau]\, (Lτx)[u]=x[u−τ],对于任何平移 τ \ \tau\, τ有
h ( L k τ x ) [ u ] = L τ h ( x ) h(L_{k\tau}x)[u]=L_\tau h(x) h(Lkτx)[u]=Lτh(x)则将信号映射到信号的函数 h \ h\, h是具有整数步长 k \ k\, k的全卷积函数。(当 x \ x\, x是有限信号时,只需要保持输出的有效区域)。
全卷积网络的优点在于,我们可以提供一个更大的搜索图像作为网络的输入,而不是相同大小的候选图像,并且它将在单个评估中计算密集网格上所有平移子窗口(候选区域)的相似性。为了实现这一点,我们使用卷积嵌入函数 φ \ φ\, φ,并使用互相关层合并得到的特征图
f ( z , x ) = φ ( z ) ∗ φ ( x ) + b 1 f(z,x)=φ(z)∗φ(x)+b1 f(z,x)=φ(z)∗φ(x)+b1
其中 b 1 \ b1\, b1表示在每个位置取值 b ∈ R \ b ∈R\, b∈R的信号。此网络的输出不是单个分数,而是定义在有限网格 D ⊂ Z 2 \ D⊂Z^2\, D⊂Z2上的分数地图,如算法图所示。请注意,嵌入函数的输出是具有空间支持的特征图,而不是普通的向量。同样的技术已应用到了现代立体匹配的工作中。
在跟踪过程中,我们使用以目标的先前位置(以上一帧目标)为中心的搜索图像。最大得分相对于得分图中心的位置,乘以网络中设定的步长,得到目标在帧与帧之间的位移。通过组合一个小批量的缩放图像,可以在一次向前传递中搜索多个尺度。
使用互相关来组合特征图并在较大的搜索图像上评估一次网络(对比实际过程,在一个较大的搜索图像上,使用两个特征图,其中一个特征图来自较大的搜索图像,另一个特征图来自要匹配的目标模版,进行互相关运算),在数学上等同于使用内积运算来组合特征图,并独立地评估在每个转换的子窗口上网络。(对比实际过程,对两个特征图,其中一个特征图较大的搜索区域通过搜索窗滑动平移的方式得到搜索子窗,另一个特征图来自于要匹配的目标模版,进行内积运算,并且将搜索窗在较大的搜索区域上平移,得到较大搜索区域中各个位置图像与目标模版图像的匹配程度值图)。
然而,互相关层提供了一种非常简单的方法,可以在现有conv-net库的框架内高效地实现这一操作。虽然这在测试中很有用,但也可以在训练中加以利用。
对这段话的总结为,将目标模版对应的特征图和较大搜索区域对应图像的特征图进行互相关运算的结果,和使用滑动窗机制在较大的搜索区域对应图像上获取各个位置对应的搜索子窗图像的特征图,再将这些特征图与目标模版对应的特征图进行内积运算,组合各个内积运算的结果得到的整个搜索区域图像对应的结果是一致的。
这些图像的互相关运算,可以视为图像卷积运算。
2.2 使用大搜索图像进行训练
定义损失函数:
l ( y , v ) = l o g ( 1 + e x p ( − y v ) ) l(y,v)=log(1+exp(−yv)) l(y,v)=log(1+exp(−yv))其中, v \ v\, v是单个样本候选对的实值得分, y ∈ { + 1 , − 1 } \ y ∈\{+1,−1\}\, y∈{
+1,−1}是其真实(ground-truth)的标签。在训练过程中,我们通过使用包含样本图像和更大搜索图像的对,来利用网络的全卷积特性。这将产生得分图: D → R \ D → R\, D→R,每对有效地产生许多例子。
定义得分图的损失为单独损失的平均值:
L ( y , v ) = 1 ∣ D ∣ ∑ u ∈ D l ( y [ u ] , v [ u ] ) L(y,v)={1 \over ∣D∣}\sum_{u∈D}^{} {l(y[u],v[u])} L(y,v)=∣D∣1u∈D∑l(y[u],v[u])
在得分图的每个位置 u ∈ D \ u ∈ D\, u∈D需要一个真实的标签 y [ u ] ∈ { + 1 , − 1 } \ y[u] ∈\{+1,−1\}\, y[u]∈{
+1,−1}。
conv-net 的参数 θ \ θ\, θ是通过将随机梯度下降(SGD)应用于该问题而获得,公式为:
a r g m i n θ E ( z , x , y ) L ( y , f ( z , x : θ ) ) argmin_θ E_{(z,x,y)} L(y,f(z,x:θ)) argminθE(z,x,y)L(y,f(z,x:θ))
通过提取以目标为中心的样本和搜索图像,从带注释的视频数据集中获得配对,如下图所示。这些图像是从一个视频的两个帧中提取的,这两个帧都包含对象,并且最多相隔T帧。对象的类在训练期间被忽略。在不破坏图像的纵横比的情况下,对每个图像内的对象的比例进行归一化。
从同一视频中提取的训练对:从同一视频中提取的样本图像和相应的搜索图像。当子窗口超出图像范围时,缺少的部分将用平均RGB值填充。如下图所示
如果得分图的元素在中心半径 R \ R\, R内(考虑到网络的步长 k \ k\, k),则认为它们属于正例。
y ( n ) = { + 1 , if k∣∣u−c∣∣≤R − 1 , otherwise y(n) = \begin{cases} +1, & \text{if k∣∣u−c∣∣≤R} \\ -1, & \text{otherwise} \end{cases} y(n)={
+1,−1,if k∣∣u−c∣∣≤Rotherwise
对得分图中正反两个例子的损失进行加权,以消除类不平衡。
由于我们的网络是全卷积的,因此不存在为中心子窗口的学习偏差的风险。我们认为,考虑以目标为中心的搜索图像是有效的,因为最困难的子窗口以及对跟踪器的性能影响最大的子窗口很可能是与目标相邻的那些子窗口。
请注意,由于网络是对称的 f ( z , x ) = f ( x , z ) \ f(z,x)=f(x,z)\, f(z,x)=f(x,z),因此在样本中它实际上也是完全卷积的。虽然这允许我们在理论上为不同的对象使用不同大小的样本图像,但我们假定大小一致,因为它简化了小批量实现。不过,这一假设未来可能会放松。
2.3 用于跟踪的ImageNet视频
2015年的ImageNet大规模视觉识别挑战赛(ILSVRC)引入了ImageNet视频数据集,作为新的视频目标检测挑战赛的一部分。
2.4 实际考虑因素
数据集管理
在训练过程中,我们采用127×127的样本图像和255×255像素的搜索图像。对图像进行缩放,以使边界框加上上下文的附加边距具有固定的区域(加上附加边缘,是图像缩放后具有固定区域)。更准确地说,如果紧边界框(tight bounding box)具有大小 ( w , h ) \ (w,h)\, (w,h),上下文边距为 p \ p\, p,则选择比例因子 s \ s\, s,使缩放矩形的面积等于常数。
s ( w + 2 p ) × s ( h + 2 p ) = A s(w + 2p) × s(h + 2p) = A s(w+2p)×s(h+2p)=A
s为scale,缩放尺度大小。且注意这是在训练期间。
我们使用样本图像 A = 12 7 2 \ A=127^2\, A=1272的面积,并将上下文数量设置为平均维度的一半
p = ( w + h ) 4 \ p={(w+h) \over 4}\, p=4(w+h)。每一帧的样本和搜索图像被离线提取,以避免在训练期间调整图像大小。在这项工作的初步版本中,我们采用了一些启发式算法来限制从中提取训练数据的帧数。在本文的实验中,相反,我们使用了ImageNet Video的全部4417个视频,这些视频占据了200多万个标签包围盒。
网络架构
我们采用的嵌入函数 φ \ φ\, φ的体系结构类似于 Krizhevsky 等人网络的卷积阶段。网络结构如下表所示:(通道图属性描述每个卷积层的输出和输入通道的数量)
在前两个卷积层之后使用最大池化层Maxpooling。除了conv5(最后一层)之外的每一卷积层,都遵守ReLU非线性。在训练期间,在每个线性层之后插入批归一化( batch normalization)。
最终表示的步长是8。该设计的一个重要方面是在网络中不引入任何填充。虽然这是图像分类中的常见做法,但它违反了方 h ( L k τ x ) [ u ] = L τ h ( x ) \ h(L_{k\tau}x)[u]=L_\tau h(x)\, h(Lkτx)[u]=Lτh(x)程的全卷积性质。
跟踪算法
由于我们的目的是证明我们的全卷积孪生Siamese网络的有效性及其在ImageNet Video上训练时的泛化能力,因此我们使用一种极其简单的算法来执行跟踪。与更复杂的跟踪器不同,我们不会更新模型或保持对过去外观记忆,我们不加入额外的线索,如光流或颜色直方图,我们也不会使用边界框回归来改进我们的预测。然而,尽管跟踪算法很简单,但当它配备了我们离线学习的相似性度量时,却获得了令人惊讶的好结果。
在在线跟踪中,我们确实加入了一些基本的时间约束:我们只在大约四倍于先前大小的区域内搜索对象,并且在得分地图上添加一个余弦窗口来惩罚较大的位移。通过处理搜索图像的若干缩放版本来实现对尺度空间的跟踪。任何比例尺的变化都会受到惩罚,当前比例尺的更新也会受到抑制。
3.相关工作
主要分析对比其他跟踪方法。
最近的一些研究试图针对物体跟踪问题训练递归神经网络(RNNs)。 甘等人,通过训练RNN预测每个帧中目标的绝对位置,Kahou等人类似地训练RNN,使用不可靠的注意机制进行跟踪。这些方法尚未在现代基准测试中显示出有竞争力的结果,但它无疑是未来研究的一个有希望的途径。 我们注意到,通过将孪生(Siamese)网络解释为在长度为2的序列上训练和评估的展开的RNN,可以在此方法和我们的方法之间绘制一个有趣的平行线。 因此,孪生网络可以作为重复模型的强大初始化。Denil等人,使用粒子滤波器来跟踪目标,该粒子滤波器使用学习距离度量来比较当前外观与第一帧的外观。 但是,它们的距离度量与我们的距离度量差异很大。 它们不是比较整个物体的图像,而是计算固定点间的距离(目标边界框内的小区域的局部)。为了学习距离度量,他们训练受限制的玻尔兹曼机器(RBM),然后使用隐藏激活之间的欧几里德距离进行两次固定。虽然RBM是非监督的,但他们建议在对象的图像中心随机固定训练RBM以进行检测。 这必须在线执行或在离线阶段执行,并了解要跟踪的对象。 在跟踪对象时,他们学习了一种随机策略,用于选择特定于该对象的注视,使用不确定性作为奖励信号。除了MNIST数字的合成序列之外,该方法仅在面部和人物跟踪问题上得到定性证明。
虽然为每个新视频从头开始训练深度卷积网络是不可行的,但有几项工作已经研究了在测试时从预先训练的参数进行微调的可行性。SO-DLT和MDNet都在一个类似的检测任务中训练卷积网络,然后在测试时使用SGD学习一个探测器,其中包含从视频中提取的例子跟踪作为探测器学习范例。由于在许多示例中评估前向和后向传递的计算负担,这些方法不能以帧速率操作。 利用卷积网进行跟踪的另一种方法是使用预先训练的卷积网络的内部表示作为特征来应用传统的浅层方法。虽然这种风格的跟踪器如Ma等人的DeepSRDCF和FCNT取得了很好的成果,由于卷积网络表示的维度相对较高,它们无法实现帧率运算。
在我们自己的工作的同时,其他一些作者也提出了通过学习图像对的函数来使用目标跟踪的网络。 Held等人介绍了GOTURN,其中训练了一个网络,以便从两个图像直接回归到第一个图像中所示的对象的第二个图像中的位置。预测矩形而不是位置具有以下优点:可以在不借助于详尽评估的情况下处理尺度和纵横比的变化。 然而,它们的方法的缺点是它不具有对第二图像的平移的内在不变性。这意味着必须在所有位置显示网络示例,这是通过相当大的数据集扩充来实现的。Chen等人训练了将示例和较大搜索区域映射到响应图的网络。 然而,由于最终的层是完全连接的,因此它们的方法也缺乏对第二图像的平移的不变性。与Held等人类似,这是不方便的,因为训练集必须代表所有对象的所有翻译。 他们的方法被命名为YCNN用于网络的Y形状。 与我们的方法不同,它们无法在训练后动态调整搜索区域的大小。 陶等人建议训练一个孪生(Siamese)网络,以识别与初始物体外观相匹配的候选图像位置,方法称为SINT(Siamese INstance search Tracker)。与我们的方法相反,它们不采用相对于搜索图像完全卷积的架构。 相反,在测试时,他们在Struck中对不同半径的圆均匀地采样边界框。此外,它们结合光流和边界框回归来改善结果。 为了提高系统的计算速度,他们采用感兴趣区域(RoI)池化来有效地检查许多重叠的子窗口。 尽管进行了这种优化,但每秒2帧,整个系统仍然远非实时。上面训练视频序列的所有竞争方法(MD-Net,SINT,GOTURN)使用属于基准使用的相同ALOV / OTB / VOT域的训练数据。 由于担心过度拟合基准测试中的场景和对象,这种做法已经在VOT挑战中被征用。 因此,我们工作的一个重要贡献是证明可以在不使用与测试集相同的分布的视频的情况下训练网络以进行有效的对象跟踪。
4.实验
4.1 实现细节
训练
利用MatConvNet用简单SGD a r g m i n θ E ( z , x , y ) L ( y , f ( z , x : θ ) ) \ argmin_θ E_{(z,x,y)} L(y,f(z,x:θ))\, argminθE(z,x,y)L(y,f(z,x:θ))进行最小化,求出嵌入函数的参数。参数的初始值服从高斯分布,根据改进的Xavier方法进行缩放。训练进行了50多次,每次迭代包含50000个采样对(根据2.2节)。每次迭代的梯度使用大小为8的批量大小进行估计,学习率从 1 0 − 2 \ 10^{-2}\, 10−2衰减到 1 0 − 8 \ 10^{-8}\, 10−8。
跟踪
如前所述,在线阶段刻意追求极简主义。计算一次初始对象外观的嵌入 φ ( Z ) \ φ(Z)\, φ(Z),并将其与后续帧的子窗口进行卷积比较。我们发现,通过简单的策略(如线性插值)在线更新样本(其特征表示)并不能获得太多性能,因此我们将其保持不变。我们发现,使用双三次插值在得分地图进行上采样(从17×17到272×272),因为原始地图相对粗糙,所以这样可以得到更精确的定位。为了处理比例变化,我们还在五个比例 1.02 5 { − 2 , − 1 , 0 , 1 , 2 } \ 1.025^{\{−2,−1,0,1,2\}}\, 1.025{
−2,−1,0,1,2}上搜索对象,并通过系数为0.35的线性插值,更新比例,来提供阻尼。
为了使我们的实验结果可重现,我们在http://www.robots.ox.ac.uk/~luca/siamese-fc.html上共享训练和跟踪代码,以及生成精选数据集的脚本。在配备单个NVIDIA GeForce GTX Titan X和4.0 GHz英特尔酷睿i7-4790K的机器上,我们的完整在线跟踪流水线分别以每秒86和58帧的速度进行搜索,搜索范围分别为3和5尺度。
4.2 评估
我们评估了我们的简单跟踪器的两个变体:SiamFC和SiamFC-3s(它搜索3个尺度而不是5个尺度)。
4.3 The OTB-13 benchmark
OTB-13 benchmark考虑了不同阈值下的平均每帧成功率:如果跟踪器的估计值和地面真实值之间的交集(IOU)超过一定值,则该跟踪器在给定帧中是成功的阈。然后,根据该阈值的不同值的成功率曲线下的面积来比较跟踪器。我们还与主要计算机视觉会议上出现的七种最新的跟踪器进行了比较,这些跟踪器可以以帧速率运行:Staple、LCT、CCT、SCT4、DLSSVM Nu、DSST和KCFDP。考虑到序列的性质,对于这个基准,我们只在训练期间将25%的对转换为灰度。所有其他超参数(用于训练和跟踪)都是固定的。
OTB-13 benchmark的OPE(一次评价)、TRE(时间稳健性评价)和SRE(空间稳健性评价)的成功曲线图,如下图所示。CCT、SCT4和KCFDP的结果在撰写本文时仅适用于OPE。
4.4 The VOT benchmarks
在我们的实验中,我们使用了最新稳定版本的视觉对象跟踪(VOT)工具包(tag vot2015-final),它评估了从356个序列中选择的跟踪器,这些序列被选中,以便很好地代表七种不同的具有挑战性的情况。许多序列最初出现在其他数据集中(例如,ALOV 和 OTB )。在基准内,跟踪器在失败五帧后自动重新初始化,当估计的边界框与实际框之间的IOU变为零时,将被视为已经发生。
VOT-14 results
我们将我们的方法SiamFC(及其变体SiamFC3s)与参加2014年VOT挑战赛的最佳10个跟踪器进行了比较。我们还包括最近分别在CVPR 2016和ECCV 2016上展示的两个实时跟踪器Staple和GOTURN。跟踪算法根据两个性能指标进行评估:准确性和健壮性。前者以平均欠条计算,后者以总失败次数表示。这些信息可以让我们深入了解跟踪器的行为。
下图显示了准确性-健壮性图,其中最好的跟踪器更接近右上角。
VOT-15 results
我们还将我们的方法与VOT-2015年的40名最佳参与者进行了比较。在这种情况下,将使用准确性和故障次数的原始分数来计算预期的平均重叠量度,该平均量度表示发生故障后无需重新初始化的平均IoU。
下图显示了预期平均重叠的最终排名,而下表报告了挑战中排名最高的15个跟踪器的得分和速度。
我们提出的方法和VOT-15挑战中表现最好的15个跟踪器的原始分数、重叠和报告速度。在可用的情况下,我们将与作者报告的速度进行比较,否则(*)我们以EFO单位报告VOT-15结果中的值,该值大致对应于fps(例如,NCC跟踪器的速度为140fps和160 EFO)。
VOT-16 results
在撰写本文时,还没有2016年版的结果。然而,为了便于及早与我们的方法进行比较,我们报告了我们的分数。对于SiamFC和 SiamFC-3s ,我们分别获得了0.3876和0.4051的总体预期重叠(基线和非监督实验之间的平均值)。请注意,这些结果与VOT-16报告不同,因为我们参加挑战的是这项工作的初步版本。
尽管我们的方法很简单,但它比最近最先进的实时跟踪器要好(vot-14和vot-15)。此外,在极具挑战性的VOT-15 benchmark测试中,它的性能优于大多数最好的方法,同时也是唯一达到帧速率的方法。这些结果表明,仅在ImageNet Video上,我们的全卷积孪生网络学习到的相似性度量的表现力就足以获得非常强劲的结果,可与最近的最先进跟踪方法相媲美或更好,后者通常要慢几个数量级。我们相信,通过使用跟踪方法经常采用的方法(例如,模型更新、边框回归、微调、记忆)来增强极简主义在线跟踪管道,可以获得相当高的性能。
4.5 数据集大小
下表说明了用于训练孪生网络的数据集的大小对性能有何重大影响。当数据集的大小从5%增加到100%时,预期的平均重叠(在VOT-15上进行了测量)从0.168稳定地提高到0.274。这一发现表明,使用更大的视频数据集可以进一步提高性能。事实上,即使200万个受监督的边界框看起来可能是一个巨大的数字,我们也不应该忘记,它们仍然属于相对中等数量的视频,至少与通常用于训练转换网的数据量相比是这样的。
使用越来越多的ImageNet视频数据集对跟踪器性能的影响。
5. 总结
在这项工作中,我们偏离了传统的在线学习方法用于跟踪,并展示了另一种方法,专注于在离线阶段学习强嵌入。与它们在分类设置中的使用不同,我们证明了对于跟踪应用,孪生全卷积深度网络能够更有效地利用可用的数据。这既体现在测试时,通过执行有效的空间搜索,也反映在训练时,每个子窗口有效地表示一个有用的样本,而几乎没有额外的成本。实验表明,深度嵌入为在线跟踪器提供了自然丰富的特征来源,并使简单的测试时间策略表现良好。我们认为,这种方法是对更复杂的在线跟踪方法的补充,并期待未来的工作能够更彻底地探索这种关系。
第2.4节中描述的简单跟踪算法的快照,配备了我们建议的全卷积暹罗网络,在ImageNet Video上从头开始培训。我们的方法不执行任何模型更新,因此它只使用第一帧来计算 φ ( z ) \ φ(z)\, φ(z)。尽管如此,它对于运动模糊(第2行)、外观剧烈变化(第1、3和4行)、照度差(第6行)和比例变化(第6行)等一系列具有挑战性的情况仍表现出惊人的健壮性。另一方面,我们的方法对混乱的场景(第5行)很敏感,这可能是因为模型从不更新,因此互相关会给与目标第一次出现相似的所有窗口打高分。所有序列都来自VOT-15 benchmark:体操1、车1、鱼3、冰刀1、行进、歌手1。快照是在固定帧(1、50、100和200)拍摄的,跟踪器永远不会重新初始化。
二、论文总结与分析
1.模型结构
在SiamFC的网络结构中,具有两个权值共享的分支。
z \ z\, z为127×127的样本图像(即跟踪目标模板)
x \ x\, x为256×256的待搜索图像,需要在 x \ x\, x中找到 z \ z\, z的位置。
SiamFC有两个分支对应两个输入为 z \ z\, z和 x \ x\, x,将输入同时进行 φ \ φ\, φ变换,作用就是特征提取,分别生成6×6×128和22×22×128的特征图。
两个特征图进行互相关运算操作,相当于, z \ z\, z在 x \ x\, x上以滑动平移方式进行内积运算(通过卷积提取在 x \ x\, x中与 z \ z\, z最相似的部分),得到 x \ x\, x中各个位置的匹配程度值图(得分图)。
最后选取得分最大的为当前帧目标。将17×17的得分图进行双三次插值生成272×272的图像,来确定物体的位置。
2.特征提取网络 φ \ φ\, φ
φ所对应的特征提取网络采用的是AlexNet,其结构如下:
- 前两个卷积层后,使用最大池化层Maxpooling
- 除了conv5(最后一层)之外的每一卷积层,都使用ReLU
- 在训练期间,在每个线性层之后都有批规范化层( BatchNorm)
- 卷积层没有加padding(填充)(作者解释:虽然这是图像分类中的常见做法,但它违反了方 h ( L k τ x ) [ u ] = L τ h ( x ) \ h(L_{k\tau}x)[u]=L_\tau h(x)\, h(Lkτx)[u]=Lτh(x)程的全卷积性质)
- 最终表示的步长是8
针对conv3后的通道数减半情况,进行说明:
作者使用双GPU并行计算,在第三层conv3使用两个GPU结果,所以通道数减半。
3.模型输入
z \ z\, z和 x \ x\, x的获得:
通过提取以目标为中心的样本 z \ z\, z和搜索图像 x \ x\, x,从带注释的视频数据集中获得配对。
下图,上面的三张图是网络输入的模板图像 z \ z\, z,下面对应的是网络输入的搜索图像 x \ x\, x,红色为当前的所在帧的bounding-box。
- 当子窗口超出图像范围时,缺少的部分将用平均RGB值填充。
- 在不破坏图像的纵横比的情况下,对每个图像内的对象的比例进行归一化,输入尺寸要统一。
- 训练时不考虑目标类别
图像的缩放与填充:
对于 z \ z\, z, 在训练过程中,对图像进行缩放,以使边界框加上上下文的附加边距具有固定的区域。如果紧边界框(tight bounding box)具有大小 ( w , h ) \ (w,h)\, (w,h),上下文边距为 p \ p\, p,则选择比例因子 s \ s\, s,使缩放矩形的面积等于常数。
s ( w + 2 p ) × s ( h + 2 p ) = A s(w + 2p) × s(h + 2p) = A s(w+2p)×s(h+2p)=A s为scale,缩放尺度大小。且注意这是在训练期间。 我们使用样本图像 A = 12 7 2 \ A=127^2\, A=1272的面积,并将上下文数量设置为平均维度的一半
p = ( w + h ) 4 \ p={(w+h) \over 4}\, p=4(w+h)。
对于 x \ x\, x, 会从整张图片中裁剪出255×255的图片,裁剪的中心为上一帧预测的bounding-box的中心。
当模板图像 z \ z\, z和搜索图像 x \ x\, x不够裁剪时,缺少的部分将用平均RGB值填充。
4.损失函数
定义损失函数:
l ( y , v ) = l o g ( 1 + e x p ( − y v ) ) l(y,v)=log(1+exp(−yv)) l(y,v)=log(1+exp(−yv))其中, v \ v\, v是单个样本候选的得分, y ∈ { + 1 , − 1 } \ y ∈\{+1,−1\}\, y∈{
+1,−1}是其真实(ground-truth)的标签。
损失函数loss为Sigmoid函数与交叉熵误差结合。
网络最后的输出,其实相当于一个判别式方法,用正负样本对来训练网络。搜索图像 x \ x\, x中的每一个候选子窗口,其实相当于一个样本,而它的得分,输出的就是它是正/负样本的概率。使用逻辑回归来表示的话,这就是一个应用逻辑回归的典型二分类问题。
正负样本对应的概率(Sigmoid函数):
1 1 + e − v \ 1 \over {1 + e^{-v}} \, 1+e−v 1(正样本)和 1 − 1 1 + e − v \ 1-{1 \over {1 + e^{-v}} }\, 1−1+e−v1
对应交叉熵误差函数:
− l o g ( 1 1 + e − v ) \ -log({1 \over {1 + e^{-v}}} )\, −log(1+e−v1) 和 − l o g ( 1 − 1 1 + e − v ) \ -log({1 -{1 \over {1 + e^{-v}}}} )\, −log(1−1+e−v1)
结合 y ∈ { + 1 , − 1 } \ y ∈\{+1,−1\}\, y∈{
+1,−1} 就可以得到loss函数。
定义得分图的损失为单独损失的平均值:
L ( y , v ) = 1 ∣ D ∣ ∑ u ∈ D l ( y [ u ] , v [ u ] ) L(y,v)={1 \over ∣D∣}\sum_{u∈D}^{} {l(y[u],v[u])} L(y,v)=∣D∣1u∈D∑l(y[u],v[u])
得分图: D → R \ D → R\, D→R, ∣ D ∣ \ |D| \, ∣D∣ 为heatmap的大小。
u \ u \, u 表示得分图中的某个位置( u ∈ D \ u ∈ D \, u∈D)
如果得分图的元素在中心半径 R \ R\, R内(考虑到网络的步长 k \ k\, k),则认为它们属于正例。
y ( n ) = { + 1 , if k∣∣u−c∣∣≤R − 1 , otherwise y(n) = \begin{cases} +1, & \text{if k∣∣u−c∣∣≤R} \\ -1, & \text{otherwise} \end{cases} y(n)={
+1,−1,if k∣∣u−c∣∣≤Rotherwise
对得分图中正反两个例子的损失进行加权,以消除类不平衡。
- c \ c\, c 为物体在得分图的中心
- u \ u \, u 为得分图中任意一点
- ∣ ∣ u − c ∣ ∣ \ ||u-c|| \, ∣∣u−c∣∣ 是 u \ u\, u与 c \ c\, c的欧氏距离
- R \ R\, R为距离的阈值,定义的半径
- k \ k\, k 为网络的总步长(得分图经过网络之后缩小的倍数,从网络结构可以看出,有三层的卷积或者池化是以2为步长,所以包含物体信息的像素的变化会缩小 2 3 = 8 \ 2^3=8\, 23=8 倍,而以1为步长的操作是不会对包含物体信息的像素产生影响)
5.离线训练
conv-net 的参数 θ \ θ\, θ使用随机梯度下降(SGD),公式为:
a r g m i n θ E ( z , x , y ) L ( y , f ( z , x : θ ) ) argmin_θ E_{(z,x,y)} L(y,f(z,x:θ)) argminθE(z,x,y)L(y,f(z,x:θ))
- 梯度下降:SGD
- 初始化参数:高斯分布
- 迭代次数:50
- 每次迭代样本数:50000
- 批量大小:8
- 学习率: 1 0 − 2 − 1 0 − 8 \ 10^{-2} – 10^{-8}\, 10−2−10−8
6.在线跟踪
- 初始目标的特征提取 φ ( z ) \ φ ( z )\, φ(z) 只计算一次
- 用双三次插值将得分图从 17 × 17 \ 17 × 17\, 17×17 上采样到 272 × 272 \ 272× 272 \, 272×272 (因为原始地图相对粗糙,所以这样可以得到更精确的定位)
- 为了处理比例变化,在五种尺度比例上 1.02 5 { − 2 , − 1 , 0 , 1 , 2 } \ 1.025^{\{−2,−1,0,1,2\}}\, 1.025{
−2,−1,0,1,2}搜索对象,并通过系数为0.35的线性插值,更新比例,来提供阻尼。(针对带搜索图像 x \ x\, x ) - 目标图像在线不更新,因为对于CNN提取的是高层语义特征,不会像HOG或CN这些浅层特征苛求纹理相似度。
- 跟踪效率:3尺度86fps,5尺度58fps
在在线跟踪中,我们确实加入了一些基本的时间约束:我们只在大约四倍于先前大小的区域内搜索对象,并且在得分地图上添加一个余弦窗口来惩罚较大的位移。通过处理搜索图像的若干缩放版本来实现对尺度空间的跟踪。任何比例尺的变化都会受到惩罚,当前比例尺的更新也会受到抑制。
7.评估
我们评估了我们的简单跟踪器的两个变体:
SiamFC和SiamFC-3s(它搜索3个尺度而不是5个尺度)。
用于训练孪生网络的数据集的大小对性能有重大影响。
使用更大的视频数据集训练可以进一步提高性能。
两类测试集和评测标准:
OTB benchmark,参考:OTB Benchmark 学习(下载链接、评价指标、配置)
VOT benchmarks,参考:后续总结后附上。
上一篇:学习 PySOT(2)(PySOT-toolkit、对比、画图)
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/187272.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...