jjzjj

SiamRPN:High Performance Visual Tracking with Siamese Region Proposal Network 孪生网络

代码的路 2023-09-21 原文

原文链接

论文地址:http://openaccess.thecvf.com/content_cvpr_2018/papers/Li_High_Performance_Visual_CVPR_2018_paper.pdf

摘要

大多数性能优越的视觉目标跟踪器很难有实时速度。在这篇文章中,我们提出了孪生候选区域生成网络(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 的启发,我们对相关feature map进行提议提取。与标准RPN不同,我们使用两个分支的相关特征映射进行提议提取。在跟踪任务中,我们没有预定义的类别,因此我们需要模板分支将目标的外观信息编码到RPN要素图中以区分前景和背景。

在跟踪阶段,作者将此任务视为单目标检测任务(one-shot detection),什么意思呢,就是把第一帧的bb视为检测的样例,在其余帧里面检测与它相似的目标。

综上所述,作者的贡献有以下三点:

1.提出了Siamese region proposal network,能够利用ILSVRC和YouTube-BB大量的数据进行离线端到端训练。

2.在跟踪阶段将跟踪任务构造出局部单目标检测任务。

3.在VOT2015, VOT2016和VOT2017上取得了领先的性能,并且速度能都达到160fps。

2.相关工作

2.1 RPN

RPN即Region Proposal Network,是用RON来选择感兴趣区域的,即proposal extraction。例如,如果一个区域的p>0.5,则认为这个区域中可能是80个类别中的某一类,具体是哪一类现在还不清楚。到此为止,网络只需要把这些可能含有物体的区域选取出来就可以了,这些被选取出来的区域又叫做ROI(Region of Interests),即感兴趣的区域。当然RPN同时也会在feature map上框定这些ROI感兴趣区域的大致位置,即输出Bounding Box。

RPN详细介绍:https://mp.weixin.qq.com/s/VXgbJPVoZKjcaZjuNwgh-A

2.2 One-shot learning

最常见的例子就是人脸检测,只知道一张图片上的信息,用这些信息来匹配出要检测的图片,这就是单样本检测,也可以称之为一次学习。

3 Siamese-RPN framework

3.1 SiamFC

SiamFC详细介绍:https://mp.weixin.qq.com/s/kS9osb2JBXbgb_WGU_3mcQ

所谓的Siamese(孪生)网络,是指网络的主体结构分上下两支,这两支像双胞胎一样,共享卷积层的权值。上面一支(z)称为模板分支(template),用来提取模板帧的特征。φ表示一种特征提取方法,文中提取的是深度特征,经过全卷积网络后得到一个6×6×128的feature map φ(z)。下面一支(x)称为检测分支(search),是根据上一帧的结果在当前帧上crop出的search region。同样提取了深度特征之后得到一个22×22×128的feature map φ(x)。模版支的feature map在当前帧的检测区域的feature map上做匹配操作,可以看成是φ(z)在φ(x)上滑动搜索,最后得到一个响应图,图上响应最大的点就是对应这一帧目标的位置。

Siamese网络的优点在于,把tracking任务做成了一个检测/匹配任务,整个tracking过程不需要更新网络,这使得算法的速度可以很快(FPS:80+)。此外,续作CFNet将特征提取和特征判别这两个任务做成了一个端到端的任务,第一次将深度网络和相关滤波结合在一起学习。

Siamese也有明显的缺陷:

1.模板支只在第一帧进行,这使得模版特征对目标的变化不是很适应,当目标发生较大变化时,来自第一帧的特征可能不足以表征目标的特征。至于为什么只在第一帧提取模版特征,我认为可能因为:

(1)第一帧的特征最可靠也最鲁棒,在tracking过程中无法确定哪一帧的结果可靠的情况下,只用第一帧特征足以得到不错的精度。

(2)只在第一帧提取模板特征的算法更精简,速度更快。

2.Siamese的方法只能得到目标的中心位置,但是得不到目标的尺寸,所以只能采取简单的多尺度加回归,这即增加了计算量,同时也不够精确。

网络训练原理

如图所示,上一帧的目标模板与下一帧的搜索区域可以构成很多对的模板-候选对(exemplar-candidate pair), 但是根据判别式跟踪原理,仅仅下一帧的目标与上一帧的目标区域(即 exemplar of T frame-exemplar of T+1 frame)属于模型的正样本,其余大量的exemplar-candidate pair都是负样本。这样就完成了网络结构的端到端的训练。

3.2 Siamese-RPN

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

3.3 孪生特征提取子网络

预训练的AlexNet,剔除了conv2 conv4两层 。φ(z)是模板帧输出,φ(x)是检测帧输出

3.4 候选区域提取子网络

分类支路和回归支路分别对模板帧和检测帧的特征进行卷积运算:

包含2k个通道向量,中的每个点表示正负激励,通过交叉熵损失分类;包含4k个通道向量,每个点表示anchor和gt之间的dx,dy,dw,dh,通过smooth L1 损失得到:

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

smoothL1损失:

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

因为跟踪中连续两帧的变化并不是很大,所以anchor只采用一种尺度,5种不同的长宽比(与RPN中的3×3个anchor不同)。当IoU大于0.6时是前景,小于0.3时是背景。

4. Tracking as one-shot detection

平均损失函数L:

如上所述,让z表示模板patch,x表示检测patch,函数φ表示Siamese特征提取子网,函数ζ表示区域建议子网,则一次性检测任务可以表示为:


如图,紫色的部分像原始的Siamese网络,经过同一个CNN之后得到了两个feature map,蓝色的部分是RPN。模板帧在RPN中经过卷积层, 和 当作检测所用的核。

简单的说,就是预训练模版分支,利用第一帧的目标特征输出一系列weights,而这些weights,包含了目标的信息,作为检测分支RPN网络的参数去detect目标。这样做的好处是:

(1)模板支能学到一个encode了目标的特征,用这个特征去寻找目标,这会比直接用第一帧的feature map去做匹配更鲁棒。

(2)相比原始的Siamese网络,RPN网络可以直接回归出目标的坐标和尺寸,既精确,又不需要像multi-scale一样浪费时间。

经过网络后,我们将分类和回归特征映射表示为点集:

由于分类特征图上的奇数通道代表正激活,我们收集所有中的前K个点,其中l是奇数,并表示点集为:

其中I,J,L是一些索引集。

变量i和j分别编码相应锚点的位置,l编码相应锚点的比率,因此我们可以导出相应的锚点集合为:

此外,我们发现上ANC*的激活得到相应的细化坐标为:

因为是分类,选前k个点,分两步选择:

第一步,舍弃掉距离中心太远的bb,只在一个比原始特征图小的固定正方形范围里选择,如下图:

中心距离为7,仔细看图可以看出,每个网格都有k个矩形。

第二步,用余弦窗(抑制距离过大的)和尺度变化惩罚(抑制尺度大变化)来对proposal进行排序,选最好的。具体公式可看论文。

用这些点对应的anchor box结合回归结果得出bounding box:

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

然后再通过非极大抑制(NMS),顾名思义,就是将不是极大的框都去除掉,由于anchor一般是有重叠的overlap,因此,相同object的proposals也存在重叠。为了解决重叠proposal问题,采用NMS算法处理:两个proposal间IoU大于预设阈值,则丢弃score较低的proposal。

IoU阈值的预设需要谨慎处理,如果IoU值太小,可能丢失objects的一些 proposals;如果IoU值过大,可能会导致objects出现很多proposals。IoU典型值为0.6。

5.实施细节

我们使用从ImageNet [28]预训练的改进的AlexNet,前三个卷积层的参数固定,只调整Siamese-RPN中的最后两个卷积层。这些参数是通过使用SGD优化等式5中的损耗函数而获得的。共执行了50个epoch,log space的学习率从10-2降低到10-6。我们从VID和Youtube-BB中提取图像对,通过选择间隔小于100的帧并执行进一步的裁剪程序。如果目标边界框的大小表示为(w,h),我们以大小A×A为中心裁剪模板补丁,其定义如下:

其中p =(w + h)/2

之后将其调整为127×127。以相同的方式在当前帧上裁剪检测补丁,其大小是模板补丁的两倍,然后调整为255×255。

在推理阶段,由于我们将在线跟踪制定为一次性检测任务,因此没有在线适应。我们的实验是在带有Intel i7,12G RAM,NVidia GTX 1060的PC上使用PyTorch实现的。

学习更多编程知识,请关注我的公众号:

代码的路

有关SiamRPN:High Performance Visual Tracking with Siamese Region Proposal Network 孪生网络的更多相关文章

  1. ruby - 用 Ruby 编写一个简单的网络服务器 - 2

    我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b

  2. 网络编程套接字 - 2

    网络编程套接字网络编程基础知识理解源`IP`地址和目的`IP`地址理解源MAC地址和目的MAC地址认识端口号理解端口号和进程ID理解源端口号和目的端口号认识`TCP`协议认识`UDP`协议网络字节序socket编程接口`sockaddr``UDP`网络程序服务器端代码逻辑:需要用到的接口服务器端代码`udp`客户端代码逻辑`udp`客户端代码`TCP`网络程序服务器代码逻辑多个版本服务器单进程版本多进程版本多线程版本线程池版本服务器端代码客户端代码逻辑客户端代码TCP协议通讯流程TCP协议的客户端/服务器程序流程三次握手(建立连接)数据传输四次挥手(断开连接)TCP和UDP对比网络编程基础知识

  3. ruby - 检查网络文件是否存在,而不下载它? - 2

    是否可以在不实际下载文件的情况下检查文件是否存在?我有这么大的(~40mb)文件,例如:http://mirrors.sohu.com/mysql/MySQL-6.0/MySQL-6.0.11-0.glibc23.src.rpm这与ruby​​不严格相关,但如果发件人可以设置内容长度就好了。RestClient.get"http://mirrors.sohu.com/mysql/MySQL-6.0/MySQL-6.0.11-0.glibc23.src.rpm",headers:{"Content-Length"=>100} 最佳答案

  4. ruby - 404 未找到,但可以从网络浏览器正常访问 - 2

    我在这方面尝试了很多URL,在我遇到这个特定的之前,它们似乎都很好:require'rubygems'require'nokogiri'require'open-uri'doc=Nokogiri::HTML(open("http://www.moxyst.com/fashion/men-clothing/underwear.html"))putsdoc这是结果:/Users/macbookair/.rvm/rubies/ruby-2.0.0-p481/lib/ruby/2.0.0/open-uri.rb:353:in`open_http':404NotFound(OpenURI::HT

  5. 深度学习12. CNN经典网络 VGG16 - 2

    深度学习12.CNN经典网络VGG16一、简介1.VGG来源2.VGG分类3.不同模型的参数数量4.3x3卷积核的好处5.关于学习率调度6.批归一化二、VGG16层分析1.层划分2.参数展开过程图解3.参数传递示例4.VGG16各层参数数量三、代码分析1.VGG16模型定义2.训练3.测试一、简介1.VGG来源VGG(VisualGeometryGroup)是一个视觉几何组在2014年提出的深度卷积神经网络架构。VGG在2014年ImageNet图像分类竞赛亚军,定位竞赛冠军;VGG网络采用连续的小卷积核(3x3)和池化层构建深度神经网络,网络深度可以达到16层或19层,其中VGG16和VGG

  6. 【网络】-- 网络基础 - 2

    (本文是网络的宏观的概念铺垫)目录计算机网络背景网络发展认识"协议"网络协议初识协议分层OSI七层模型TCP/IP五层(或四层)模型报头以太网碰撞路由器IP地址和MAC地址IP地址与MAC地址总结IP地址MAC地址计算机网络背景网络发展        是最开始先有的计算机,计算机后来因为多项技术的水平升高,逐渐的计算机变的小型化、高效化。后来因为计算机其本身的计算能力比较的快速:独立模式:计算机之间相互独立。    如:有三个人,每个人做的不同的事物,但是是需要协作的完成。    而这三个人所做的事是需要进行协作的,然而刚开始因为每一台计算机之间都是互相独立的。所以前面的人处理完了就需要将数据

  7. 常见网络安全产品汇总(私信发送思维导图) - 2

    安全产品安全网关类防火墙Firewall防火墙防火墙主要用于边界安全防护的权限控制和安全域的划分。防火墙•信息安全的防护系统,依照特定的规则,允许或是限制传输的数据通过。防火墙是一个由软件和硬件设备组合而成,在内外网之间、专网与公网之间的界面上构成的保护屏障。下一代防火墙•下一代防火墙,NextGenerationFirewall,简称NGFirewall,是一款可以全面应对应用层威胁的高性能防火墙,提供网络层应用层一体化安全防护。生产厂家•联想网御、CheckPoint、深信服、网康、天融信、华为、H3C等防火墙部署部署于内、外网编辑额,用于权限访问控制和安全域划分。UTM统一威胁管理(Un

  8. 【Linux操作系统】——网络配置与SSH远程 - 2

    Linux操作系统——网络配置与SSH远程安装完VMware与系统后,需要进行网络配置。第一个目标为进行SSH连接,可以从本机到VMware进行文件传送,首先需要进行网络配置。1.下载远程软件首先需要先下载安装一款远程软件:FinalShell或者xhell7FinalShellxhell7FinalShell下载:Windows下载http://www.hostbuf.com/downloads/finalshell_install.exemacOS下载http://www.hostbuf.com/downloads/finalshell_install.pkg2.配置CentOS网络安装好

  9. ruby - 在 Ruby 中训练神经网络 - 2

    在神经网络方面,我完全是个初学者。我整天都在与ruby​​-fann和ai4r搏斗,不幸的是我没有任何东西可以展示,所以我想我会来到StackOverflow并询问这里的知识渊博的人。我有一组样本——每天都有一个数据点,但它们不符合我能够找出的任何明确模式(我尝试了几次回归)。不过,我认为看看是否有任何方法可以仅从日期预测future的数据会很好,而且我认为神经网络将是生成希望表达这种关系的函数的好方法.日期是DateTime对象,数据点是十进制数,例如7.68。我一直在将DateTime对象转换为float,然后除以10,000,000,000得到一个介于0和1之间的数字,我一直在将

  10. ruby - Heroku 和网络抓取 - 2

    我有一个nokigiri网络抓取工具,它发布到我试图发布到heroku的数据库。我有一个sinatra应用程序前端,我想从数据库中获取它。我是Heroku和Web开发的新手,不知道处理此类问题的最佳方法。我是否必须将上传到数据库的网络爬虫脚本放在sinatra路由下(如mywebsite.com/scraper),并让它变得如此模糊以至于没有人访问它?最后,我想让sinatra部分成为一个从数据库中提取的restapi。感谢大家的参与 最佳答案 您可以采用两种方法。第一个是通过控制台使用herokurunYOURCMD运行scrap

随机推荐