吴潇颖,李 锐,吴胜昔
(华东理工大学 化工过程先进控制和优化技术教育部重点实验室,上海 200237)
传统行为识别方法普遍基于图像提取特征,而遮挡、背景杂乱、阴影和不同光照条件以及图片拍摄角度等问题都会给图像特征提取带来困难,且二维图像只有两个维度的信息,信息不够完整准确[1]。而人体三维骨骼可以有效克服以上缺点,基于深度图像获取的3D骨骼信息更加准确。特别是微软推出的Kinect深度摄像机可以自动定位人体关节,使得骨骼信息的获取更为简便。
随着特征工程从2D到3D的演变,基于手工的特征提取复杂性也越来越高,而深度学习的发展也促使行为识别的研究更为深入。Donahue等[2]使用CNN+LSTM架构对视频序列而非人体骨骼进行识别。Mo等[3]提出了一种基于CNN+MLP模型的行为识别系统,该系统输入是骨骼的二维数据。Song等[4]提出了一个基于注意力的长短期记忆递归神经网络模型。Ge等[5]在行为识别问题上使用Bi-LSTM网络,在UCF101数据集上的识别率达到了88.9%。
基于深度学习的行为识别难点在于提取单帧行为局部空间特征的同时捕获视频演变的时序特征,基于此,本文提出一个基于人体骨骼的CNN与Bi-LSTM混合模型用于人体行为识别。输入数据采用人体3D骨骼的关节坐标,三维骨骼数据更加准确且鲁棒性更强。CNN提取关节内部的空间关系,Bi-LSTM对时间序列有良好的处理能力。该模型在UTKinect Action3D标准数据和自制Kinect数据集上的结果显示了网络较强的识别能力。
CNN是一种带有卷积结构的深度神经网络,最早由Fukushima[6]提出,通常用于深度学习,用于从原始数据中自动提取特征。CNN网络最底层是特征提取层,接着是池化层,之后可以继续增加卷积层或池化层,最后是全连接层。
CNN的基本结构包括两种特殊的神经元层,其一为卷积层,每个神经元的输入与前一层的局部相连,并提取该局部的特征;其二是池化层,用来求局部敏感性与二次特征提取的计算层。这种两次特征提取结构减少了特征分辨率,减少了需要优化的参数数目。
卷积层使用“卷积核”进行局部感知,挖掘数据的局部特征,达到特征增强,减少模型计算参数的目的,卷积核的大小定义了卷积操作的感受野,卷积层产生的特征图Hi[7]计算公式如式(1)
Hi=f(Hi-1⊗Wi+bi)
(1)
其中,Wi表示卷积核的权值矩阵,⊗为卷积运算,bi表示偏置,f(·) 表示激活函数。以ReLU函数为例,其计算公式为式(2),则卷积计算过程如图1所示,阴影部分即为一次卷积计算所对应的值
f(x)=max(0,x)
(2)
图1 卷积计算过程
池化层也称下采样层,主要用于特征降维、压缩数据和参数数量,减少过拟合的同时提高模型容错性。主要分为最大池化层(Max Pooling)和平均池化层(Average Pooling)两种。最大池化过程如图2所示。
图2 池化计算过程
全连接层用于多次卷积和池化后的分类任务,在卷积池化处理后仍需要全连接层输出分类结果。
长短时记忆网络LSTM是一种RNN的改进算法,RNN可以处理长时间输入序列但是存在梯度消失或梯度爆炸的问题,而LSTM在RNN的基础上加入了3个控制门,即遗忘门、输入门和输出门,分别用来控制是否遗忘当前状态、是否获取当前的输入信息和是否输出当前状态,有效克服了RNN所存在的问题。LSTM结构如图3所示。
图3 LSTM结构
输入门it和输出门ot控制信息流入和流出网络,遗忘门ft控制先前序列对当前的影响。每个门的更新公式如下[8]
it=σ(wxixt+whiht-1+bi)
(3)
ft=σ(wxfxt+whfht-1+bf)
(4)
ot=σ(wxoxt+whoht-1+bo)
(5)
(6)
(7)
ht=ot⊙tanhct
(8)
LSTM非常适合处理与时间序列高度相关的问题,因为它可以模拟短时间和长时间信息,但是传统LSTM忽略了上下文信息即未来信息,只能从单元方向学习。
双向长短时记忆网络(Bi-LSTM)[9]对LSTM进行改进从而可以充分考虑过去和未来的信息。Bi-LSTM具有两个不同方向的LSTM层,前向LSTM层捕获行为发生时间从前至后的演变特征,后向LSTM层模拟相反方向的演变,对时间序列处理能力更强。
Kinect[10]是2010年由微软公司推出的基于体感交互的人机交互设备,其最初作为Xbox360游戏机的外设,2012年微软推出Kinect for windows,使该项技术可以应用于各行各业,改变了人们工作、生活、娱乐的方式。2014年,微软发布了Kinect v2,在硬件和软件上均对第一代产品进行了优化。
Kinect v2主要由深度传感器(Depth sensor)、彩色摄像机(RGB camera)以及4个单元的麦克风阵列(Microphone array)几部分组成,可以获取彩色图像、深度图像、红外线图像等多种信息,在手势识别、人脸识别、语音识别3D建模等领域皆有应用。它可获得每帧人体的25个关节点,最多可检测6个人体。
本文所使用的标准数据集和自制数据集均采用Kinect设备获取骨骼信息。
本文将卷积神经网络(CNN)与双向长短期记忆网络(Bi-LSTM)相结合。CNN用于检测骨架关节位置间的空间关系,充分利用三维骨骼信息提取特征。Bi-LSTM可以捕获随着时间演变的时间关系。模型总体框架如图4所示。
模型思路是:利用Kinect设备获取人体关节三维坐标,分为训练数据和测试数据两部分。训练数据用于模型构建和参数调整,训练完成后利用测试数据集测试模型性能。
图4 模型框架
2.2.1 卷积神经网络层
CNN通常用来探索图像中的局部特征,本文使用CNN提取三维骨骼数据间的局部位置特征。CNN特征提取网络结构如图5所示,包含4个卷积层及3个池化层,多次采用小卷积核提取骨骼数据的深层特征。第一个卷积层卷积核大小为3×3,卷积核数量为20,对骨骼数据3个维度进行特征提取及融合;第二个卷积层使用50个大小为2×2的卷积核;第三个卷积层,使用50个1×1的卷积核提取深层特征;第四个卷积层使用100个大小为3×3的卷积核。池化层均使用尺寸为2×2的最大池化层,步长均取1。
图5 卷积神经网络层
2.2.2 双向长短期记忆网络层
LSTM通常用来处理依赖时间的序列问题,但LSTM的记忆能力也是有限的,Bi-LSTM处理时间序列的能力更强。Bi-LSTM使用两层不同方向的LSTM相连,用于捕获三维骨骼坐标随时间演变的深层时空特征。在CNN最后一层池化层后连接Bi-LSTM,两层LSTM均包含100个隐层单元,Bi-LSTM网络结构如图6所示。
图6 双向长短期记忆网络层
Bi-LSTM将两层LSTM的最后一个输出通过式(9)拼接后连接Softmax层输出识别结果yt
(9)
yt=σ(ht)
(10)
2.2.3 CNN与Bi-LSTM混合模型
将2.2.1节和2.2.2节所述网络连接后得到本文的CNN+Bi-LSTM混合模型。模型输入为一段时间序列的三维关节坐标,CNN网络对数据进行多次卷积、池化操作提取局部深层特征,输出提取到的多个特征向量,Bi-LSTM网络提取数据依赖于时间的时间特征,双向网络的输出连接到Softmax层进行分类得到结果。模型结构如图7所示。
图7 CNN+Bi-LSTM混合模型
以MSR Action3D标准数据集为例,模型输入数据可以看作三维数据块,每帧采集对象的20个关节三维坐标。数据结构如图8所示。输入数据的3个维度分别是人体20个关节、3个空间坐标 (x,y,z) 和动作持续的帧数T。骨骼数据的3个维度类比于RGB图像的3个通道,三维数据块可以看成20*T的三通道图像。
图8 网络输入数据结构
数据在混合模型的计算过程是:数据块通过第一卷积层处理后变为20个 (T-2)*18*1的数据块,在通过其对应的池化层,时间步长和骨架关节数量的原始维度减半,即 (T-2)/2*9*1。 数据经过第二、三层卷积层和池化层过滤降维后尺寸变为 (T-4)/4*4*50。 再通过第四层卷积层和池化层过滤降维后得到 (T-12)/8*1*100的数据块。经CNN处理后的数据继续作为Bi-LSTM网络的输入,每个隐层单元输入数据为 (T-12)/8*1的一维向量,反向LSTM的输入是正向LSTM的逆序,两个LSTM网络的输出拼接后连接Softmax得到最终输出。
本文数据集使用标准数据集UTKinect-Action3D[11]。该数据集拍摄视角不同并存在遮挡,同种动作间也存在明显差异,动作持续时间变化大,使得识别工作更具挑战性。
UTKinect-Action3D数据集在室内环境下使用Kinect设备收集了10种动作类型,包括:走路、坐下、站起、捡起、抬起、扔、推、拉、挥手和拍手。每个动作由10个不同实验对象执行两次,总共由199个序列组成。
本实验使用基于Python的深度学习框架Keras实现,平台参数:CPU,Intel i3-2370U;6 G内存;GPU,NVIDIA GeForce GT 720M,Win10 64位操作系统。
深度学习模型参数设置直接影响识别结果,CNN参数设置见表1,CNN每批数据量大小为200,最多训练100个epoch,初始学习率设置为0.1,使用ReLU作为激活函数,采用最大池化法。
表1 CNN模型参数
Bi-LSTM参数设置见表2,Bi-LSTM的批数据尺寸和epoch设置为500和16,学习率为0.001,隐藏层设置为100时训练效果最好。其余参数均为默认。
评价指标为行为识别分类结果的准确率,计算方法为式(11)
(11)
其中,p代表模型将测试集中的行为正确识别出来的数量,q代表测试集中所有行为的数量。
表2 Bi-LSTM模型参数
由于输入数据涉及帧数,在UTKinect-Action3D数据集上取不同的帧数进行第一个实验,分别取T=10, 20, 30得到实验结果见表3。
表3 不同帧数对比实验
发现T=20时,识别准确率最高,识别效果最好,所以下文实验统一采用T=20。
第二个实验是将改进后的Bi-LSTM与LSTM进行比较,结果见表4。
表4 CNN+Bi-LSTM与CNN+LSTM在 UTKinect-Acition3D数据集上的结果比较
结果显示CNN+Bi-LSTM在UTKinect-Action3D上的识别准确率比CNN+LSTM提高了2.2%,说明双向LSTM对长时间序列处理能力稍优于LSTM。
由于UTKinect-Acition3D数据集规模较小,所以实验采用留一法交叉验证,采用CNN+Bi-LSTM混合模型对数据集进行测试,实验结果见表5。
表5 UTKinect-Acition3D数据集混淆矩阵
CNN+Bi-LSTM在UTKinect-Acition3D数据集上识别准确率最高达到了100%,最低也达到90%。结果显示本文模型对不同动作的误判现象较少,每种动作的识别率均与平均识别率也较接近,识别准确率高。
为验证本文算法的识别效果,将本文模型与国内外相关模型进行对比。文献[12]提出一个ST-LSTM的树状结构模型,输入数据是骨骼数据,该模型验证实验同样采用留一法交叉验证;文献[13]先使用CNN提取特征后直接连接一个Softmax层分类。该模型只处理深度图像。文献[14]基于深度图像使用三流CNN提取特征并使用LSTM分类。本文方法与以上几种模型在UTKinect-Acition3D数据集上的实验结果进行对比见表6。
表6 CNN+Bi-LSTM与其它文献方法比较
CNN+Bi-LSTM模型在UTKinect-Acition3D数据集上识别准确率整体优于其它文献,比文献[12]中的最高准确率提高了0.5%,比文献[13]提高了15.5%,相对于文献[14]的模型提高16.4%。结果表明基于骨骼的CNN+Bi-LSTM模型具有较强的识别能力,有效提高了识别准确率。
工厂驾驶员操作行为直接影响人身安全和设备安全。某厂驾驶员的违规操作直接导致吊车上的物体触碰高压线,整个车间断电停机,严重时还会造成人员伤亡,所以驾驶员的操作行为检测至关重要。本文以驾驶员行为识别为背景,自制人体行为识别数据集,验证本文所提算法的有效性。
本文调研了该厂驾驶员监控录像,发现几种常见行为,该实验旨在对几种行为进行识别。本文使用Kinect v2设备获取人体3D关节坐标数据,以.txt格式存储。为避免遮挡Kinect v2设备放置在1.5 m高,距离实验者2 m位置处。本数据集招募10名实验对象,每个动作重复做5次。每一个动作均手工制作行为标签,包括坐下、站起、双臂上举、玩手机4种动作,图9为自制数据集绘制出骨架的人体动作裁剪样例。共包含200个动作序列。
图9 动作类型
在自制数据集上对CNN+Bi-LSTM进行评估,由于本数据集大小与UTKinect-Action3D较为相似,实验也采用留一法交叉验证,得到几种动作的识别结果见表7。
表7 自制数据集识别结果
在自制数据集上的4种动作识别率均达到了97%以上,平均识别率达98.6%,该模型对不同动作混淆现象较少,动作识别准确,效果显著,验证了模型的可用性。
本文提出了基于骨骼的CNN和Bi-LSTM混合模型应用在人体行为识别中,在UTKinect Action3D数据集上的识别准确率达到了97.5%,在自制数据集上的实际验证也达到了98.6%的准确率,相比传统行为识别,骨骼数据相比图像包含更多维度的信息,深度学习网络能够自动提取复杂的空间时间特征,识别率显著提升。但目前的行为识别仍在研究阶段,未来将继续研究将行为识别应用到具体应用场景中去。