基于人体关节点的高效动作识别算法

2020-11-17 06:55张恒鑫叶颖诗蔡贤资魏福义
计算机工程与设计 2020年11期
关键词:关节点分类器灰度

张恒鑫,叶颖诗,蔡贤资+,魏福义

(1.华南农业大学 数学与信息学院,广东 广州 510642; 2.电子科技大学 信息与软件工程学院,四川 成都 610054)

0 引 言

人体动作识别是智能社会的重要辅助技术,在长者看护、人机交互、智能安防、视频搜索和敏感场所异常监控等方面都有着应用价值。视频中存在着人体、物体、事件和场景等复杂的信息,本文研究的人体动作识别是对视频中多种信息的快速高效分析和理解。

以特征是手工设计或自动学习作为区分依据,可分成传统的动作识别方法和基于深度学习的动作识别方法两种。为减少特征的维度和提高识别效率,传统的动作识别方法一般需要先寻找视频三维空间中的时空兴趣点,然后在其邻域内提取表达有效动作特征[1],再在兴趣点或轨迹的时空邻域内提取动作特征。在目前的传统动作行为识别研究中,基于密集轨迹的识别技术取得了除深度学习方法外最好的实验效果[2],但传统的行为识别方法只在特定场景下效果较为突出,难以移植。相反,深度学习方法可以自动学习构建出有效的动作特征,特别适合复杂的场景,具有非常优良的泛化能力和鲁棒性。近年来,基于深度学习的方法在计算机视觉领域取得了非凡的成果。但深度学习需要大量的数据支撑,不适合小型数据集的处理,且整个模型是端到端的,是个黑盒模型[3]。

在很多应用场景,识别效率是非常重要的性能指标。本文结合两者优势,提出一种借助深度学习模型获取人体关节点信息并用传统方法构建时空特征的动作识别算法,经实验验证能得到快速高效的识别效率。

1 整体流程

动作的发出者是人体,非人体区域的特征不构成人体动作识别的主要判别依据,模型的注意力应聚焦在人体上。基于此,本文提出先检测出人体兴趣区域,再对人体关节点进行提取建模。算法提取的特征简单高效,且消除了复杂背景对人体动作识别的扰动,具有良好的鲁棒性。整体流程包括以下4个步骤,如图1所示:

图1 整体流程

(1)以一定间隔抽取一个视频的若干帧,形成输入帧序列;

(2)利用人体检测算法得到各帧中感兴趣的人体区域;

(3)借助人体姿势估计算法得到人体区域中人体关节点的二维坐标信息,并构建人体骨架模型,然后计算关节向量的时空几何角度描述特征;

(4)将行为特征输入到训练好的k最近邻(k-nearest neighbor,kNN)分类器中进行分类,输出行为标签。

2 基于LBP描述子的快速人体检测

人体检测中特征的选择尤其重要,例如Haar小波特征、edgelet特征和运动特征等。在目前的研究中方向梯度直方图(histogram of oriented gradient,HOG)是使用最广泛的人体检测特征,它可以很好地捕捉和描摹人体,但存在着计算量大、运算速度慢的致命缺陷[4],不适合对实时性要求较高的应用场景。

2.1 使用LBP描述子检测人体轮廓

表征身体外沿的轮廓特征可以提供人体检测的重要信息,并且相邻像素值差的正负是有效表达人体轮廓的关键[5]。而局部二值模式(local binary pattern,LBP)简洁编码了相邻像素值差的正负信息,具有无需预处理和后处理、灰度不变等优点[6]。

如图2所示,LBP算子在3×3的区域上进行计算,用中心点灰度值顺时针依次与相邻8个灰度值比较。若比较的灰度值大于中心点灰度值,则该位置被赋值为1;若否,则该位置被赋值为0。随后将按比较顺序组成的二进制数转换为十进制数,最后以该十进制数作为区域中心点的LBP值。

图2 LBP算子

假设输入是一张普通的RBG图,首先需要将其转换为图3(a)的灰度图以便下面的处理。为了让LBP特征更加专注于人体的轮廓,本文采用广泛使用的Sobel边缘检测算子处理灰度图,其对边缘定位准确的同时具有很强的鲁棒性[7]。在Sobel图上提取LBP描述子,可以提取出更加有效的特征,并且过滤掉了许多噪声。

图3 灰度图及Sobel图像

在Sobel图的基础上,借助LBP算子可以得到LBP图的每一个像素的灰度值大小。因为LBP值的计算需要3×3的运算区域,所以会忽略图像周围1个像素的区域。

算法将一个窗口份分割成m×n个单元(cell),将每2×2个相邻的单元组成一个块(block)。特征的提取在块上进行,统计每个块中的LBP值直方图,然后将所有块的LBP直方图串联形成最终的LBP描述子(LBP Descriptor),如图4所示,黑色边界的小格子为单元,左上角深底色内部虚线的大格子为块。

图4 窗口划分

2.2 快速检测框架

如图5流程所示,为实现快速检测,使用一个线性支持向量机(support vector machine,SVM)分类器和一个非线性SVM分类器级联的方法。首先使用线性分类器Hlin以滑动窗口的方式对输入的图像进行多尺度扫描,排除非人体区域。借助线性分类器Hlin,可以排除大部分(高于90%)的区域。再使用非线性分类器Hlik精确判别经过线性分类器Hlin筛选出来的小部分区域,最后得到人体区域。

图5 级联SVM工作流程

关于级联SVM的定义以及如何利用线性SVM分类器进行快速扫描,请参见文献[5]。

最后需要对检测结果进行非极大值抑制(non-maximun suppression,NMS),这会帮助得到最终的人体区域,并且可以有效消除误报。非极大值抑制的工作流程如下:

(1)按得分(Score)降序排列待处理候选框集合H;

(2)选出得分最高的候选框h。遍历集合H中的其余候选框,与最优候选框h计算面积交并比(interection-over-union,IoU)。若IoU高于某个阈值(一般为0.3~0.5),则认为该候选框与最优候选框h重叠,将此框从集合H中移出;

(3)重复步骤(2),直到集合H不再变化。

从图6看出,经过非极大值抑制处理,左上角的误报被消除。

图6 人体检测结果与非极大值抑制效果

3 基于人体关节点时空角度特征的高效行为识别

人体关节点(Joint)对于描述人体姿态以及行为具有十分关键和有效的信息。当人体表征为不同的姿势时,关节点与关节向量(骨骼)都呈现出不同的空间信息。人的动作可以看作是不同的人体姿态(如图7所示)组成的一组序列。因此追踪关节点的坐标和探索关节向量的时空几何角度信息,可以提供非常直接和可靠的信息来实现人体行为识别。

图7 人体姿态

3.1 人体骨架模型

3.1.1 人体关节点和关节向量定义

算法使用公开的OpenPose人体骨架识别系统以得到人体关节点的位置信息[8],其具有两点优势:

(1)可在普通的RGB图像中捕捉COCO(common objects in context)模型人体骨架信息,提供场景中人体关节点的坐标信息。

(2)采用自下而上的人体姿态估计算法,检测速度较快,实时性好且精度较高。

本文采用B=(J,V) 来表示一个人体骨架信息,其中J表示的是关节点位置集合,V表示的是关节向量集合。下面给出关节位置与关节向量的定义:

关节位置(joint positions,JP):将t时刻(帧)中人体的第k个关节点位置定义为Jk(t)=(x,y)。

关节向量(joint vector,JV):根据关节点位置信息,对肢体的有效部分进行关节向量提取,表示为Vmn(t)=Jn(t)-Jm(t)。

OpenPose提供了24个关节点信息,但并不是所有的关节点对人体姿势描述有作用[9]。本文在构成人体骨架的头颅、躯干和四肢三大部分中,选取有效的关节点组成相关联的关节向量,最终构建符合人体学和行为学的人体骨架模型。具体选取的关节点和组成的关节向量可见图8(b)以及表1。

图8 人体骨架模型

表1 关联关节向量定义

3.1.2 缺失值处理

利用OpenPose提取获得的人体关节点二维坐标存在两种数据缺失问题:一是场景中的人体部分被遮挡,导致部分关节点无法被检测;二是由于OpenPose自身算法模型的限制,对具有歧义的关节点信息产生数据丢失。

考虑到人体关节点的变化趋势在极短时间内可以看成是一段直线,本文使用最近邻前后帧进行线性回归预测缺失值,是一种简单但有效的补全缺失关节点的方法。若关节点Jk(t)=(x1,y1) 发生缺失,记最近邻前帧对应关节点为Jk(t-l)=(x0,y0),最近邻后帧对应关节点为Jk(t+m)=(x2,y2),那么缺失关节点可以由式(1)计算得到

(1)

3.2 关节向量的时空特征提取

(1)关节向量方向余弦特征

当场景中的人体进行某种行为时,其每一段关节向量与场景都构成一定的位置和角度。因此本文提取关节向量与坐标系的x轴和y轴所成夹角余弦值作为关节向量方向余弦特征。

(2)关节向量夹角余弦特征

另一方面,由同一关节点连接的两段关节向量之间的空间夹角大小也为描述人体行为提供了重要信息。因此还需计算关联关节向量之间的夹角余弦特征来描述人体行为。

(3)关节向量角度变化率特征

一般来说,引入时域的特征可以更好地表达人体的行为,增加类内相似性,减少类间的相似性,提高识别率。因此本文提取同一关节向量不同时刻间的角度变化速率作为行为判别的时域特征。表2给出了同一个人在单手挥手和双手挥手两种行为中右肘到右腕关节向量的5组角度变化率值:

从表2中可以看出该关节向量在单手挥手时角度变化率近乎没有,而在双手挥手时角度变化率波动剧烈,十分符合视频中单手挥手是使用左手挥动而右手近乎不动的实际情况。

表2 右肘到右腕关节向量在两种行为中的角度变化率

选取的3种关节向量的时空特征如图9所示。

图9 关节向量时空特征

4 实验结果

4.1 人体检测模块

人体检测数据集正样本中来自于MIT数据库,共924张图片,大小为128×64,人体大小约80个像素,且人体在不同的光照条件下穿着不一样的颜色、纹理和款式等的衣服,并有着不一样的姿态,包括低头、行走和站立等,还有着正面和背面等视角;负样本共50张原图,囊括了森林、街道、建筑、车辆、冰川、郊野、山川和夜景等各类背景元素。在训练中,从负样本原图中随机裁取了2000张负样本,大小与正样本一致。图10给出了部分正、负样本的示例。

图10 正样本与负样本示例

表3给出了在本文算法以及常用的HOG+SVM方法使用相同训练集样本训练后,在相同测试集上的实验结果,测试机环境配置为intel i5-8300H+8 G内存。

表3 人体检测模块实验结果

从表3中可以看出,在测试环境中本文提出的人体检测算法不仅检测速度比HOG+SVM的方法快约16倍且精度更高。

4.2 人体动作识别模块

人体动作识别模块选择在广泛使用的Weizmann数据库上进行实验。Weizmann数据库包含10种动作(具体的动作如图11所示),部分动作与动作之间相似度较高(如单脚跳和跑步),为精确识别带来了不小的挑战。每种行为由9个人在相同背景下完成,共计90个视频。视频长度在28帧-146帧,平均长度为61帧。

图11 Weizmann数据库定义的行为类别

在实验中,运用OpenPose算法预先对每个视频提取出每一帧内人体关节点的二维坐标,每个视频单独形成一份数据文件。然后读取每一份数据文件,处理缺失值后,以步长4的间隔取样6帧视频帧作为单个的输入帧序列,故一组动作的总特征维度为28×6+12×6+14×(6-1)=310。图12给出了原地跳跃加击掌以及弯腰两种动作的帧序列骨架可视。

图12 两种动作的帧序列骨架可视

本文选用kNN作为分类器,其在多分类任务上的表现要优于SVM分类器[10]。经过实验,选取近邻参数为3时取得较好的分类效果,可以达到88.93%的精度。不同近邻个数选取对分类精度的影响如图13所示。

图13 不同近邻参数的分类精度

图14是本文行为识别算法的识别率混淆矩阵,可以看出基于人体关节点时空角度特征对于噪声干扰鲁棒性强,大部分行为的类间区分度高,识别率高达95%以上。但走、并脚跳和原地跳跃这3类行为由于人体时空变化小、相似性高导致识别率仅有75%左右。

图14 识别率混淆矩阵

5 结束语

人体动作识别是计算机视觉研究领域一个非常活跃的研究方向,未来将在各种基于视频的应用系统中广泛使用,有重大的应用价值[11]。本文结合传统行为识别方法和深度学习方法提出的算法模型由于选取的特征简单高效且不需要进行后处理,在实验中取得了较高的识别率和较为实时的检测速度,比较适用于场景干涉不复杂和对实时性能要求较高的应用环境,本文算法已经作为联合培养基地室内人员实时定位系统的动作识别辅助,后续工作中将对多人场景及人与场景交互等情况做进一步扩展和优化。

猜你喜欢
关节点分类器灰度
采用改进导重法的拓扑结构灰度单元过滤技术
基于深度学习和视觉检测的地铁违规行为预警系统研究与应用
关节点连接历史图与卷积神经网络结合的双人交互动作识别
Bp-MRI灰度直方图在鉴别移行带前列腺癌与良性前列腺增生中的应用价值
基于差异性测度的遥感自适应分类器选择
搞好新形势下军营美术活动需把握的关节点
基于实例的强分类器快速集成方法
RGBD人体行为识别中的自适应特征选择方法
基于最大加权投影求解的彩色图像灰度化对比度保留算法
基于像素重排比对的灰度图彩色化算法研究