COCO 2018 Keypoint冠军算法解读
作者简介:王志成,清华大学计算机系硕士,现为旷视科技研究员,人体姿态估计研究负责人,COCO Keypoint 冠军算法 CPN、MSPN 共同第一作者,研究方向涵盖人体姿态估计与跟踪、人体动作识别,并在上述方向有着长期深入的研究;2017、2018 年作为负责人带队参加 COCO 人体姿态识别竞赛(Human Keypoint Detection),连续两次夺魁。
本文主要介绍了 Face++ Detection Team 在 2018 年做 COCO skeleton 的工作。首先给出模型的视频结果。
COCO2018 Keypoint算法结果展示
Background
人体关键点检测(Human Keypoint Detection)又称为人体姿态识别,旨在准确定位图像之中人体关节点的位置,是人体动作识别、人体行为分析、人机交互的前置任务。作为当前计算机视觉不可或缺的热门研究领域之一,人体姿态识别有着大量的落地场景和广阔的应用前景,现有及可期的场景应用有人体步态识别、体感游戏、AI 美体、虚拟现实、增强现实、康复训练、体育教学等等,可广泛赋能于游戏、手机、医疗、教育、数字现实等不同领域。
人体关键点检测任务对于现实生活有着很大的潜在用途,目前公开的比赛中最权威的是 MS COCO Keypoint track 的比赛,也是该领域最有挑战的比赛,参赛队不乏 Facebook,Google 及微软这样的国际巨头,也不乏 CMU 等顶尖研究机构,是该领域最先进方法的试金石。旷视科技 Detection 组在2017,2018 年两次夺得该比赛的冠军,2017 年旷视 COCO Keypoint 比赛冠军工作 CPN 在业界具有深远影响,并获得广泛使用。这里,我们将介绍旷视 2018 年 COCO Keypoint 比赛夺冠的工作。
人体姿态识别主流方法目前分为两种:单阶段和多阶段,虽然后者遵照从粗糙到精细的逻辑更贴合任务本质,但是目前表现似乎没有优于单阶段方法,我们认为,目前多阶段方法差强人意的性能主要归因于多种不合理的设计。我们的工作从 1)网络设计、2)特征流、3)损失函数入手提出一系列改进措施,工作成果在 MS COCO Keypoint 数据集上超越现有方法取得当前最优结果,论文已公开于 Arxiv,链接请见:arxiv.org/abs/1901.0014
Introduction
图1
深度卷积网络出现之后,人体姿态识别飞速发展。现阶段最优方法[1,2]网络结构较为简单,多是采用单阶段网络设计,比如 2017 COCO Keypoint 挑战赛冠军方法[1]采用基于 ResNet-Inception 的网络结构,最新的 Simple Baseline[2] 采用 ResNet 网络结构。另一种网络结构则采用多阶段网络设计,即把一个轻量级网络作为单元网络,接着将其简单地堆叠到多阶段。
直观上讲,多阶段的天然逐级优化特性会更适用于这个任务,但是当前存在的多阶段网络并没有单阶段网络在 COCO 上表现好。我们试图研究这一挑战性问题,提出当前多阶段网络的欠佳表现主要是由于设计不足导致的,并可通过一系列 1)网络结构、2)特征流、3)损失函数方面的创新性优化,最大化发掘多阶段网络的潜力,实现目前最先进的效果。
因此,我们提出新型的多阶段姿态估计网络 MSPN,具体改进有 3 个方面:
目前多阶段网络里的单元网络离最优比较远,使用已经验证的网络(如 Resnet)要比主流的多阶段方法(如 Hourglass)采用的轻量级网络好很多,究其原因主要是下采样 Encoder 需要承载更多内容,而轻量级网络满足不了。
由于重复下采样,上采样会丢失信息从而不利于学习,我们提出融合多阶段特征以加强信息流动,来缓解这一问题。
我们观察到关节点的定位是逐级精细优化的,因此提出由粗到精的学习策略,并采用多尺度监督提升训练。由图 1 可知,当提升单阶段网络容量时,精度会趋近于饱和,而增长遇到瓶颈;对于目前主流的多阶段网络,当堆叠多于 2 个单元网络后,精度提升非常有限。对于我们提出的 MSPN,随着单元网络的堆叠数增加,精度会持续提升。
在 MS COCO 基准上,MSPN 在 test-dev 数据集上获得 76.1 AP;在 MS COCO 2018 中,test-dev 达到 78.1 AP,test-challenge 76.4 AP, 相比去年冠军提升了 4.3 AP。
--------多阶段网络---------
图2
多阶段姿态估计网络 MSPN 如图 2 所示。它采用自上向下的框架,即首先使用人体检测算法给出人体框,据此抠图,并进行单人人体姿态估计。如上所述,MSPN 的新突破有 3 点:第一,使用图像分类表现较好的网络(如 ResNet)作为多阶段网络的单元网络;第二,提出逐阶段传递的信息聚集方式,降低信息损失;第三,引入由粗到精的监督,并进行多尺度监督。
------有效的单阶段子单元网络设计-----
表1
目前主流的多阶段网络全部基于 Hourglass 变体。从表 1 可知,Hourglass 在重复下采样和上采样的过程中,卷积层的通道数是相同的。这是因为高层语义信息更强,需要更多通道表征。
下采样时,Hourglass 变体会导致特征编码(Encoder)无法很好地表达特征,从而造成一定程度上的特征信息丢失。相比于下采样,上采样很难更优地表征特征,所以增加下采样阶段的网络能力对整体网络会更有效。
--------------跨阶段特征融合-------------
图3
多阶段网络在重复的上采样和下采样过程中,很容易造成信息流失,我们提出了一种有效的跨阶段特征融合方法来应对这一现象。如图 3 所示,上一阶段上、下采样的特征经过 1x1 卷积相加到后一阶段下采样部分,从而实现多阶段之间的特征融合,有效缓解特征流失。
---------------由粗到精监督--------------
图4
人体姿态估计如果要定位较有挑战性的关节点(如隐藏关节点)需要较强的领域上下文信息。同时,对于基于回归 heatmap 的任务,作为 GT 的高斯核越小,回归精度越准。考虑到以上两点,并结合多阶段网络的自身逐级递进优化的特性,我们提出基于多阶段的由粗到精的监督方式。每个阶段方式的监督heatmap的高斯核逐渐减小,可较理想地兼顾领域上下文信息和精准度。由于中间监督对于深度神经网络有较好效果[3],我们在每个阶段内部也采用了多尺度的中间监督。
-------------实验-------------
实验中,我们使用 MegDet [4]获得人体检测框,并使用 COCO(80 类)之中人这一类的结果作为人体框结果,没有单独针对人进行训练。抠图之前,框扩展为高宽 4:3 的比例。训练中,我们采用 Adam 作为优化策略,初始学习率为 5e-4,Weight Decay 为 1e-5。数据增强方面,主要采用翻转、旋转(-45度~+45度)、尺度变换(0.7~1.35)。姿态估计网络图像输入尺寸为 384x288。消融实验中,图像输入尺寸为 256x192。测试方面,沿用 [5] 中的策略,即采用翻转求平均,最大值位置向次大值位置偏移 1/4 作为最终位置。所有消融实验在 COCO minival 上进行。
消融实验
多阶段网络
我们通过一系列实验验证多阶段网络设计的重要性。
表2
首先,我们通过实验观察单阶段网络增加模型复杂度的表现。从表 2 可知,ResNet-50 作为 Backbone 的单阶段网络精度可以达到 71.5,ResNet-101 可以提升 1.6 个点,但是继续往高增加复杂度,精度的提升幅度逐渐变小,趋近于饱和。
表3
我们同时对比了当前主流的多阶段网络 Hourglass 与该工作在精度提升方面的差异。由表 3 可知,Hourglass 在第 2 个阶段以上叠加新阶段提升非常有限:从 2 个阶段到 8 个阶段,计算量增加 3 倍,而精度只涨了 0.7 AP。相比于 Hourglass 的增长受限,MSPN 从第 2 个阶段以上叠加新阶段会持续提升精度。
为验证我们对多阶段网络有效改进的泛化性,我们尝试把其他网络作为单元网络。如表 4,两阶段的 ResNet-18 会稍高于相当计算量的单阶段 ResNet-50 网络。4 阶段小计算量的 X-ception 网络会比同计算量单阶段的大计算量的 X-ception 网络高出近 1 AP。
表4
跨阶段特征融合以及由粗到精监督
表5
表 5 的实验可以验证跨阶段特征融合以及由粗到精监督的有效性。对于 4 阶段的 Hourglass 和 2 阶段的 MSPN 借助以上两种策略均实现涨点。
------------实验结果-------------
表6
表7
表 6 和表 7 分别对比 MSPN 与当前最优方法在 COCO test-dev 数据集和 COCO test-challenge 数据集上的精度差异。可以看出,MSPN 均超过当前最优方法,在 test-dev 上领先2.3 AP,在 test-challenge上领先 1.9 AP。
----------------总结---------------
我们提出了针对人体姿态估计更有效的多阶段网络设计思想,并用充分的实验验证其有效性,该网络在 COCO 数据集上突破当前的精度瓶颈,实现了新的 state-of-the-art。我们同时也验证了该工作所涉及的多阶段网络设计思想的泛化性。
--------------结果例图-----------
图5
Reference
[1] Y. Chen, Z. Wang, Y. Peng, Z. Zhang, G. Yu, and J. Sun. Cascaded pyramid network for multi-person pose estimation. arXiv preprint, 2018.
[2] B. Xiao, H. Wu, and Y. Wei. Simple baselines for human pose estimation and tracking. arXiv preprint arXiv:1804.06208, 2018.
[3] C. Szegedy, W. Liu, Y. Jia, P. Sermanet, S. Reed, D. Anguelov, D. Erhan, V. Vanhoucke, and A. Rabinovich. Going deeper with convolutions. In Proceedings of the IEEE conference on computer vision and pattern recognition, pages 1–9, 2015.
[4] C. Peng, T. Xiao, Z. Li, Y. Jiang, X. Zhang, K. Jia, G. Yu, and J. Sun. Megdet: A large mini-batch object detector. In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition, pages 6181–6189, 2018.
[5] A. Newell, K. Yang, and J. Deng. Stacked hourglass networks for human pose estimation. In European Conference on Computer Vision, pages 483–499. Springer, 2016.
(*本文仅代表作者观点,转载请联系原作者)
推荐阅读
- 详解谷歌最强NLP模型BERT(理论+实战)
- 10分钟快速入门Python函数式编程
- 啥是佩奇?Python告诉你
- 你看到的AI与智能无关
- 请重视!服务器这几个“异常”可能性预警
- 服!税改第1天,程序员同事竟还多挣了两千……
- 天了噜!“钢铁侠”马斯克和亚马逊即将在火星开战?
- 任正非回应一切:今天的困难十多年前就有预计(附问答实录)
- 革微信的命,要靠“聊天即挖矿”?
相关文章:

linux下IPython的安装方法
按照下面的步骤依次执行即可。在linux环境里:wget http://ipython.scipy.org/dist/ipython-0.8.4.tar.gz说明:在官网下载ipython最新的tar包。tar zxvf ipython-0.8.4.tar.gz说明:解压下载的包。cd ipython-0.8.4说明:进入到解压后…

201621123057 《Java程序设计》第12周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容。 2. 面向系统综合设计-图书馆管理系统或购物车 使用流与文件改造你的图书馆管理系统或购物车。 2.1 简述如何使用流与文件改造你的系统。文件中数据的格式如何ÿ…

对 makefile 中 .SECONDARY 的学习体会
上例子 LIBSfoo.gao bar.gao .INTERMEDIATE:$(LIBS) .SECONDARY:bar.gao all: $(LIBS) #pass foo.gao: echo $ touch $ bar.gao: echo $ touch $ make --dry-run 的结果: foo.gao touch foo.gao bar.gao touch bar.gao #pass rm foo.gao 可见,SECONDARY 确实起到…

yuml 类图设计
http://yuml.me/diagram/nofunky/class/draw 使用yuml这个工具进行类图设计: // Cool Class Diagram [Engine :lib/core]<>Use[App :lib/core/model] [Engine :lib/core]<>Use[Hook :lib/core/] [Engine :lib/core]<>Use[Dsl :lib/core/] [Engine…

特斯拉再裁员3000多人,马斯克称别无选择
编译整理 | 一一 出品 | AI科技大本营 去年 6 月,为了缩减开支,特斯拉宣布裁员 9%,涉及员工超 4000 人,但在不久又开启了一轮积极的招聘狂潮。现在,这艘大船再度面临风暴不堪重负,裁员潮说来就来。 北京…

一个表对应另一个表中多个主键的查询方法(把一个表当成两个表用)
表t_RecordPID(主键) SendUserID(发送人) ReceiveUserID(接收人) 1 1 2 2 2 3 3 3 1 表t_UserPID(主键) UserName(用户名) 1 张三 2 …

Keras 最新《面向小数据集构建图像分类模型》
本文地址:http://blog.keras.io/building-powerful-image-classification-models-using-very-little-data.html 本文作者:Francois Chollet 按照官方的文章实现过程有一些坑,彻底理解代码细节实现,理解keras的api具体使用方法也有…

Python处理XML文件
用代码记录下: import xml.dom.minidomtry:f open(filename)dom xml.dom.minidom.parseString(f.read()) finally:f.close()if dom ! None:root dom.documentElementfor element in root.getElementsByTagName("bean"):for prop in element.getElement…

李彦宏首次公布24字百度愿景,要做最懂用户的公司
编辑 | 一一 出品 | AI科技大本营 近日,李彦宏发布内部信并首次公布了 24 字百度愿景:成为最懂用户,并能帮助人们成长的全球顶级高科技公司。李彦宏表示,“这 24 个字将上承新使命、下展公司“夯实移动基础、决胜 AI 时代”的整体…

HP c3000/c7000 blade switch GBE2c 初始配置
端口概述 Port 1-16 是内联刀片的downlink口 Port 17-18 是switch互联用,默认是disable的 Port 19是给Blade On-board Administrator用 Port 20-24 是uplink口 连到交换机的Console口 To access the switch locally: 1. Connect the switch DB-9 serial connector, …

Travis CI : 最小的分布式系统(一)
(本文翻译自http://www.paperplanes.de/2013/10/18/the-smallest-distributed-system.html,由金斌_jinbin 翻译) Travis CI一开始仅仅是个想法,在当时甚至还有些理想化。在这个项目启动之前,开源社区还没有一个可用的持续集成系统。 随着作为…

Windows 7时代即将终结!
作者 | 屠敏 转载自CSDN(ID:CSDNnews) 2009 年诞生的 Windows 7 终究没能超过 Windows XP 13 岁的寿命。 2015 年 1 月 14 日,微软宣布结束对 Windows 7 操作系统的第一阶梯主流支持,同时为了给用户过渡升级的时间,…

什么是DWDM
DWDM是Dense Wavelength Division Multiplexing(密集波分复用)的缩写,这是一项用来在现有的光纤骨干网上提高带宽的激光技术。更确切地说,该技术是在一根指定的光纤中,多路复用单个光纤载波的紧密光谱间距,…

MySQL · myrocks · MyRocks之memtable切换与刷盘
概述 MyRocks的memtable默认是skiplist,其大小和个数分别由参数write_buffer_size和max_write_buffer_number控制。数据写入时先写入active memtable, 当active memtable写满时,active memtable会转化为immutable memtable. immutable memtable数据是不会…

URLRewriter在ASP.NET配置文件中的用法
<?xml version"1.0"?><configuration><configSections><sectionGroup name"system.web.extensions" type"System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version1.0.61025.0, Culturene…

Travis CI : 最小的分布式系统(二)
大约1年之前,我们发现当时的架构有些不合理了。尤其是Hub,它上面承担了太多的任务。Hub要接收新的处理请求,处理并推动构建日志,它要同步用户信息到Github,它要通知用户构建是否成功。它跟一大群外部API打交道…

百度开设「黄埔学院」,革新者来
1 月 19 日,百度宣布成立「黄埔学院」,开展深度学习架构师培养计划。并借鉴了黄埔军校大门对联的横批「革命者来」,将口号设置为「革新者来」。 首先,为什么叫「黄埔学院」? 2012 年初,百度开始进行深度学…

Linux-find命令应用举例-按时间筛选和删除文件
find参数说明: find有很多参数是以动作首字母时间的方式用于按访问、改变、更新时间来筛选文件。 动作表达: a(last accessed) 最近一次访问时间 c(last changed) 最近一次改变时间 m(last modified) 最近一次修改时间注意此上的c和m的区别,…
2007年11月网络工程师考试试题
● 若某计算机系统由两个部件串联构成,其中一个部件的失效率为710-6/小时。若不考虑其他因素的影响,并要求计算机系统的平均故障间隔时间为105小时,则另一个部件的失效率应为 (1) /小时。 (1&am…

Travis CI : 最小的分布式系统(三)
日志的作用有两个:当构建日志的数据块通过消息队列进来时,更新数据库对应行,然后推送它到Pusher用于实时的用户界面更新。 日志块以流的形式在同一个时间从不同的进程中进来,然后被一个进程处理。这个进程每秒最高可处理100个消息…

windows 上rsync客户端使用方法
阅读目录 1.1 获取 windows上实现rsync的软件(cwRsync)1.2 cwrsync的使用方法1.3 cwrsync的使用回到顶部1.1 获取 windows上实现rsync的软件(cwRsync) cwRsync是Windows 客户端GUI的一个包含Rsync的包装。您可以使用cwRsync快速远…

机器学习开源项目Top10
整理 | Jane 出品 | AI科技大本营 【导语】又到了我们固定给大家推荐开源项目的时间。本期将为大家推荐 10 个机器学习开源项目,统计了过去一个月中 250 个机器学习开源项目,并从中选取了本期的 Top10。平均 1483 Stars。不知道是不是有你喜欢的欢迎大…

大规模服务设计部署经验谈
本文中提出的最佳实践,来自于作者多年大规模服务设计和部署的经验,为设计、开发对运营友好的服务提供了一系列良好的解决方案。■ 文/James Hamilton 译/赖翥翔1 引言 本文就设计和开发运营友好的服务的话题进行总结…

修改mysql数据库默认编码为utf8
查看当前字符编码: mysql < show variables like character%;为了解决中文乱码问题,修改mysql默认数据库编码为utf8,修改/etc/my.cnf [client]default-character-setutf8[mysql]default-character-setutf8[mysqld]character-set-serverutf…

CSDN创始人蒋涛:AI定义的开发者时代
1月18日,由中国软件行业协会主办的2019中国软件产业年会,在国家会议中心举行。CSDN创始人&董事长蒋涛,在大会上发表了题为《AI定义的开发者时代》的主题演讲。 以下为演讲实录: 我们在PC互联网时代就建立了中国软件开发者社区…

numpy.ndarray的赋值操作
matzeros((3,4)) #生成一个3行4列全部元素为0的矩阵mat[1,:]111 #从第1行第0列开始,一直到最后一列,赋值为1,效果与mat[1,0:3]相同,前置0可以省略,最后的列数可以省略输出:[[ 0. 0. 0. 0.][ 111. 111. 111.…

travis-ci如何配置android
travis-ci如何配置android travis-ci 关于android部分:http://docs.travis-ci.com/user/languages/android/ language: android android:components:- build-tools-19.1.0 # BuildTools version- android-19 # SDK version- sy…

你的微笑,拂过我的心海
??初冬的午后,阳光,懒懒地伸展着腰肢,企业形象宣传片 ,偶然从窗帘漏进几缕稀少的斜影。南方的冬天总是姗姗来迟,让人认为,那只不过是秋天残存的脚步,还没来得及捉住,它却已从你的眉间静静地溜…

重读Youtube深度学习推荐系统论文,字字珠玑,惊为神文
作者简介,王喆,硅谷高级机器学习工程师。 本文转载自知乎专栏 https://zhuanlan.zhihu.com/p/52169807 这里是王喆的机器学习笔记,每隔一到两周我会站在算法工程师的角度讲解一些计算广告、推荐系统相关的文章。选择文章必须满足一下三个条件…

Struts的select两种遍历方法
转载于:https://blog.51cto.com/9695005/2050390