OpenPose结合BP网络的行为检测方法
2020-08-04周德良北京中电易达科技有限公司北京100190
周德良(北京中电易达科技有限公司,北京 100190)
随着人体行为识别技术和计算机视觉的快速发展,行为检测和识别[1-3]在人机交互、视频监控和基于内容的视频检索等领域变得越来越重要,已引起了学术界和工业界的广泛关注,并成为计算机视觉领域的重要研究课题。行为检测主要是对视频或视频流中人体行为模式进行分析与识别,并分析判断是否发生了指定的目标行为,比如站立、坐着、躺卧等,当检测到指定目标行为后则执行后续相关操作。传统的行为检测方法主要包括模板匹配法、状态空间法以及基于模型[4]的方法,这些方法普遍存在识别准确率低、识别可靠性差等问题,难以满足对海量图片进行准确、高效的行为检测的需求。本文采用“姿态估计”与“分类网络”相结合的方法,即利用OpenPose[5-8]与BP分类网络[9-13]相结合的方法对视频或视频流中的目标行为进行识别:首先,基于 OpenPose提取图像中的人体骨架节点坐标数据;再次,将骨架节点坐标数据作为 BP 分类网络的输入数据进行迭代训练与学习;最后,利用分类检测模型输出行为检测结果。
1 BP神经网络
BP神经网络[11-13]是误差反向传播神经网络的简称,是一种按照误差反向传播算法训练的多层前馈神经网络,其以网络实际输出值与期望输出值之间的误差均方差为目标函数,利用梯度下降法使目标函数最小以实现网络最优。BP神经网络的结构如图1所示,包括输入层、隐藏层、输出层[14],其中隐藏层可以包括一层或多层,BP神经网络不存在层与层之间的局部连接,而是全部保持全连接状态。BP神经网络具有很强的非线性映射能力,可以对任一种非线性输入输出关系进行逼近,在解决一些非线性问题方面非常突出,已广泛应用在分类识别、模式识别、函数逼近、回归预测等领域。
图1 BP神经网络拓扑结构图Fig.1 Topology of BP neural network
BP神经网络的训练流程:输入信号经输入层输入,通过隐含层的复杂计算由输出层得到网络输出,以网络输出与期望输出之间的误差均方差为目标函数,若目标函数不满足期望要求,则将误差信号通过误差反向传播算法,由输出层向输入层逐层反传并分摊给各层所有单元,并根据各单元误差信号计算梯度来更新各单元权值及相关参数,参数更新后输入信号再次由输入层输入网络,重复上述过程,直到目标函数满足期望要求,或迭代过程达到预先设定的训练次数为止。
2 OpenPose
OpenPose算法[5-8]是由美国卡耐基梅隆大学(CMU)基于卷积神经网络[15-16]和监督学习并以caffe[17-18]为框架开发的人体姿态估计算法,该算法是自下而上的估计算法,即先得到关节点位置再获得人体骨架。OpenPose是第一个用于多人二维姿态检测的开源实时系统,它可以获得人体骨架节点并将它们很好地关联起来,不会受到画面中人数、人的位置与比例、以及人与人间肢体互动的影响,同时,画面中人数增加不会影响OpenPose的检测实时性。OpenPose可以实现二维多人关键点实时识别,包括18个身体关键点的识别、70个面部关键点的识别、以及42个左右手关键点的识别,图2所示为18个身体关键点的识别效果图。因此,OpenPose可以实现面部表情、躯干、四肢及手指的姿态估计,适用于单人和多人实时检测,且具有很好的鲁棒性。
图2 身体关键点的识别效果图Fig.2 Recognition effect of body key points
OpenPose的主体网络结构采用VGGNet网络[19]作为骨架,然后采用两个分支网络分别回归关节点位置 S 和像素点在骨架中的走向 L;两个分支网络的结构是多阶段迭代的,每个阶段计算一次损失函数,然后将L、S以及通过VGGNet提取的原始图像特征连结后继续下一阶段的训练。图3所示为OpenPose的网络结构图,其中 F 是通过 VGGNet 提取出的原始图像的特征,下标 1 和 2 分别表示多阶段迭代中的第一阶段和第二阶段。
图3 OpenPose网络结构图Fig.3 OpenPose network architecture
3 整体行为分析
3.1 数据采集与处理
本文共采集站立、坐着、躺着共3类整体行为图片,每类行为图片均利用usb摄像头采集1 250张,其中1 000张用于网络训练,余下250张用于网络实际测试。每类行为图片均利用摄像头从正面进行采集,且采集过程中四肢、躯干保持自然状态,无抬腿、摸头、倾斜等有意状态。利用OpenPose 对上述3类行为图片中人体骨架节点的坐标位置信息进行提取,由此可得到躯干、四肢、头部等部位共18个骨架节点(包括鼻子、脖子、右肩、右肘、右腕、左肩、左肘、左腕、右髋、右膝、右踝、左髋、左膝、左踝、右眼、左眼、右耳、左耳)的位置信息,并保存在json文件内。
3.2 特征提取与学习
站立、坐着、躺着这3类整体行为主要与左右臂、左右腿和脖子共13个骨架节点有关,因此仅从json文件内提取这13个骨架节点的坐标位置信息作为BP网络的输入数据进行迭代训练与学习,然后利用训练所得模型对实际行为数据进行检测,从而得到最终的结果分类与输出,具体流程如图4所示。
图4 算法流程图Fig.4 Algorithm flow chart
13个骨架节点坐标记为(P1,P2,...,P13),将其展成一个骨架向量(Px1,Py1,Px2,Py2,...,Px13,Py13)作为 BP 神经网络的输入。输入数据既包含行为数据的点特征,同时包含点与点之间的线特征,以及线与线之间的面特征,这些特征通过BP分类网络进行提取与学习。本文设计的BP分类网络共有3层,即一个输入层、一个隐藏层和一个输出层,其中输入层输入训练数据,其节点数为26,由输入数据包含的元素个数决定,代表输入数据的26个特征;隐藏层迭代学习输入数据的二维结构特征,其节点数为130,由于其无相应理论指导,故由反复试验确定;输出层输出学习分类结果,其节点数为3,由结果类别个数决定,代表输出数据的3个特征,具体网络参数见表1。
表1 参数选取Tab.1 Selection of parameters
3.3 结果与分析
利用BP神经网络对3类行为数据进行50 000次迭代训练,得到的检测模型性能参数如表2所示,模型训练准确率达到了100%,模型网络损失仅为0.091,其中训练模型的准确率在迭代2 000次后就迅速趋于100%,此后随着迭代次数增加保持100%的准确率不变;模型训练损失的曲线变化如图5所示,训练初始阶段网络损失为400左右,在3 000次迭代训练后网络损失迅速下降,此后随着迭代训练次数的增加,网络损失最终趋于0。
图5 网络损失曲线Fig.5 Network loss curve
表2 检测模型性能参数Tab.2 Testing model performance parameters
利用检测模型对每类250个共计750个行为数据进行实际测试,得到各个类别的检测准确率均达到100%,模型总准确率亦为100%。上述测试结果表明:
(1)利用OpenPose与BP 分类网络相结合的方法,可以实现对不同整体行为准确、高效的分类检测。
(2)将人体行为转换为二维坐标位置数据,即将人体行为二维数据化,可以将不同整体行为的表现特征以二维数据化的形式重新表现出来,这种表现形式不仅使行为特征更加量化具体,还使行为特征的训练学习变得更加简单有效,从而充分提高了训练模型的准确性和收敛速率。
(3)待检测行为的二维数据化结合BP 分类网络具有很强的非线性映射能力,使行为数据的迭代训练与学习变得更加快速、准确、有效,进而保证了良好的行为检测效果。
OpenPose与BP分类网络相结合的方法,可以对不同整体行为进行行之有效的检测。但是,如果将躯干整体拆分为一个个局部躯干,对于这些局部躯干的局部行为,上述方法又是否能达到同样良好的检测效果?针对这一问题,接下来将检测人体的局部行为,分析讨论OpenPose与BP分类网络相结合的方法对人体局部行为的分类检测性能。
4 局部行为分析
4.1 数据处理与训练
共采集左臂平举、右臂平举、双臂平举共3类局部行为图片,每类行为图片均利用usb摄像头采集1 250张,其中1 000张用于网络训练,余下250张用于网络实际测试。每类行为图片均利用摄像头从正面进行采集,且采集过程中使单臂平举的另一臂保持自然状态。利用OpenPose对上述3类行为图片中人体骨架节点的坐标位置信息进行提取,并将得到的躯干、四肢、头部等部位18个骨架节点的位置坐标信息保存在json文件内。
4.2 特征提取与学习
左臂平举、右臂平举、双臂平举这3类局部行为主要与左右臂共6个骨架节点有关,因此仅从json文件内提取这6个骨架节点的位置坐标数据作为网络的输入数据进行迭代训练与学习,然后利用训练所得模型对实际行为图片进行检测,从而得到最终的结果分类与输出,其具体流程与图4所示相同。
6个骨架节点坐标记为(P1,P2,...,P6),将其展成一个骨架向量(Px1,Py1,Px2,Py2,...,Px6,Py6)作为 BP 神经网络的输入。输入数据不仅包含行为数据的点特征,同时包含点与点之间的线特征,以及线与线之间的面特征,这些特征通过BP分类网络进行提取与学习。特征学习所使用的BP分类网络共有3层,即一个输入层、一个隐藏层和一个输出层,其中输入层的节点数为12个,隐藏层节点数为130个,输出层的节点数为3个,其余与表1相同。
4.3 结果与分析
利用BP神经网络对3类行为数据进行50 000次迭代训练,得到的检测模型性能参数如表3所示,模型训练准确率达到了100%,模型训练损失小于10-6,其中训练模型的准确率在迭代1 000次后就迅速趋于100%,此后随着迭代次数增加保持100%的准确率不变;模型训练损失的曲线变化如图6所示,训练初始阶段网络损失为240左右,在2 000次迭代训练后网络损失迅速下降,此后随着迭代训练次数的增加,网络损失最终趋于0。
图6 网络损失曲线Fig.6 Network loss curve
表3 检测模型性能参数Tab.3 Testing model performance parameters
利用检测模型对每类250个共计750个行为数据进行实际测试,得到各个类别的检测准确率均为100%,模型总准确率亦为100%。上述测试结果表明:
(1)OpenPose与BP分类网络相结合的方法,针对局部行为和整体行为均可达到准确、快速、高效的分类检测效果,该方法具有较好的行为检测普适性。
(2)不论是局部行为,还是整体行为,行为的二维数据化都是行之有效的,它不会因为行为的整体性或局部性之分,导致行为特征的二维数据化表现程度出现偏好性或差异性。
4.4 讨论
利用OpenPose 将人体行为转化为二维坐标位置数据,再利用BP分类网络对该数据进行迭代训练与学习,即OpenPose与BP分类网络相结合的行为检测方法,具有较好的行为检测普适性,其不仅可以对躯干整体产生的整体行为进行准确、快速、有效的分类检测,对局部躯干产生的局部行为同样可以达到很好的分类检测效果。OpenPose与BP分类相结合的检测方法,收敛速度快、训练耗时短,相对于传统的行为检测方法大幅提高了特征学习效率。不仅如此,该方法还解决了传统行为检测方法准确率低、效率低、可靠性差等问题,可以在海量行为图片的分类任务中实现准确、高效、可靠的分类检测效果。
除18个身体关键点的识别检测外,对于面部70个关键点、以及左右手42个关键点的识别检测,使用OpenPose与BP分类网络相结合的检测方法,只要合理地设计网络及其参数,同样可以实现宏观与细节的普适检测,并具有良好的检测效果。这样,无论是整体面部表情、多手指姿态的识别,还是面部表情一个细节、单手指姿态的识别,都可以实现准确、高效、可靠的识别检测效果。
5 结论
(1)对每类250个共计750个行为数据进行实际测试发现,无论是整体行为分类检测,还是局部行为分类检测,OpenPose与BP分类网络相结合的方法均可以实现各类行为检测准确率达100%,总体检测准确率亦达到100%。
(2)OpenPose与BP分类网络相结合的行为检测方法,具有较好的行为检测普适性,其不仅可以对躯干整体产生的整体行为进行准确、快速、有效的分类检测,对局部躯干产生的局部行为同样可以达到很好的分类检测效果。
(3)OpenPose与BP分类网络相结合的方法收敛速度快、训练耗时短,且克服了传统行为检测方法效率低、准确率低、可靠性差等不足,能够对大批量行为图片进行更高效、更准确、更快速的行为分类检测。