单目标跟踪算法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.hqwc.cn/news/322944.html

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

相关文章

web期末作业动态时钟UI界面毛玻璃版

效果图 html代码奉上 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthde…

Jvm垃圾收集器系列之Parallel Scavenge收集器(个人见解仅供参考)

问&#xff1a;什么是Parallel Scavenge&#xff1f; 答&#xff1a;Parallel Scavenge是Java HotSpot虚拟机中的一种垃圾收集器&#xff0c;它主要用于提高应用程序的吞吐量。 问&#xff1a;Parallel Scavenge的主要目标是什么&#xff1f; 答&#xff1a;Parallel Scavenge的…

[Redis实战]分布式锁-redission

五、分布式锁-redission 5.1 分布式锁-redission功能介绍 基于setnx实现的分布式锁存在下面的问题&#xff1a; 重入问题&#xff1a;重入问题就是指获得锁的线程可以再次进入到相同的锁的代码中&#xff0c;可重入锁的意义在于防止死锁。比如HashTable这样的代码中&#xf…

纯前端上传word,xlsx,ppt,在前端预览并下载成图片(预览效果可以,下载图片效果不太理想)

纯前端上传word,xlsx,ppt,在前端预览并下载成图片&#xff08;预览效果可以&#xff0c;下载图片效果不太理想&#xff09; 一.安装依赖二、主要代码 预览效果链接: https://github.com/501351981/vue-office 插件文档链接: https://501351981.github.io/vue-office/examples/d…

conda虚拟环境搭建和打包,删除,移动等全流程及相关问题汇总

私人笔记无偿分享&#xff0c;更多内容请访问&#xff1a;链接&#xff1a;https://pan.baidu.com/s/19mS5N9XJ_AotF20kUwSA3w?pwdp5kx 提取码&#xff1a;p5kx 复制这段内容后打开百度网盘手机App&#xff0c;操作更方便哦 4.4. anaconda虚拟环境搭建&#xff1a; 网址&am…

爬虫网易易盾滑块案例:某乎

声明&#xff1a; 该文章为学习使用&#xff0c;严禁用于商业用途和非法用途&#xff0c;违者后果自负&#xff0c;由此产生的一切后果均与作者无关 一、滑块初步分析 js运行 atob(‘aHR0cHM6Ly93d3cuemhpaHUuY29tL3NpZ25pbg’) 拿到网址&#xff0c;浏览器打开网站&#xff0…

springboot中引入AOP切面编程

在Spring Boot 3.0中引入AOP的过程如下所示&#xff1a; 1、首先&#xff0c;确保已经添加了相关依赖。可以通过Maven或Gradle来管理项目的依赖。对于使用Maven构建的项目&#xff0c;需要将以下依赖添加到pom.xml文件中 <dependency><groupId>org.springframewo…

Java项目:109SpringBoot超市仓管系统

博主主页&#xff1a;Java旅途 简介&#xff1a;分享计算机知识、学习路线、系统源码及教程 文末获取源码 一、项目介绍 超市仓管系统基于SpringBootMybatis开发&#xff0c;系统使用shiro框架做权限安全控制&#xff0c;超级管理员登录系统后可根据自己的实际需求配角色&…

信息论与编码期末复习——概念论述简答题(一)

个人名片&#xff1a; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的在校大学生 &#x1f42f;个人主页&#xff1a;妄北y &#x1f427;个人QQ&#xff1a;2061314755 &#x1f43b;个人邮箱&#xff1a;2061314755qq.com &#x1f989;个人WeChat&#xff1a;V…

了解单元测试

一&#xff0c;测试分类 1.1 E2E测试&#xff08;end to end端到端测试&#xff09; 属于黑盒测试。 主要通过测试框架&#xff0c;站在用户测试人员的角度&#xff0c;模拟用户的操作进行页面功能的验证&#xff0c;不管内部实现机制&#xff0c;完全模拟浏览器的行为。&am…

李沐机器学习系列5---循环神经网络

1 Introduction 对于样本的分析&#xff0c;通过全连接层处理表格数据&#xff0c;通过卷积神经网络处理图像数据&#xff1b;第一种假设&#xff0c;所有数据都是独立同分布的RNN 处理序列信号 序列数据的更多场景 1&#xff09;用户使用习惯具有时间的先后性 2&#xff09;外…

JS新手入门笔记整理:JS语法基础

变量与常量 变量 语法 var 变量名值&#xff1b; 1、在JavaScript中&#xff0c;给一个变量命名&#xff0c;需要遵循以下2个方面的原则&#xff1a; 变量由字母、下划线、$或数字组成&#xff0c;并且第一个字母必须是字母、下划线或$。变量不能是系统关键字和保留字。 2…