单目标跟踪算法SiamRPN

目标跟踪算法包括单目标跟踪和多目标跟踪,单目标跟踪在每张图片中只跟踪一个目标。目前单目标跟踪的主要方法分为两大类,基于相关滤波(correlation filter)的跟踪算法, 如CSK, KCF, DCF, SRDCF等;基于深度学习的跟踪算法,如SiamFC, SiamRPN, SiamRPN++等。相比之下,相关滤波的速度更快,深度学习的准确性更高。

跟踪相关算法如下:

这里主要记录下对SIamRPN跟踪算法的学习过程,SiamRPN是商汤在2018年的论文High Performance Visual Tracking with Siamese Region Proposal Network中提出,随后在其基础上商汤又发展出DaSiamRPN, SiamRPN++, SiamMask等算法,公开代码地址https://github.com/STVIR/pysot。

对于SiamRPN的理解,从网络结构,anchor设置,损失函数,跟踪流程四个方面简单介绍下。

1. SiamRPN网络结构

SiamRPN的网络结构如下图所示,主要包括Siamese Network和Region Proposal Network(RPN)两部分,Siamese Network用来提取图片特征,RPN用来预测目标的位置和置信度。

SiamRPN详细的网络结构如下,Siamese Network采用的是Alexnet特征提取网络,训练时整个网络的计算流程为:

1. 第一帧图片中截取尺寸为(127, 127, 3)的Template Image,下一帧图片中截取的尺寸为(255, 255, 3)的Search Image,将Template和Search分别送入alexnet提取特征

2. Teamplate通过Alexnet提取特征后尺寸为(1, 256, 6, 6),  Search通过Alexnet提取特征后尺寸为(1, 256, 22, 22)

3. 尺寸为(1, 256, 6, 6)的特征和尺寸为(1, 256, 22, 22)的特征,送入RPN网络的class分支,输出尺寸为(1, 10, 17, 17)的类别预测结果,其中10表示5个anchor,每个anchor属于背景和目标的类别的概率

4. 尺寸为(1, 256, 6, 6)的特征和尺寸为(1, 256, 22, 22)的特征,送入RPN网络的box分支,输出尺寸为(1, 20, 17, 17)的位置回归结果,其中20表示5个anchor,每个anchor的[x, y, w, h]偏移量

其中有两点值得注意下:

Siamese Network: Template Image和Search Image输入的是同一个Alexnet网络进行特征提取(即siamese network),所以两个目标越相似,得到的特征也越相似;

Depthwise Convolution: RPN的两个分支中将template的特征和search的特征进行了depthwise convolution,即在每个channel上分别进行卷积,卷积响应值越高的位置表示特征越相似(在每个channel上,template的特征图(4x4)作为卷积核,在search的特征图(20x20)上进行卷积)

2. SiamRPN的anchor设置

SiamRPN的RPN网络中,在每个位置设置了5个anchor,5个anchor的宽高比分别为[3, 2, 1, 1/2, 1/3],由于最后网络的输出特征图尺寸为17*17,则共设置了1445(17x17x5)个anchor,如下图所示。需要注意的是,这些anchor的中心点对应search image中的位置并不是整个search image,只是search image中心128x128的区域,这是由于两帧图片时间间隔短,目标中心点移动后落在search image边界区域的概率较小。

和目标检测一样,SiamRPN网络在训练时,为了平衡正负样本的比例,会根据anchor和gt_box的IOU挑选64个样本给RPN网络学习 ,其挑选规则如下:

1.计算所有anchor和gt_box的IOU, IOU>0.6的为正样本,IOU<0.3的为负样本
2.随机挑选出64个样本,正样本16个,负样本48。(若正样本不够16个时,有多少取多少,若正样本超过16个,随机选取16个正样本,多余的标注为忽略样本;负样本一般会多余48个,随机选取48个负样本,多余的标注为忽略样本)

生成anchor的代码如下所示:

 anchor产生代码

3.损失函数

和目标检测一样,SiamRPN的loss函数包括分类损失cls_losses和坐标损失box_losses,cls_losses采用的交叉熵损失函数,box_losses采用的是smooth_L1损失函数。

4.跟踪流程

训练完成后保存网络参数,在跟踪时使用。整个跟踪过程看代码比较好理解,跟踪流程简要介绍如下:

1.从第一帧图片中,以跟踪目标的中心点截取127*127的区域,作为template
2.在随后的图片中,以上一帧跟踪目标的中心点截取255*255的区域,作为search
3.将template,search送入siamrpn网络预测出目标的box和score
4.对score进行window penalty,即采用窗函数(汉宁窗,余弦窗等)对距离中心点较远的边缘区域分数进行惩罚。
5.取分数最高的box中心点作为新的中心点,上一帧目标的宽高和box的宽高进行平滑加权作为新的宽高
6.采用新的中心点和宽高作为当前帧的box

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

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

相关文章

PPI+机器学习+免疫浸润+实验验证,如此简单也能发4+

今天给同学们分享一篇生信文章“Identification of metabolic biomarkers associated with nonalcoholic fatty liver disease”&#xff0c;这篇文章发表在Lipids Health Dis期刊上&#xff0c;影响因子为4.5。 结果解读&#xff1a; 识别NAFLD患者的MR DEG 主成分分析&…

MFC CRuntimeClass 学习

新建一个控制台工程,按以下步骤; 定义对象Person,继承CObject,在头文件中添加宏:DECLARE_DYNCREATE(Person) 在源文件中添加宏:IMPLEMENT_DYNCREATE(Person, CObject) main.cpp中, 使用宏:CRuntimeClass* pRuntimeClass = RUNTIME_CLASS(Person);运行时类信息 使用运行…

分布式图文详解!

分布式理论 1. 说说CAP原则&#xff1f; CAP原则又称CAP定理&#xff0c;指的是在一个分布式系统中&#xff0c;Consistency&#xff08;一致性&#xff09;、 Availability&#xff08;可用性&#xff09;、Partition tolerance&#xff08;分区容错性&#xff09;这3个基本…

Python基础知识:整理5 序列切片操作

序列是指&#xff1a;内容连续、有序&#xff0c;可使用下标索引的一类数据容器&#xff0c;列表、元组、字符串均可以视为序列 # 序列的切片操作 """语法&#xff1a;序列[起始下标:结束下标:步长]1.起始下标表示从何处开始&#xff0c;可以留空&#xff0c;留…

C# xml序列化和反序列化

问题 有的项目使用webservice返回结果是xml&#xff0c;需要进行xml序列化和反序列化 xml序列化相关特性 C#中&#xff0c;XML序列化相关的特性主要包括&#xff1a; XmlIgnore&#xff1a;这个特性可以用来指示序列化过程忽略一个属性或一个字段。当使用XmlIgnore特性时&a…

Android 13.0 recovery竖屏界面旋转为横屏

1.概述 在13.0系统项目定制化开发中,由于平板固定横屏显示,而如果recovery界面竖屏显示就觉得怪怪的,所以需要recovery页面横屏显示的功能, 所以今天就来解决这个问题 2.实现功能相关分析 Android的Recovery中,利用 bootable\recovery下的minui库作为基础,采用的是直接…

Double 4 VR智能互动系统模拟陪同口译实训教学场景

Double 4 VR智能互动系统模拟陪同口译实训教学场景&#xff0c;以其独特的特点和优势&#xff0c;为口译学生提供了一种全新的教学体验。通过模拟场景和虚拟角色&#xff0c;在真实的语境中进行口译实训&#xff0c;学生可以更加深入地理解口译技巧和实践&#xff0c;提高口译水…

服务注册中心

服务注册中心 注册中心与CAP理论介绍 1.注册中心 服务注册中心是微服务架构中的一个关键组件&#xff0c;它的主要作用是管理服务实例的注册、维护和发现。 是一个中心化的组件来分散的微服务实例的位置和状态。 注册中心有三种角色构成&#xff1a; 服务提供者&#xff1a…

SSM框架注解大全

先赞后看&#xff0c;养成习惯&#xff01;&#xff01;&#xff01;❤️ ❤️ ❤️ 文章码字不易&#xff0c;如果喜欢可以关注我哦&#xff01; ​如果本篇内容对你有所启发&#xff0c;欢迎访问我的个人博客了解更多内容&#xff1a;链接地址 SSM框架注解大全 三大框架注解…

Huffman树实现文件压缩

【问题描述】给定一个文件&#xff0c;文件由n个字符组成&#xff0c;但他们出现的频度不相同。要求对该文件中的字符集构造哈夫曼树&#xff0c;并计算编码后的文件长度。 【输入形式】 输入的第1行有1个数字n&#xff0c;表示文件中总的字符个数。接下来1行中有n个数字&…

跨境电商竞品分析:洞察市场,赢得先机的关键策略

在全球化日益加速的今天&#xff0c;跨境电商已经成为了企业拓展市场、提高销售额的重要手段。然而&#xff0c;跨境电商市场的竞争也日趋激烈&#xff0c;如何在众多竞争对手中脱颖而出&#xff0c;成为每个企业都面临的挑战&#xff1b;想要做到这点&#xff0c;了解竞品情况…

Apache Doris (六十一): Spark Doris Connector - (1)-源码编译

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你学编程的个人空间-豹哥教你学编程个人主页-哔哩哔哩视频 目录 1. Spark Doris Connector…

vue3中状态管理库pinia的安装和使用方法介绍及和vuex的区别

Pinia 与 Vuex 一样&#xff0c;是作为 Vue 的“状态存储库”&#xff0c;用来实现 跨页面/组件 形式的数据状态共享。它允许你跨组件或页面共享状态。如果你熟悉组合式 API 的话&#xff0c;你可能会认为可以通过一行简单的 export const state reactive({}) 来共享一个全局状…

【Python】开始你的Python之旅(Anaconda、Pycharm、Jupyter)

Python工具准备 下载安装AnacondaPycharmJupyter Notebook 启动使用AnacondaPycharmJupyter Notebook 引言&#xff1a; 信息时代&#xff0c;计算机引领。人工智能&#xff0c;Python是基础。信息时代学习好Python乃是在人工智能时代的立足之本。 本文&#xff1a; 做好Pyth…

开发者必备的 Github 加速工具(截至2024年01月)

开始闲聊前&#xff0c;我要感谢大神小青龍总结的博文&#xff1a;作为程序员不得不知道的几款Github加速神器&#xff0c;给我们介绍了常用&#xff08;较为合规&#x1f604;&#xff09;的加速方法。毕竟 github 是开发者绕不过的宝库。 背景 我用 Github 将近12年&#x…

JS鼠标事件总结学习

首先我们先简单过一遍鼠标MouseEvent事件&#xff1a; click: 当鼠标单击元素时触发。dblclick: 当鼠标双击元素时触发。mousedown: 当按下鼠标按钮时触发。mouseup: 当释放鼠标按钮时触发。mousemove: 当鼠标指针在元素上移动时触发。mouseover: 当鼠标指针移动到元素上方时触…

C++精进之路之路(九)内存模型和名称空间

C鼓励程序员在开发程序时使用多个文件。一种有效的组织策略是&#xff0c;使用头文件来定义用户类型&#xff0c;为操纵用户类型的两数提供两数原型&#xff1a;并将两数定义放在一个独立的源代码文件中。头文件和源代码文代一起定义和实现了用户定义的类型及其使用方式。最后&…

初步认识架构分层

一般初创软件&#xff0c;为快速上线&#xff0c;几乎不考虑分层。但随业务越发复杂&#xff0c;就会导致逻辑复杂、模块相互依赖、代码扩展性差等各种问题。 架构分层迫在眉睫。 1 什么是架构分层? 软件工程中常见的设计方式&#xff0c;将整体系统拆分成N个层次&#xff0c;…

C#进制--2进制、10进制、16进制(Modbus通讯部分)详解

引言&#xff1a;最近接触了一些通讯方面信息&#xff0c;写个小结记录一下&#xff0c;即时更新 1.二进制数&#xff1a; 是计算技术中经常采用的一种数制。二进制数据是由0和1两个基本数码来表示的数。它的基数为2&#xff0c;进位规则是“逢二进一”&#xff0c;借位规则是…

软件测试错题集(黑盒、白盒测试)

所有判断题第二个选项是正确答案 1.[判断题] 不存在质量很高但可靠性很差的产品。 错 对 2.[判断题] 软件测试按照测试过程分类为黑盒、白盒测试。 对 错 3.[判断题] 从软件开发者的角度出发,普遍希望通过软件测试暴露软件中隐藏的错误和缺陷,以考虑用户是否可接受该产品。 …