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

article/2025/9/30 22:35:27

这是来自商汤的一篇文章 发表在CVPR2018上 论文地址

目录:

文章目录

    • 摘要
    • 1.引言
    • 2.相关工作
      • 2.2 RPN
      • 2.3 One-shot learning
    • 3.Siamese-RPN framework
      • 3.1 孪生特征提取子网络
      • 3.2 候选区域提取子网络
      • 3.3 训练阶段:端到端训练孪生RPN
    • 4. Tracking as one-shot detection
    • 5. 实验
    • 6. 结论

摘要

视觉目标跟踪在这些年来已经成为一个基础的主题,许多基于深度学习的跟踪器在多个跟踪基准上已经取得了优越的性能。但是大多数人性能优越的跟踪器很难有实时速度。在这篇文章中,作者提出了孪生候选区域生成网络(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,作者在相关特征图谱上提取候选区域,然后作者将模板分支上的目标外观信息编码到RPN特征中来判别前景和背景。
在跟踪阶段,作者将此任务视为单目标检测任务(one-shot detection),什么意思呢,就是把第一帧的BB视为检测的样例,在其余帧里面检测与它相似的目标。
综上所述,作者的贡献有以下三点:

  1. 提出了Siamese region proposal network,能够利用ILSVRC和Youtube-BB大量的数据进行离线端到端训练。
  2. 在跟踪阶段将跟踪任务构造出局部单目标检测任务。
  3. 在VOT2015, VOT2016和VOT2017上取得了领先的性能,并且速度能都达到160fps。

2.相关工作

2.2 RPN

说了这么多,那到底什么是RPN呢?
RPN即Region Proposal Network,首先是在Faster-RCNN中提出的,用于目标检测。分为两个支路,一个用于分类前景和背景,一个用于边界框回归。
这里写图片描述
通俗来讲,就是用RPN来选择感兴趣区域的,即proposal extraction。例如,如果一个区域的p>0.5,则认为这个区域中可能是我们想要的类别中的某一类,具体是哪一类现在还不清楚。到此为止,网络只需要把这些可能含有物体的区域选取出来就可以了,这些被选取出来的区域又叫做ROI (Region of Interests),即感兴趣的区域。当然了,RPN同时也会在feature map上框定这些ROI感兴趣区域的大致位置,即输出Bounding Box。
这篇文章有详细的讲解:http://lib.csdn.net/article/deeplearning/61641
不得不去了解的几个知识有:

  • anchor box

翻译为锚点框,就是通过RPN对每个锚点上的k个矩形分类和回归,得到感兴趣区域。每个anhcor box要分前景和背景,所以cls=2k;而每个anchor box都有[x, y, w, h]对应4个偏移量,所以reg=4k

  • Bounding Box Regression

对每个锚点上预定义的k个框进行边界框回归,来更好的框住目标,具体操作会在后文讲。

2.3 One-shot learning

最常见的例子就是人脸检测,只知道一张图片上的信息,用这些信息来匹配出要检测的图片,这就是单样本检测,也可以称之为一次学习,可以观看吴恩达的相关视频课上有讲解:点击这里

3.Siamese-RPN framework

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

3.1 孪生特征提取子网络

预训练的AlexNet,剔除了原始网络中conv2 conv4两层的并行分组
φ ( z ) \varphi(z) φ(z)是模板帧输出, φ ( x ) \varphi(x) φ(x)是检测帧输出

3.2 候选区域提取子网络

分类支路和回归支路分别对模板帧和检测帧的特征进行卷积运算:
A w × h × 2 k c l s = [ φ ( x ) ] c l s ⋆ [ φ ( z ) ] c l s A_{w\times h\times 2k}^{cls}=\left [ \varphi (x) \right ]_{cls}\star \left [ \varphi (z) \right ]_{cls} Aw×h×2kcls=[φ(x)]cls[φ(z)]cls

A w × h × 4 k r e g = [ φ ( x ) ] r e g ⋆ [ φ ( z ) ] r e g A_{w\times h\times 4k}^{reg}=\left [ \varphi (x) \right ]_{reg}\star \left [ \varphi (z) \right ]_{reg} Aw×h×4kreg=[φ(x)]reg[φ(z)]reg
A w × h × 2 k c l s A_{w\times h\times 2k}^{cls} Aw×h×2kcls包含2k个通道向量,中的每个点表示正负激励,通过softmax损失分类; A w × h × 4 k r e g A_{w\times h\times 4k}^{reg} Aw×h×4kreg包含4k个通道向量,每个点表示anchor和ground truth之间的dx,dy,dw,dh,通过smooth L1 loss:
L r e g = ∑ i = 0 3 s m o o t h L 1 ( δ [ i ] , σ ) L_{reg}= \sum_{i=0}^{3}smooth_{L1}(\delta [i],\sigma ) Lreg=i=03smoothL1(δ[i],σ)

δ [ 0 ] = T x − A x A w , δ [ 1 ] = T y − A y A h , δ [ 2 ] = l o g T w A w , δ [ 2 ] = l o g T h A h \delta [0]= \frac{T_{x}-A_{x}}{A_{w}} ,\ \delta [1]= \frac{T_{y}-A_{y}}{A_{h}}, \ \delta [2]= log{\frac{T_w}{A_w}}, \ \delta [2]= log{\frac{T_h}{A_h}} δ[0]=AwTxAx, δ[1]=AhTyAy, δ[2]=logAwTw, δ[2]=logAhTh

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

smoothL1损失: s m o o t h L 1 ( x , σ ) = { 0.5 σ 2 x 2 , ∣ x ∣ ≤ 1 σ 2 ∣ x ∣ − 1 2 σ 2 , ∣ x ∣ ≥ 1 σ 2 smooth_{L1}(x,\sigma )=\left\{\begin{matrix} 0.5\sigma ^2x^2, |x|\leq \frac{1}{\sigma ^2}\\|x|-\frac{1}{2\sigma ^2} ,|x|\geq \frac{1}{\sigma ^2} \end{matrix}\right. smoothL1(x,σ)={0.5σ2x2,xσ21x2σ21,xσ21

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

因为跟踪中连续两帧的变化并不是很大,所以anchor只采用一种尺度,5中不同的长宽比[0.33, 0.5, 1, 2, 3]
当IoU大于0.6时是前景,小于0.3时是背景.

4. Tracking as one-shot detection

平均损失函数L:
min ⁡ W 1 n ∑ i − 1 n L ( ζ ( φ ( x i ; W ) ; φ ( z i ; W ) ) , l i ) \min_{W}\frac{1}{n}\sum_{i-1}^{n}L(\zeta (\varphi (x_i;W);\varphi (z_i;W)),l_i) Wminn1i1nL(ζ(φ(xi;W);φ(zi;W)),li)

l i l_i li是标签, W W W是孪生网络权重, ζ \zeta ζ是经过RPN操作
这里写图片描述
这张图直观的表示出了将跟踪当做的单样本检测任务,模板帧在RPN中经过卷积层, φ ( x ) r e g \varphi(x)_{reg} φ(x)reg φ ( x ) c l s \varphi(x)_{cls} φ(x)cls当做检测所用的核。

经过网络后
A w × h × 2 k c l s = ( x i c l s , y j c l s , c l c l s ) A_{w\times h\times 2k}^{cls}={(x_i^{cls},y_j^{cls},c_l^{cls})} Aw×h×2kcls=(xicls,yjcls,clcls)
A w × h × 4 k r e g = ( x i r e g , y j r e g , d x p r e g , d w p r e g , d h p r e g ) A_{w\times h\times 4k}^{reg}={(x_i^{reg},y_j^{reg},dx_p^{reg},dw_p^{reg},dh_p^{reg})} Aw×h×4kreg=(xireg,yjreg,dxpreg,dwpreg,dhpreg)
这里, i ∈ [ 0 , w ) , j ∈ [ 0 , h ) , l ∈ [ 0 , 2 k ) , p ∈ [ 0 , k ) i\in [0,w),j\in[0,h),l\in[0,2k),p\in[0,k) i[0,w),j[0,h),l[0,2k),p[0,k)
因为是分类, A w × h × 2 k c l s A_{w\times h\times 2k}^{cls} Aw×h×2kcls选前k个点
那么怎么选择呢?分两步
第一步,舍弃掉距离中心太远的BB,只在一个比原始特征图小的固定正方形范围里选择,如下图:
这里写图片描述
中心距离为7,仔细看图可以看出,每个网格都有k个矩形。
第二步,用余弦窗和尺度变化惩罚来对proposal进行排序,选最好的。余弦窗是为了抑制距离过大的,尺度惩罚是为了抑制尺度大的变化。具体公式可看论文。

用这些点对应的anchor box结合回归结果得出bounding box:
x i p r o = x i a n + d x l r e g ∗ w l a n x_i^{pro}=x_i^{an}+dx_l^{reg}*w_l^{an} xipro=xian+dxlregwlan

y i p r o = y i a n + d y l r e g ∗ h l a n y_i^{pro}=y_i^{an}+dy_l^{reg}*h_l^{an} yipro=yian+dylreghlan

w i p r o = w l a n ∗ e d w l w_i^{pro}=w_l^{an}*e^{dw_l} wipro=wlanedwl

h i p r o = h l a n ∗ e d h l h_i^{pro}=h_l^{an}*e^{dh_l} hipro=hlanedhl

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

然后再通过非极大抑制(NMS),顾名思义,就是将不是极大的框都去除掉,去除冗余的重叠框,具体操作就是先选择一个置信度最高的框,其余的框与之的IoU大于某个阈值,就剔除掉,从未处理的框中继续选一个得分最高的,重复上述过程。
最后根据最大分值得出最终的跟踪目标BB。

5. 实验

6. 结论


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

相关文章

【度量学习】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;链接在本文末给出&#…

HttpEntity的用法

关于HttpEntity的用法 HttpEntity表示http的request和resposne实体&#xff0c;它由消息头和消息体组成。 从HttpEntity中可以获取http请求头和回应头&#xff0c;也可以获取http请求体和回应体信息。HttpEntity的使用&#xff0c;与RequestBody 、ResponseBody类似。 HttpEnti…

关于HttpEntity的用法

关于HttpEntity的用法 HttpEntity表示http的request和resposne实体&#xff0c;它由消息头和消息体组成。从HttpEntity中可以获取http请求头和回应头&#xff0c;也可以获取http请求体和回应体信息。 HttpEntity的使用&#xff0c;与RequestBody 、ResponseBody类似。HttpEntit…

查询MySQL数据库中表结构的几种方法

mySQL: 方法一、二、三&#xff1a;是在本数据库中查询。 /** 方法一 **/ show columns from activity_station; /** 方法二 **/ desc activity_station; describe activity_station;/** 方法三 **/ show create table activity_station;方法四是在统计数据库中查询。 informa…

mysql 表结构查询的SQL语句

1、查看表结构 desc student;2、查看表的DDL语句 show create table student;3、查看列的结构信息 select column_name,data_type,column_comment,column_key,extra,character_maximum_length,is_nullable,column_default from information_schema.columns where table_sch…

mysql查看表结构 desc 表名;

查看表结构 语法&#xff1a;desc 表名;

MySQL之表结构

1.添加、删除字段 查看表结构 desc blog;show columns from blog;新增字段 alter table 表名 add 字段名 字段数据类型;alter table blog add age tinyint;删除字段 alter table 表名 drop 字段名;alter table blog drop age;重新添加age alter table blog add age tinyin…