人体姿态估计是对人体的姿态(关键点,比如头,左手,右脚等)的位置估计,是计算机视觉领域中一个有趣且实用的问题。该领域中目前又分成单人姿态估计(Single-Person Skeleton Estimation)、多人姿态估计 (Multi-person Pose Estimation)与3D人体姿态估计 (3D Skeleton Estimation)。本文主要介绍前两种姿态估计方法。
1、人体姿态估计的基本思路
人体姿态估计问题可以被分解成两个子问题:首先,就是对人体部位的关键点进行识别与定位,一般来说,识别到的关键点为17个(如图1);其次,就是对这些关键点进行连接,这样才能将人体姿态完整表示。
图1 人体关键点示意图
对于单人姿态估计,对关键点的连接是有迹可循的,只需要根据关键点的部位进行顺序连接即可,例如左耳-左眼-鼻子-右眼-右耳……。所以,单人姿态估计重点考虑的问题在于如何准确地识别人体关键点的位置,其中代表性的算法有CPM(Convolutional Pose Machine)与Stacked Hourglass Networks。
对于多人姿态估计,问题变得更加复杂一些,因为图像中不再是只有一个人,那么对于某种关键部位,其检测出的目标也不再是唯一的,所以并不能简单的根据关键点顺序进行连接。为了解决这个问题,多人姿态估计又被分成两种思路:自顶向下(Top-Down)的方法与自底向上(Bottom-Up)的方法。其中自顶向下的方法思路是先利用目标检测算法(如YOLO)检测出每一个人的bounding box,然后在每一个框中用单人姿态估计算法进行预测,其中AlphaPose最为知名;而自底向下的算法则是先将图中所有的关键点都检测出来,再通过深度学习算法结合传统图算法解决各个关键点之间的匹配问题,其中最具代表性的是OpenPose。
2、单人姿态估计方法
单人姿态估计主要是利用神经网络模块堆叠利用不同部位之间的相关性对检测出的关键点进行不断修正,并通过中间监督的形式将中间层的结果加入损失函数中,保证其可以接受更多的监督信息。
其中2016 年提出的 CPM 方法具有很强的鲁棒性,CPM 的贡献在于使用顺序化的卷积架构来表达空间信息和纹理信息。算法在每一个尺度下,计算各个部位的响应图,对于每个部位,累加所有尺度的响应图,得到总响应图,在每个部位的总响应图上,找出相应最大的点,预测为该部位的位置。作者用各部位响应图来表达各部位之间的空间约束,模型能有效解决遮挡问题。可以从图2中看出,一开始stage 1中手肘的位置被预测错误,但是随着其他的部位同时被预测,互相作用,最初的手肘位置在stage2之后渐渐被修正过来了。
图2 CPM关键点检测
而Stacked Hourglass Networks提出了一种沙漏型的网络单元,并通过不断堆叠这样的网络结构进行姿态估计。该神经网络单元首先进行卷积处理,并进行下采样操作,获得一些分辨率较低的特征,从而使计算复杂度降低。为了使图像特征的分辨率提高,紧接着进行上采样。上采样操作使得图像的分辨率提高,同时更有能力预测物体的准确位置。其神经网络单元结构如图3所示,通过这样的处理,相较于其他网络,该网络结构能够使同一个神经元感知更多的上下文信息,其在速度方面相较于CPM算法更有优势。
图3 Hourglass网络单元结构图
单人姿态估计在实际应用场景中有很多限制,因为真实世界的图像往往会在一张图像上出现多人,但是单人估计算法为姿态估计领域奠定了基础,有效解决了关键点的检测问题。多人姿态估计方法中也充分利用了这些思想。
3、多人姿态估计
多人姿态估计不再有人数的限制,更加接近真实场景,是目前姿态估计领域中应用场景最广泛的算法,本文着重介绍来自上海交通大学的AlphaPose与卡内基梅隆大学的OpenPose,这两种算法目前分别代表了自顶向下方法与自底向上方法中目前的State-Of-The-Art。
Alphapose的最大贡献在于对传统Top-Down方法中对检测框的过度敏感问题给出了较好解决方案,如图4所示:通过SSTN将空间转换网络(Spatial Transformer Network)与空间反转换网络(Spatial De-Transformer Network)分别夹在单人姿态估计(SPPE)模块的左右两侧;同时利用非最大化抑制解决了检测框冗余问题。在其SSTN网络结构的内部,创新性的加入了与训练过程并行的SPPE模块,该模块不经过SDTN直接传入loss,作为中间监督信息加入STN中,可以使STN聚焦在正确的中心位置并提取出高质量的区域位置。
图4 SSTN网络结构
Alphapose目前在coco数据集上以23FPS的速度获得了极高的准确率,目前被广泛应用到工程中。
而OpenPose则是采用了另一种思路,先通过上文讲到的CPM算法对图片中的所有关键点都进行检测,然后引入局部亲和场(Part Affinity Fields)概念,不仅对于关键点位置进行预测,还对该关键点的连接方向进行预测,利用这种信息,可以解决单人姿态估计中多个相同类型关键点(例如:左手肘、头部等)互相匹配的问题。并且,该模型还利用匈牙利算法对图匹配问题做简化,将全连通图上求解整数线性规划问题利用贪心算法求解,将这个NP-hard问题转化成了多个局部最优问题。
在网络结构上,OpenPose利用两路的CPM算法分别对关键点与局部亲和场进行预测,并且同AlphaPose一样,将中间的feature map结果也加入了loss中,进行中间监督,如图5所示。
图5 OpenPose网络结构
OpenPose具有不随着图像中人数增加而运算复杂度增加的特点,在大规模人群中的表现更佳,目前正常的速度是10+FPS,经过优化后可以将速度提升至20+FPS。
4、网络加速推断方法
在姿态估计领域,精度和推断速度往往是同等重要的,这是因为在真实的业务场景中,经常会碰到实时预测或者根据人体动作作出决策的场景,这就需要对算法的速度有较高的要求。目前来说,姿态估计的网络加速推断方法思路为:
(1)通过缩减算法的骨干网络(backbone)进行结构上的缩减,将图像的预处理网络更改为Mobile Net等更小的网络。
(2)通过TensorRT等工具对网络参数的精度进行降低,例如将模型参数默认的Float64精度转化成Float32或者INT8精度等低精度模型。
(3)在源码层面作出优化,将底层算法利用异步、多线程方法进行处理,充分利用算力资源进行推断。
5、应用场景与展望
目前的人体姿态检测算法被广泛应用在人机交互、自动驾驶、智能安防等领域。例如在人机交互上,可以通过人体的手势对无人机等智能设备进行操作;在自动驾驶系统中,可以通过判断行人的姿态来预测潜在的危险,从而为系统提供决策支持;而在智能安防中,通过监控人体姿态判断监控中目标人群的危险动作,从而及时进行预警。当然,人体姿态估计目前依然有一些待解决问题,例如遮挡、精确的三维姿态估计以及大规模人群检测等,相信通过算法的不断进步,姿态识别可以被更多的为人类生活提供便利。
[1]Max J, Karen S, Andrew Z. Spatial Transformer Networks. arXiv:1506.02025, 2015.
[2] Shih-En W, Varun R, Takeo K, Yaser S. Convolutional Pose Machines. arXiv:1602.00134, 2016.
[3] Zhe C, Tomas S, Shih-En W, Yaser S. Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields. arXiv:1611.08050, 2016.
[4] Hao-Shu F, Shuqin X, Yu-Wing T, Cewu L. RMPE: Regional Multi-person Pose Estimation. arXiv:1612.00137, 2016.
版权所有 ©2021. 上海计算机软件技术开发中心 All Rights Reserved 沪公网安备 31011202012393号,沪ICP备14033306号-25