SiamCAR:Siamese Fully Convolutional Classification and Regression for Visual Tracking

article/2025/9/30 22:09:18

文章目录

  • Abstract
  • Introduction
  • Proposed Method
    • Feature Extraction
    • Bounding Box Prediction
    • The Tracking Phase
  • 值得关注的几个问题
    • Q1:输入的图片大小不一?
    • Q2:在两者做相关性之前,如何得到特征图?
    • Q3:两者的相关性计算是如何实现的?
    • Q4: R*送入的网络是什么样的?
    • Q5:映射关系?
    • Q6:惩罚项?

Abstract

通过将视觉跟踪任务分解为两个子问题(像素类别的分类和该像素处的边界框的回归),本文以逐像素的方式提出了全卷积Siamese网络来解决视觉跟踪问题。

该框架由两个简单的子网络组成:一个用于特征提取,另一个用于边界框预测。

Introduction

视觉目标跟踪的挑战:光照变化、尺度变化、背景杂波、严重遮挡、非刚性对象外观的显著变化…

Siamese网络将视觉追踪任务设定为了一个目标匹配问题,其目的是学习目标模版和搜索区域之间的一般相似性映射。

相关项目的发展流程为:

  1. Siamese网络的策略是搜索区域,进行匹配。这要在多个尺度上进行以应对尺度变化。缺点在于耗时;
  2. SiamRPN给SIamese连上了一个RPN,用于解决多尺度造成的时间浪费。缺点在于需要预先设定锚框,使得模型对锚框的参数比较敏感。

本文提出的SiamCAR则是anchor-free的。

分类分支旨在为每个空间位置预测一个标签,回归分支旨在将每个位置回归一个相对边界框。

Proposed Method

请添加图片描述

Feature Extraction

该子网络由两个分支组成,target branch的输入为template patch Z Z Z;search branch的输入为search region X X X

这两个分支与其主干模型共享相同的CNN结构。两者输出的feature map分别为 φ ( Z ) , φ ( X ) \varphi(Z),\varphi(X) φ(Z),φ(X)

R R R本来是两个输出做互相关之后的结果。但是这一操作只能生成一个单通道的压缩响应图,缺乏有用的特征和用于跟踪的信息。

本文为了获得更多的信息,所以我们使用深度相关层来生成多个语义相似图: R = φ ( X ) ∗ φ ( Y ) R=\varphi(X)*\varphi(Y) R=φ(X)φ(Y)

其中 ∗ * 表示的是通道与通道间的相关计算。也就是说R的通道数和两个分支的输出的通道数一致。

原文认为低层次特征对定位来说很有帮助,高层次特征对语义属性的识别很有帮助,所以融合高低层次特征是一种很好的选择。因此,本文结合了最后三个块提取的特征进行连接。
φ ( X ) = C a t ( F 3 ( X ) , F 4 ( X ) , F 5 ( X ) ) \varphi(X)=Cat(F_3(X),F_4(X),F_5(X)) φ(X)=Cat(F3(X),F4(X),F5(X))
需要注意的是两个输出都是 3 × 256 3\times256 3×256维度的特征,最后得到R之后通过 1 × 1 1\times 1 1×1卷积进行降维,这样可以显著减少参数数量。

最后得到的feature map R ∗ R^* R作为分类回归子网络的输入。

Bounding Box Prediction

R ∗ R* R上的每一个 ( i , j ) (i,j) (i,j)可以和search region ( x , y ) (x,y) (x,y)构建起对应关系。可以认为每一个 ( i , j ) (i,j) (i,j)是原图锚框的中点。

本文的模型能够直接分类回归每个位置的目标边界框。其中response map R ω × h × m ∗ R^*_{\omega\times h\times m} Rω×h×m,通过两个分支后输出分类特征图 A ω × h × 2 c l s A^{cls}_{\omega\times h\times2} Aω×h×2cls以及回归特征图 A ω × h × 4 r e g A^{reg}_{\omega\times h\times 4} Aω×h×4reg

对于分类特征图,二分类结果为前景和后景的分类。对于回归特征图,输出的为 ( l , t , r , b ) (l,t,r,b) (l,t,r,b),表示从相应位置到输入搜索区域中边界框四边的距离。

因为目标和背景的比例不是很大,所以样本不平衡不是一个问题。所以我们简单地采用交叉熵进行分类,IOU损失进行回归。

( x 0 , y 0 ) (x_0,y_0) (x0,y0) ( x 1 , y 1 ) (x_1,y_1) (x1,y1)为左上角和右下角的点的坐标(GT)。然后让 ( x , y ) (x,y) (x,y) ( i , j ) (i,j) (i,j)在search region上的中心点。

于是,回归的目标就能被计算得到 t ~ ( i , j ) 0 = l ~ = x − x 0 , t ~ ( i , j ) 1 = t ~ = y − y 0 \tilde{t}^0_{(i,j)}=\tilde{l}=x-x_0,\tilde{t}^1_{(i,j)}=\tilde{t}=y-y_0 t~(i,j)0=l~=xx0,t~(i,j)1=t~=yy0
t ~ ( i , j ) 2 = r ~ = x 1 − x , t ~ ( i , j ) 3 = b ~ = y 1 − y \tilde{t}^2_{(i,j)}=\tilde{r}=x_1-x,\tilde{t}^3_{(i,j)}=\tilde{b}=y_1-y t~(i,j)2=r~=x1x,t~(i,j)3=b~=y1y

回归损失函数为: L r e g = 1 ∑ I ( t ~ ( i , j ) ) ∑ i , j I ( t ~ ( i , j ) ) L I O U ( A r e g ( i , j , : ) , t ~ ( x , y ) ) L_{reg}=\frac{1}{\sum\mathbb{I}(\tilde{t}_{(i,j)})}\sum_{i,j}\mathbb{I}(\tilde{t}_{(i,j)})L_{IOU}(A^{reg}(i,j,:),\tilde{t}_{(x,y)}) Lreg=I(t~(i,j))1i,jI(t~(i,j))LIOU(Areg(i,j,:),t~(x,y))
I ( t ~ ( i , j ) ) = { 1 , i f t ~ i , j k > 0 , k = 0 , 1 , 2 , 3 0 , o t h e r \mathbb{I}(\tilde{t}_{(i,j)})=\{\begin{aligned}&1,if~\tilde{t}^k_{i,j}\gt0,k=0,1,2,3\\&0,other\end{aligned} I(t~(i,j))={1,if t~i,jk>0,k=0,1,2,30,other

保证算进损失函数的距离都是大于0的。

根据观察,远离目标中心的位置往往会产生低质量的预测边界框(单目标跟踪,离这个目标远的位置的边界预测效果不行),这会降低追踪系统的性能。因此,添加了一个与分类分支并行的centerness branch,以去除异常值。

它返回了一个 A ω × h × 1 c e n A_{\omega\times h\times1}^{cen} Aω×h×1cen,给出了中心度分数。这个GT得分是这么定义的。 C ( i , j ) = I ( t ~ ( i , j ) ) ∗ min ⁡ ( l ~ , r ~ ) max ⁡ ( l ~ , r ~ ) × min ⁡ ( t ~ , b ~ ) max ⁡ ( t ~ , b ~ ) C(i,j)=\mathbb{I}(\tilde t_{(i,j)})*\sqrt{\frac{\min(\tilde l,\tilde r)}{\max(\tilde l,\tilde r)}\times\frac{\min(\tilde t,\tilde b)}{\max(\tilde t,\tilde b)}} C(i,j)=I(t~(i,j))max(l~,r~)min(l~,r~)×max(t~,b~)min(t~,b~)

理想情况下,这个 ( x , y ) (x,y) (x,y)是尽量在bbox中心的,如果说这个点不在中心,我们就认为它不是这个bbox的 ( x , y ) (x,y) (x,y),所以这个得分会比较低。

在这里插入图片描述

值得一提的是,如果这一点被判定为背景点,损失函数中是不需要考虑它的中心度得分的。于是,中心度得分的损失函数有:

请添加图片描述

整体损失函数为:

请添加图片描述

The Tracking Phase

跟踪的目的是预测当前帧中的目标的边界框。对于一个位置 ( i , j ) (i,j) (i,j)会产生一个6维的矢量 T i j = ( c l s , c e n , l , t , r , b ) T_{ij}=(cls,cen,l,t,r,b) Tij=(cls,cen,l,t,r,b)

在运动过程中,边界框应该是微小变化的,所以我们施加了一个惩罚 p i j p_{ij} pij

于是,跟踪项可以如下书写 q = arg max ⁡ i , j { ( 1 − λ d ) c l s i j × p i j + λ d H i j } q=\argmax_{i,j}\{(1-\lambda_d)cls_{ij}\times p_{ij}+\lambda_dH_{ij}\} q=i,jargmax{(1λd)clsij×pij+λdHij}

其中 H H H是cosine window, λ d \lambda_d λd是平衡权重, q q q是有最高得分的目标像素。

因为模型以逐像素的方式解决了目标跟踪问题,因此每个位置都是相对于一个预先设定的边界框的。在实际跟踪过程中,如果只使用一个边界框作为目标框,它将在相邻帧之间抖动。

本文观察到,q周围的像素最有可能是目标像素。所以说,它找了从n个邻居中找了得分最高的k个(根据 c l s i j × p i j cls_{ij}\times p_{ij} clsij×pij),最终的预测是这k个回归框的加权平均。

值得关注的几个问题

Q1:输入的图片大小不一?

代码中,会将其resize为255255大小的图像。同时模板大小为127127

Q2:在两者做相关性之前,如何得到特征图?

先后经历了backbone和neck两部分。

backbone通常选择为ResNet50,给出了后三层的feature map。

neck为AdjustAllLayer,通过 1 × 1 1\times1 1×1将这三层调整为256通道。

Q3:两者的相关性计算是如何实现的?

请添加图片描述
采用了xorr_depthwise函数,实际上为:target的每一个通道在x的每一个通道上做一个卷积。

然后用 1 × 1 1\times 1 1×1卷积降维。

Q4: R*送入的网络是什么样的?

就是Conv+GroupNorm+ReLU的结构,最后用Conv进行分类。其中centerness和cls共享模型
请添加图片描述

Q5:映射关系?

输入图像被resize为255*255,stride为8,输出shape为25*25。最后对应的坐标从 ( 0 + 32 , 0 + 32 ) → ( 200 + 32 , 200 + 32 ) (0+32,0+32)\to(200+32,200+32) (0+32,0+32)(200+32,200+32)
请添加图片描述

Q6:惩罚项?

这个惩罚项是从另一篇论文中提出的,在那篇文章中,目的是为了使一次性检测框架适用于跟踪任务,所以需要提出一种策略来选择候选框。

使用余弦窗口和尺度变化惩罚对候选进行排序。 p e n a l t y = e k × m a x ( r r ′ , r ′ r ) × m a x ( s s ′ , s ′ s ) penalty=e^{k\times max(\frac{r}{r'},\frac{r'}{r})\times max(\frac{s}{s'},\frac{s'}{s})} penalty=ek×max(rr,rr)×max(ss,ss)
其中 k k k是超参数, r r r代表着候选框高度和宽度的比例, r ′ r' r代表最后一帧的比例。 s , s ′ s,s' s,s分别代表着候选框和最后一帧的规模,此处的规模如下定义 ( w + p ) × ( h + p ) = s 2 (w+p)\times(h+p)=s^2 (w+p)×(h+p)=s2
p = w + h 2 p=\frac{w+h}{2} p=2w+h,是padding。

然后与分类结果相乘就能得到排序的依据。


http://chatgpt.dhexx.cn/article/q7t4QI4S.shtml

相关文章

TensorFlow搭建VGG-Siamese网络

TensorFlow搭建VGG-Siamese网络 Siamese原理 Siamese网络,中文称为孪生网络。大致结构如下图所示: Siamese网络有两个输入,一个输出。其中,两个输入经过相同的网络层知道成为一个n维向量,再对这个n维向量进行求距离&…

mesa 概述

技术关键词:mesa、OpenGL、dri、gpu、kmd、xsever 目录 一、mesa概述 二、mesa架构 1. 架构设计 2. 模块划分 三、mesa与linux图形系统中的其他模块的关系 四、mesa的编译 五、链接资源 总结 一、mesa概述 mesa是OpenGL、OpenGL ES、Vulkan、OpenCL的一个开…

Siamese 网络(Siamese network)

来源:Coursera吴恩达深度学习课程 上个文章One-Shot学习/一次学习(One-shot learning)中函数d的作用就是输入两张人脸图片,然后输出相似度。实现这个功能的一个方式就是用Siamese网络。 上图是常见的卷积网络,输入图片…

MISF:Multi-level Interactive Siamese Filtering for High-Fidelity Image Inpainting 论文解读与感想

深度学习模型被广泛应用于各种视觉任务的同时,似乎传统的图像处理方式已经被人们渐渐遗忘,然而很多时候传统图像处理方式的稳定性和可解释性依然是深度学习模型所不能达到的。本文是CVPR2022的一篇将传统与深度相结合进行inpainting的文章。 在图像inpa…

Siamese系列文章

说明 在学习目标追踪方面,慢慢读懂论文,记录论文的笔记,同时贴上一些别人写的非常优秀的帖子。 文章目录 说明综述类型笔记SiamFC笔记 SiamRPN笔记 DaSiamRPN笔记 SiamRPN笔记复现 SiamDW笔记 SiamFC笔记 UpdateNet笔记 SiamBAN笔记 SiamMa…

SiamRPN阅读笔记:High Performance Visual Tracking with Siamese Region Proposal Network

这是来自商汤的一篇文章 发表在CVPR2018上 论文地址 目录: 文章目录 摘要1.引言2.相关工作2.2 RPN2.3 One-shot learning 3.Siamese-RPN framework3.1 孪生特征提取子网络3.2 候选区域提取子网络3.3 训练阶段:端到端训练孪生RPN 4. Tracking as one-sho…

【度量学习】Siamese Network

基于2-channel network的图片相似度判别 一、相关理论 本篇博文主要讲解2015年CVPR的一篇关于图像相似度计算的文章:《Learning to Compare Image Patches via Convolutional Neural Networks》,本篇文章对经典的算法Siamese Networks 做了改进。学习这…

【论文阅读】Learning to Rank Proposals for Siamese Visual Tracking

Learning to Rank Proposals for Siamese Visual Tracking:2021 TIP 引入 There are two main challenges for visual tracking: 首先,待跟踪目标具有类不可知性和任意性,关于目标的先验信息很少。 其次,仅仅向跟踪器…

深度学习笔记-----多输入网络 (Siamese网络,Triplet网络)

目录 1,什么时候需要多个输入 2,常见的多输入网络 2.1 Siamese网络(孪生网络) 2.1 Triplet网络 1,什么时候需要多个输入 深度学习网络一般是输入都是一个,或者是一段视频切片,因为大部分的内容是对一张图像或者一段…

Siamese networks

Siamese Network 是一种神经网络的架构,而不是具体的某种网络,就像Seq2Seq一样,具体实现上可以使用RNN也可以使用CNN。Siamese Network 就像“连体的神经网络”,神经网络的“连体”是通过共享权值来实现的(共享权值即左…

Siamese Network理解(附代码)

author:DivinerShi 文章地址:http://blog.csdn.net/sxf1061926959/article/details/54836696 提起siamese network一般都会引用这两篇文章: 《Learning a similarity metric discriminatively, with application to face verification》和《 Hamming D…

详解Siamese网络

摘要 Siamese网络用途,原理,如何训练? 背景 在人脸识别中,存在所谓的one-shot问题。举例来说,就是对公司员工进行人脸识别,每个员工只给你一张照片(训练集样本少),并且…

Siamese网络(孪生网络)

1. Why Siamese 在人脸识别中,存在所谓的one-shot问题。举例来说,就是对公司员工进行人脸识别,每个员工只有一张照片(因为每个类别训练样本少),并且员工会离职、入职(每次变动都要重新训练模型…

Siamese网络(孪生神经网络)详解

SiameseFC Siamese网络(孪生神经网络)本文参考文章:Siamese背景 Siamese网络解决的问题要解决什么问题?用了什么方法解决?应用的场景: Siamese的创新Siamese的理论Siamese的损失函数——Contrastive Loss损…

8.HttpEntity,ResponseEntity

RequestBody请求体,获取一个请求的请求体内容就不用RequestParam RequestMapping("/testRequestBody")public String testRequestBody(RequestBody String body){System.out.println("请求体: "body);return "success";}只有表单才有…

使用restTemplate进行feign调用new HttpEntity<>报错解决方案

使用restTemplate进行feign调用new HttpEntity<>报错解决方案 问题背景HttpEntity<>标红解决方案心得Lyric&#xff1a; 沙漠之中怎么会有泥鳅 问题背景 今天才知道restTemplate可以直接调用feign&#xff0c;高级用法呀&#xff0c;但使用restTemplate进行feign调…

HttpClient 源码详解之HttpEntity

HttpClient 源码详解 之HttpEntity 1. 类释义 An entity that can be sent or received with an HTTP message. Entities can be found in some requests and in responses, where they are optional. There are three distinct types of entities in HttpCore, depending on …

System.Net.Http.HttpClient

本文主要是介绍如何用HttpClient请求带参数的服务&#xff0c;请求服务为某翻译API 直接上源码 1.添加using System.Net;的引用 using System.Net; 2.使用HttpClient发送请求 public static async void Fanyin_HttpClient(string fromString) {Console.WriteLine($"F…

ResponseEntity类和HttpEntity及跨平台路径问题

1. 简介 使用spring时&#xff0c;达到同一目的通常有很多方法&#xff0c;对处理http响应也是一样。本文我们学习如何通过ResponseEntity设置http相应内容、状态以及头信息。 ResponseEntity是HttpEntity的扩展&#xff0c;添加一个HttpStatus状态代码。在RestTemplate和Con…

RestTemplate发送HTTP、HTTPS请求

前面我们介绍了如何使用Apache的HttpClient发送HTTP请求,这里我们介绍Spring的Rest客户端(即:RestTemplate) 如何发送HTTP、HTTPS请求。注:HttpClient如何发送HTTPS请求,有机会的话也会再给出示例。 声明:本人一些内容摘录自其他朋友的博客&#xff0c;链接在本文末给出&#…