SINT(Siamese Instance Search for Trancking)阅读笔记

2023-11-09 06:30

本文主要是介绍SINT(Siamese Instance Search for Trancking)阅读笔记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

理解有误,欢迎指正,转载请注明出处!
这是发表在CVPR2016上的一遍用深度学习做跟踪方向的文章,文章利用孪生网将跟踪问题与图像的匹配问题联系到一起。
论文链接
代码链接

  • 文章的核心思想:
    通过Siam网络学习一个匹配函数。在得到第一帧目标信息之后,接下来的每一帧的候选框都和第一帧目标框进行匹配度计算,得分最高的候选框即为该帧中目标。(好处:目标被遮挡之后不用担心无法找回,因为网络不更新,那么遮挡物并不会影响到网络性能; 目标丢失后也不会担心找不到,因为网络不更新)

  • 先来看一下这篇论文的整体框图:

    图解析:跟踪器只使用了一个学习的匹配函数,利用大量的外部视频学习了一个先验的匹配函数(Matching function),在跟踪的过程中,初始目标(patch x0)不再变化,对视频序列中的每一个 Frame t 以及通过半径采样策略选出的候选框patch x(j,k) (表示帧 t 中的第 j 个候选框)送入到CNN网络中,根据评估函数,找到得分最高的那个候选框即为下一帧目标的位置。

  • 上图让我们对这篇文章的思路有了大体的了解,下面来聚焦几个具体的问题:

  1. 学习一个先验的匹配函数,用了哪些样本?
    答:论文中提到,在学习的过程中关注广义的目标外形的变化,意思是目标的范围要足够大,足够广,考虑到算法的鲁棒性,希望训练的样本不是针对某一类特定的目标,也不是关注目标变化中的某一类特定的属性(例如形变、光照变化中),这样是为了当跟踪情况下没有训练集中的目标,匹配函数依然能很好的工作。
  2. 利用半径采样策略选出候选框,上述所说的半径采样策略是什么?
    答:这个地方参考了样本采样方法
    我理解的采样策略:为了解决尺度问题,作者引入了图像的缩放尺度[ √2/2 , 1 ,√2 ],对于每一个尺寸的图像,采样变动的是坐标,而非长和宽。
    半径采样策略,作者借鉴了这篇论文S. Hare, A. Saffari, and P. H. Torr. Struck: Structured output tracking with kernels. In ICCV, 2011。半径采样策略是为了找出跟踪问题中目标在下一帧图像的位置。通过极坐标采样方式在每个boundingbox周围得到sample框,boundingbox是上一帧的准确位置,sample是在当前帧中选取的候选框16 x 5=80个,然后在这80个框中选取匹配函数得分最高的框作为当前帧的位置,以此类推再找下一帧的确定位置。
    采样的框主要是对目标框的平移和放缩,半径采样策略选取上一帧目标框的长轴作为半径,半径分 nr 步从里到外延伸,分 nt 步从0开始旋转(论文中取nr=5,nt=16),所以每次旋转角度2*pi/nt,每步走的像素:radius/nr. 于是乎for ir in 1:nr ,for it in 0:nt-1,迭代80次,根据公式
for ir = 1 : nr   %遍历从里到外延伸的步数 phase = mod(ir, 2) * tstep / 2;   %mod取余,也就是半径为偶数步时,phase为0;半径为奇数步时,phase为单位旋转角度的一半for it = 0 : nt - 1  %遍历圆周旋转的步数,从0开始,到15dx = ir * rstep * cos(it * tstep + phase);   %x坐标增量=第几步*单位步长*cos(第几个旋转角*单位旋转角度+phase)dy = ir * rstep * sin(it * tstep + phase); s.x = boundingBox.x + dx;    %得到移动后的移动窗口的x坐标s.y = boundingBox.y + dy;    %得到移动后的移动窗口的y坐标s.w = boundingBox.w;s.h = boundingBox.h;     %移动窗口的高度和宽度保持不变index = index + 1;samples{index} = s;         %记录移动后的移动窗口信息,也就是此时这个样本的位置     end
  • 算法实现细节
    在这里插入图片描述
    图解析:网络模型分为两路。
    跟踪的时候:
    左侧 “query stream”,输入第一帧的图像以及 bounding box,右侧 “search stream”,输入第 t 帧以及半径采样策略得到的candidate box
    训练的时候:
    query stream 输入:训练数据集中的一个视频序列A中的任何一个图片的grounding bounding box
    search stream输入:随机选取一个视频序列A中的与query stream不同的任何一个图片的bounding box。(在提供的训练集中,每一帧图像都有其目标所在的真实位置,只需计算两帧图像的IoU,用途如下)
    Y{0,1} : 若输入的两个 box 的覆盖率>0.7 即为正样本, y=1 ; 若覆盖率 < 0.5 即为负样本,y=0。
    损失函数设计:L(xj,xk,yj,k)=1/2yj,kD2 + 1/2(1-yj,k)max(0,@-D2),其中超参数@。

  • 算法实现步骤
    1、获取ALOV数据集,并进行预处理,(至于做了什么预处理,容我读完代码再更新)
    2、搭建上图所示的网络架构(引入ROI Pooling)
    3、在训练数据中获取 patch 块, (X1,X2,Y),开始训练网络,获得最终的模型,即所谓的相似度函数,也即匹配函数。
    4、使用预训练好的模型进行跟踪,X1是第一帧以及bounding box,X2是当前帧以及 candidate box(好多个),X1,X2 通过卷积走到网络的 roi 层,再对bounding box 以及candidate box 进行匹配算法,相似度最高的即为目标。

  • 论文中还提到了深度学习 的这个网络的设计一些问题,此处参考了[1]
    1、对pooling层的改进:减少原本网络结构的pooling层数。作者解释的原因是pooling会降低图像的空间分辨率,这个分辨率对分类任务来说影响不大,但是类似定位、目标跟踪这样的任务对分辨率还是有一定要求的,但同时又为了保证pooling带来的消除高频小噪声的好处,所以,对pooling层要适当减少。具体为VGG只包含两个pooling层,Alexnet不再包含pooling层。
    2、对fast-Rcnn的借鉴:由于单个处理多个candidate regions耗时耗力,因此采用region pooling layer来快速处理多个重叠区域,每一分支的输入为全图加上一系列bounding box,前几层网络先处理整幅图像,然后ROI层把特定区域的特征图转换为固定长度的表达,再送往网络的高层。
    3、多层特征综合考虑:网络层越深,表达越抽象,低层特征对类内差异更敏感,高层特征对类间差异更敏感。在跟踪任务里是高层特征好,还是低层特征好,难以定论,所以高层和低层的特征都采用,将多层的输出特征直接馈送到损失层 。
    4、正则项约束:激活函数采用RELU,但是这样输出的幅度就会没有限制,幅度的大小会影响损失函数的大小,所以在损失函数前加一个l2范数层来限制幅度。
    5、损失函数的设计:正样本对尽量离得近,负样本对离得远。
    在这里插入图片描述

  • 算法特点
    1、模型一旦训练完成,在跟踪的过程中不需要更新模型,(因为要快!)
    2、匹配函数的训练不需要指定特定类别的目标,即离线训练之后的模型在应用于跟踪的时候,可以跟踪训练过程中没有见过的目标。(说是鲁棒性强)
    3、速度问题:如果在当前的帧中每提取一个样本(一帧中可以提取多个样本)就和第一帧图片计算一次匹配度是很费时的,作者参考Fast-Rnn思想,从一幅大的图片经过 CNN 后的输出特征图中寻找想要的小patch的特征部分,从而在前面几层只需要一次的CNN 的前向计算即可,最后根据给定的 bounding box regions选取 n 个feature map 在后面几层进行传播计算。 (即这个做法是降低了候选样本的个数)我理解的是 feature map 不是 CNN 得到的,而是跟随着 X2 输入到网络中的,也即在进行前向传播之前,已经通过半径采样策略得到了candidate box.

  • 论文的创新点----将跟踪问题转化为图像匹配的问题,并且引入了深度学习。

  • 思考
    1、论文中说到的半径采样策略,还提到了生成初始框的三个放缩样本 [ √2/2 , 1 ,√2 ] ,我理解的这样candidate box 获取会有 3 x 80 = 240 个,具体我看一下代码再解释。
    2、还有一个位置精度的问题,与作者减少pooling层数有关系,传统的 CNN 中,pooling操作的目的是降低特征维度,但是这又会降低定位的准确度,作者给出了解释:CNN中引入pooling主要是为了解决物体分类问题,在物体分类任务中,物体的外形会发生很大的改变,这样pooling操作可以在一定程度上对目标变形具有特征值不变性,但是在跟踪问题中,在一个视频序列中即使目标外形发生改变也始终跟踪同一个目标,所以在一定程度上减少polling操作会对匹配精度有很大的影响。所以,最终作者去掉了AlexNet中所有pooling操作,仅仅保留VGGNet中前两个pooling操作,因为在浅层感受野较小,保留pooling操作对抵抗噪声的鲁棒性有益。

  • 参考
    [1] https://blog.csdn.net/mtc_Ningning/article/details/52814480
    [2] https://cloud.tencent.com/developer/news/281788
    [3] https://blog.csdn.net/aiqiu_gogogo/article/details/79225555

这篇关于SINT(Siamese Instance Search for Trancking)阅读笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/374468

相关文章

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态,生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案,则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时,算法停止。 — Choose k successors randomly, biased towards good ones — Close

论文阅读笔记: Segment Anything

文章目录 Segment Anything摘要引言任务模型数据引擎数据集负责任的人工智能 Segment Anything Model图像编码器提示编码器mask解码器解决歧义损失和训练 Segment Anything 论文地址: https://arxiv.org/abs/2304.02643 代码地址:https://github.com/facebookresear

数学建模笔记—— 非线性规划

数学建模笔记—— 非线性规划 非线性规划1. 模型原理1.1 非线性规划的标准型1.2 非线性规划求解的Matlab函数 2. 典型例题3. matlab代码求解3.1 例1 一个简单示例3.2 例2 选址问题1. 第一问 线性规划2. 第二问 非线性规划 非线性规划 非线性规划是一种求解目标函数或约束条件中有一个或几个非线性函数的最优化问题的方法。运筹学的一个重要分支。2

【C++学习笔记 20】C++中的智能指针

智能指针的功能 在上一篇笔记提到了在栈和堆上创建变量的区别,使用new关键字创建变量时,需要搭配delete关键字销毁变量。而智能指针的作用就是调用new分配内存时,不必自己去调用delete,甚至不用调用new。 智能指针实际上就是对原始指针的包装。 unique_ptr 最简单的智能指针,是一种作用域指针,意思是当指针超出该作用域时,会自动调用delete。它名为unique的原因是这个

查看提交历史 —— Git 学习笔记 11

查看提交历史 查看提交历史 不带任何选项的git log-p选项--stat 选项--pretty=oneline选项--pretty=format选项git log常用选项列表参考资料 在提交了若干更新,又或者克隆了某个项目之后,你也许想回顾下提交历史。 完成这个任务最简单而又有效的 工具是 git log 命令。 接下来的例子会用一个用于演示的 simplegit

记录每次更新到仓库 —— Git 学习笔记 10

记录每次更新到仓库 文章目录 文件的状态三个区域检查当前文件状态跟踪新文件取消跟踪(un-tracking)文件重新跟踪(re-tracking)文件暂存已修改文件忽略某些文件查看已暂存和未暂存的修改提交更新跳过暂存区删除文件移动文件参考资料 咱们接着很多天以前的 取得Git仓库 这篇文章继续说。 文件的状态 不管是通过哪种方法,现在我们已经有了一个仓库,并从这个仓

忽略某些文件 —— Git 学习笔记 05

忽略某些文件 忽略某些文件 通过.gitignore文件其他规则源如何选择规则源参考资料 对于某些文件,我们不希望把它们纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。通常它们都是些自动生成的文件,比如日志文件、编译过程中创建的临时文件等。 通过.gitignore文件 假设我们要忽略 lib.a 文件,那我们可以在 lib.a 所在目录下创建一个名为 .gi