智慧交通day04-特定目标车辆追踪03:siamese在目标跟踪中的应用-SiamMask(2019)

与普通的视频跟踪网络不同的是,SiamMask可以同时完成视频跟踪和实例级分割的任务。如下图所示,与传统的对象跟踪器一样,依赖于一个简单的边界框初始化(蓝色)并在线操作。与ECO(红色)等最先进的跟踪器不同,SiamMask(绿色)能够生成二进制分割,从而更准确地描述目标对象。

3.5.1 网络结构

SiamMask的网络结构,提出了三分支的SiamMask网络。与之前的孪生网络十分相似的是,将模板图像与搜索图像输入网络,两者经过特征提取网络,特征提取网络如下表所示,生成15×15×256和31×31×256的featuremap,与SiamFC相似的是,将两个featuremap逐通道相互卷积,生成17×17×256的featuremap,将这个过程生成的像素值叫做RoW,如下图所示,蓝色的1×1×256的featuremap为heatmap的最大值,代表目标最有可能出现的位置。之后将featuremap输入三个分支中,图中h_{\psi}h​ψ​​,b_{\psi}b​ψ​​,s_{\psi}s​ψ​​ 是1×1的卷积层,作用是改变通道的数量。 

网络结构如下表所示:

在box分支中,17×17×256的featuremap经过1×1×(4k)的卷积层后生成17×17×4k的featuremap,这里k是每一个RoW生成k个anchors,这里实际上和SiamRPN相同,每四个一组,分别对应dx、dy、dw、dh四个值,代表着与groundtruth的距离。

在score分支中,17×17×256的featuremap经过1×1×(2k)的卷积层后生成17×17×2k的featuremap,这里k是每一个RoW生成k个anchors,这里实际上和SiamRPN相同,每两个一组,分别对应分类为目标和背景的标签结果。

在Mask分支中。17×17×256的featuremap经过1×1×(63×63)的卷积层后生成17×17×(63×63)的featuremap,从featuremap中取出与RoW位置相同的像素值,为1×1×(63×63),对其做上采样,生成127×127×1的图像,在这个图像中所有的像素值都取0或1,生成的相当于是一个二进制掩码,目标像素值为1,背景像素值为0,这样就完成了实例级分割的任务。   

三分支中的网络结构如下表所示: 

除了三分支的SiamMask之外,作者还提出了二分支的SiamMask网络,如上图所示,删掉了box分支,只保留score和Mask分支:

通过Mask分支生成的二进制掩码来生成相对应的bounding box,二分支中的网络结构如下表所示:

3.5.2 模型创新

  • 改进的bounding box生成策略

设计了三种生成bounding box的策略如下图所示的红色、绿色和蓝色框

在之前的视频跟踪网络中,生成的都是平行于图片的x轴,y轴的bounding box。当然,SiamMask也能完成这样的任务,如图中红色框所示,在三分支的SiamMask网络中,box分支负责生成这样的bounding box。而在二分支的SiamMask网络中,利用Mask分支生成的二进制掩码取出目标所在的最小和最大的像素值,来生成Min-max的bounding box。

为了能够将bounding box尽可能的贴合物体,设计了MBR的生成策略,如图绿色框所示。同样,利用Mask分支生成的二进制掩码,求目标的最小包闭矩形,这样会导致生成的bounding box会有一定的倾斜。

还设计了一种策略Opt,如图中蓝色框所示。通过Mask分支生成的二进制掩码,求一个矩形区域使得矩形与目标像素的IoU最大,通过这种策略在一些计算目标与bounding box之间IoU的比赛中会提高SiamMask的成绩。

  • 掩膜细化模型

下图为特征提取网络和Mask分支的结构图,网络忽略了box分支和score分支,经过特征提取网络生成的1×1×256的featuremap,首先经过反卷积生成15×15×32的featuremap,之后每一次反卷积都通过Ui 结合多层的特征,最后经过一个3×3的卷积层和Sigmoid层生成127×127×1的二进制掩码。

下图为细化模型的结构图,经过细化模型可以实现上采样的过程中结合特征提取的featuremap信息。

3.5.3 损失函数

Mask分支的损失函数:

   在Mask分支最后生成一个127×127×1的二进制掩码也需要对其进行标记,目标像素标记为+1,背景像素标记为-1,所以假设一个RoW中会有w×h个像素,cij为Mask中第n个RoW中第i,j个像素的真实标记,mij为对应的网络的输出。所以这里的Mask分支只会计算一个目标RoW在二进制掩码中的所有像素。

  • 二分支:

二分支的SiamMask的损失函数如下式所示,其中λ1与λ2为超参数,λ1=32,λ2=1,L_{mask}L​mask​​ 是上面讲的Mask分支的损失函数,L_{sim}L​sim​​是SiamFC的损失函数 

  • 三分支:

三分支的SiamMask的损失函数如下式所示,其中λ1与λ2为超参数,λ1=32,λ2=λ3=1, L_{mask}L​mask​​是Mask分支的损失函数,L_{score}L​score​​和L_{box}L​box​​是SiamRPN的损失函数 L_{cls}L​cls​​和L_{reg}L​reg​​.

3.5.4 模型训练

siamMask是端到端训练模型,训练参数如下表所示:

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

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

相关文章

编译器的大小端模式

大端模式(Big_endian):字数据的高字节存储在低地址中,而字数据的低字节则存放 在高地址中。 小端模式(Little_endian):字数据的高字节存储在高地址中,而字数据的低字节则存放 在低地…

【原】jQuery编写插件

分享一下编写设置和获取颜色的插件,首先我将插件的名字命名为jquery.color.js。该插件用来实现以下两个功能1.设置元素的颜色。2.获取元素的颜色。 先在搭建好如下编写插件的框架: ;(function($){//这里编写插件代码 })(jQuery); 我这里采用jQuery.fn.ex…

数据结构链表之单向链表:Python3 实现单向链表——1

Python3 实现单向链表 链表定义与简介 定义:链表与顺序表(Python中列表)性质相反,链表是物理单元上非顺序的、非连续的,在逻辑顺序上其数据元素是通过指针实现的,组成链表的每一个元素也可以叫做链表的节点,节点可以…

C语言(贪心法)

C语言有这样一个规则,每一个符号应该包含尽可能多的字符。也就是说,编译器将程序分解成符号的方法是,从左到右一个一个字符地读入,如果字条可能组成一个符号,那么再读入下一个字符,判断已经读入的两个字符组…

数据结构链表之双向链表:Python3 实现双向链表——2

Python3 实现双向链表 双向链表 定义:双向链表是链表中的一种,双向链表也叫双链表,它由多个节点组成,每个节点由一个数据域和两个指针域组成,一个指针指向前驱元素,一个指向后继元素 双向链表一般用来构…

linux驱动之ioctl

大部分驱动除了需要具备读写设备的能力之外,还需要具备对硬件控制的能力。 一、在用户空间,使用ioctl系统调用来控制设备,原型如下: int ioctl(int fd,unsigned long cmd,...); /* fd:文件描述符 cmd:控制命令 ...:可选参数:插入*…

数据结构链表之单链表的快慢指针——3

单链表之快慢指针 单链表的快慢指针简介 快慢指针指链表中定义两个指针,两个指针的移动速度一快一慢,一般快指针移动步长为慢指针的两倍 快慢指针适合解决的几个典型问题 中间值问题单向链表是否有环问题有环链表的入口问题 先定义一个简单的节点 …

【Pytorch神经网络基础理论篇】 04 线性代数

同学你好!本文章于2021年末编写,已与实际存在较大的偏差! 故在2022年末对本系列进行填充与更新,欢迎大家订阅最新的专栏,获取基于Pytorch1.10版本的理论代码(2023版)实现, Pytorch深度学习理论篇(2023版)…

Bootstrap实现弹出框和提示框效果代码

一、Bootstrap弹出框使用过JQuery UI应该知道,它里面有一个dialog的弹出框组件,功能也很丰富。与jQuery UI的dialog类似,Bootstrap里面也内置了弹出框组件。打开bootstrap 文档可以看到它的dialog是直接嵌入到bootstrap.js和bootstrap.css里面…

数据结构链表之循环链表——4

循环链表与约瑟夫问题 循环链表定义 定义:循环链表的定义十分简单,只需使一条单链表的尾部结点指向头结点,即可完成循环链表 循环链表的构建 class Node:def __init__(self, item):self.item itemself.next Nonefirst Node(aa) secon…

【Pytorch神经网络基础理论篇】 05 矩阵计算

同学你好!本文章于2021年末编写,已与实际存在较大的偏差! 故在2022年末对本系列进行填充与更新,欢迎大家订阅最新的专栏,获取基于Pytorch1.10版本的理论代码(2023版)实现, Pytorch深度学习理论篇(2023版)…

统计iOS项目的总代码行数的方法

1、打开终端, 2、用cd命令 定位到工程所在的目录,然后调用以下命名即可把每个源代码文件行数及总数统计出来: find . "(" -name "*.m" -or -name "*.mm" -or -name "*.cpp" -or -name "*.h&quo…

【Pytorch神经网络基础理论篇】 06 自动求导+导数与微分

同学你好!本文章于2021年末编写,已与实际存在较大的偏差! 故在2022年末对本系列进行填充与更新,欢迎大家订阅最新的专栏,获取基于Pytorch1.10版本的理论代码(2023版)实现, Pytorch深度学习理论篇(2023版)…

数据结构链表之栈,Python3简单实现——5

数据结构链表之栈 栈的概述 定义:栈是一种基于先进后出(FILO)的数据结构,是一种只能在一段进行插入和删除操作的特殊线性表。引入名词:将数据存入栈的动作称为压栈,将数据取出栈的动作称为弹栈栈的特点:先进入栈的元…

【Pytorch神经网络基础理论篇】 08 Softmax 回归 + 损失函数 + 图片分类数据集

同学你好!本文章于2021年末编写,已与实际存在较大的偏差! 故在2022年末对本系列进行填充与更新,欢迎大家订阅最新的专栏,获取基于Pytorch1.10版本的理论代码(2023版)实现, Pytorch深度学习理论篇(2023版)…

CI Weekly #11 | 微服务场景下的自动化测试与持续部署

又一周过去了,最近我们的工程师正在搞一个“大事情” ——「flow.ci 配置文件」,稍微剧透一下,这个功能预计会在春节前上线。详情请大家关注 flow.ci Changelog 或其他官方通知:) 本期 CI Weekly 收录了的CI/CD实践、微服务自动化测试与持续部…

数据结构链表之栈——解决括号匹配问题和逆波兰表达式求值问题——6

括号匹配问题和逆波兰表达式求值问题 基于上一节已经使用python代码对栈进行了简单的实现,这一节我们在其基础上解决两个常见的问题 案例 括号匹配问题(点我直接到代码实现)逆波兰表达式求值问题(点我直接到代码实现) 括号匹配问题 在给定的字符串中&#xff0…

Java_基础阶段笔记总结汇总

一、Java简介 1、Java语言平台性介绍 2、JDK_JRE_JVM的组成和作用 JVM: Java虚拟机,是专门用来运行Java程序的,但是不能单独安装 JRE: Java运行环境,包含JVM(Java虚拟机,是专门用来运行Java程序的)和核心类库 JDK: Java开发工具包,包含JRE和…

数据结构链表之队列,Python3实现——7

数据结构链表之队列 队列概述 定义:队列是一种基于先进先出(FIFO)的数据结构,队列只能在一段进行插入和删除操作的结构,第一个进入队列的元素在读取时会第一个被读取 队列可以使用顺序表(Python中列表)实现,也可以用链表实现&am…

IDEA上Debug调试全流程

一、什么是Debug模式 是供程序员使用的程序调试工具,它可以用于查看程序的执行流程,也可以用于追踪程序执行过程来调试程序。使用IDEA的断点调试功能,查看程序的运行过程 Debug调试窗口介绍。 二、Debug模式操作流程【应用】 能够使用断点调…