Advertisement

SiamFC

阅读量:

一、背景介绍:

[参考资料] :

  1. https://zhuanlan.zhihu.com/p/148516834
  2. https://www.jiqizhixin.com/articles/2017-05-14

目标跟踪的方法一般分为两种模式: 生成式模型鉴别式模型

生成式模型:

早期的一些目标跟踪算法都属于生成式模型研究领域,包括 Meanshift、Particle Filter(粒子滤波)以及基于特征点的光流法等技术。这些方法首先建立或提取出对应的目标模型,并在后续帧中搜索相似特征以逐步实现定位。例如 Meanshift 方法是一种基于概率密度分布的概率追踪技术:它首先会对该对象进行建模,并通过颜色分布等手段来描述其特性;随后计算该对象在下一帧图像中的概率分布,并通过迭代找到局部最密集区域;这种方法特别适用于颜色模式较为鲜明且背景与之差异较大的场景。

但是这类方法也存在明显的弊端, 即未充分挖掘背景信息的价值. 此外, 由于目标外观的变化呈现出随机性与多样性的特点, 因此单一数学模型难以全面描述待跟踪目标的本质特征. 具体而言,在光照变化、运动模糊、分辨率降低以及目标旋转或形变等情况出现时,单一数学模型对目标特性的刻画会受到显著影响, 从而导致跟踪精度下降; 同时由于缺乏有效的预测机制,当目标发生遮挡现象时, 模型无法实现可靠的重建与更新.

鉴别式模型:

鉴別式模型是指綜合考慮目標模型和背景信息,并通過比較二者之間的差異來識別並 extracting出目標model的位置。此外文中也指出了該模式是基於分類進行追蹤的方式 即將其作為 foreground並使用在线學習或离線訓練檢測器來分辨 foreground對象與 background以獲得 foreground對象的位置

基于循环矩阵的核跟踪方法始于2012年由P.Martins提出的CSK方法。该系统通过使用傅里叶变换实现了检测过程中的快速计算能力。在训练分类器时,默认情况下认为离目标位置较近的对象为正样本

随后发展出一系列改进型相关滤波算法

其中CSK团队提出了MOSSE方法作为基础

之后又提出了基于HOG特征的人工知觉追踪(KCF)算法

随后又出现了考虑多尺度特性和颜色信息的方法

如采用深度学习提取特征结合KCF的方法(DeepSRDCF)

这些改进型算法逐渐增加了追踪系统的复杂度

通过深度学习的方法,在大数据背景下借助深度学习对网络模型进行训练后能够其提取出的空间位置信息表现更为突出;同时该技术还具备能够实现完整的前馈处理流程的优势

总结

总结

总结

传统的目标跟踪问题主要通过分析物体外观特征来进行建模。它仅仅依赖视频自身作为训练数据。虽然表现尚可,但这些在线学习方法本质上制约了模型复杂性的提升。随着深度学习的发展,在计算机视觉领域中研究人员也在探索利用深度卷积神经网络进行目标追踪的可能性。然而,在实际应用中通常会利用大规模标注数据集进行模型训练。因此,在大规模标注数据集和实时性这两个方面上仍存在不足。针对上述提出的挑战,在该论文发表时已有诸多相关研究开始关注并尝试解决方案。

  • 将深度网络视为一个特征提取器,并将其应用于相应的滤波技术构成的跟踪框架中。
    • 针对特定的目标,采用在线SGD进行微调训练以完成当前的目标跟踪任务。

但是两种方法均存在缺陷。第一种方法未充分利用端到端的学习优势;第二种方法运行速度较慢。作者在本篇论文中提出了全卷积孪生网络模型,在其离线预处理阶段利用深度卷积网络用于解决更加一般的相似性学习问题,并且在跟踪过程中仅需在线计算该函数的值。

二、网络结构:

为了实现目标追踪的目的,我们可以采用相似度量方法来处理这一问题。具体而言,相似度量主要包括距离计算、相关系数评估以及基于角度的余弦相似度分析等多类指标。在该论文中所涉及的卷积操作及其应用将在后续章节中详细阐述。我们设计一个函数f(z,x),该函数用于对样本图像z与候选图像x进行特征对比,在两幅图像描述的内容高度吻合时能够输出较高置信度值。

本研究的具体实施路径是什么?在训练过程中涉及两个关键输入变量:样本图像变量z和搜索图像变量x。这两个变量所代表的图像尺寸存在差异。从同一视频片段中随机选取多帧图像中的某一帧作为样本,并在距离此帧图片不超过100帧的范围内随机选取另一帧作为搜索图。对这两张图片分别进行裁剪处理,并填充平均颜色后按比例缩放等处理手段获得不同尺度下的图片对比实例。在整个过程中,在每张处理后的图片中,目标物均位于图像中心位置。通过卷积神经网络模型提取特征信息,并根据这些特征信息计算相似性得分。相似性计算采用的是卷积操作方式以获得最终得分值

image-20210718104120152

该论文提出了一种全卷积孪生网络结构,并支持其端到端训练流程。其中φ被定义为一个神经网络模型,在设计过程中去除了填充操作以简化架构。其卷积神经网络模块基于AlexNet框架进行了优化设计,并由五个连续的卷积层构成模块。前两个卷积层分别配置了最大池化机制以增强特征提取能力,并采用RELU等激活函数作为激活单元。

image-20210718104138856

卷积的理解:(参考: https://www.cnblogs.com/shine-lee/p/9932226.html)

​ 卷积和相关:

Correlation entails sliding a kernel across an image, performing element-wise multiplication followed by summation. In contrast, convolution starts by reversing both the rows and columns of the kernel (effectively flipping it symmetrically). This reversed kernel is subsequently employed in thecorrelation operation.

image-20210718150141669

从函数拟合的角度:

y = \delta(wx+b)

通过这个公式的视角来看待。每一次卷积运算中,在对输入数据进行处理。我们将输入数据的特征提取出来,并将其转换为新的表示形式。这些变换会一层层叠加起来,并且它们可能会是线性变换也可能是经过激活函数后的非线性变换。我们的目标就是通过叠加这些变换形成一个复杂结构,并使其能够准确地映射输入到正确的输出上。

从模板匹配的角度:

我们称卷积及其在特征提取中的应用。其中卷积核定义了一种特定的模式。而卷积运算(即相关运算)则在衡量输入数据中各位置与其所匹配的模式之间的相似程度,并可以量化为该位置包含该特定模式的程度。当当前位置与这种特定模式越吻合时其响应值越大这实际上反映了输入数据与其所匹配的目标特征之间的关联程度

在训练过程中如何计算LOSS呢?

因为我们的图片对中的目标都集中在中心位置,在得到的score map中高分点主要集中在以该中心点为中心、固定半径范围内的圆内时,则判定该图片对为正样本;否则则归类为负样本。所采用的损失函数是二分类交叉熵损失函数的形式。如图所示分别为真实值与加权值的示例图表。

损失函数公式:
Loss(X_i,y_i) = -w_i(y_ilogx_i+(1-y_i)log(1-x_i))

image-20210718135724529

三、数据处理:

3.1 训练数据:

首先我们的训练用的数据集是从许多段视频中提取出来的每一帧单独成图的形式保存每张图片都对应有一份标签文件这些标签文件详细记录了该帧图像内所有目标的具体位置信息例如下图所示

image-20210722163148438

3.2 数据预处理:

接下来我们将基于每帧图像生成图像对用作模型输入的数据其中样本图像z采用127127的尺寸而搜索样本x则选用更大的尺寸即225225以下展示的是我们实际应用中使用的图片对示例:

image-20210718135155121

生成流程始于确定原始图像的目标框中心位置,并随后计算出目标框宽度(w)与高度(h)。接着通过计算(w + h)/2来确定在各个方向上所需的扩张量。随后将这两个值相乘并取其平方根以获得最终的比例系数。接着从原始图像中截取所需区域并对其边缘部分实施放大处理以满足尺寸要求。对于边缘区域,则使用平均RGB像素值来进行填充工作以保证整体质量的一致性。最后对该区域进行比例缩放处理以达到指定尺度要求。举个例子来说,在整个搜索过程中涉及到了一系列数学变换步骤

复制代码
    def get_instance_image(img, bbox, size_z, size_x, context_amount, img_mean=None):
    cx, cy, w, h = xyxy2cxcywh(bbox)
    wc_z = w + context_amount * (w+h)
    hc_z = h + context_amount * (w+h)
    s_z = np.sqrt(wc_z * hc_z)
    scale_z = size_z / s_z
    d_search = (size_x - size_z) / 2
    pad = d_search / scale_z
    s_x = s_z + 2 * pad
    scale_x = size_x / s_x
    instance_img = crop_and_pad(img, cx, cy, size_x, s_x, img_mean)
    return instance_img, scale_x, s_x
复制代码
    def crop_and_pad(img, cx, cy, model_sz, original_sz, img_mean=None):
    xmin = cx - original_sz // 2
    xmax = cx + original_sz // 2
    ymin = cy - original_sz // 2
    ymax = cy + original_sz // 2
    im_h, im_w, _ = img.shape
    
    left = right = top = bottom = 0
    if xmin < 0:
        left = int(abs(xmin))
    if xmax > im_w:
        right = int(xmax - im_w)
    if ymin < 0:
        top = int(abs(ymin))
    if ymax > im_h:
        bottom = int(ymax - im_h)
    
    xmin = int(max(0, xmin))
    xmax = int(min(im_w, xmax))
    ymin = int(max(0, ymin))
    ymax = int(min(im_h, ymax))
    im_patch = img[ymin:ymax, xmin:xmax]
    if left != 0 or right !=0 or top!=0 or bottom!=0:
        if img_mean is None:
            img_mean = tuple(map(int, img.mean(axis=(0, 1))))
        im_patch = cv2.copyMakeBorder(im_patch, top, bottom, left, right,
                cv2.BORDER_CONSTANT, value=img_mean)
    if model_sz != original_sz:
        im_patch = cv2.resize(im_patch, (model_sz, model_sz))
    return im_patch

3.3 跟踪过程:

基于训练数据和损失函数的定义基础之上, 我们便能够完成模型的训练工作. 接下来的问题是如何具体实施这一过程呢? 具体来说, 我们将通过以下步骤来实现目标追踪: 首先, 根据网络输出的结果确定目标的位置信息; 其次, 在每帧图像中动态更新这一位置信息.

在第一帧图像中确定了目标框的位置后,在后续每一张图像中进行追踪操作时会基于前一结果进行调整。在追踪阶段中处理每一张图像时会依次进行三次不同尺寸的裁剪操作:首先计算对应的得分图,并从中选取得分最高的区域;接着重复同样的步骤;最后再次重复这一过程以确保准确性。

image-20210722195551679
image-20210722195910683

四、实验结果:

该图表展示了OTB-13平台中不同模型在OPE(一次性通过评估)、TRE(时间鲁棒性评估)以及SRE(空间鲁棒性评估)三个指标上的对比结果。

image-20210718140950365

下图是在VOT-14上,各个模型在鲁棒性和准确度的上比较:

image-20210718141001859

下图是VOT-15上,最好的40个结果和该论文的模型的基于平均重叠的排名

image-20210718141009593

性能评估:

捕获

全部评论 (0)

还没有任何评论哟~