SiamRPN++阅读笔记

论文地址:https://arxiv.org/pdf/1812.11703.pdf

代码地址:https://github.com/STVIR/pysot

前言

在所有效果较好的算法中,网络结构基本是基于AlexNet和VGG,深度学习作为当今潮流,人们喜欢将热门网络结构与自己领域相结合,但是为什么在前几年ResNet热度高居不下的情况下,依然没有人将ResNet应用到目标检测中。这便是这篇论文解决的问题,虽然在CIR算法中也提到这个问题,但是Siamese-RPN++明显各方面表现都要好一点。

在论文中提到,由于目标可能出现在搜索区域的任何位置,因此目标模板的学习特征表示应保持空间不变,而ResNet网络中都会有Padding操作,而这个操作会影响算法的平移不变性,使得网络更加关注图像中心。我们进一步发现,在现代深层体系结构中,只有AlexNet的零填充变体满足此空间不变性的限制。所以该论文的工作便是将ResNet运用于Siamese-RPN,代替常规的AlexNet,并且性能提升。

论文行文思路如下:

图1 解决问题思路

总体设计:

经过详细分析,论文中发现使用深层网络防止连体跟踪器的核心原因与这两个方面有关,一个原因是深层网络中的填充将破坏严格的平移不变性,另一个是RPN需要不对称的特征来进行分类和回归。

1)引入空间感知采样策略来克服第一个问题。

2)第二个问题引导了Depthwise Cross Correlation模块的产生,这样第二个问题可以迎刃而解。

在本文中一共有以下四个创新:

1)使用空间感知采样策略处理数据。

2)将ResNet或MobileNet这样的深层网络引入孪生网络。

3)逐层聚合,选择了三个残差块的输出到RPN中。

4)深度交叉相关(Depthwise Cross Correlation)。

基于这些创新点,本论文提出的方法主要流程为,首先将目标图像和搜索图像分别输入孪生网络的两端,经过50层的ResNet网络分别对他们进行特征提取,并且在conv3、conv4和conv5输入到RPN网络中,进行目标检测,然后三个结果进行融合,输出目标被框出来的搜索图像。论文中提出的框架图如图3所示,我们根据流程绘制的大致流程图如图2所示。

图 2 SiamRPN++框架图

详细设计:

1、空间感知采样策略

经过实验验证,正样本放在图像中心会使网络只对中心产生响应,不利于移动目标检测,因此,在训练过程中,不再把正样本块放在图像正中心,而是按照均匀分布的采样方式让目标在中心点附近进行偏移。这样就可以解决数据集的问题,便可以使用深层网络了。

文章中设计了一个模拟实验来验证resnet加入padding后带来平移不变性被破坏的影响。

把正样本均匀分布到某个范围内,而不是一直在中心时(所谓的范围即是指距离中心点一定距离,该距离为shift;正样本在这个范围内是均匀分布的),随着shift的不断增大,这种现象能够逐渐得到缓解。当shift从0变化到64的时候,跟踪算法在VOT16和VOT18数据集上面的效果都有了显著的性能提升,当shift超过64之后,提升的性能并不大,这可以从一方面说明该操作可以在一定程度上缓解上述这个问题。

图3 平移效果图

所以,通过均匀分布的采样方式让目标在中心点附近进行偏移,可以缓解网络因为破坏了严格平移不变性带来的影响,即消除了位置偏见,让有padding的更深层网络可以应用于跟踪算法中。

2、将ResNet或MobileNet这样的深层网络引入孪生网络

本文实验使用ResNet-50,现代化网络一般都是stride32,但跟踪为了定位的准确性,一般stride都比较小(Siamese系列一般都为8),所以我们把ResNet最后两个block的stride去掉了,同时增加了膨胀卷积,一是为了增加感受野,二是为了能利用上预训练参数。

3、逐层聚合

图4 RPN块

分别将conv3、conv4和conv5层的特征图输入到RPN网络中,然后利用图5所示RPN块对特征图进行目标检测,对每一张图片进行分类检测和定位框位置。在深层网络结构中,早期图层的特征主要集中在颜色,形状等低级信息上,对于本地化至关重要,因此才使用将前面的卷积特征图输出。

使用三个RPN块的好处主要有两点:

1)可以通过多个SiamRPN来选择出多样化的样本或者具有判别性的样本块,第一个SiamRPN可以去除掉一些特别简单的样本块,而后面的网络进一步进行滤除,最终剩余一些复杂的负样本,这样其实有利于提升网络的判别能力。

2)由于使用了多级回归操作,因此可以获得一个更加准确的BBox。

图5 多层融合计算公式

其中所需要的超参数是预训练时学习到的。

4、深度交叉相关(Depthwise Cross Correlation)

具体结构如图4所示,和SiamRPN中的UpChannel一样,在做correlation操作以前,模版和搜索分支会分别通过一个卷积层,但并不需要进行维度提升,这里只是为了提供一个非孪生的特征。在这之后,通过类似depthwise卷积的方法,逐通道计算correlation结果,这样的好处是可以得到一个通道数非1的输出,可以在后面添加一个普通的 1x1卷积就可以得到分类和回归的结果。整个过程类似于构造检测网络的头网络。

它的参数比SiamRPN中的UpChannel少10倍,然而性能却没有下降,因此SiamRPN++性能得到了巨大的提升。

这里的想法我觉得借鉴于MobileNet v1,模型压缩的一种有效方法。

图6 DW-Corr结构

实验效果:

图7 在VOT-2018上跟踪器指标

图8 成功率图

图9 精确度图

总结

从这篇论文之后,特征提取的主网络使用ResNet-50这样的复杂网络代替之前的AlexNet应该是主流了,同样作者的空间采样策略在训练时很有借鉴的意义,而后面参数量增加带来的速率的问题,通过模型压缩进行解决而本论文之采用了MobileNet v1的深度可分离卷积,现在MobileNet已经出到了v3,后面可能会跟着对应被更新替换。而三个通道出来的融合,更像一个不同卷积层不同感知特征的一个融合,是一个低层颜色形状轮廓跟后期特征的一个共同作用。

本文分享自微信公众号 - 机器学习AI算法工程(datayx)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-05-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 单目标跟踪paper小综述

    最近看了几篇关于单目标跟踪的paper,为了方便自己梳理脉络同时和大家交流讨论,将一些重要的paper整理在这。

    计算机视觉
  • 重磅!商汤开源目标跟踪最强算法SiamRPN系列

    AI 前线导读: 商汤科技智能视频团队首次开源其目标跟踪研究平台 PySOT。PySOT 包含了商汤科技 SiamRPN 系列算法,以及刚被 CVPR2019 ...

    代码医生工作室
  • MapReduce 阅读笔记

    这篇文章是我阅读 MapReduce 论文:《MapReduce: Simplified Data Processing on Large Clusters》的...

    CSDN技术头条
  • NewInstallUserMapper.class阅读笔记

    NewInstallUserMapper的所有属性方法.png package com.sxt.transformer.mr.nu; import java....

    Albert陈凯
  • VoxelNet阅读笔记

    三维点云中目标的精确检测是许多应用中的核心问题,如自主导航、管家机器人和增强/虚拟现实等。为了将高度稀疏的激光雷达点云与区域建议网络(RPN)连接,大多数现有的...

    3D视觉工坊
  • J-R.Abrial_FM_ICES2006 阅读笔记

    该篇文章简要地概述了用B形式化的两个实际的项目, 主要是说明一种"构造即正确"的思路, 并且分析了其中的困难和优势.

    Mezereon
  • 一文带你了解视觉目标跟踪

    视觉目标跟踪(Visual Object Tracking)是计算机视觉领域的一个重要问题。尽管近年来受到了广泛研究,目标跟踪问题由于本身的高难度、高质量数据的...

    AI科技评论
  • PHP手册阅读笔记

    学习PHP以来一直希望有时间能够有时间通读PHP手册,最近终于强迫自己划出一些时间,完成了对PHP手册的通读。除了函数参考部分没有每个都看,其他的章节基本上都看...

    大江小浪
  • Google File System 阅读笔记

    今天终于拜读了著名GFS的论文,大体上的设计思路是明白了,复杂的系统,其实用了很多简单的逻辑在里面,下面是记录的一些笔记:

    大江小浪
  • Bitmap 源码阅读笔记

    导语: Android 系统上的图片的处理,跟Bitmap 这个类脱不了关系,我们有必要去深入阅读里面的源码,以便在工作中能更好的处理Bitmap相关的问题...

    MelonTeam
  • flask源码阅读笔记

    2011-10-24 flask是个微型web框架,基于werkzeug提供的基本wsgi和routing功能,扩展出比较完善的server view db访...

    财主刀刀
  • HashMap源码阅读笔记

    HashMap采用 key/value 存储结构,每个key对应唯一的value。

    三分恶
  • RKGE_论文阅读笔记

    while(1) { cout<<”Never Give Up”<<endl; }

    AngelNH
  • StringBuilder/StringBuffer源码阅读笔记

    在 Java String类源码阅读笔记 里学习了String类的源码,StringBuilder、StringBuffer是经常拿来和String类做对比的两...

    三分恶
  • LinkedList源码阅读笔记

    LinkedList是基于双向链表数据结构实现的Java集合(jdk1.8以前基于双向链表),在阅读源码之前,有必要简单了解一下链表。

    三分恶
  • ArrayList源码阅读笔记

    关于数组拷贝,谷歌了一下,说法不一,有说是深拷贝的,有说是浅拷贝的。暂时先放下,未来有机会再研究。

    三分恶
  • CopyOnWriteArrayList源码阅读笔记

    ArrayList是开发中使用比较多的集合,它不是线程安全的,CopyOnWriteArrayList就是线程安全版本的ArrayList。CopyOnWrit...

    三分恶
  • DenseNet 论文阅读笔记

    研究表明,如果卷积网络在接近输入和接近输出地层之间包含较短地连接,那么,该网络可以显著地加深,变得更精确并且能够更有效地训练。该论文基于这个观察提出了以前馈地方...

    范中豪
  • 老司机读书笔记——Effective Objective-C 2.0阅读笔记

    比方说,在循环中不断地创建的临时对象。即便这些对象在调用完方法之后就就不在使用了,他们也依然处于存活状态,因为目前还在自动释放池里,等待系统稍后将其释放并回收。...

    老司机Wicky

扫码关注云+社区

领取腾讯云代金券