商汤科技智能视频团队首次开源其目标跟踪研究平台 PySOT。PySOT 包含了商汤科技 SiamRPN 系列算法,以及刚被 CVPR2019 收录为 Oral 的 SiamRPN++。此篇文章将解读目标跟踪最强算法 SiamRPN 系列。

背景

由于存在遮挡、光照变化、尺度变化等一些列问题,单目标跟踪的实际落地应用一直都存在较大的挑战。过去两年中,商汤智能视频团队在孪生网络上做了一系列工作,包括将检测引入跟踪后实现第一个高性能孪生网络跟踪算法的 SiamRPN(CVPR 18),更好地利用训练数据增强判别能力的 DaSiamRPN(ECCV 18),以及最新的解决跟踪无法利用到深网络问题的 SiamRPN++(CVPR 19)。其中 SiamRPN++ 在多个数据集上都完成了 10% 以上的超越,并且达到了 SOTA 水平,是当之无愧的目标跟踪最强算法。

项目地址:https://github.com/STVIR/pysot

以上动图中,红色框是 SiamRPN++ 的跟踪效果,蓝色框是 ECCV 2018 上的 UPDT 的结果,可以看出 SiamRPN++ 的效果更佳,跟踪效果更稳定,框也更准。从这个图也可以看出跟踪的一些挑战:光照急剧变化,形状、大小变化等。

SiamRPN (CVPR18 Spotlight)

在 CVPR18 的论文中(SiamRPN),商汤智能视频团队发现孪生网络无法对跟踪目标的形状进行调节。之前的跟踪算法更多的将跟踪问题抽象成比对问题,但是跟踪问题其实和检测问题也非常类似,对目标的定位与对目标框的回归预测一样重要。 研究人员分析了以往跟踪算法的缺陷并对其进行改进:

  1. 大多数的跟踪算法把跟踪考虑成定位问题,但它和检测问题也比较类似,对目标的定位和对目标边界框的回归预测一样重要。为此,SiamRPN 将跟踪问题抽象成单样本检测问题,即需要设计一个算法,使其能够通过第一帧的信息来初始化的一个局部检测器。为此,SiamRPN 结合了跟踪中的孪生网络和检测中的区域推荐网络:孪生网络实现对跟踪目标的适应,让算法可以利用被跟踪目标的信息,完成检测器的初始化;区域推荐网络可以让算法可以对目标位置进行更精准的预测。经过两者的结合,SiamRPN 可以进行端到端的训练。
  2. 以往的滤波类的方法,没办法通过数据驱动的形式提升跟踪的性能。而 SiamRPN 可以端到端训练,所以更大规模的数据集 Youtube-BB 也被引入到了训练中,通过数据驱动的形式提升最终的性能。

结合以上两点创新,在基线算法 SiamFC 的基础上,SiamRPN 实现了五个点以上的提升(OTB100,VOT15/16/17 数据集);同时还达到了更快的速度(160fps)、也更好地实现了精度与速度的平衡。

DaSiamRPN (ECCV18)

SiamRPN 虽然取得了非常好的性能,但由于训练集问题,物体类别过少限制了跟踪的性能;同时,在之前的训练方式中,负样本只有背景信息,一定程度上也限制了网络的判别能力,网络只具备区分前景与不含语义的背景的能力。基于这两个问题,DaSiamRPN 设计了两种数据增强方式:

  1. 孪生网络的训练只需要图像对,而并非完整的视频,所以检测图片也可以被扩展为训练数据。更准确的来说,通过对检测数据集进行数据增强,生成可用于训练的图片对。因此在 DaSiamRPN 中,COCO 和 ImageNet Det 也被引入了训练,极大地丰富了训练集中的类别信息。同时,数据量增大的本身也带来了性能上的提升。
  2. 在孪生网络的训练过程中,通过构造有语意的负样本对来增强跟踪器的判别能力,即训练过程中不再让模板和搜索区域是相同目标;而是让网络学习判别能力,去寻找搜索区域中和模版更相似的物体,而并非一个简单的有语义的物体。

经过上述的改进,网络的判别能力变得更强,检测分数也变得更有辨别力,这样就可以根据检测分数判断目标是否消失。基于此,DaSiamRPN 可以将短时跟踪拓展到长时跟踪,并且在 UAV20L 数据集上比之前最好的方法提高了 6 个点。在 ECCV18 的 VOT workshop 上面,DaSiamRPN 取得了实时比赛的冠军,相比去年的冠军有了 80% 的提升

SiamRPN++ (CVPR19 Oral)

目前,孪生网络中的核心问题在于现有的孪生网络目标跟踪算法只能用比较浅的卷积网络(如 AlexNet),无法利用现代化网络为跟踪算法提升精度,而直接引入深网络甚至会使性能大幅衰减。

为了解决深网络这个 Siamese 跟踪器的痛点,商汤智能视频团队基于之前 ECCV2018 的工作(DaSiamRPN),通过分析孪生神经网络训练过程,发现孪生网络在使用现代化深度神经网络存在位置偏见问题,而这一问题是由于卷积的 padding 会破坏严格的平移不变性。然而深网络并不能去掉 padding,为了缓解这一问题,让深网络能够在跟踪提升性能,SiamRPN++ 中提出在训练过程中加入位置均衡的采样策略。通过修改采样策略来缓解网络在训练过程中的存在的位置偏见问题,让深网络能够发挥出应有的效果。

通过加入这一采样策略,深层网络终于能够在跟踪任务中发挥作用,让跟踪的性能不再受制于网络的容量。同时,为了更好地发挥深层网络的性能,SiamRPN++ 中利用了多层融合。由于浅层特征具有更多的细节信息,而深层网络具有更多的语义信息,将多层融合起来以后,可以跟踪器兼顾细节和深层语义信息,从而进一步提升性能。

除此之外,研究人员还提出了新的连接部件,深度可分离相关层(Depthwise Correlation,后续简写为 DW)。相比于之前的升维相关层(UpChannel correlation,后续简写为 UP),DW 可以极大地简化参数量,平衡两支的参数量,同时让训练更加稳定,也能更好的收敛。

为了验证以上提出的内容,研究人员做了详细的实验。在比较常用的 VOT 和 OTB 数据集上,SiamRPN++ 取得了 SOTA 的结果。在 VOT18 的长时跟踪,以及最近新出的一些大规模数据集上如 LaSOT,TrackingNet,SiamRPN++ 也都取得了 SOTA 的结果。

目前相关代码现已上传至商汤科技开源目标跟踪研究平台 PySOT。PySOT 实现了目前 SOTA 的多个单目标跟踪算法,旨在提供高质量、高性能的视觉跟踪研究代码库,并将其灵活应用于新算法的实现和评估中。欢迎大家使用与交流!

PySOT 开源项目

  • https://github.com/STVIR/pysot
  • SiamRPN
  • http://openaccess.thecvf.com/content_cvpr_2018/papers/Li_High_Performance_Visual_CVPR_2018_paper.pdf
  • DaSiamRPN
  • http://openaccess.thecvf.com/content_ECCV_2018/papers/Zheng_Zhu_Distractor-aware_Siamese_Networks_ECCV_2018_paper.pdf
  • SiamRPN++
  • https://arxiv.org/abs/1812.11703

参考文献

  1. Bo Li, Wei Wu, Qiang Wang, Fangyi Zhang, Junliang Xing, Junjie Yan, "SiamRPN++: Evolution of Siamese Visual Tracking with Very Deep Networks" (Oral) in Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (CVPR) 2019
  2. Zheng Zhu, Qiang Wang, Bo Li, Wei Wu, Junjie Yan, "Distractor-aware Siamese Networks for Visual Object Tracking" European Conference on Computer Vision (ECCV) 2018
  3. Bo Li, Junjie Yan, Wei Wu, Zheng Zhu, Xiaolin Hu, "High Performance Visual Tracking with Siamese Region Proposal Network" (Spotlight) in Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (CVPR) 2018
  4. Luca Bertinetto, Jack Valmadre, João F. Henriques, Andrea Vedaldi, Philip H. S. Torr "Fully-Convolutional Siamese Networks for Object Tracking" in ECCV Workshop 2016
  5. Goutam Bhat, Joakim Johnander, Martin Danelljan, Fahad Shahbaz Khan, Michael Felsberg."Unveiling the Power of Deep Tracking" European Conference on Computer Vision (ECCV) 2018

挑战目标跟踪算法极限,SiamRPN系列算法解读的更多相关文章

  1. Video Target Tracking Based on Online Learning—TLD单目标跟踪算法详解

    视频目标跟踪问题分析         视频跟踪技术的主要目的是从复杂多变的的背景环境中准确提取相关的目标特征,准确地识别出跟踪目标,并且对目标的位置和姿态等信息精确地定位,为后续目标物体行为分析提供足 ...

  2. CVPR2018 关于视频目标跟踪(Object Tracking)的论文简要分析与总结

    本文转自:https://blog.csdn.net/weixin_40645129/article/details/81173088 CVPR2018已公布关于视频目标跟踪的论文简要分析与总结 一, ...

  3. 目标跟踪之camshift---opencv中meanshift和camshift例子的应用

    在这一节中,主要讲目标跟踪的一个重要的算法Camshift,因为它是连续自使用的meanShift,所以这2个函数opencv中都有,且都很重要.为了让大家先达到一个感性认识.这节主要是看懂和运行op ...

  4. TLD目标跟踪算法

    1. 简介 TLD目标跟踪算法是Tracking-Learning-Detection算法的简称.这个视频跟踪算法框架由英国萨里大学的一个捷克籍博士生Zdenek Kalal提出.TLD将传统的视频跟 ...

  5. 【目标跟踪】相关滤波算法之MOSSE

    简要 2010年David S. Bolme等人在CVPR上发表了<Visual Object Tracking using Adaptive Correlation Filters>一文 ...

  6. 目标跟踪算法meanshift优缺点

    原博主:http://blog.csdn.net/carson2005/article/details/7341051 meanShift算法用于视频目标跟踪时,采用目标的颜色直方图作为搜索特征,通过 ...

  7. 基于MeanShift的目标跟踪算法及实现

    这次将介绍基于MeanShift的目标跟踪算法,首先谈谈简介,然后给出算法实现流程,最后实现了一个单目标跟踪的MeanShift算法[matlab/c两个版本] csdn贴公式比较烦,原谅我直接截图了 ...

  8. 目标跟踪之粒子滤波---Opencv实现粒子滤波算法

    目标跟踪学习笔记_2(particle filter初探1) 目标跟踪学习笔记_3(particle filter初探2) 前面2篇博客已经提到当粒子数增加时会内存报错,后面又仔细查了下程序,是代码方 ...

  9. Python Opencv-contrib Camshift&kalman卡尔曼滤波&CSRT算法 目标跟踪实现

    本次课题实现目标跟踪一共用到了三个算法,分别是Camshift.Kalman.CSRT,基于Python语言的Tkinter模块实现GUI与接口设计,项目一共包含三个文件: main.py: # co ...

随机推荐

  1. 实训23 功能FC的建立与调用

    第4章:实训23 功能的生成与条用 功能简称FC 是用户编写的没有自己存储区的逻辑块 . 功能主要用来执行条用一次就可以完成的操作. 类似于C语言中的 函数 步骤一 单击确定 以后 出现了 在下面图框 ...

  2. POJ 3250:Bad Hair Day 好玩的单调栈

    Bad Hair Day Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 15699   Accepted: 5255 Des ...

  3. SSM整合搭建过程中的一个怪异问题

    好久没有搭建框架了,昨天开始试图搭建一个SSM框架,各种配置文件搭建成功,服务器也启动正确,但是在运行过程中,发现总是不能获取JDBC,不能够创建连接池工厂,报错如下:网页报500错误码 SEVERE ...

  4. maven的概念模型及maven坐标

     1.概念模型 项目对象模型:一个maven工程有一个pom.xml文件,通过pom.xml文件定义项目的坐标.项目依赖.项目信息.插件目标等. 依赖管理系统:通过maven的依赖管理对项目所依赖的j ...

  5. cf 398B. Painting The Wall

    23333,还是不会..%%%http://hzwer.com/6276.html #include <bits/stdc++.h> #define LL long long #defin ...

  6. 这26个为什么,让初学者理解Python更简单!

    为什么Python使用缩进来分组语句? 为什么简单的算术运算得到奇怪的结果? 为什么浮点计算不准确? 为什么Python字符串是不可变的? 为什么必须在方法定义和调用中显式使用“self”? 为什么不 ...

  7. Golang go-gin 注册路由

    代码实现 main.go package main import ( "fmt" "github.com/jihite/go-gin-example/pkg/settin ...

  8. 实体映射-------AutoMapper

    现在有2个实体(A.B),2个实体中的部分字段是相同的,现在把A实体获取的值赋值给B实体,利用AutoMapper实体映射可以轻松解决 参考 实体中不同名称之间的映射可以这样写 Mapper.Init ...

  9. 【转】Selenium 利用javascript 控制滚动条

    http://luyongxin88.blog.163.com/blog/static/92558072011101913013149/ < xmlnamespace prefix =" ...

  10. tab选项卡,带自动播放

    <!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content ...