【图文详解】SiamFC++与图注意力的强强联合:单目标追踪系统

1.研究背景与意义

随着计算机视觉技术的不断发展,单目标追踪(Single Object Tracking, SOT)作为计算机视觉领域的一个重要研究方向,已经在许多实际应用中得到了广泛的应用。单目标追踪系统可以通过分析视频序列中的目标运动,实时地跟踪目标的位置和形状变化,从而在许多领域中发挥重要作用,如智能监控、交通管理、无人驾驶等。

然而,由于目标在视频序列中的外观变化、遮挡、光照变化等因素的影响,单目标追踪任务仍然面临许多挑战。为了解决这些问题,研究者们提出了许多不同的方法和算法。其中,基于深度学习的方法在单目标追踪任务中取得了显著的进展。

SiamFC(Siamese Fully Convolutional Networks)是一种基于孪生网络的单目标追踪方法,它通过将目标和背景分别编码为两个特征图,并通过计算它们之间的相似度来实现目标的跟踪。然而,SiamFC在处理复杂场景和目标变化时仍然存在一些问题,如目标遮挡、光照变化等。

为了进一步提高SiamFC的性能,许多研究者提出了各种改进方法。其中,图注意力单元(Graph Attention Unit)是一种有效的注意力机制,可以在图结构数据上学习目标的相关性和重要性。将图注意力单元引入SiamFC模型中,可以提高模型对目标的关注度,从而提高单目标追踪的准确性和鲁棒性。

因此,本研究的主要目标是基于图注意力单元的改进SiamFC++的单目标追踪系统。通过引入图注意力单元,我们希望能够提高SiamFC模型在复杂场景和目标变化下的追踪性能。具体来说,我们将设计一种新的网络结构,将图注意力单元嵌入到SiamFC模型中,以提高模型对目标的关注度和区分度。同时,我们还将探索不同的注意力机制和损失函数,以进一步提高模型的性能。

本研究的意义主要体现在以下几个方面:

  1. 提高单目标追踪的准确性和鲁棒性:通过引入图注意力单元,我们希望能够提高SiamFC模型在复杂场景和目标变化下的追踪性能。这将有助于提高单目标追踪系统在实际应用中的准确性和鲁棒性。

  2. 探索图注意力单元在单目标追踪中的应用:图注意力单元是一种有效的注意力机制,可以在图结构数据上学习目标的相关性和重要性。通过将图注意力单元引入SiamFC模型中,我们可以探索其在单目标追踪任务中的应用,为后续的研究提供新的思路和方法。

  3. 推动深度学习在单目标追踪中的发展:深度学习在计算机视觉领域取得了巨大的成功,但在单目标追踪任务中仍然存在一些挑战。本研究将探索基于图注意力单元的改进SiamFC++的单目标追踪系统,有助于推动深度学习在单目标追踪中的发展,提高其在实际应用中的效果和性能。

总之,本研究的目标是基于图注意力单元的改进SiamFC++的单目标追踪系统。通过引入图注意力单元,我们希望能够提高SiamFC模型在复杂场景和目标变化下的追踪性能,推动深度学习在单目标追踪中的发展,为实际应用提供更准确、鲁棒的单目标追踪解决方案。

2.图片演示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.视频演示

基于图注意力单元的改进SiamFC++的单目标追踪系统_哔哩哔哩_bilibili

4.基于多特征融合的实时单目标追踪算法

近年来,随着计算机技术和光学成像技术的快速发展,计算机视觉引起学界的广泛关注。日益增长的社会需求也对计算机视觉的现实应用提出了更高的要求。单目标追踪作为计算机视觉的重要研究方向之一,在研究过程中除了追求准确性之外也要保证实时性,才能有效提高现实适用性。本章针对实时单目标追踪问题,利用双边加权最小二乘模糊支持向量机,提出了基于多特征融合的实时追踪算法FSCFI4]。在所提算法中,针对基于局部HOG特征的分类器,利用相关滤波框架克服计算复杂度高的矩阵求逆运算,并通过多基样本扩充训练数据和背景信息;针对基于全局颜色特征的分类器,利用独热编码的数值化优点实现快速计算。在公开数据集上的实验结果表明:与已有的高性能单目标追踪算法相比,所提FSCF算法在形变、快速运动、运动模糊等多个方面均表现出了更优的追踪性能。
本章的结构如下:在第3.1节中,首先简要介绍了基于双边加权最小二乘模糊支持向量机的FST算法;在第3.2节和第3.3节中,分别详细介绍了所提的基于局部HOG特征和全局颜色特征训练的双边加权最小二乘模糊支持向量机;在第3.4节中,介绍了所提两个分类器的融合方法;第3.5节是实验设计及结果分析;第3.6节是全章工作的小结。

双通道网络

图像相似度计算是计算机视觉和图像分析中最基本的任务之一,在诸多视觉任务中发挥着尤为重要的作用[2-4]。在CVPR2015上,Zagoruyko等在一篇关于计算图像相似度的论文中提出双通道网络(2-channel network),其核心思想在于把孪生网络的双分支合并在一起[5]。孪生网络和双通道网络的网络架构图如图所示。孪生网络,又称为双分支网络(2-branches network),其网络结构是由两个共享参数的分支组成。与孪生网络不同,双通道网络的体系结构中没有直接的特征描述符概念。Zagoruyko 等是把孪生网络的双分支合并在一起,将输入的两张单通道的灰色图像合并为一张双通道图像,例如,原本输入的patch1、patch2的维度均为(127,127,1),合成后的双通道图像维度则为(127,127,2)。然后,将双通道图像经过特征提取器得到特征向量。特征提取器在底层网络中,由一系列卷积、ReLU和最大池化层组成。最后,将这部分的输出作为输入提供给线性决策层。该线性决策层仅由具有1个输出神经元的全连接层组成,输出值表示输入图像对的相似度。

在这里插入图片描述

5.核心代码讲解

5.1 Graph_Attention_Union.py
class Graph_Attention_Union(nn.Module):def __init__(self, in_channel, out_channel):super(Graph_Attention_Union, self).__init__()self.support = nn.Conv2d(in_channel, in_channel, 1, 1)self.query = nn.Conv2d(in_channel, in_channel, 1, 1)self.g = nn.Sequential(nn.Conv2d(in_channel, in_channel, 1, 1),nn.BatchNorm2d(in_channel),nn.ReLU(inplace=True),)self.fi = nn.Sequential(nn.Conv2d(in_channel * 2, out_channel, 1, 1),nn.BatchNorm2d(out_channel),nn.ReLU(inplace=True),)def forward(self, zf, xf):xf_trans = self.query(xf)zf_trans = self.support(zf)xf_g = self.g(xf)zf_g = self.g(zf)shape_x = xf_trans.shapeshape_z = zf_trans.shapezf_trans_plain = zf_trans.view(-1, shape_z[1], shape_z[2] * shape_z[3])zf_g_plain = zf_g.view(-1, shape_z[1], shape_z[2] * shape_z[3]).permute(0, 2, 1)xf_trans_plain = xf_trans.view(-1, shape_x[1], shape_x[2] * shape_x[3]).permute(0, 2, 1)similar = torch.matmul(xf_trans_plain, zf_trans_plain)similar = F.softmax(similar, dim=2)embedding = torch.matmul(similar, zf_g_plain).permute(0, 2, 1)embedding = embedding.view(-1, shape_x[1], shape_x[2], shape_x[3])output = torch.cat([embedding, xf_g], 1)output = self.fi(output)return output

这个程序文件是一个名为Graph_Attention_Union的神经网络模型类。它继承自nn.Module和ABC类,并包含了一些卷积层和线性变换层。

这个模型类的初始化函数接受两个参数:in_channel和out_channel,分别表示输入通道数和输出通道数。在初始化函数中,定义了一些卷积层和线性变换层,用于对输入数据进行线性变换和特征提取。

模型的前向传播函数forward接受两个输入zf和xf,分别表示搜索区域节点和目标模板节点。在前向传播过程中,首先对输入数据进行线性变换,然后进行消息传递操作,计算相似度,并根据相似度计算嵌入特征。最后,将嵌入特征和xf的特征进行拼接,并通过一个卷积层得到最终的输出。

整个模型的目的是实现图注意力机制,用于处理图结构数据的特征提取和聚合。

5.2 SiamFC_plus.py

class FeatureExtraction(nn.Module):def __init__(self):super(FeatureExtraction, self).__init__()self.conv1 = nn.Conv2d(3, 64, kernel_size=3, stride=1, padding=1)self.conv2 = nn.Conv2d(64, 128, kernel_size=3, stride=1, padding=1)self.conv3 = nn.Conv2d(128, 256, kernel_size=3, stride=1, padding=1)def forward(self, x):x = F.relu(self.conv1(x))x = F.relu(self.conv2(x))x = F.relu(self.conv3(x))return xclass SiamFCNet(nn.Module):def __init__(self):super(SiamFCNet, self).__init__()self.feature_extraction = FeatureExtraction()self.head_cls = nn.Conv2d(256, 1, kernel_size=1, stride=1)self.head_reg = nn.Conv2d(256, 4, kernel_size=1, stride=1)def forward(self, z, x):z_feat = self.feature_extraction(z)x_feat = self.feature_extraction(x)cls_score = F.conv2d(x_feat, z_feat)reg_score = F.conv2d(x_feat, z_feat)cls_score = self.head_cls(cls_score)reg_score = self.head_reg(reg_score)return cls_score, reg_scoreclass SiamFCLoss(nn.Module):def __init__(self):super(SiamFCLoss, self).__init__()def forward(self, cls_preds, reg_preds, cls_targets, reg_targets):cls_loss = F.binary_cross_entropy_with_logits(cls_preds, cls_targets)reg_loss = F.smooth_l1_loss(reg_preds, reg_targets)combined_loss = cls_loss + reg_lossreturn combined_loss

这个程序文件是一个用于目标跟踪的Siamese网络的实现。它包含了三个主要的模块:特征提取模块、Siamese网络架构和损失函数。

特征提取模块(FeatureExtraction)是一个简单的卷积神经网络,它包含了三个卷积层,用于从输入图像中提取特征。

Siamese网络架构(SiamFCNet)包含了一个特征提取模块和两个头部(Classification head和Regression head)。特征提取模块用于提取目标和搜索图像的特征,然后通过卷积运算计算出两者之间的相关性。头部部分分别用于分类和回归任务,其中分类头部输出目标是否存在的概率,回归头部输出目标的位置。

损失函数(SiamFCLoss)定义了Siamese网络的训练损失。它包含了两个部分:分类损失和回归损失。分类损失使用二元交叉熵损失函数,用于衡量分类结果的准确性。回归损失使用平滑L1损失函数,用于衡量目标位置的准确性。最后,将分类损失和回归损失相加得到综合损失。

这个程序文件提供了一个基本的Siamese网络实现,可以用于目标跟踪任务的训练和推理。

6.融合双通道网络和 SiamFC 的 SiamFC_plus 算法

双通道网络和孪生网络最大的区别在于,孪生网络是在最后的全连接层中才将两张图片的相关神经元关联在一起,而双通道网络则是从最初就将输入的两张图片联系在一起。与孪生网络相比,双通道网络共同处理了两个patch,提供了更大的灵活性。通过实验,Zagoruyko等证明了双通道网络不仅训练速度更快,而且模型精度更高[5]。
在单目标追踪的深度学习算法研究中,针对以SiamFC为代表的孪生网络类算法离线训练阶段中在相似度度量学习问题上的瓶颈,考虑到双通道网络在度量学习上具有高效性和鲁棒性,本节将双通道网络引入到单目标追踪领域中,提出了一个融合双通道网络和 SiamFC的实时单目标追踪算法SiamFC_plus。所提SiamFC_plus 算法的网络框架如图所示。
在这里插入图片描述
模型的输入是一个目标原型图像(Exemplar Image)和一个更大尺寸的搜索区域图像(Search Image)。在搜索区域图像上,与目标原型图像大小一致的滑动窗口被视为实例,即为候选区域。目标和实例的坐标距离小于阈值时对应类标为正,否则为负。记目标原型图像为z,搜索区域图像为x。SiamFC_plus将目标追踪看作是嵌入空间上的相似性学习问题,旨在学习一个相似性度量函数f(x, z),函数f通过比较目标原型图像z和搜索区域图像x,返回目标响应图(Response Map) o:u cZ2。具体过程如下:首先,以z为滤波器,对x的各个颜色通道进行互相关操作,从而将这两张尺寸不同的图像融合在一起;再将这部分输出直接作为输入,传送到CNN特征提取器中提取深度特征;然后,经由决策层输出每个候选区域的得分构成目标响应图o。该决策层是线性决策层,由一个不含有激活函数的全连接层组成。最后,将响应图中分数最高的位置通过双三次插值算法(Bicubic Interpolation)映射到搜索区域中,从而可确定目标的所在位置。
网络训练过程使用的是由目标原型图像和搜索区域图像组成的图像对。SiamFC_plus 的损失函数为hinge损失函数加上L2正则化项,公式如式(4-1)所示。对比交叉嫡损失函数关注全局的所有样本,hinge损失函数更关注类别难以区分的部分样本,对学习有着更严格的要求。在同等的理想条件下,hinge损失函数能使模型具有更优的泛化性能。网络参数包括每层网络的权重和偏置,考虑到精确拟合偏置所需的数据量通常要比权重少许多,正则化偏置参数可能会导致明显的欠拟合,故只对权重做正则惩罚,而不对偏置做正则惩罚。

在这里插入图片描述

其中,a为正则化参数,0为网络参数,y[u]∈{—1,+1}为单个原型-实例对在目标响应图的每个位置u ∈ u上所对应的真实类标,o[u]为其对应的网络输出。网络中所使用的特征提取器是全卷积神经网络,该网络应用于目标追踪中只需要输入搜索区域的图像即可转换为各个子窗口的相似度得分,避免在检测时输入多个候选区域并逐个计算。与SiamFC算法一致,网络中的CNN特征提取器是基于Krizhevsky等提出的AlexNet 网络所构建的特征提取器[8]。在预处理阶段,将目标模板图像的尺寸缩放为1271273,搜索区域图像则缩放为2552553,以目标模板图片为滤波器,对搜索区域图片逐层进行互相关操作后所得的融合图片尺寸为1291293。特征提取阶段的具体网络结构如表6-1所示。
表6-1 SiamFC plus算法特征提取阶段的网络结构
在这里插入图片描述

网络参数0则通过随机梯度下降法计算得出。
在这里插入图片描述

网络的训练过程由前向传播过程和后向传播过程组成。前向传播过程是依照从前往后的顺序,从输入层开始经由隐藏层到达输出层,逐层计算出每个网络层的激活值。得到网络输出值后,将其代入损失函数中即可计算损失值。反向传播过程则是依照从后往前的顺序,从输出层开始经由隐藏层到达输入层,逐层计算出每个网络层的误差项,进而计算各层网络参数的梯度,最后根据梯度值更新各层网络参数。

7.SiamFC_plus 的前向传播

网络的前向传播过程是按照从前往后的顺序,从输入层开始经由隐藏层到达输出层,逐层计算出各个网络层的激活值,最后得到网络输出值。网络一共有L=9层,结合表6-1可知其中包括了1个输入层,5个卷积层,2个池化层,1个全连接层。记上标表示样本序号,下标表示网络层号,星号*表示卷积运算,*a表示每个颜色通道上的互相关操作,W表示权重,b表示偏量,o表示ReLU激活函数,Pool表示重叠最大池化法。第1层是输入层,输入目标模板图像z和搜索区域图像x,以z为滤波器,在每个颜色通道上对x做互相关操作,其输出为:
在这里插入图片描述

8.SiamFC_plus 的反向传播

完成前向传播过程后,开始进行网络的反向传播。反向传播过程是按照从后往前的顺序,从输出层开始经由隐藏层到达输入层,逐层计算出每个网络层的误差项,进而计算各层网络参数的梯度,最后根据梯度值更新各层网络参数。记下标表示层数,星号*表示卷积运算,〇表示Hadamard积(矩阵点乘),rot180表示翻转180度,即将矩阵上下翻转一次以及左右翻转一次。通过公式的损失函数计算输出层的误差项为:
在这里插入图片描述

9.网络结构

以往的跟踪器都通过模板分支和搜索分支之间的互相关实现相似性学习。原算法的作者认为这种方式存在以下缺点:
在这里插入图片描述

以往跟踪器一般是以目标中点为中心取m*m大小的区域作为模板,这会导致提取到部分背景信息或者丢失部分目标信息。本文只提取目标所在bbox区域作为模板帧。
以往跟踪器互相关是将提取到的模板特征在搜索区域上做全局搜索,无法适应旋转、姿态变化、遮挡等情况。
在这里插入图片描述

GAM:提出图注意力模块(Graph Attention Module),有效将目标信息从模板特征传递至搜索特征。
SiamGAT:在SiamCAR基础上做了改进,设计 target-aware 的选择机制以适应不同目标的大小和长宽比变化。

整体网络结构如图,特征提取使用GoogleNet,头部和SiamFC++一样。
在这里插入图片描述

10.系统整合

下图完整源码&数据集&环境部署视频教程&自定义UI界面

在这里插入图片描述

参考博客《基于图注意力单元的改进SiamFC++的单目标追踪系统》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/164023.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

服务器流量包扣减规则

服务器买的流量包,一般指的是上行带宽,下行通常是不限的 上行和下行是针对服务器而言的 客户端上传文件给服务器,对服务器而言它是在下载,所以对服务器而言他是用的下行带宽(下行流量) 客户端从服务器下载文件,对服务器而言它是在上传,所以对服务器而言他是用的上行带宽(上行…

大数据量条件SQL查询内存处理方案以及数据过滤算法优化

MySQL是一个广泛使用的关系型数据库管理系统。通过SQL语言进行数据操作和查询,还支持多用户、多线程和分布式操作等功能。 在实际使用中,我们会遇到各种查询条件,如字段名、表名、逻辑运算符、比较运算符、函数等。其中,有些查询…

浅析智慧社区建设趋势及AI大数据监管平台方案设计

一、背景与需求 伴随着社会与经济的发展,人们对生活质量的要求越来越高,与此同时,新兴技术的进步也促进了智慧社区市场的逐步成熟。智慧社区是社区管理的一种新理念,是新形势下城市与社会管理的一种创新模式。 在上海、杭州、深…

在.bashrc文件修改环境变量的做法

作者:朱金灿 来源:clever101的专栏 为什么大多数人学不会人工智能编程?>>> ~/.bashrc文件是linux下保存环境变量的系统文件。原以为使用sed命令修改.bashrc文件,实际上不行,需要使用echo命令。具体示例如下…

02-详细介绍Java8新特性方法引用,构造引用,数组引用

方法/构造/数组引用 方法引用 当要传递给Lambda体的操作已经有实现的方法时就可以使用方法引用,方法引用和构造器引用就是为了简化Lambda表达式 方法引用可以看做是Lambda表达式深层次的表达,方法引用本质还是Lambda表达式所以也是函数式接口的一个实例通过方法的名字来指向…

小红书关键词搜索商品列表API接口(分类ID搜索商品数据接口,商品详情接口)演示案例

通过关键词搜索商品API接口,电商平台可以为消费者提供一个简单、快捷的商品搜索功能。用户只需输入关键词,就可以得到与该关键词相关的商品列表。关键词搜索商品API接口还可以提供给第三方开发者一个便捷的商品搜索服务。开发者可以利用该接口&#xff0…

Mac安装配置typescript及在VSCode上运行ts

一、Mac上安装typescript sudo npm install -g typescript 测试一下:出现Version则证明安装成功 tsc -v 二、在VSCode上运行 新建一个xxx.ts文件,测试能否运行 console.log("helloworld") 运行报错:ts-node: command not…

后渗透持久性-– 服务控制管理器

执行以下命令将快速检索服务控制管理器实用程序的 SDDL 权限。 sc sdshow scmanager服务控制管理器 – 安全描述符 PowerShell 还可用于枚举所有用户组的 SDDL 权限并将其转换为可读格式。 $SD Get-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Services\Schedule\S…

shell 条件语句 if case

目录 测试 test测试文件的表达式 是否成立 格式 选项 比较整数数值 格式 选项 字符串比较 常用的测试操作符 格式 逻辑测试 格式 且 (全真才为真) 或 (一真即为真) 常见条件 双中括号 [[ expression ]] 用法 &…

美国服务器在大陆连不上怎么回事?

​  在租用任何美国服务器之前,都需要先搞清楚一些使用问题,毕竟服务器能够不间断地访问也是站在们所期望的。但有时,美国服务器网站或许也会突然出现在大陆打不开的情况,在面临这种情况时,我们应该怎么做? 查看连不…

【史上最细教程】服务器MySQL数据库完成主从复制

文章目录 MySQL完成主从复制教程准备:原理:步骤: 推荐文章 MySQL完成主从复制教程 主从复制(也称 AB 复制)就是将一个服务器(主服务器)的数据复制到一个或多个MySQL数据库服务器(从…

Java飞翔的鸟

创建三个包,存放代码。把图片放进文件中 APP包(运行) GameApp类 package APP; import mian.GameFrame;public class GameApp {public static void main(String[] args) {new GameFrame();} } mian包(主内容) Barri…

python获取json所有节点和子节点

使用python获取json的所有父结点和子节点 并使用父节点加下划线命名子节点 先展示一段json代码 {"level1": {"level2": {"level3": [{"level4": "4value"},{"level4_2": "4_2value"}]},"level2_…

电力行业的智能调度:数字孪生技术

随着科技的发展,数字孪生技术正逐渐渗透到各个行业领域,其中包括电力行业。数字孪生技术为电力行业带来了前所未有的机遇,使得电力系统的运行更加高效、安全和可持续。本文借用山海鲸可视化软件几个电力行业数字孪生案例探讨数字孪生技术在电…

介绍几种Go语言开发的IDE

文章目录 1.前言2.几种ide2.1 Goland2.2 VsCode示例 2.3 LiteIDE2.4 Eclipse插件GoClipse2.5 Atom2.6 Vim2.7 Sublime Text 3.总结写在最后 1.前言 Go语言作为一种新兴的编程语言,近年来受到了越来越多的关注。 它以其简洁、高效和并发性能而闻名,被广…

Jmeter 压测保姆级入门教程

1、Jmeter本地安装 1.1、下载安装 软件下载地址: https://mirrors.tuna.tsinghua.edu.cn/apache/jmeter/binaries/ 选择一个压缩包下载即可 然后解压缩后进入bin目录直接执行命令jmeter即可启动 1.2 修改语言 默认是英文的,修改中文,点击…

关于解决C# WinForm中Chart控件增删数据时报错的解决方法

1.报错代码 System.InvalidOperationExceptionHResult=0x80131509Message=集合已修改;可能无法执行枚举操作。具体报错表现为,在Application.Run(Form1())中断。 2.解决方法 这个错误通常是由于在枚举集合时对集合进行了修改而引起的。在修改完chart控件中的内容后,可能会…

Linux---常用命令汇总

文章目录 关于目录操作的命令ls/llcdpwdmkdir 关于文件操作的命令touchechocatrmmvcpvim 关于查询操作的命令greppsnetstat 关于目录操作的命令 ls/ll ls : 列出当前目录下的目录和文件(以行的展示形式) ll : 列出当前目录下的目录和文件&…

Django之Cookie与Session,CBV加装饰器

前言 会话跟踪技术 在一个会话的多个请求中共享数据,这就是会话跟踪技术。例如在一个会话中的请求如下:  请求银行主页; 请求登录(请求参数是用户名和密码);请求转账(请求参数与转账相关的数…

Thread类常用成员方法

点击链接返回标题-> Java线程的学习-CSDN博客 目录 前言 有关线程名字的成员方法: String getName() void setName(String name) Thread(String name) 获取线程对象的成员方法: static Thread currentThread() 让线程睡眠的成员方法&#xff1…