张 艳,肖文琛,张 博
(北华航天工业学院 计算机学院,河北 廊坊 065000)
人体动作识别是计算机视觉领域中一项复杂的任务,在智慧医疗、运动赛事、监控、人机交互等方面有着重要的社会应用价值[1]。人体动作识别根据数据源的不同可以分为基于RGB图像[2]的人体动作识别算法和基于骨架信息[3]的人体动作识别算法。基于RGB图像的人体动作识别算法鲁棒性差且易受外界环境的影响。相反,基于骨架信息的人体动作识别算法具有泛化能力强、不易受外界环境影响等优点。根据特征提取方式的不同,人体动作识别可以分为基于深度学习的人体动作识别算法和基于传统的机器学习的人体动作识别算法。基于深度学习的人体动作识别算法泛化能力相较于传统的机器学习的人体动作识别算法有了很大的提高。基于深度学习的人体动作识别算法可以分为基于CNN(Convolutional Neural Networks)、基于RNN(Recurrent Neural Network)的人体动作识别算法[4]。比如Chen等人[5]提出了一种基于序列的视点不变的方法来进行特征编码,并且将特征编码后的RGB图像通过多流CNN进行识别。文献[6]提出了基于注意力机制的RNN网络,分别赋予了不同帧之间骨骼节点不同的权重,进一步提高了动作的识别率。上述方法一定程度上提高了识别率,但是上述方法都是将骨架数据表示二维数据[7],不能完全表达骨骼关节点的时空信息。因此,从以上背景出发,该文提出了一种基于注意力机制的AGCNS(Attention Graph Convolutional Networks)与CNN相结合的双流人体动作识别算法。主要创新点如下:提出了基于注意力机制的图卷积网络(AGCNS),通过AGCNS提取骨架信息的时空特征;结合骨架运动图进行时空特征的补充,提出了基于双流骨架信息的人体动作识别方法。
随着微软Kinect度相机的问世和OpenPose[8]算法的出现,提取人体动作的骨架信息不再是一件困难的事情。2012年2月,微软正式发布了适合Windows平台的Kinect版本,并提供了Kinect开发包。通过Kinect开发包,配备Kinect相机可以提取到人体运动的三维骨架信息,这为基于三维骨架信息的动作识别提供了数据源,基于三维骨架信息的人体动作识别得到了进一步发展。OpenPose人体姿态识别算法是一种有效检测图像中多人二维姿势的方法,是由美国卡耐基梅隆大学开发的开源库,可以实现实时的人体动作姿态的估计。该方法在首届COCO2016关键点挑战赛中排名第一,在性能和效率方面都大大超过了之前的最新结果,具有极好的鲁棒性。通过OpenPose进行姿态估计并提取骨架信息,为基于人体骨架信息动作识别奠定了基础。
神经网络是由大量人工神经元构成的、按照不同连接方式构建的网络。而卷积神经网络是神经网络中一种应用比较广泛的网络,主要应用在图像识别领域。卷积神经网络的结构主要可以分为三层:卷积层、池化层、全连接层。其中卷积层的作用是提取特征;池化层可以将无用的信息过滤掉,同时可以保留最显著的特征,这样大大减少了计算的复杂性;全连接层是一个完全连接的神经网络,主要作用是分类。
由何恺明等人提出的ResNet[9],解决了深度网络退化问题,直到今天依旧有着广泛的应用场景。ResNet的残差结构既不会增加参数,也不会增加模型复杂度。某种情况下,当上一层的输出结果达到最优时,在大多数情况下,恒等映射往往无法达到最优,这时就需要通过残差模块进行修正。ResNet通过学习去拟合相对于上一层输出的残差,实验表明,ResNet可以不断地增加网络的深度提高网络的性能,并且参数量更少,在众多数据集都有非常好的表现。
传统的CNN在图像识别领域有较大的提升,CNN的研究对象往往在有着规则空间结构的正方形栅格数据,比如图片数据,这些数据可以通过二维矩阵表示,很适合CNN进行处理。但是,现实生活中很多数据并不是有规则的空间结构,比如分子结构、脑神经结构以及人体骨骼点之间的连接关系。这些不规则的空间结构很难通过传统的CNN进行处理,这时可以通过图卷积网络来进行处理。图卷积的流程可以分为三步:第一步,将每个节点自身的特征信息经过转换发送给邻居节点;第二步,将每个图节点的邻居节点的信息进行聚合;第三步,将聚合后的信息做非线性变换,增加模型的表征能力。
图卷积网络的核心是图卷积操作,图卷积类似于CNN网络的卷积操作,作用是进行特征提取,具体公式为:
(1)
双流网络是结合了图卷积神经网络和卷积神经网络,其中图卷积网络用来提取时间空间特征,卷积神经网络用来提取时空特征作为图卷积网络的补充。
提出的模型整体结构如图1所示。
图1 模型整体结构
首先,构建骨架信息时空图,然后将时空信息图送入基于注意机制的AGCNS,得到动作预测结果。其次,将骨架信息特征编码为骨架信息运动图,将生成的RGB图像送入ResNet18中,得到动作预测结果。最后,将两个预测结果融合得到动作的预测类别。具体的,设AGCNS预测结果为yAGCNS,ResNet预测结果为yResNet,将双流的预测结果按权重进行相加,即y=yAGCNS+a*yResNet,通过调参得到最好的识别效果。
骨架序列是连续时间内二维骨架信息或三维骨架信息的集合。人体骨架可以看作为一个图的拓扑结构,在骨架信息的空间拓扑图结构加入时间信息就构成了时空信息图。本节遵循Yan等人[10]提出的动态骨架模型来构建时空骨架图,它可以通过自动学习骨架数据中的时空信息来克服以往方法的局限性。首先构建无向时空图,记为G=(V,E),其中V是节点集合,V={vti|t=1,2,…,T,i=1,2,…,N},vti表示一段时间内所有骨骼点的时空信息,其中T表示人体运动的总帧数,N表示人体骨架中的所有关节点的数量;E是边集,由E1和E2组成,其中E1表示同一帧内骨骼点的连接,具体E1={vtivtj|(i,j)∈H},其中H表示同一帧内所有骨架点的集合,E2表示不同帧之间同一骨架点之间的连接,E2={vtiv(t+1)i}。
根据已定义好的图G,在空间维度上基于图形的卷积实现不像2D或者3D卷积那样简单,GCN网络的图卷积网络定义的具体公式为:
(2)
其中,fin表示输入特征,其维度为(C,V,T),fout表示输出特征,A表示单帧人体骨架的连接关系的邻接矩阵,单位矩阵I表示关节自连接,将多个输出通道的权重向量叠加,形成权重矩阵W,Λ表示对角矩阵,具体公式为:
(3)
为了实现可学习边缘重要性加权,对于每个邻接矩阵,将其与一个可学习的权重矩阵M相伴。将等式中的矩阵(A+I)*M,其中*表示两个矩阵之间的元素乘积。上述公式可以被替换成:
(4)
注意力机制是目前常用的数据处理方法,广泛用在图像识别、自然语言处理等不同的学习任务当中。人体动作识别过程中,不同帧之间的同一关节点的运动有一定的关联性,时间注意力机制,分别赋予不同帧之间不同关节点的时间权重,可以提高时空图卷积网络特征提取的能力。该时间注意力机制的结构如图2所示,具体公式为:
f1=σ(Mt(AvgPool(fin)))
(5)
其中,输入fin特征为C×T×N,AvgPool表示平均池化,Mt表示以一维卷积操作,σ表示Sigmoid激活操作。一维卷积操作之后,通过一个Sigmoid函数获得0~1之间归一化的权重得到f1,其特征大小为1×T×1,然后将f1和fin相乘并加入残差机制生成fout。
图2 时间注意力机制
人体动作识别过程中,相同帧之间的同一关节点的运动有一定的关联性,同时不同帧的不同关节点之间也存在着一定关联性。空间变化程度的不同会影响动作识别的过程,因此本节引入了空间注意力机制。分别赋予不同关节点不同的权重,帮助时空图卷积网络更好地进行特征提取。该空间注意力机制结构和时间注意力机制结构类似,输入和输出特征相同。
通道注意力机制的目的是给不同的通道赋予不同的权重,增强模型的表征能力。具体结构如图3所示。
图3 通道注意力机制
首先,将输入fin特征(C×H×W)进行压缩操作,从空间维度来进行特征压缩,生成f1将特征变成一个1×1×C的特征,得到的特征向量具有较强的全域性感受野,并且输出的通道数和输入的特征通道数相匹配,表示在特征通道上响应的全域性分布。具体公式为:
(6)
其中,vc∈RH×W,全局平均池化操作,从而使其具有全局的感受野,使得网络低层也能利用全局信息通过此步骤得到。其次是激励操作,通过加入参数k1和k2为每个特征通道赋予不同的权重,并通过Sigmoid进行归一化操作,得到0和1之间的权重f2,其特征大小为1×1×C,然后将f2和fin相乘并加入残差机制生成f1。具体公式为:
f2=σ(k2δ(k1f1))
(7)
结合2.2节和2.3节,本节引入了注意力机制,提出的AGCNS模型基本单元的结构如图4所示。数据输入分别经过空间卷积层、归一化处理、激活处理、时间注意力层、空间注意力层、通道注意力层、时间卷积层,归一化处理、激活处理和失活处理得到输出特征,然后将原始输入特征和经过时空卷积后的输出特征相加作为AGCNS模型单元的输出。空间卷积层的作用是提取空间特征信息,时间卷积层的作用是提取时间信息。其中,时间注意力层、空间注意力层以及通道注意力层顺序连接,并以残差结构的形式置于空间卷积层和时间卷积层的中间。
图4 AGCNS的基本单元
基于注意力机制AGCNS模型结构由上述9个基本单元构成,输入数据的通道为3,前三个基本单元的输出通道为64,步长为1,中间三个基本单元的输出通道为128,最后三个基于单元的输出通道为256。经过9个基本单元后,将输出的特征图送入最大池化层和一个全连接层,最后经过SoftMax函数处理得到预测结果。
遵循文献[11]中的方法,该文将骨架信息转换为骨骼运动图骨架信息运动图,从而更好地提取时空信息特征。该运动图包含骨架的运动信息。首先,将深度第一树遍历顺序应用于骨架关节,以生成预定义的骨架链顺序J,进而可以有效地保留原始骨架关节的空间信息。然后,将预定义的骨架链顺序J按照时间序列T的逐行堆叠得到矩阵M。其中矩阵M的大小为J×T×3,T为骨架信息序列的总帧数,3表示三维通道。根据矩阵M计算运动结构,具体公式为:
NM,t=MJ,t+d-MJ,t
(8)
其中,每个矩阵NM,t由两个相差d帧的矩阵M计算差值而得,其大小为J×(T-d)×3。通过使用所提出的运动结构,建立了两种不同的表示:一种基于关节运动的大小,另一种基于关节运动的方向。使用以下公式计算两种表示:
(9)
(10)
(11)
(12)
(13)
(14)
实验是在公共大型数据集NTU RGB+D60[12]上进行测试与验证。NTU RGB+D60包含60个动作类型,共56 880个样本,其中有40类为日常行为动作,9类为与健康相关的动作,11类为双人动作。该数据集通过3台不同角度的KinectV2传感器采集获得,采集的数据形式包括深度信息、3D骨骼信息、RGB信息以及红外序列。这些样本都是由40名志愿者在特定的环境下进行采集的。其中每一帧骨架序列中的骨架序列包含25个关节,并且提供的注释给出了由Kinect深度传感器检测到的摄像机坐标系中的3D关节位置(x,y,z)。数据集按照训练集和测试集划分的不同方式分为两类:
(1)交叉对象(Cross-Subject,CS):训练集包括40 320个样本,测试集包括16 560个样本。其中,训练集来自同一个志愿者的动作,测试集来自剩余志愿者的动作。
(2)交叉视角(Cross-View,CV):训练集包括37 920个样本,测试集包括18 960个样本。其中,训练集来自摄影机2号和3号,而测试集都来自摄影机1号。
遵循以上基准,验证所提算法的有效性。
实验通过Pytorch深度学习框架进行验证,并在Ubuntu18.04系统,TeslaV100-PCIE、显存为32 GB的服务器上进行实验。将双流网络在一台服务器上分别进行训练,然后将预测结果融合得到最终的输出结果。
其中ResNet18包含18层,17层卷积网络和1层全连接网络,在输出通道数为64、步幅为2的7×7卷积层后,接步幅为2的3×3的最大池化层。ResNet18使用4个由残差块组成的模块,每个模块使用若干个同样输出通道数的残差块。AGCNS与ResNet18的初始学习率和dropout分别设置为0.001和0.5,epoch为100,分类器都为SoftMax,训练批次和测试批次设置为64。
该文采用召回率和准确率作为模型评价的指标,召回率的具体公式为:
(15)
准确率的具体公式为:
(16)
其中,TP,TN,FP,FN分别代表真正例、真负例、假正例、假负例的样本个数。文中的混淆矩阵通过计算每个类别的召回率来衡量模型的效果,即混淆矩阵中对角元素表示预测值占真实值的百分比,通过混淆矩阵可以有效评估算法模型的视图变化和嘈杂等骨架挑战问题。
首先,按照预设的参数训练GCNS网络。为了观察文中算法在NTU RGBD+60上的分类结果,采用混淆矩阵进行评估。混淆矩阵可以很清晰地观察文中模型在数据集各种不同动作的识别效果。作为后续实验结果的对比,且考虑到图像清晰的问题,给出初始化的GCNS的第10到第30类动作混淆矩阵,如图5所示。识别结果中,在21类动作中,有11类动作的识别率在90%及以上,8类动作识别率大于95%甚至接近100%,有13类动作识别率在90%以下,有5类动作识别率在80%以下,分别为10-鼓掌,11-读书,12-写字,16-穿鞋,30-在键盘上打字。原因是极其相似的动作对识别率会产生一定的影响,比如读书和写字、在键盘上打字和玩手机,这些动作确实很难区分。
图5 GCNS的混淆矩阵
其次,为验证不同注意力机制对于GCNS的影响,进行了交叉实验,实验结果如表1所示。发现通过改进的基于注意力机制的GCNS一定程度上提高了识别率。相比于初始化GCNS,加入通道注意力机制的GCNS在Cross-Subject和Cross-View情况下识别率分别提高了2.5百分点和2.5百分点,加入空间注意力机制的GCNS在Cross-Subject和Cross-View情况下识别率分别提高了1.9百分点和1.8百分点,加入时间注意力机制的GCNS在Cross-Subject和Cross-View情况下识别率分别提高了2.0百分点和2.0百分点,加入时间、空间、通道注意力机制的GCNS在Cross-Subject和Cross-View情况下识别率分别提高了3.8百分点和3.1百分点,表明加入以上三种注意力机制的GCNS可以有效提高动作识别率。该文将加入三种注意力机制的GCNS简称为AGCNS。
表1 注意力机制对GCNS网络的影响
基于AGCNS和ResNet18网络中构成基于双流骨架信息的人体识别算法,如图6所示,给出第10到第30类动作的混淆矩阵。21类动作中,有16类动作的识别率在90%以上,有5类动作识别率在90%以下。16类动作当中有9类动作识别率大于95%甚至接近100%,有7类动作识别率在90%到95%之间;5类动作识别率在90%以下的分别为10-鼓掌、11-读书、12-写字、29-玩手机、30-在键盘上打字;与初始化GCNS相比,识别率分别提高了18百分点,21百分点,17百分点,3百分点,11百分点。实验说明文中算法可以较好地区分相似动作且可以有效提高动作识别率。虽然有5类动作的识别率在90%以下,原因是极其相似的动作对识别率会产生一定的影响,但是文中算法依然有着很强的泛化能力,说明基于注意力机制的AGCNS和ResNet18双流人体动作识别方法在缺乏背景信息的情况下对于相似动作有着较好的识别效果。
图6 文中算法混淆矩阵
最后,为了验证算法的识别效果,将文中算法与国内外相关算法在NTU RGB+D60数据集上进行了对比。由于该数据集的约束性质,在训练文中模型时没有任何数据增强。遵循训练集和测试集划分方式的不同分别进行不同的实验,分别验证Cross-Subject和Cross-View识别性能。对比结果如表2所示,相比其他算法,提出的双流动作识别方法在该数据集上效果更好,在NTU RGBD+60数据集上Cross-Subject和Cross-View的识别率分别达到了86.5%和93.5%。
表2 不同算法在NTU RGBD+60数据集上准确率的对比
最后,为了更好地评价模型的训练速度,在特定的实验环境下,通过100个epoch的训练时间来衡量模型运算速度。如表3所示,文中算法的训练时间相比于ST-GCN的训练时间有了进一步的减少,说明文中算法在识别效率上有了一定的提升。
针对当前基于二维图像的人体动作识别算法鲁棒性差、识别率不高等问题,引入了注意力机制和骨架信息运动图,提出一种基于AGCNS和CNN相结合的双流骨架信息人体动作识别方法。与传统基于RGB图像的人体动作识别方法不同,该文从人体骨架信息提取动作的时间与空间特征,利用加入注意机制的AGCNS网络提取骨架信息的时间和空间特征,同时通过ResNet18提取骨架信息运动图的时空特征,最后将两个网络进行融合,增强了骨架信息的表征能力,有效提高了人体动作的识别精度。该算法在NTU-RGBD+60数据集上取得了比较好的效果,Cross-Subject和Cross-View的识别率分别为86.5%和93.5%,相比其他同类算法,动作识别率有了一定的提高,同时模型训练也有一定的提升。