MAML-Tracker:用目标检测思路做目标跟踪?小样本即可得高准确率丨CVPR 2020
来源 | 微软研究院AI头条(ID: MSRAsia)
编者按:目标检测与目标跟踪这两个任务有着密切的联系。针对目标跟踪任务,微软亚洲研究院提出了一种通过目标检测技术来解决的新视角,采用简洁、统一而高效的“目标检测+小样本学习”框架,在多个主流数据集上均取得了杰出性能。
目标跟踪(Object tracking)与目标检测(Object detection)是计算机视觉中两个经典的基础任务。跟踪任务需要由用户指定跟踪目标,然后在视频的每一帧中给出该目标所在的位置,通常由一系列的矩形边界框表示。而检测任务旨在定位图片中某几类物体的坐标位置。对物体的检测、识别和跟踪能够有效地帮助机器理解图片视频的内容,为后续的进一步分析打下基础。
图1:目标检测与目标跟踪
跟踪任务与检测任务有着密切的关系。从输入输出的形式上来看,这两个任务是极为相似的。它们均以图片(或者视频帧)作为模型的输入,经过处理后,输出一堆代表目标物体位置的矩形框。它们之间最大的区别体现在对“目标物体”的定义上。对于检测任务来说,目标物体属于预先定义好的某几个类别,如图1左图所示;而对于跟踪任务来说,目标物体指的是在第一帧中所指定的跟踪个体,如图1右图所示。实际上,如果我们将每一个跟踪的个体当成是独立的一个类别的话,跟踪任务甚至能被当成是一种特殊的检测任务,称为个体检测(Instance Detection)。
由于这种紧密的关系,近年来,许多目标检测的技术同样能在目标跟踪领域大放异彩。例如检测中的区域推荐网络(RPN)模块,就被双路网络跟踪框架 SiamRPN 所借鉴;基于优化的 IoUNet 检测模块,也在 ATOM 等跟踪框架中取得了非常惊艳的效果。这些成功的应用启发我们:与其在跟踪器中使用一些检测器的模块,我们能否直接将检测器直接应用于目标跟踪任务?
解决小样本问题
用检测器模型去解决跟踪问题,遇到的最大问题是训练数据不足。普通的检测任务中,因为检测物体的类别是已知的,可以收集大量数据来训练。例如 VOC、COCO 等检测数据集,都有着上万张图片用于训练。而如果我们将跟踪视为一个特殊的检测任务,检测物体的类别是由用户在第一帧的时候所指定的。这意味着能够用来训练的数据仅仅只有少数几张图片。这给检测器带来了很大的障碍。
在深度学习中,解决训练数据不足常用的一个技巧是“预训练-微调”(Pretraining-finetune),即大数据集上面预训练模型,然后在小数据集上去微调权重。但是,在训练数据极其稀少的时候(仅有个位数的训练图片),这个技巧是无法奏效的。图2展示了一个检测模型预训练过后,在单张训练图片上微调的过程:尽管训练集上逐渐收敛,但是检测器仍无法检测出测试图片中的物体。这反映出了“预训练-微调”框架的泛化能力不足。
图2:“预训练-微调”框架的泛化能力不足
为了解决训练数据不足的问题,我们引入了“与模型无关的元学习”(Model-agnostic meta-learning, MAML)。这个算法是近年来比较主流的小样本学习(few-shot learning)算法。它的核心思想是,学习一个好的模型初始化权重,使得模型能够在极少量的数据上面做几步更新就收敛到一个非常好的结果。
在大数据集上预训练网络权重的时候,MAML 算法采用了双层优化(Bilevel optimization)的策略。在每一轮迭代中,我们将一组训练样本分为支撑集(Support set)以及目标集(Target set)。检测器模型先在支撑集上面去进行固定次数的梯度下降迭代(一般为5步),再将更新过后的模型参数应用在目标集上,计算目标集上的误差。整体流程如图3所示。在支撑集上,固定次数的梯度下降过程称为里层优化(Inner-level optimization);由目标集上的误差去更新模型参数的过程,称为外层优化(Outer-level optimization)。与普通的 SGD 方法相比,MAML 算法并不要求找到一组参数,直接使得目标集上误差最小;相反的,它希望找到一组参数,使其经过几步梯度下降迭代之后,在目标集上误差最小。这种双层优化的方式,迫使检测器能够通过在支撑集上的训练,泛化到目标集上。
图3:算法流程
通过 MAML 算法训练出来的初始化参数具有收敛快、泛化性能好的优点。图4的可视化结果充分说明了这一点:仅仅经过1步梯度下降的更新,检测器就能收敛到一个不错的结果;更重要的是,它在测试图片上仍然能够工作得很好。
图4:测试结果
训练过程与实验结果
解决了小样本学习的问题,检测器模型就能够自然地应用在跟踪任务上。
第一步,挑选一个目标检测模型。MAML 算法对具体模型是没有要求的,只需要满足可用梯度下降更新的条件即可。
第二步,使用 MAML 算法,对该目标检测模型进行预训练,找到一组较好的初始化的参数。
第三步,每输入一段视频,根据用户在第一帧上指定的跟踪目标,构造训练数据,并用这个训练数据来训练目标检测模型。我们把这一步称之为域适应(Domain adaptation).
第四步,对于后续的每一帧图片,用训练好的检测器去预测跟踪目标的位置。
在实验的过程中,我们选择了 RetinaNet 和 FCOS 作为目标检测模型。它们分别是 Anchor-based 以及 Anchor-free 两种类型检测器的代表性工作。在 MAML 预训练初始化参数的过程中,我们还加入了一些额外的技巧来辅助训练。例如可学的学习率(Learnable learning rate)、多步梯度优化(Multi-step loss optimization)、梯度一阶近似(First-order approximation)等等。这些技巧能够有效地稳定训练过程,提高模型的表达能力。感兴趣的读者可以参阅原始论文中的细节部分。
我们在实验中惊讶地发现,通过这种简单的方式将检测器应用于目标跟踪,已经能够取得不错的效果。在 OTB-100、VOT-18 等多个数据集上,MAML 预训练的检测器与普通 SGD 预训练的检测器(记为 Baseline)进行了详细的对比,结果如表1所示。在做 Domain adaptation 之前, Baseline 和 MAML 的性能都比较低,这是因为此时还没有学到任何跟目标物体相关的信息。经过 Domain adaptation 之后,baseline 的检测器性能有了小幅度的改善,而用 MAML 预训练的检测器则远远优于 domain adaptation 之前的结果。这充分说明了元学习的有效性。
表1:MAML 预训练的检测器与 Baseline 的对比结果
在实验中,我们还进一步探索了在线更新(online updating)策略的有效性。所谓在线更新,即利用之前跟踪的结果,收集训练数据,用来再次训练检测器。我们发现,通过在线更新的方式,能够进一步地提升跟踪的准确度。当然,正如表2所示,当在线更新检测器的分类分支(cls)或者回归分支(reg)的时候,均会带来效率上的降低。
表2:在线更新策略有效性的验证结果
我们将检测器模型应用于跟踪任务上,得到的准确率并不逊色于一些经过精心设计的跟踪器。在多个主流数据集上,我们均取得了超过或者接近当时最好跟踪器的性能。这些结果充分展示了“目标检测+小样本学习”这个框架的威力。
近年来,目标跟踪技术的发展突飞猛进,在各大数据集的性能评测中有了长足的进步。一方面,目标检测技术的进步给跟踪器带来了不小的帮助,许多目标检测的优秀设计被应用到了跟踪领域,使物体坐标的预测更加精确,如 SiamRPN、SPM、SiamFC++ 等等。另一方面,不少工作深入研究了如何利用少量样本去学习一个可靠的目标物体表征,如 MDNet,MetaTracker,ATOM 等等。在这篇文章中,我们借鉴了这两个方向的研究,提出了一个简洁、统一而高效的框架“目标检测+小样本学习≈目标跟踪”,希望能为目标跟踪的研究提供一个不一样的视角。在这个框架下,还有许多问题仍值得探索,例如采用更好的小样本学习算法、实例分割结合小样本学习等等。我们也将在未来的工作进一步发掘这一框架的潜能,打造一个更好、更快的目标跟踪算法。
论文链接:https://arxiv.org/abs/2004.00830
推荐阅读
真没想到,Python 还能实现 5 毛特效
作词家下岗系列:教你用 AI 做一个写歌词的软件
深度学习基础总结,无一句废话(附完整思维导图)
阿里云自研数据仓库 AnalyticDB 再捧 TPC 全球冠军
调查了 17,000 多位程序员,当前的云原生开发现状究竟如何?
CSW:惊天巨骗 or 比特币“图腾”中本聪?
从 0 到 70%:Chrome 上位揭秘
你点的每个“在看”,我都认真当成了AI
相关文章:

从哲学角度分析,框架的[无用之用]效果
小树的用途少,人们不理睬它、不砍伐它、才有机会长成有用之巨木,此为「无用」之用﹗老子说过:「人皆知有用之用,而莫知无用之用」,这与框架观念是一致的。 数千年前,老子提出了这「有、无」哲理,…

xtrabackup2.4 备份Precona5.6数据库,做增量备份与还原
1、Full backuop,一定要先做: innobackupex --defaults-file/etc/my.cnf --userroot --passwordevlink /home/mysql/backup/2、Incremental backup,可以每隔一小时或者三小时做一次: innobackupex --defaults-file/etc/my.cnf --userroot --passw…

MFC按钮添加提示文字
转载自: http://blog.163.com/guo_linda/blog/static/12377305720101122105030162/ MFC里这个类叫做CToolTipCtrl,具体用法很简单。 1、在类头文件中声明CToolTipCtrl的类对象m_ctrlTT。 2、在初始化函数OnInitDialog()中设置m_ctrlTT。 EnableTool…
Go远超Python,机器学习人才极度稀缺,全球16,655位程序员告诉你这些真相
作者 | 唐小引题图 | HackerEarth 报告出品 | AI科技大本营(ID:rgznai100)Go 正变得越来越受开发者欢迎。几年前,滴滴的工程师曾告诉我,在滴滴 Go 已经得到了非常广泛的应用,去年,在腾讯内部使用…

WinCE中命令行工具Viewbin简介(查看nk.bin中包含的文件)
Viewbin是微软提供的一个命令行工具,在WinCE5.0和WinCE6.0中,可以在"/WINCE600/PUBLIC/COMMON/OAK/BIN/I386"找到他。Viewbin工具可以用来查看NK.bin文件。它可以从NK.bin中获得这个NK image的大小,运行的起始地址等。还能查看到里…

元素多层嵌套,JS获取问题
如果一段html嵌套过多,在js中获取还是比较麻烦的,我写了几套方案,大家可以参考参考,如果你有好的方法,也分享出来,让我们瞧瞧。 HTML: <!DOCTYPE html> <html lang"en"> …
MFC静态文本控件设置超链接
有时我们需要在窗口上设置一个超链接,比如在Aboutdlg上设置“我的博客”这样的超链接.具体的设置方法如下。 1、首先我们在窗体上添加一个Static文本控件,修改Caption属性,设置成你想要的超链接标题,比如“更多内容欢迎访问小梦的…
百度云「升级战」:王海峰站台,新架构全面AI化,AI和知识中台登场
5月18日,"ABC SUMMIT 2020百度夏季云智峰会"在线上召开。刚刚经历了人事变动的百度云迎来重磅升级,大会以"百度智能云加速产业智能化"为主题,百度智能云全新战略、新架构首次亮相,AI中台、知识中台两大创新平…

Mysql实现非程序控制读写分离
五一假期,有个博友给我发邮件,说我的这篇blog:http://bobwu.blog.51cto.com/2918362/537077 只能通过程序员在程序中实现读写分离,咨询能否实现程序员无察觉的读写分析,呵呵,我明白意思。回答是肯定的&…
MFC系统托盘的实现
通常电脑里边的软件,当你打开后会在电脑最右下角的任务栏上生成一个系统托盘,当你点击最小化或者点击关闭按钮后,若想恢复窗口,可以左键双击或者单机这个系统图标,同时鼠标右键点击,又会有其他的菜单弹出&a…
王海峰发布百度智能云最新架构,推出AI中台和知识中台
5月18日,在百度云智峰会上,百度CTO王海峰发布最新百度智能云架构规划。首先,他分享了百度利用AI、大数据、云计算等技术帮助疫情防控、复工复产的成果:AI多人测温1周检测2700万人次,时空大数据记录人流迁徙24亿人次&am…

Linux虚拟内存优化的方法
首先查看虚拟内存的使用情况,使用命令 # free 查看当前系统的内存使用情况。 一般来说,linux的物理内存几乎是完全used。这个和windows非常大的区别,它的内存管理机制将系统内存充分利用,并非windows无论多大的内存都要…

statpot:使用mongo+bootstrap+highcharts做统计报表
最近做了一个统计项目,这个统计项目大致的需求是统计接口的访问速度。客户端会调用一个接口来记录接口的访问情况,我的需求就需要分析这些数据,然后做出个统计报表。 需求实现 最初的时候想着每天把这些接口访问情况的信息存储到mysql中&…
磁盘文件目录罗列和list控件的使用
开发类似ftp客户端的这种软件,需要对每个磁盘下的文件目录进行罗列并显示。方便文件的上传、下载等。就如同我们打开每个磁盘所显示的那样,罗列了你这个磁盘目录下的所有文件夹和文件。 那我们在自己的程序中如何做到这样呢? 主要用到两个…
潘石屹Python考试成绩99分,网友:还有一分怕你骄傲
整理 | 伍杏玲题图 | 视觉中国来源 | 程序人生(ID:coder_life)5月16日凌晨00:21分,地产大亨潘石屹在微博晒出自己的Python编程一级考试成绩,99分,厉害!像每个学生时期的我们,还会“检…

让Chrome成为你的pdf阅读器
我在Mac OS上使用过的浏览器有Chrome、Safari和Firefox,由于做的产品要支持多浏览器,所以这几种浏览器都会用到,Chrome的使用频率更高一些。 之前想通过浏览器在线阅读PDF时,一般都会提示进行下载,装了类似iGetter或Fo…

l5如何通过路由走api版本回退查找设置
l5如何通过路由走api版本回退查找设置 具体需求 当前遇到的问题是使用laravel写接口,但是接口是有版本号的,我们把版本号放在url中,比如: http://yejianfeng.com/api/user/info/?uid1 http://yejianfeng.com/api1.1/user/info/?…

jspf插件框架
简介:jspf (Java Simple Plugin Framework) 是一个插件框架,用于减少小型项目的的开发时间,增加代码的可维护性。他完全隐藏了组件的详细实现,只用到他们的接口。加载组件所需要的代码也很少,便于编写。jspf框架完全基…

list控件响应鼠标键的单双击
前面一片博客磁盘文件目录罗列和list控件的使用 写过关于list控件的一点使用方法。这篇博客接着继续讲list控件,当我把某个磁盘下的文件目录列出来显示在list控件中,我们肯定是想要对这些目录进行一些操作,比如新建文件夹、删除文件等操作。那…
我佛了!用KNN实现验证码识别,又 Get 到一招!
作者| 李秋键责编| Carol出品| AI科技大本营(ID:rgznai100)头图 | CSDN付费下载自视觉中国验证码使我们生活中最为常见的防治爬虫和机器人登录攻击的手段,一般的验证码主要由数字和字母组成,故我们可以设想:…

JVM中的垃圾收集器
2019独角兽企业重金招聘Python工程师标准>>> Serial收集器: 一种新生代的单线程收集器,采用复制算法回收。当它进行垃圾收集时,其他用户的所有线程都将暂停。 Serial Old收集器:Serial的老年代版本,采用的是标记-清除算…

linux系统用户,组和权限的管理
PS: {最近一直在做毕业设计,前面博客也记录过我的一些过程。其中需要在Ubuntu上搭建一个FTP服务器,此处我选择Vsftpd,但是在我对vsftpd的配置文件vsftpd.conf设置正确后(对于上传,下载等设置肯定没问题&am…
520 情人节 :属于Python 程序员的脱单攻略大合集(视频版)
作者| Python 编程时光责编| Carol情人节年年有,但今年的 5.20 要比以往的更有意义。2020.05.20 ,爱你爱你我爱你,如果再卡个时间(13:14),那就是 爱你爱你我爱你一生一世。为了能过上这个这个百年难遇的情人…

使用Word2010灵活掌握文档结构
使用Microsoft Word应用程序组织和编写文档时,可能会出现反复调整文档结构的情况,而通过一系列的剪切、复制、粘贴操作来解决问题,可能会让您觉得很麻烦,有没有更好的解决办法呢?其实,通过使用Word 2010中全…

深入Jetty源码之HTTP协议
在计算机网络中,如果两台机器要通信,他们首先要定义通信数据的格式,这样在服务器收到客户端的请求消息时,它才能正确的解析请求的内容,然后根据请求内容处理逻辑,并将相应消息传递会客户端;此时…
64位win7安装vs2010出现“组件安装失败...”等问题的解决方法
如题,公司发了新电脑,安装的是64位win7 ,我原来的本本安装的是32位的win7,当时安装vs2010的时候并没有那么多事,这次安装却真是让我蛋疼至极。 先后下了3个vs的安装包,中文版的,有专业版的,有旗…

不同网段路由配置
PC1 ip 192.168.1.1PC2 ip 192.168.4.1路由0 f0/0 192.168.1.254 f0/1 192.168.2.1路由1 f0/0 192.168.3.1f0/1 192.168.2.2路由2 f0/0 192.168.4.254 f0/1 192.168.3.2路由器0Router>enRouter#conf tRouter(config)#no ip domain-lookupRouter(config)#line console 0…
黑科技:绕过眼睛植入幻觉,科学家成功在盲人脑海中呈现指定图像!
来源 | 学术头条(ID:SciTouTiao)头图 | CSDN付费下载自视觉中国对于全球 5000 多万盲人来说,重见光明是一个遥不可及的梦想。而为了与盲人朋友进行交互,我们发明了盲文,用各种凸起的字符集合来表达各种意思。但这种通过…

Solr 4.x定时、实时增量索引 - 修改、删除和新增索引
2019独角兽企业重金招聘Python工程师标准>>> 一、开始增量索引前的准备工作。 1、认识data-config.xml中相关属性 <!-- transformer 格式转化:HTMLStripTransforme表示 索引中将忽略HTML标签 ---> <!-- query: 查询数据库表符合记录数据 …

关于Blocking IO, Non-Blocking IO 和 Asynchronous I/O的理解
文章写得很详细很清楚了,对我的理解帮助很大。 转载自:http://www.cnblogs.com/whyandinside/archive/2012/03/04/2379234.html。 概括来说,一个IO操作可以分为两个部分:发出请求、结果完成。如果从发出请求到结果返回ÿ…