• 单目标追踪——【孪生网络】SiamMask论文阅读笔记


    论文链接:SiamMask
    SiamFC
    SiamRPN

    发现问题

    1、追踪的预测目标位置定义不同精度也会不同。(用旋转矩形框描述目标位置比坐标轴对齐的矩形框更精确)
    2、VOS算法的第一帧需要给定目标的mask,这在人机交互的场景中很难时间,这个mask获取成本过高。
    3、视频物体分割(VOS)领域的大多数方法的速度慢,难以满足实时性。

    受到启发

    1、离线训练的全卷积的孪生网络SiamFC在VOT-2015上保持58fps追踪速度。
    2、YouTube-VOS数据集——一个基于像素标记的视频集。
    3、保持离线训练+在线速度+改进目标的表示(BoundingBox → mask)

    实现

    实现部分包括整体构想思路、网络结构

    整体构想思路

    1、用三个任务训练一个孪生网络,这三个任务的目标不同,对应了不同的针对目标与候选区域建模策略。任务一用来估计目标的位置,任务二和任务三用来估计目标的尺度大小。

    • 任务一:参照SiamFC,用滑动窗口的方式学习目标与多个候选目标的相似性。【输出:密集相应图(标记目标可能所在的中心位置,而不估计目标的尺度信息)】
    • 任务二:参照SiamRPN利用区域候选网络(RPN)对目标边界框进行回归。
    • 任务三:生成前后景(类无关)的二值分割(mask)。
      任务二与任务三同时学习。

    网络结构

    SiamMask-3B
    SiamMask-2B

    SiamMask在论文中有两个结构:

    • SiamMask-3B表示SiamMask的完整结构,图像经过特征提取之后,经过三个分支,分别得出目标候选框的确定性分数(是否前后景)、目标的候选框的位置(x, y, w, h)、目标的mask生成。(图1)
    • SiamMask-2B表示SiamMask的两分支简化结构,图像经过特征提取之后,经过两个分支,分别得出目标的mask生成、目标的位置估计(用了SiamFC中的损失函数)。(图2)

    特征提取部分

    论文中将ResNet50作为Backbone,具体参数如表所示:
    在这里插入图片描述
    其中adjust层降低了特征维度(1024->256),xcorr表示用exemplar对Search区域进行Depth-wise互相关操作,输出一个包含丰富信息的特征图。这里有一个重要的概念RoW,表示候选窗口的响应。例如最后互相关操作之后得到的特征图为17 * 17 * 256。则一共有17 * 17个RoW,每一个RoW是1 * 1 * 256的向量。这个向量蕴含了丰富模板与候选窗口的信息。凭借此信息,我们可以对其做1x1卷积得出分类和坐标轴回归的结果、或者解码出mask的信息。

    目标定位部分

    SiamMask-2B——SiamFC定位法

    在这里插入图片描述

    在SiamMask-2B的网络结构中,Score分支就是参照SiamFC的损失函数定义一个交叉熵损失函数来进行二分类,生成的一个17 * 17的置信度分数矩阵。这个矩阵就对应着17 * 17 * 256特征图中这17 * 17个RoW窗口的置信分数,经过分数惩罚等一系列操作(为了使预测出置信度高的位置不要偏离上一帧太远–防止误追)我们选取置信分数最高的对应的那一个1 * 1 * 256的RoW生成mask。

    SiamMask-3B——SiamRPN定位法

    在这里插入图片描述
    在SiamMask-2B的网络结构中,Box分支和Score分支就是参照SiamRPN。对于17 * 17 * 256特征图来说,一共有17 * 17个RoW,以每个RoW为中心,对应到原图中,生成k个不同纵横比的anchor(可以看作候选框)。对anchor的边界框进行预测,则有17174k个输出;对anchor的分类(是否包含目标)进行预测,有17172k个输出。

    Mask生成方法

    方法一

    将选取的1 * 1 * 256经过两个1 * 1的卷积层调整深度到1 * 1 * (63 * 63)。
    流程如下:

    • Reshape+Sigmoid:生成63*63的二值classifier矩阵,用于判断这个矩阵的某一个值是否属于mask。
    • 等比例地将63*63大小的mask矩阵仿射变换回原图中被选中用于Search的区域。
    • 用给定阈值0.5过滤,Search中的矩阵得到目标分割。
    • 通过最小外接矩形生成(MBR)生成旋转矩形框。

    方法二——refinement模块

    作者提到,直接这样预测mask的方式得到的精度并不太高,所以提出了如下图所示的Refine模块U来提升分割的精度:在原始的响应图上对每个RoW不采用升维到63x63的方式,而是直接对conv_5的1 * 1 * 256的RoW进行deconv(反卷积)、与backbone生成的Search region的ResNet50的结果相加耦合,上采样得到mask。利用ResNet50的阶段性结果生成mask会更准确,因为这些结果里面保持了较低层的特征。
    在这里插入图片描述
    说了这么多,QQ快给我喝口水~

  • 相关阅读:
    YOLOv8改进实战 | 更换主干网络Backbone之2023最新模型LSKNet,旋转目标检测SOTA
    【实验】Hadoop-2.7.2+zookeeper-3.4.6完全分布式环境搭建(HDFS、YARN HA)转载
    LeetCode 108. 将有序数组转换为二叉搜索树
    【Try to Hack】veil-evasion免杀
    HTML5+CSS3+JS小实例:科技感满满的鼠标移动推开粒子特效
    Selenium 高级定位 Xpath
    【Mybatis编程:查询相册数据列表】
    【Java系列】Java 基础
    项目时间管理-架构真题(二十四)
    使用电力系统稳定器 (PSS) 和静态 VAR 补偿器 (SVC) 提高瞬态稳定性(Matlab代码实现)
  • 原文地址:https://blog.csdn.net/qq_42312574/article/details/125524931