基于 Leap Motion 和卷积神经网络的手势识别
扫描二维码
随时随地手机看文章
0 引 言
传统人机交互模式大多依赖键盘鼠标等直接接触的设备,但这种交互方式不够自然有效,已无法满足人们的需求。人们迫切需要一种更自然、更符合人们生活习惯的交互方式,如语音、意念、手势等。其中,手势凭借自然、直观等特点 [1] 在人机交互中得到广泛运用,如今手势识别已成为国内外学者研究的重点。文献 [2] 利用豪斯多夫(Hausdorff)距离模板匹配的思想实现手势识别,将模版手势与待识别手势进行边缘特征提取后变换到欧氏空间距离,其最短距离即对应的模版手势。文献 [3] 基于 SVM 构造多类分类器的手势识别,对手势分别进行一对一、一对多的数据分类,SVM算法是在样本空间或特征空间构造出最优超平面 [3],使超平面与样本数集合之间的距离最大。文献 [4] 采用 Kinect 传感器对手势图像进行获取,采用动态时间规整(Dynamic TimeWarping,DTW)的方法将不对齐的两个序列在某一时刻点进行压缩,实现两个点欧氏空间距离最小。文献 [5] 利用 BP算法训练多层前馈网络。
分析上述文献,发现以下问题 :
(1)模版匹配的方法无法解决时间可变性问题,识别精度低 ;
(2)基于 SVM 算法对大规模样本训练集的训练时间较长,难以运用在实际问题中 ;
(3)DTW 存在时间规整引入误差的问题,降低了识别精度 ;
(4)采用传统人工神经网络结构需要人工对参数进行提取。
针对以上问题,本文采用卷积神经网络算法对采集的手势进行识别。
市面上有两种深度视觉传感器 :一种是 Kinect 传感器,侧重于识别人体骨骼,也能识别人脸与人手,但识别人手的精度不高 ;另一种是 Leap Motion 传感器,能够采集人体手部的关键点信息,故能更好地应用在手势识别中。
1 Leap Motion 手势数据采集
Leap Motion 是一种采用立体视觉原理的传感器,内部配备双摄像头,如同人眼从不同角度捕捉画面。骨骼追踪模型如图 1 所示,此模型在视野不清晰时能够预测手指与手的位置,即使手指交叉也可被 Leap Motion 追踪。当 LeapMotion 检测到手或杆状物体时,系统会给 Frame 里的每一个Hand 分配一个唯一的 ID 标识符。Leap Motion 能够对手部信息进行描述,并在 Hand ::pointable()函数里提供指尖、关节点等的位置以及手掌的方向向量、法向量信息 [6],最后将 Leap Motion 采集到的人体手势数据通过 USB 接口传输给PC 端。
2 卷积神经网络
卷积神经网络(Convolutional Neural Networks,CNN)是一种前馈神经网络,其神经元可响应一部分覆盖范围内的周围单元,对于大规模模式识别有着非常好的泛化能力。CNN 还是一个分类器,是一种具有监督功能的机器学习工具,与传统神经网络相比,避免了对图像进行复杂的前期预处理,可直接将原始图像输入模型,图像经过卷积层、池化层、全局平均池化层,最后输出分类图像结果。CNN 主要用来识别位移、缩放及其他形式扭曲不变性的二维图像。 CNN 同一特征平面映射面上的神经元权值相同,所以局部权值共享的特殊结构在图像识别方面有着独特的优越性。
2.1 卷积神经网络结构
卷积层的作用是对局部进行感知,在原始图像的一个小区域上进行特征提取,池化层的作用是将卷积层输出的特征面继续进行特征化。本文选用最大值池化法(Max Pooling),可保留区域矩阵块中的最大数值,忽略其他值,并能提高模型的鲁棒性。全局平均池化层的作用是经过若干卷积池化后将所有特征全连接起来组成一个特征向量,这个特征向量更能表达原始图像 ;Filter(过滤器)的作用是将输入的图像划分为多个区域,同时 Filter 在映射图像中的参数共享,且相互独立 ;激活函数的作用是使整个网络呈现出非线性。本文采用线性整流函数(Rectified Linear Unit,ReLU),ReLU 函数可将神经元的一部分输出为 0,减少参数之间的关系,有效缓解过拟合情况的发生。卷积神经网络结构如图 2 所示,输入层为 32×32 通道为 3 的图像。Filter 尺寸为 5×5,深度为 3。但在实际计算中,存在无法将原始图像边界点利用起来的情况,针对此问题可根据实际情况设定补零的层数(ZeroPadding)。
2.2 卷积层与池化层
在卷积层中,将第一层的特征图与卷积核进行卷积,然后通过激活函数得出卷积层的特征图,其公式如下 :
式 中:i 表示网络层数;j 表示特征图个数;f (*) 表 示激活函数;k 表示卷积核;mj 表示输入特征图;b 表示偏置项。
在池化层中,神经元 x 的计算公式如下 :
式中 n 表示从上一层到池化层的窗口大小。池化是对该层输入 n×n 大小的矩阵区域加权求和,因此输出图像的大小是原来输入图像大小的 1 ⁄ n[8]。
3 实验结果与分析
为了验证 CNN 算法在手势识别上具有较好的准确性,确保 Leap Motion 能够采集到每一个手势,实验者需在距离Leap Motion 传感器正上方 100 mm 处采集 6 种手势。手势类别如图 3 所示,6 个手势分别代表 1,2,3,4,5,6 这六个数字,每种手势采集 200 个样本,样本均为 112×112 的手势像素矩阵,训练集和测试集各为 1 200 个。训练前对样本进行灰度处理,如图 4 所示。
实验结果见表 1 所列。手势 5 的正确率达 96.5%,且识别时间较短 ;但手势 4 的正确率只有 86%,响应时间较长。由于训练所用样本较少,导致复杂手势识别较低,因此可增加训练样本数量,提高手势识别的准确性。
4 结 语
本文设计了 6 层卷积神经网络用于手势识别,与其他神经网络相比,由于加入了权重共享原则,因此能够降低参数数目。理论上设计神经网络层数越多、节点越多,在训练模型上的效果就越好,甚至会达到 100% 的预测精度。但随之带来的是模型过拟合,将模型放在测试数据上,预测效果严重降低。残差神经网络是解决此类问题的方法之一,也是未来深度神经网络算法的又一研究方向。