盛洋,王健庆
(浙江中医药大学 医学技术与信息工程学院,浙江 杭州 310053)
伴随着计算机视觉技术及其相关硬件设施的高速发展,人体姿态识别技术已经逐步应用于社会的各个领域之中,并且发挥着重要的、巨大的经济价值和社会价值。以计算机视觉技术为基础的传统的人体姿态识别技术之所以需要大量经验丰富的研究人员,是因为传统方法工作量大,协调性差且精准度低。因此,构建一种响应程度高、精准度高且简单化的人体姿态识别系统尤为重要。
计算机视觉技术又被称为机器视觉技术(Machine Vision Technology, MVT),是以计算机为载体,通过对人类的视觉功能进行模拟提取图像、视频中的数据信息,再经过数据化处理后实现检测、控制等功能。该技术已经被应用于视频监控、人工智能交互、图像处理等诸多科技领域,并且作为科学技术领域的一个重要的交叉学科不断蓬勃发展。
图像分类、目标检测、图像语义与分割识别以及图像的目标跟踪分析这四大类是目前计算机视觉领域内的四个重点研究发展方向。
虽然计算机视觉中的一个基础问题是人体姿态识别,但是这个问题目前可以具体地划分为四个不同的方面,分别是单人姿态估计(Single-Person Skeleton Estimation)、多人姿态估计(Multi-person Pose Estimation)、人体姿态跟踪(Video Pose Tracking)、3D人体姿态估计(3D Skeleton Estimation)。
其中单人姿态识别和多人姿态估计是为了获取图像中人体关键点的二维坐标,人体姿态跟踪针对视频数据,3D人体姿态估计是用来估计人体在图像或视频的三维坐标。本文主要对单人姿态估计进行研究。
传统方式和基于深度学习的方式是目前主流的人体姿态识别算法。
传统的识别方法是一种根据图形结构和可变形构件模型设计二维人体部件探测器,通过图形模型建立各个构件之间的连通性,并且在人体运动学的约束条件下,通过优化图形结构模型来估计人体的姿态。在这种传统方法的理论基础上,通常只能通过图像与身体位置曲线或关节曲线之间的非线性映射模型来实现人体姿势的识别估计。
基于深度学习的人体姿态估计方法主要是利用卷积神经网络(CNN)算法来定量提取图像中的人体姿态特征。与传统的人工设计特征方法相比,CNN不仅需要具有足够丰富且完整的语义信息特征,此外,还需要能够获得具有不同姿势感觉场的每个人类节点特征的特征向量,并通过完整上下文语义类描述每个节点的特征,摆脱了对构件模型结构设计的依赖,进而直接使用坐标回归和特征向量模型来全面充分地反映当前人类对姿态的感知,从而将姿态信息直接应用到各种特定且具体场景的开发实践中。
Openpose算法是利用神经网络算法中自下而上的思想,首先,利用算法检测提取出图像场景中几乎所有相关的人体关键点数据,然后利用聚类算法对属于同一人体场景的所有关键点信息进行聚类,并将其添加到相应场景的图像中,如图1所示。
图1 自下而上算法原理图
首先对每一张图像进行图像预处理,并通过VGGNet模型实现神经网络预测,然后采用Openpose算法获取人体关键点位置和置信度,最后根据PAF和二分图匹配算法进行关节拼接,实现了人体姿态识别系统。算法流程如图2所示。
图2 算法实现总流程图
图片的清晰度、明亮度等因素可能会影响到人体姿态识别的准确度,导致无法获取人体关键点,判断图像中的人体姿态。因此需要对输入的图片进行数据预处理。本文采用的数据预处理技术是双线性插值。本文中图像的预处理实现可以通过Python语言将双线性插值的计算公式代码化,获得指定大小的图片尺寸(550×600)。
2.3.1 关节点热力图
关节点热力图测量是为了测量图像系统中位于某个特定位置上的每个关节点之间的相对置信度。如图3所示,对于图像系统中存在的任意一个人像系统来说,某一种类型图像的任何关节点都存在这样的一个峰值,但只有一个峰值;对不止一个人来说,有多个峰值。
图3 关节点热力图
2.3.2 关节点亲和区域
关节点亲和区域通常可以理解为两个或相邻两个关节点之间联系的亲密程度。如图4所示,由一系列的单位向量所共同组成的区域是关节点亲和区域。
图4 关节点亲和区域示意图
2.3.3 卷积神经网络
VGGNet网络模型是在2014年被研发设计出的一种深度卷积神经网络。为了能够获得另一种更好的特征信息和提取和存储信息能力,它探索了卷积神经网络的深度和其性能之间的关系,成功地构造成了16~19层深的卷积神经网络。本文采用VGGNet-19模型进行图像特征提取,并且用符号F表示图像特征,如图5所示。
图5 神经网络的VGGNet-19模型网络结构
如图6所示,关节点检测分支一共输出19个特征图,分别代表18个人体关键点特征图和背景图。将从特征图中提取的人体关节点根据算法对应的连接边缘作为人体肢体,形成图像中人体的骨骼图。关节点上的亲和区域分支输出38个特征图,代表联系着亲和场区域分支(Part Affinity Fileds, PAF),即关节点与相邻的关节点之间的联系。
图6 神经网络结构预测图
本文采用MS COCO 2017数据集进行模型训练,该数据集身体部位有17个,Openpose算法中添加了一个颈部这个部位。因此提取出的数据是被分成18组的,分别代表18个关节,每组涵盖了当前图像中人体关键点的坐标位置和置信度。如图7所示是MS COCO中的人体关键点。并提取出当前关节的位置和所对应的置信度。如表1所示是通过Openpose算法得到单人的关键点位置和置信度。
图7 MS COCO中的人体关键点利用关节点检测分支中的18个特征图提取人体关键点,
表1 Openpose算法得到单人的关键点位置和置信度
其中,人体关键点距离原点的水平像素距离用表示,人体关键点距离原点的垂直像素距离用表示。
将每个关键点都作为支撑一个树干的一个支点,相邻四个关键点之间的一个连接线就作为一个树干,而整个人的骨架就是一棵树。
在匹配的整个计算过程中,每次匹配只需要考虑到两个节点相邻位置的关键点之间的连接,然后将每个匹配问题分解成为一组二分图匹配的子问题,并由此可以完全独立地去确定另外一个相邻的树骨架节点之间的连接关系的匹配(每次仅仅只考虑一个肢体的连接),最后就可以把整个人都连起来了。
以下是具体的算法步骤:人体的各个关键点之间存在许多种可能的连接,我们可以通过积分赋予每一个可能存在的连接一个分数,即PAF得分:
其中,两个为为两个人体关键点,并且方向单位化。为两个人体关键点连线上的点,如图8所示。
图8 亲和场二维向量图
对二分图可能的连接进行加权,计算出可能的最大匹配结果:
其中为E为二分图优化之后肢体的权重,应取其中总权重之和最大的作为结果;为Z为所有骨点连接集合的的子集。约束条件为:
该条件表示一段肢体最多只存在一条连接边。
在我们理解了如何快速计算求出人体中两个或两个以上人体关键点组合匹配的最小权值原理之后,可对二分图算法进行简化。简单来说,就是将原问题看作由若干个二分图最大权匹配问题组成,进而求解后将每条树边所对应的匹配集合合并在一起,即可得到人体骨架,如图9所示。
图9 二分图算法优化原理图
本文中在使用的MS COCO 2017数据集中对训练集和测试集取样,总和为5 630组,划分比例为训练集:测试集=4:1,得到训练集4 504组,测试集1 126组测试。最终在训练集上得到混淆矩阵如表2所示。
表2 混淆矩阵
在测试集上得到如图10所示的人体姿态识别结果图。
图10 测试集示意图
根据混淆矩阵和指标公式可以得到准确率为96.31%,灵敏度为97.75%,特效度为84.16%。由此可得出该人体姿态识别模型对大部分的人体姿态辨识度较高,对小部分的人体姿态无法识别出来。具体分析得出有以下几点原因:
(1)MS COCO 2017数据集中的数据是随机取样的,可能存在样本种类的分布不均衡问题,使模型训练结果存在偶然性和不确定性。
(2)存在一些特殊的训练样本,使模型无法起到提取人体关键点的功能或缺少部分人体关键点是关节拼接混乱,如图11所示。
图11 错误识别示意图
本文所研究的静态图像人体姿态的识别系统是采用Openpose算法实现的,并通过使用PyQt5语言实现了GUI界面的展示,本文测试场景选在某小区内,检测出小区居住人员活动时的人体姿态。系统界面和实测结果如图12所示。
图12 人体姿态识别成品展示图
本文在基于计算机视觉的人体姿态识别研究上,通过VGGNet模型实现神经网络预测,然后利用Openpose算法获取人体关键点的位置,最后根据PAF和二分图算法实现了人体姿态识别系统。
在最终系统的实施中,本文实现的系统完成度较高,后续工作中可继续优化图片预处理技术,增加人体姿态分类算法,并进行相应数据训练,从而提高算法效率,并能得到更好的应用效果。