一种并行化的人体行为识别方法
【技术领域】
[0001] 本发明涉及人体行为识别和分布式计算研宄的技术领域,尤其是指一种并行化的 人体行为识别方法。
【背景技术】
[0002] 如今社会在数字化,智能化的浪潮中以前所未有的速度迅速发展,人们已经不再 满足于计算机作为生产的工具,希望能从繁琐的操作中解放自己,让计算机自主的理解外 部信息,探寻更加自然的交互方式。人体行为识别作为其中一个研宄热点,受到了越来越多 的关注。
[0003] 人体行为识别研宄具有非常广阔的应用前景。例如,1)视频监控和视频检索,传统 的视频监控完全依赖于人力进行手动的寻找可疑行为和安全隐患等,将行为识别应用于视 频监控中,实现实时的无人监控,可以减少人力物力的投入;2)智能家居,通过有效的理解 用户行为模式,实现家具、生活设备的自动控制;3)家长监护,通过行为识别技术可以对老 人的一些行为如突然跌倒、长时间未活动等异常行为进行及时的检测,向家人发出警报信 息。
[0004] 同时,移动互联网、传感器网络、视频监控以及智能终端等技术的迅猛发展,由此 导致数据量爆炸式增长,数据规模不断增大。人体行为识别所涉及的行业和数据量也在不 断扩大。传统的单机存储与识别计算已经远远不能满足需求,进行海量的人体行为识别,大 批量的识别是具有重要研宄意义和价值的。
[0005] 人体行为识别目前分为基于视觉的行为识别和非视觉的行为识别,基于视觉的人 体行为识别集中于计算机视觉领域,利用成像设备如照相机等采集场景中的信息,通过图 形图像的相关技术进行行为的跟踪、识别、分析和理解等;基于非视觉的行为识别主要通过 各种传感器输入设备,如陀螺仪、重力加速器、GPS等获取人体信息,再采用相关的机器学习 算法进行模型的构建与识别。基于视觉的行为识别易受外在物体、行为着装、遮挡等影响, 导致误识别率增加。基于传感器的行为识别主要面向于室内环境,传感器信号噪声较大,工 作时间短,同时其也受制于便携性等问题,对基于非视觉的行为识别发展产生了一定影响。
[0006] 采用Kinect进行人体行为识别和研宄已经成为当前的新方法和研宄方向,其结 合了视觉行为识别和非视觉行为识别的优点。Kinect可以获取到场景的深度信息,基于此 可获取三维的关节点数据,通过计算和变换获得关节点的速度,加速度等信息,如同穿戴加 速度,陀螺仪等传感器一样,而不会给人体带来不便;同时Kinect的RGB摄像头获取的视频 流数据仍适用于基于视觉的行为识别机器学习算法上。
[0007] 目前广泛采用的Hadoop框架实现了分布式文件系统HDFS和MapReduce编程模 式,解决了海量数据的存储和计算分析问题,但是MapReduce框架的缺陷:中间结果写回文 件系统,数据线性处理,任务调度低效,无法满足的计算快速和实时性。人体行为识别需要 在大量的数据上进行迭代式的计算完成模型的训练,是一项计算密集型和数据密集型的任 务,MapReduce并不适合作为计算密集型的计算框架。基于内存计算的通用并行计算框架 Spark提出了弹性分布式数据集(ResilientDistributedDatasets,RDD),可以在内存上 透明地存储数据并且只有在需要的时候才传输给磁盘,基于内存的计算模式可以让Hadoop 应用程序在内存中的执行速度提升上百倍,将行为识别算法在Spark上并行化可以极大的 提高训练效率和实时性。
【发明内容】
[0008] 本发明的目的在于克服现有技术的缺点与不足,提供一种并行化的人体行为识别 方法,此方法基于Kinect的行为识别过程,同时针对传统的串行识别算法在Spark上并行 化,提供海量的、可扩展的识别能力。
[0009] 为实现上述目的,本发明所提供的技术方案为:一种并行化的人体行为识别方法, 包括以下步骤:
[0010] 1)基于Kinect的深度传感器获取人体的关节点数据和RGB图像数据;
[0011] 2)关节点数据预处理,保证特征的位移和尺度不变性;
[0012] 3)针对静态行为特征的选取,从人体结构出发,选取了人体结构向量、骨骼间的空 间夹角和骨骼长度偏置共三方面的信息进行融合;
[0013] 4)针对动态行为特征,以静态特征所述方法,定义人体结构相似度,在滑动窗口的 基础上,以结构相似度的变化为搜索策略,根据当前帧与上次搜索帧的变化情况来动态调 整滑动窗口的大小;
[0014] 5)基于内存计算的通用并行计算框架Spark实现了并行神经网络算法框架PANN, 从Hadoop分布式文件系统HDFS中读取特征数据,分为整体模型、前向计算、梯度计算、预测 这几个主要模块;
[0015] 6)采用拟牛顿法L-BFGS对PANN中的梯度下降法进行优化,减少迭代次数和 Spark框架计算过程中的Stage生成,加快模型的训练速率;
[0016] 7)构建完整的识别平台,包括数据输入层、HDFS存储层、YARN资源管理层及Spark 和PANN算法应用层。
[0017] 在步骤1)中,所述的基于Kinect的深度传感器获取的人体骨骼数据包括以人体 为目标对Kinect的深度信息进行识别能力测定,确定不同距离下关节点的深度数据变化, 同时以KinectSDK作为接口,相应的功能模块和可视化界面实时的采集数据。
[0018] 在步骤2)中,所述的关节点数据预处理对三维空间数据规范化到0和1之间。
[0019] 在步骤3)中,所述的静态行为特征的提取包括关节点之间的骨骼的归一化向量 表示,如下:
[0020] 3. 1)对于静态行为特征所述的人体结构向量,是根据人体结构学的原理,将相邻 的关节点连接成骨骼向量,结构向量是描述动作的主要特征点,根据分为左右的情况,选择 上肢4组,下肢4组特征向量和一组脊柱向量;
[0021] 3. 2)个体变化的幅度会产生差异,为精确描述上肢结构变化情况,选择了左腕、左 肩、右腕和右肩与臀部中央节点的空间夹角作为特征;
[0022] 3. 3)结构向量在Kinect的输入流中是实时变化的,关节点之间的夹角也不稳定, 因此需要建立一个针对个体的可靠的骨架数据作为输入向量的偏置。
[0023] 在步骤4)中,所述的动态行为特征指人体在运动过程中,每个关节点都会随着父 关节点连带着运动,动作在向前推进过程中,关节点之间的夹角不断改变,而不同的动作会 产生不同的模式,以人的整体关节点变化作为切入点,将骨架作为一个整体而不是脱离人 体结构关系进行分析,结构相似度考虑了人体的整个骨架在运动过程中的变化情况,将结 构距离相似度定义为人体在运动过程中的角度变化量和距离变化量的总差异,同时在滑动 窗口的基础上,以结构相似度的变化为搜索策略,根据当前帧与上次搜索帧的变化情况来 动态调整滑动窗口的大小。
[0024] 在步骤5)中,所述的基于Spark的并行神经网络算法框架PANN基于当前的多层 前馈人工神经网络,由一个输入层、多个隐含层、一个输出层构成,采用后向传播的误差调 整公式,层与层之间通过单向的权值网连接,输入数据来自行为识别的特征提取后的数据, 从分布式文件系统HDFS中读取,特征数据RDD的分区数量与集群计算节点数目相同,可以 加速各子任务的计算。算法中神经网络的网络权值矩阵变量weights在每个分区的每条输 入数据中均会使用到,是一个全局变量,因此将其作为Spark中的broadcast类型的共享变 量,使其在每个节点中均有一份缓存,如下:
[0025] 5. 1)在训练阶段,前向计算的过程中,各RDD分区通过与weights权值矩阵相乘 依次计算各隐层的输出,最后在输出层计算与实际期望的误差,统计总误差和并且产生一 次reduce操作,由此产生一个Stage,即每更新一次权值矩阵则产生一个新的Stage,客户 端驱动程序通过反向传播算法更新weights权值矩阵,并再次广播给各子节点,一次完整 的迭代过程完成;
[0026] 5.2)训练结束后即生成了最终的权值矩阵,作为模型的基础,在测试阶段,输入 的测试数据同样以相同的方式分区,通过权值矩阵并行计算即可批量得到输出向量,通过 标签数据转换成类别,测试数据RDD的分区数可以根据数据量的大小进行确定,由于模型 已经训练完成,只会产生两次矩阵的乘法运算,进行一次前向计算过程,因此只会生成一个 Stage〇
[0027] 在步骤6)中,所述的拟牛顿法L-BFGS对梯度下降法的优化,基于对算法的可扩展 性和实用性考虑,同时为减少迭代次数和Stage生成,加快模型的训练速率,采用MLlib的 LBFGS接口,通过自定义的梯度计算模块Gradient和梯度更新模块Updater来完成迭代计 算的具体任务,Gradient定义了计算目标的梯度计算和损失函数,同时Updater定义了梯 度更新的规则,在进行迭代计算时,主要通过将权值矩阵广播到各个计算节点,各自节点计 算梯度任务,再进行更新操作,同时返回当前迭代的损失,通过判断两次的损失差值来确定 是否收敛,比普通的梯度下降法有显著的性能提升。
[0028] 在步骤7)中,所述的识别平台,包括:
[0029] 7. 1)人体行为的数据通过Kinect实时获取,包括图像的深度数据和骨骼数据,PC 客户端将采集到的骨骼流数据作为文本文件写入本地,并
根据行为动作的类别进行分类和 标注,此数据作为识别系统预先的训练输入和识别输入,在采集与标注结束后以客户端形 式请求HDFS文件系统,向其中写文件;
[0030] 7. 2)HDFS作为识别系统的底层存储平台,包括原始的骨骼流数据、行为特征数据 以及识别结果均以分布式方式存储,一方面可以方便PC客户端的调用请求,如用户历史的 行为数据,进行特征提取后的数据等;另一方面HDFS作为上层Spark的数据支撑平台,为 RDD的快速构建提供了基础;
[0031] 7. 3)Spark平台作为整个系统的核心,包含了数据输入和预处理,特征提取,模型 训练等各模块应用;其中,数据预处理包括对HDFS中的原始骨骼数据流进行标签分类、过 滤错误数据,同时根据静态特征的提取方法和动态行为的搜索算法对筛选后的骨骼数据流 完成特征提取转换,将结果写入RDD的同时,也作为历史特征数据进行HDFS文件的写入;在 上一步的基础上,采用上述实现的PANN算法(分类器)进行行为识别模型的训练,在预测 模式下,根据已有的模型数据完成预测和结果的写入,同时模型的权值网数据也可以写入 HDFS作为持久化存储,方便进行模型的更新与调整。
[0032] 本发明与现有技术相比,具有如下优点与有益效果:
[0033] 1、本发明在行为识别输入上结合了基于视觉的行为识别和非视觉行为识别优点, 采取的人体骨骼数据能更加精确的表现人体行为特征。
[0034] 2、本发明将人体结构作为整体进行考虑,对于静态的行为特征,本文提取了人体 的主要结构向量,同时也加入了关节点的空间夹角关系,最后考虑到人体结构差异带来的 动作差异,本文加入的骨架的权重偏置。针对动态行为特征,本文以滑动窗口作为基础,提 出了人体结构距离的相似度度量,通过相似度来确定行为的关键帧。进行行为特征搜索时, 采用了自适应的搜索窗口调整策略,对比当前仅考虑部分关节的特征提取具有巨大优势。
[0035] 3、本发明选择在Spark上实现并行的神经网络算法对行为特征数据进行训练与 测试。通过对大量的行为特征数据RDD进行分区,作为Spark中各子任务(Task)执行每次 训练的前向计算,并以Spark驱动程序(Driver)作为权值调整计算单元,加速了训练速度。 同时还针对当前普通的梯度下降算法收敛缓慢的问题,提出了在大规模机器学习的条件下 L-BFGS算法改进了权值训练方案,对比传统的单机算法具有良好的加速比和可扩展性。
【附图说明】
[0036] 图1为系统整体架构示意图。
[0037] 图2为人体关节点规则。
[0038] 图3a为人体结构特征的选择向量示意图之一。
[0039] 图3b为人体结构特征的选择向量示意图之二。
[0040] 图3c为人体结构特征的选择向量示意图之三。
[0041] 图4为人体结构特征的空间夹角特征。
[0042] 图5为动态行为特征的搜索流程图。
[0043] 图6为PANN算法并行化训练流程图。
[0044] 图7为PANN算法训练过程数据流向图。
[0045] 图8为PANN算法测试阶段流程图。
[0046] 图9为PANN算法测试阶段数据流向图。
[0047] 图10为L-BFGS算法流程图。
[0048] 图11为HDFS读取和写入示意图。
[0049] 图12为数据输入过程示意图。
[0050] 图13a为静止坐下的相似度变化曲线图。
[0051] 图13b为静止站立的相似度变化曲线图。
[0052] 图14为PANN算法框架的UML图。
【具体实施方式】
[0053] 下面结合具体实施例对本发明作进一步说明。
[0054] 本实施例所述的并行化的人体行为识别方法,包括以下步骤:
[0055] 1)基于Kinect的深度传感器获取人体的关节点(骨骼)数据和RGB图像数据;
[0056] 2)关节点数据预处理,保证特征的位移和尺度不变性;
[0057] 3)针对静态行为特征的选取,从人体结构出发,选取了人体结构向量、骨骼间的空 间夹角和骨骼长度偏置共三方面的信息进行融合;
[0058] 4)针对动态行为特征,以静态特征所述方法,定义人体结构相似度,在滑动窗口的 基础上,以结构相似度的变化为搜索策略,根据当前帧与上次搜索帧的变化情况来动态调 整滑动窗口的大小;
[0059] 5)基于内存计算的通用并行计算框架Spark实现了并行神经网络算法框架PANN, 从分布式文件系统HDFS中读取特征数据,分为整体模型、前向计算、梯度计算、预测这几个 主要模块;
[0060] 6)采用拟牛顿法L-BFGS对PANN中的梯度下降法进行优化,减少迭代次数和 Stage生成,加快模型的训练速率;
[0061] 7)构建完整的识别平台,包括HDFS存储层、YARN资源管理层及Spark和PANN算 法应用层。
[0062] 在步骤1)中,所述的基于Kinect的深度传感器获取的人体骨骼数据包括以人体 为目标对Kinect的深度信息进行识别能力测定,确定不同距离下关节点的深度数据变化, 同时以KinectSDK作为接口,相应的功能模块和可视化界面实时的采集数据。所述的基于 Kinect的深度传感器获取人体的关节点数据可以通过Kinect提供的SDK获取,Kinect对 关节点提供了 3种状态:已跟踪(tracked),表示Kinect可以获得此关节数据;推测得出 (inferred),表示不能直接获取此关节信息,但是可以通过其他关节点进行推测得出;未跟 踪(non-tracked),表示无法得到此关节点的位置信息。采集的关节点数据可以通过Kinect SDK中的坐标转换方法MapSkeletonPointToColor映射到RGB彩色图像坐标系中。
[0063] 在步骤2)中,所述的关节点数据预处理对三维空间数据规范化到0和1之间,关 节点的规则见图2。
[0064] 在步骤3)中,所述的静态行为特征的提取包括关节点之间的骨骼的归一化向量 表示,选取了上肢、下肢部、躯干部分的骨骼向量作为主要的特征,加入了关节点的空间夹 角作为特征,以骨骼整体长度的均值偏置,如下:
[0065] 3. 1)人体结构向量是根据人体结构学的原理,将相邻的关节点连接成骨骼向量。 结构向量是描述动作的主要特征点,根据分为左右的情况,选择上肢4组,下肢4组特征向 量,但是在日常行为中,除了四肢变化外,前后倾、坐下、起立、弯腰等动作还需要考虑躯干 的变化情况,这里选择脊柱向量来描述躯干,脊柱向量采用的是臀部中央和颈部中央2个 关节点(见图3a_3c所示)。
[0066] 3.2)不同的人在执行相关动作时受到环境,习惯等因素的影响,导致变化的幅度 会产生差异。选择左腕、左肩、右腕和右肩与臀部中央节点的空间夹角作为特征(见图4)。 定义关节点pJPh为三维空间中在XY平面投影所在的夹角0为:
[0068] 3. 3)由于结构向量在Kinect的输入流中是实时变化的,关节点之间的夹角也不 稳定,因此需要建立一个针对个体的可靠的骨架数据作为输入向量的偏置,如下:
[0070] 其中J为关节点数量,N为当前行为的总帧数,Bias代表了人体骨骼长度的平均 值。
[0071] 在步骤4)中,所述的动态行为特征指人体在运动过程中,每个关节点都会随着父 关节点连带着运动,动作在向前推进过程中,关节点之间的夹角不断改变,而不同的动作会 产生不同的模式,以人的整体关节点变化作为切入点,将骨架作为一个整体而不是脱离人 体结构关系进行分析,结构相似度考虑了人体的整个骨架在运动过程中的变化情况,将结 构距离相似度定义为人体在运动过程中的角度变化量和距离变化量的总差异,同时在滑动 窗口的基础上,以结构相似度的变化为搜索策略,根据当前帧与上次搜索帧的变化情况来 动态调整滑动窗口的大小。
[0072] 在步骤4)中,所述的相似度包括角度相似度和距离相似度,分别为
[0075] 其中,I,〇分别表示两个帧中的关节点集合,0 (Uj)为关节点i,j所在的帧 中的夹角,9 (〇i-〇P为关节点i,j所在的帧中的夹角,< 和尽^分别为关节点i,j在和帧 骨骼的归一化向量。
[0076] 基于此相似度的自适应特征搜索算法具体步骤(见图5)如下:
[0077] 1、初始化搜索间距,设定相似度变化的最小阈值,同时确定动态行为特征提取的 帧数,可以根据阈值的初值进行控制,如选择10帧作为动态行为特征;
[0078] 2、移动到下一搜索帧,计算两帧之间的相似度差异;若到达帧尾则转向下面第4 占.
[0079] 3、若差异小于当前阈值,则扩大搜索间距,转上面第2点;若大于阈值,则可以将 此帧作为动态行为的一个关键帧,标记当前帧,同时恢复搜索间距,从当前帧开始作为起 占.
[0080] 4、结束搜索,根据标记提取关键帧,以此作为动态行为特征。
[0081] 在步骤5)中,所述的基于Spark的并行神经网络算法框架PANN基于当前的多层 前馈人工神经网络,由一个输入层、多个隐含层、一个输出层构成,采用后向传播的误差调 整公式,层与层之间通过单向的权值网连接,
输入数据来自行为识别的特征提取后的数据, 从分布式文件系统HDFS中读取,特征数据RDD的分区数量与集群计算节点数目相同,可以 加速各子任务的计算,算法中神经网络的权值网络变量weights为全局变量,因此将其作 为Spark中的broadcast类型的共享变量,使其在每个节点中均有一份缓存,如下:
[0082] 5. 1)在训练阶段,神经网络的前向计算的过程中,各RDD分区通过与weights权值 矩阵相乘依次计算各隐层的输出,最后在输出层计算与实际期望的误差,统计总误差和并 且产生一次RDD的reduce操作,由此产生一个Stage,即每更新一次权值矩阵则产生一个新 的Stage,客户端驱动程序通过反向传播算法更新weights权值矩阵,并再次广播给各子节 点,一次完整的迭代过程完成;
[0083] 5.2)训练结束后即生成了最终的权值矩阵,作为模型的基础,在测试阶段,输入 的测试数据同样以相同的方式分区,通过权值矩阵并行计算即可批量得到输出向量,通过 标签数据转换成类别,测试数据RDD的分区数可以根据数据量的大小进行确定,由于模型 已经训练完成,只会产生两次矩阵的乘法运算,进行一次前向计算过程,因此只会生成一个 Stage〇
[0084] 所述的基于Spark的并行神经网络算法框架PANN的训练过程如下,训练阶段的算 法步骤为:
[0085] 1、Spark应用驱动程序Driver从HDFS中读取训练数据,转换为RDD并确
[0086] 定分区数量;
[0087] 2、初始化训练次数,误差阈值,全局权重矩阵weights并广播到各计算节点,各子 任务Task依次前向计算各层输出,并计算出误差;
[0088] 3、采用RDD的reduce操作汇总误差,发送给Driver;
[0089] 4、Driver计算总误差,如低于阈值或达到训练次数则结束,否则采用反向传播法 更新weights同时广播变量,累加训练次数,转上面第3点。
[0090] 在前向计算的过程中,各RDD分区通过与weights权值矩阵相乘依次计算各隐层 的输出,最后在输出层计算与实际期望的误差,统计总误差和并且产生一次reduce操作, 由此产生一个Stage,即每更新一次权值矩阵则产生一个新的Stage。训练过程的流程图和 数据流图见图6和图7所示。
[0091] 测试阶段的算法步骤为:
[0092] 1、Spark应用驱动程序Driver从HDFS中读取测试数据,转换为RDD,根据计算节 点数量来确定RDD分区数;
[0093] 2、获取训练过程所得的计算权值矩阵,将权值矩阵进行广播;
[0094] 3、各子任务Task前向计算各层输出,在输出层统计误差和每个样本对应的输出 向量;
[0095] 4、将输出向量发送给Driver,由Driver将输出向量转换为对应的分类。
[0096] 在测试阶段,测试数据RDD的分区数可以根据数据量的大小进行确定,由于模型 已经训练完成,只会产生两次矩阵的乘法运算,进行一次前向计算过程,因此只会生成一个 Stage。测试过程的流程图和数据流图见图8和图9所示。
[0097] 在步骤6)中,所述的拟牛顿法L-BFGS对梯度下降法的优化,基于对算法的可扩展 性和实用性考虑,同时为减少迭代次数和Stage生成,加快模型的训练速率,采用MLlib的 L-BFGS接口,在进行迭代计算时,主要通过将权值矩阵广播到各个计算节点,各子节点计算 梯度任务,再进行更新操作,同时返回当前迭代的损失,通过判断两次的损失差值来确定是 否收敛,比普通的梯度下降法有显著的性能提升。
[0098] 所述L-BFGS替代梯度下降法的过程如图10所示。采用ML1ib的L-BFGS接口,通 过自定义的梯度计算模块Gradient和梯度更新模块Updater来完成迭代计算的具体任务, Gradient定义了计算目标的梯度计算和损失函数,同时Updater定义了梯度更新的规则。
[0099] 在步骤7)中,所述的行为识别平台(见图1)分为HDFS存储层、集群资源调度层 YARN和上层应用。HDFS作为识别系统的底层存储平台(见图11),包括原始的骨骼流数据, 行为特征数据,以及识别结果等均以分布式方式存储,一方面可以方便PC客户端的调用请 求,如用户历史的行为数据,进行特征提取后的数据等;另一方面HDFS作为上层Spark的数 据支撑平台,为RDD的快速构建提供了基础。集群中只需要采用YARN接口完成资源获取并 运行,由YARN来对资源进行统一分配与管理,减轻成本和管理负担。Spark平台作为整个系 统的核心,包含了数据输入和预处理,特征提取,模型训练等各模块应用。其中,数据预处理 包括对HDFS中的原始骨骼数据流进行标签分类,过滤错误数据等,同时根据静态特征的提 取方法和动态行为的搜索算法对筛选后的骨骼数据流完成特征提取转换(见图12),将结 果写入RDD的同时,也作为历史特征数据进行HDFS文件的写入。
[0100] 本实施例采用Kinect来获取人的骨骼数据,首先获取各像素点的深度信息,获取 方式为:
[0101] Distance= (int)(Bits[1]<<8|Bits[0])
[0102] 其中,对Kinect设置ImageFormat.Depth属性可以在每帧的像素点获取两字节的 信息,分别表示为Bits[0]和Bits[1],即为当前像素点深度。
[0103]通过深度信息和KinectSDK来获取人体骨骼数据,可以获取到20个关节点,分 别为:头、颈(肩部中央)、左右肩、左右肘、左右腕、左右手、脊柱、臀部中央、左右臀、左右膝 盖、左右脚踝、左右脚。
[0104] 本实施例对人体关节点数据进行归一化,归一化的具体方式为:
[0106] 其中,Pi、p^%相邻的两个关节点,Bu为空间上两点的欧式距离。
[0107] 本实施例定义的日常活动主要是室内活动,包括了喝水、吃零食、读书、打电话、写 字、用笔记本电脑、打游戏、躺在沙发上、起立、坐下、走动共11种行为,通过分析可以知道, 本文的日常行为的一个主要特征描述在四肢,如站立和坐下,同时绝大多数的行为是基于 上肢关节点的活动。本文从人体的结构出发,选取了上肢部分的4个骨骼向量,下肢部分4 个骨骼向量以及躯干部分的1个骨骼向量作为主要的特征(见图3a-3c),同时考虑到上肢 活动的复杂性,加入了关节点的空间夹角作为特征,以骨骼整体长度的均值作为特征的一 个偏置(见图4)。
[0108] 人体在运动过程中,每个关节点都会随着父关节点连带着运动,动作在向前推进 过程中,关节点之间的夹角不断改变,而不同的动作会产生不同的模式,本实施例的动态行 为获取方法以人的整体关节点变化作为切入点,将骨架作为一个整体而不是脱离人体结构 关系进行分析,结构相似度考虑了人体的整个骨架在运动过程中的变化情况。将结构距离 相似度定义为人体在运动过程中的角度变化量和距离变化量的总差异。由于Kinect实验 时的误差,当人在静止状态下时也会发生坐标的细小变化,进而影响到整体的相似度的度 量,由此需要对相似度阈值进行事先的确定,图13a和13b为静止时相似度变化曲线。确定 误差后即可采用搜索算法进行关键帧搜索,见图5。
[0109] 并行化PANN算法整体模型包括了ANN和ANNModel类,模型的UML见图14。在 训练阶段,首先初始化ANN对象,设置网络神经元的初始化权值,误差阈值和迭代次数 等,将输入的RDD数据并行化前向计算,同时汇总误差,通过GradientHelper的子类 LeastSquaresGradient后向传播修改各神经元的权值。其中,LeastSquaresGradient继 承自SparkMLlib中的抽象类Gradient。在达到迭代次数或在误差范围内后结束运行, 将最后的权值矩阵和拓扑结果作为ANNModel和ANNClassifierModel的输入,完成训练。 在测试阶段,根据测试数据是否为标记点数据可以选择两种不同的模型对象ANNModel和 ANNClassifierModel,应用模型的predict方法可得出所属类别。
[0110] 本实施例设计的完整的行为识别平台,包括从Kinect行为数据的采集,分布式文 件系统处理,特征提取与转换,行为识别算法的训练和分类等。在设计上充分考虑了系统的 实用性、有效性以及可维护性,整体架构见图1。本系统的各个功能均以模块化的接口暴露 于外界,系统主要分为3个工作模块:数据输入模块,训练和识别模块,存储模块。数据输 入模块见图12。PC客户端作为Kinect宿主和HDFS的请求端。输入数据时PC客户端先 打开Kinect采集骨骼数据流,将骨骼数据以文本形式逐帧写入,在行为结束后给当前文件 加上标签,作为训练和测试的参考,上述操作完成后则开始请求HDFS服务并写入。在HDFS 上层的数据处理模块根据筛选和过滤条件去掉相关噪声数据,选择能代表行为的帧作为特 征提取样本,根据行为搜索算法进行相关的搜索并将最终的特征数据以Spark中的标签点 (LabeledPoint)格式写入HDFS。
[0111] HDFS作为底层的存储框架,采用CS模式进行通信操作。当上传Kinect数据时,客 户端为采集数据的PC,当读取特征数据时,Sp
ark作为客户端。进行文件的写入时,客户端 先调用HDFSAPI中的DistributedFileSystem对象的create方法与Namenode进行通信, 获得文件输出流对象,完成文件的创建。在Namenode通知Datanode节点后,客户端开始向 Datanode写入数据。进行文件读取时与写入类似,如图11所示。
[0112] YARN是一个分布式的资源管理系统,用来管理集群中的CPU、内存、网络、磁盘等 资源。本实施例将YARN作为Spark的运行平台,Spark在YARN上有两种运行模式,一种是 yarn-client模式,在这种模式下,Spark驱动程序driver在客户机上运行,然后向YARN申 请运行executor以运行Task。一种是yarn-cluster模式,这种模式下,Sparkdriver将作 为YARN中的一个ApplicationMaster在YARN集群中先启动,然后再由ApplicationMaster 向YARN中的资源管理器申请资源启动executor以运行Task,本例分别采用了两种模式进 行了对比和分析。通过大量实验证明了本例的算法准确率和有效性,同时具有良好的扩展 性和加速比。
[0113] 以上所述之实施例子只为本发明之较佳实施例,并非以此限制本发明的实施范 围,故凡依本发明之形状、原理所作的变化,均应涵盖在本发明的保护范围内。
【主权项】
1. 一种并行化的人体行为识别方法,其特征在于,包括以下步骤: 1) 基于Kinect的深度传感器获取人体的关节点数据和RGB彩色图像数据; 2) 关节点数据预处理,保证特征的位移和尺度不变性; 3) 针对静态行为特征的选取,从人体结构出发,选取了人体结构向量、骨骼间的空间夹 角和骨骼长度偏置共三方面的信息进行融合; 4) 针对动态行为特征,以静态特征所述方法,定义人体结构相似度,在滑动窗口的基础 上,以结构相似度的变化为搜索策略,根据当前帧与上次搜索帧的变化情况来动态调整滑 动窗口的大小; 5) 基于内存计算的通用并行计算框架Spark实现了并行神经网络算法框架PANN,从分 布式文件系统HDFS中读取特征数据,分为整体模型、前向计算、梯度计算、预测这几个主要 丰吴块; 6) 采用拟牛顿法L-BFGS对PANN中的梯度下降法进行优化,减少训练过程中的迭代次 数和Spark框架计算过程中的Stage生成,从而加快模型的训练速率; 7) 构建完整的识别平台,包括数据采集输入层、HDFS存储层、YARN资源管理层及PANN 算法应用层。2. 根据权利要求1所述的一种并行化的人体行为识别方法,其特征在于:在步骤1) 中,所述的基于Kinect的深度传感器获取的人体骨骼数据包括以人体为目标对Kinect的 深度信息进行识别能力测定,确定不同距离下关节点的深度数据变化,同时以KinectSDK 作为接口,相应的功能模块和可视化界面实时的采集数据。3. 根据权利要求1所述的一种并行化的人体行为识别方法,其特征在于:在步骤2) 中,所述的关节点数据预处理对三维空间数据规范化到〇和1之间。4. 根据权利要求1所述的一种并行化的人体行为识别方法,其特征在于:在步骤3) 中,所述的静态行为特征的提取包括关节点之间的骨骼的归一化向量表示,如下: 3. 1)对于静态行为特征所述的人体结构向量,是根据人体结构学的原理,将相邻的关 节点连接成骨骼向量,结构向量是描述动作的主要特征点,根据分为左右的情况,选择上肢 4组,下肢4组特征向量和一组脊柱向量; 3. 2)个体变化的幅度会产生差异,为精确描述上肢结构变化情况,选择了左腕、左肩、 右腕和右肩与臀部中央节点的空间夹角作为特征; 3. 3)结构向量在Kinect的输入流中是实时变化的,关节点之间的夹角也不稳定,因此 需要建立一个针对个体的可靠的骨架数据作为输入向量的偏置。5. 根据权利要求1所述的一种并行化的人体行为识别方法,其特征在于:在步骤4) 中,所述的动态行为特征指人体在运动过程中,每个关节点都会随着父关节点连带着运动, 动作在向前推进过程中,关节点之间的夹角不断改变,而不同的动作会产生不同的模式,以 人的整体关节点变化作为切入点,将骨架作为一个整体而不是脱离人体结构关系进行分 析,结构相似度考虑了人体的整个骨架在运动过程中的变化情况,将结构距离相似度定义 为人体在运动过程中的角度变化量和距离变化量的总差异,同时在滑动窗口的基础上,以 结构相似度的变化为搜索策略,根据当前帧与上次搜索帧的变化情况来动态调整滑动窗口 的大小。6. 根据权利要求1所述的一种并行化的人体行为识别方法,其特征在于:在步骤5) 中,所述的基于Spark的并行神经网络算法框架PANN基于当前的多层前馈人工神经网络, 由一个输入层、多个隐含层、一个输出层构成,采用后向传播的误差调整公式,层与层之间 通过单向的权值网连接,输入数据来自行为识别的特征提取后的数据,从分布式文件系统 HDFS中读取,将特征数据转化为Spark中的弹性分布式数据集RDD,特征数据RDD的分区数 量与集群计算节点数目相同,可以加速各子任务的计算,算法中神经网络的权值网络变量 weights矩阵在每个分区的每条输入数据中均会使用到,是一个全局变量,因此将其作为 Spark中的broadcast类型的共享变量,使其在每个节点中均有一份缓存,如下: 5. 1)在训练阶段,前向计算的过程中,各RDD分区通过与weights权值矩阵相乘依次 计算各隐层的输出,最后在输出层计算与实际期望的误差,统计总误差和并且产生一次RDD 的reduce操作,由此产生一个Stage,即每更新一次权值矩阵则产生一个新的Stage,客户 端驱动程序通过反向传播算法更新weights权值矩阵,并再次广播给各子节点,一次完整 的迭代过程完成; 5. 2)训练结束后即生成了最终的权值矩阵,作为模型的基础,在测试阶段,输入的测试 数据同样以相同的方式分区,通过权值矩阵并行计算即可批量得到输出向量,通过标签数 据转换成类别,测试数据RDD的分区数可以根据数据量的大小进行确定,由于模型已经训 练完成,只会产生两次矩阵的乘法运算,进行一次前向计算过程,因此只会生成一个Stage。7. 根据权利要求1所述的一种并行化的人体行为识别方法,其特征在于:在步骤6) 中,所述的拟牛顿法L-BFGS对梯度下降法的优化,基于对算法的可扩展性和实用性考虑, 同时为减少迭代次数和Stage生成,加快模型的训练速率,采用MLlib的L-BFGS接口,通过 自定义的梯度计算模块Gradient和梯度更新模块Updater来完成迭代计算的具体任务, Gradient定义了计算目标的梯度计算和损失函数,同时Updater定义了梯度更新的规则, 在进行迭代计算时,主要通过将权值矩阵广播到各个计算节点,各自节点计算梯度任务,再 进行更新操作,同时返回当前迭代的损失,通过判断两次的损失差值来确定是否收敛。8. 根据权利要求1所述的一种并行化的人体行为识别方法,其特征在于:在步骤7) 中,所述的识别平台,包括: 7. 1)人体行为的数据通过Kinect实时获取,包括图像的深度数据和骨骼数据,PC客 户端将采集到的骨骼流数据作为文本文件写入本地,并根据行为动作的类别进行分类和标 注,此数据作为识别系统预先的训练输入和识别输入,在采集与标注结束后以客户端形式 请求HDFS文件系统,向其中写文件; 7. 2)HDFS作为识别系统的底层存储平台,包括原始的骨骼流数据、行为特征数据以及 识别结果均以分布式方式存储,一方面可以方便PC客户端的调用请求;另一方面HDFS作为 上层Spark的数据支撑平台,为RDD的快速构建提供了基础; 7. 3)Spark平台作为整个系统的核心,包含了数据输入和预处理,特征提取,模型训练 各模块应用;其中,数据预处理包括对HDFS中的原始骨骼数据流进行标签分类、过滤错误 数据,同时根据静态特征的提取方法和动态行为的搜索算法对筛选后的骨骼数据流完成特 征提取转换,将结果写入RDD的同时,也作为历史特征数据进行HDFS文件的写入;采用上述 实现的PANN算法进行行为识别模型的训练,在预测模式下,根据已有的模型数据完成预测 和结果的写入,同时模型的权值网数据也可以写入HDFS作为持久化存储,方便进行模型的 更新与调整。
【专利摘要】本发明公开了一种并行化的人体行为识别方法,该方法以Kinect的骨骼数据作为输入,基于Spark计算框架实现了分布式的行为识别算法,构成完整的并行化识别过程。人体骨骼数据的获取是基于Kinect的场景深度获取能力,对数据预处理来保证特征的位移和尺度的不变性;对于静态行为特征,分别选取了人体结构向量、关节夹角信息和骨骼权值偏置,并提出了结构相似度的动态行为搜索算法。在识别算法上,将神经网络算法在Spark上并行化,对网络的权值更新过程采用拟牛顿法L-BFGS进行优化,显著的提高了训练速度。本识别平台以Hadoop分布式文件系统HDFS作为行为数据存储层,将Spark运行于通用的资源管理器YARN中,并行的神经网络算法作为上层应用,整个系统架构具有良好可扩展性。
【IPC分类】G06K9/62, G06K9/00
【公开号】CN104899561
【申请号】CN201510280063
【发明人】董敏, 金泽豪, 毕盛, 刘皓熙
【申请人】华南理工大学
【公开日】2015年9月9日
【申请日】2015年5月27日