原文地址:https://zhuanlan.zhihu.com/p/37526892

前言

前段时间很火的感人动画短片《Changing Batteries》讲了这样一个故事:独居的老奶奶收到儿子寄来的一个机器人,虽然鲜有语言的沟通,但是小机器人善于察言观色,不仅能在老奶奶口渴时为她端水、在老奶奶扫地时接过老奶奶的扫把,做力所能及的家务活,如果老奶奶在椅子上看电视睡着了,机器人还为她轻轻盖上毯子。有了它,老奶奶又重新感受到久违的快乐,过上了更轻松的生活。

那么,机器人是怎么察言观色的呢?

AI识别人的五重境界

AI识别人可以分成五个层次,依次为:

1.有没有人?->object detection (YOLO SSD Faster-RCNN)

2.人在哪里?->object localization & semantic segmentation(Mask-RCNN)

3.这个人是谁?->face identification(相对独立的一个领域,暂且不表)

4.这个人此刻处于什么状态?->pose estimation

5.这个人在当前一段时间里在做什么?->Sequence action recognition (水比较深,后续慢慢介绍)

五个层次由简单到复杂,4&5两个high level的视觉识别中,有一项很关键的先决技术-骨骼关键点提取,后者的检测的精度会直接影响姿态检测的准确度以及动作识别及预测的精度。下面就介绍下骨骼关键点提取及人体姿态估计。

什么是人体姿态估计?

人体姿态估计,pose estimation,就是通过将图片中已检测到的人体关键点正确的联系起来,从而估计人体姿态。

人体关键点通常对应人体上有一定自由度的关节,比如颈、肩、肘、腕、腰、膝、踝等,如下图。

通过对人体关键点在三维空间相对位置的计算,来估计人体当前的姿态。

进一步,增加时间序列,看一段时间范围内人体关键点的位置变化,可以更加准确的检测姿态,估计目标未来时刻姿态,以及做更抽象的人体行为分析,比如判断一个人是否在打电话等等。

姿态检测的挑战:

  1. 每张图片中包含的人的数量是未知的。

2. 人与人之间的相互作用是非常复杂的,比如接触、遮挡等,这使得联合各个肢体,即确定一个人有哪些部分变得困难。

3. 图像中人越多,计算复杂度越大(计算量与人的数量正相关),这使得real time变得困难。

OpenPose三大亮点

OpenPose是基于卷积神经网络和监督学习并以caffe为框架写成的开源库,可以实现人的面部表情、躯干和四肢甚至手指的跟踪,不仅适用于单人也适用于多人,同时具有较好的鲁棒性。可以称是世界上第一个基于深度学习的实时多人二维姿态估计,是人机交互上的一个里程碑,为机器理解人提供了一个高质量的信息维度。

其理论基础来自Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields ,是CVPR 2017的一篇论文,作者是来自CMU感知计算实验室的曹哲(http://people.eecs.berkeley.edu/~zhecao/#top),Tomas Simon,Shih-En Wei,Yaser Sheikh 。

主要流程

  1. 输入一幅图像,经过卷积网络提取特征,得到一组特征图,然后分成两个岔路,分别使用 CNN网络提取Part Confidence Maps 和 Part Affinity Fields;
  2. 得到这两个信息后,我们使用图论中的 Bipartite Matching(偶匹配) 求出Part Association,将同一个人的关节点连接起来,由于PAF自身的矢量性,使得生成的偶匹配很正确,最终合并为一个人的整体骨架;
  3. 最后基于PAFs求Multi-Person Parsing—>把Multi-person parsing问题转换成graphs问题—>Hungarian Algorithm(匈牙利算法)

(匈牙利算法是部图匹配最常见的算法,该算法的核心就是寻找增广路径,它是一种用增广路径求二分图最大匹配的算法。)

卷积网络

亮点1:PAF-Part Affinity Fields(本paper的核心贡献):

人体姿态检测,通常是top-down的思路,也就是先做行人检测,然后把每一个人分割出来,最后基于每一个独立个体,找出各自的手手脚脚(人体关键点)。这个办法有两个问题:

1.结果严重依赖第一步行人检测器的结果,如果人都没找到,就无从进行找手手脚脚这一步了。

2.计算时间和人数正相关,人越多越耗费时间。

OpenPose 使用了另一种思路,即bottom-up,先找出图中所有的手手脚脚,再用匹配的方法拼装成一个个人体骨架。这种办法有一个缺陷,就是没办法利用全局上下文的信息。

为了克服这个问题,本文想出了一个办法,就是PAF(Part Affinity Fields), 部分区域亲和。它负责在图像域编码着四肢位置和方向的2D矢量。同时,使用CMP(Part Detection Confidence Maps)标记每一个关键点的置信度(就是常说的“热图”)。通过两个分支,联合学习关键点位置和他们之间的联系。

同时推断这些自下而上的检测和关联的方式,利用贪婪分析算法(Greedy parsing Algorithm),能够对全局上下文进行足够的编码,获得高质量的结果,而只是消耗了一小部分计算成本。并行情况下基本达到实时,且耗时与图片中的人数无强关联。

亮点2: 高鲁棒性

这是CMU的研究成果。很多人好奇,为啥CMU的模型鲁棒性好,精度高?我觉得这主要归功于数据集规模大,质量好。

下图是CMU家的数据采集设备,一个封闭的大球,可以做到任意角度的人体数据采集。大球上面镶嵌了480 VGA cameras+31 HD cameras+10 Kinect Ⅱ Sensors+5 DLP Projectors. 并且,全部实现了硬件同步。

由于工作原因,笔者也接触过不少国内外的训练数据采集公司,但是这样的豪华配置,还是非常少见的。

实物长这样:

海量高质量的数据,使得仅仅基于2D图像就可以实现鲁棒性很好的人体姿态检测。

这充分说明了,数据为王的时代,数据多就是硬道理。

亮点3:终于将人体、人手、人脸的landmarks三元归一

以前,人体骨骼关节点是行为分析动作识别的人做,人脸landmark提取是人脸识别或者美颜算法开发团队做,手部关节点是手势识别人机交互团队在做,属于不同的细分方向。

CMU的团队,因为前期的人体骨骼关节点识别取得了不错的成果,有了更大的目标(野心),于是把人脸人手都整合了进来,做成了一个统一的graph,效果也还可以。face alignment和pose alignment串起来了,而且根据人体头部的刚体属性及四肢的非刚体特性设计了一套基于caffe的点估计与扩散模型,并建立树状决策加速,据此再加之3D背景分割技术。

当然,如果野心再大一点点,做一个结合了表情识别和手势识别的人体行为识别方案就更了不起了,比如人在打架的时候,脸部表情通常是紧绷或者愤怒的,手部通常会攥成拳头,这样,整合脸和手的识别结果,都整体复杂行为的分析和预测会有帮助。

多人70关键点人脸估计:

多人2*21关键点手势估计:

有什么短板?

耗显存

计算量本来就很大,为了达到实时的目的,使用了高并行的策略。基于cuda加速,所以非常吃显存,基本劝退显存低于4G的机器了(GTX 980ti+)。

时间分析(仅作参考):
<基于GTX-1080 GPU>
原始图像尺寸是1080×1920, 为了适应GPU memory,resize成了 368×654;

包含是19个人的视频检测是8.8 fps;

对于9个人, parsing耗时0.58 ms, CNN耗时99.6 ms。

特殊场景下检测效果差

比如人体姿势比较诡异的时候,如下图(曾经对这个场景产生过心理阴影)

非直立向上朝向的人

其他情况,诸如图像分辨率低、运动模糊、低亮度、检测目标密集、遮挡严重、不完整目标等,效果都不是很理想。但是,这是全天下图像检测算法都会犯的错。

完整视频测试

有个日本人做过一段印度舞蹈的骨骼提取,这里我做了一段国产的:

<芳华,群舞片段>

<叶问,我要打十个片段>

有什么应用场景(脑洞时间)?

--------------------------2018.6.15更新--------------------------------

抖音尬舞机:经评论区知友提醒,活捉一个已经上线的人体姿态估计应用:

这是脑洞照进现实的时刻~~

---------------------------------------------------------------------------

3D 个人健身教练:

体育类教学(包括上面提到的武术舞蹈教学):

尤其像高尔夫这种固定位置且非常强调姿势正确的运动,很适合用姿态检测技术来辅助训练和错误姿势矫正。

3D试衣:现在也有,但是加入实时姿态检测,可以做到人动衣动的效果。

游戏人物动作设计(精度在高些,有潜力取代动作捕捉那套昂贵的设备):

古画分析(美术学院教学辅助):

人体绘画教学(适用于初学者)

照相馆拍照姿势指南:

无意义的逗逼(抖x):

结语

效果无疑是很出众的。仅仅基于2D图像,廉价的普通摄像头,就可以实现多人的、实时的、鲁棒性很好的人体骨骼关节点提取与姿态检测。

但是问题也很明显。如果是离线检测的话,这个对终端的硬件配置是有很高要求的。一台监控设备,为了骨骼提取,配置一块几千大洋的NV独显,这产品基本被判死刑了。Intel的RealSense D400和Microsoft的kinect2等3D摄像头都可以实现实时人体骨骼提取,但是价格前者1000大洋,后者1500大洋,极具竞争力。

给创业者一点思路:如果把这套模型移植到ASIC或者FPGA上,速度和成本得到很好的平衡,会有一些机会。

机器会越来越了解我们,越来越熟悉我们的体态特征和行为方式,总有一天,人类在机器面前,如同naked,再无秘密可言。

目前看来,这是不可逆的趋势。

相关链接:

【1】论文:https://arxiv.org/pdf/1611.08050.pdf

【2】姿态检测视频制作源码:muyiguangda/caffe_rtpose

【3】开头视频:Changing Batteries 更换电池「中字」

【4】CMU训练数据集: CMU Panoptic Dataset

【4】匈牙利算法: Hungarian algorithm

OpenPose:实时多人2D姿态估计相关推荐

  1. 实时多人2D姿态估计

    前言 OpenPose是基于卷积神经网络和监督学习并以caffe为框架写成的开源库,可以实现人的面部表情.躯干和四肢甚至手指的跟踪,不仅适用于单人也适用于多人,同时具有较好的鲁棒性.可以称是世界上第一 ...

  2. tensorflow 多人_使用TensorFlow2.x进行实时多人2D姿势估计

    tensorflow 多人 介绍 (Introduction) As described by Zhe Cao in his 2017 Paper, Realtime multi-person 2D ...

  3. Openpose+Tensorflow 这样实现人体姿态估计 | 代码干货

    作者 | 李秋键 出品 | AI科技大本营(ID:rgznai100) 人体姿态估计指从单个 RGB 图像中精确地估计出人体的位置以及检测骨骼关键点的位置.人体姿态估计是计算机视觉领域的研究热点,是诸 ...

  4. Paperreading 之二 多人人体姿态估计COCO2017冠军—CPN(含TF和torch实现)

    版权声明:遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/baolinq/article/details/839934 ...

  5. 无需人脸检测,实时3维人脸姿态估计img2pose 2020

    提出了一种实时的6自由度3D人脸姿态估计方法,其不依赖于人脸检测和关键点对齐.我们观察到直接估计6自由度刚体变换是一个比在3D人脸对齐中广泛使用的关键点检测更简单的问题.基于此我们做出了一下几个贡献( ...

  6. 2D姿态估计regression-based之RLE损失函数

    参考:镜子,Indigo6 使用特定损失函数的前提是我们对标签的分布进行了某种假设,在这种假设的前提下通过极大似然法推出所有样本构成的极大似然公式,然后再使用凸优化的方法比如常见的梯度下降法进行求解. ...

  7. Human Pose Estimation姿态估计调研

    介绍 姿态估计的目标是在RGB图像或视频中描绘出人体的形状,这是一种多方面任务,其中包含了目标检测.姿态估计.分割等等.有些需要在非水平表面进行定位的应用可能也会用到姿态估计,例如图形.增强现实或者人 ...

  8. CV之PoseEstimation:Pose Estimation人体姿态估计(AI识人,OpenPose+DeepCut+RMPE+Mask RCNN)的简介、案例应用之详细攻略

    CV之PoseEstimation:Pose Estimation人体姿态估计(AI识人,OpenPose+DeepCut+RMPE+Mask RCNN)的简介.案例应用之详细攻略 目录 Pose E ...

  9. 实时人体姿态估计!Efficient-HRNet:更快!更强!!

    作者 | 小书童 编辑 | 集智书童 点击下方卡片,关注"自动驾驶之心"公众号 ADAS巨卷干货,即可获取 点击进入→自动驾驶之心[姿态估计]技术交流群 许多新兴智能物联网应用对轻 ...

  10. 一文概览2D人体姿态估计

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 来自 | 知乎    作者 | 谢一宾 链接 | https:// ...

最新文章

  1. Kubernetes集群部署(yum部署)
  2. linux版_巧用linux版powershell,管理linux下的docker
  3. 转载---sharepoint相关资源
  4. 重构碎片化知识_知识碎片化时代,如何妙用思维导图,提高你的学习效率(含福利)...
  5. 你可以通过这13种方法帮助Linux发展
  6. 查看SQL SERVER 加密存储过程,函数,触发器,视图
  7. sonar 规则之漏洞类型
  8. Java第五次作业--面向对象高级特性(抽象类和接口)
  9. 企业实战(Jenkins+GitLab+SonarQube)_07_Jenkins 安全设置
  10. 腾讯地图api php经纬度转换地址,腾讯地图经纬度转换为百度地图经纬度PHP类
  11. 事件声音和提示 注册表全攻略
  12. 端口扫描命令nmap详解
  13. Excel常用的功能
  14. 正则表达式系列之 —— 模式(Patterns)和修饰符(flags)
  15. EXCEL用今天日期减去之前的日期得到结果
  16. to_date() 整理
  17. 浏览器无法显示网页解决方法
  18. CREATE PROCEDURE
  19. 怎么去视频水印?一键去除视频水印
  20. Java Swing JButton:按钮组件

热门文章

  1. vue 连接高拍仪实现pc 端拍照上传功能
  2. 一文打尽PHP代码加密方式
  3. snipaste如何滚动截图_试用了20个截图工具,我写下这份超全的软件指南。?
  4. amazeui学习笔记--js插件(UI增强)--警告框Alert
  5. 世界头号黑客米特尼克自传
  6. 洛雪音乐助手lx music desktop 1.2.2正式版
  7. Photoshop 2023(版本24.0)新增功能和软件下载
  8. oracle价格的数据类型,oracle数据库中的number类型
  9. 一个便捷的在线取色器工具
  10. 华为模拟器ensp下载地址