陈壮炼,林晓乐,王家伟,李超
(广东轻工职业技术学院信息技术学院,广州510300)
随着科技的发展,现代技术不断的智能化,识别技术的应用愈加广泛,如人脸识别、指纹识别、车辆识别、手势识别等。手势是人与计算机更加自然的表达方式,即计算机通过识别手势来了解人体语言,人无需接触键盘、鼠标等外设即可与计算机进行自然交互[1]。手势识别在人工智能领域起到非常重要的作用,但手势识别在复杂背景下的识别准确率不高,本文利用卷积神经网络识别算法来提高识别准确率。
早期的手势识别是利用有线技术连接计算机系统,将数据传输到计算机,实现手势识别。如数据手套内设有传感器,传感器通过导线与外电路连接将采集的信号传递给虚拟环境,然后通过机器识别算法实现手势识别。该方法虽然识别准确率高,但在穿戴过程给用户带来极大的不便,而且价格昂贵。此后,数据手套被光学标记所取代,利用光学标记将手的位置和动作通过红外线传递给计算机,计算机根据手势做出相应的回应。光学标记准确率虽高,但仍需要复杂的设备,而且无法更自然的表达。
近年来手势识别发展较快,但大多识别算法仅在简单背景下识别,在复杂背景下识别准确率有所下降,许多专家针对此种情况更倾向于使用卷积神经网络算法,卷积神经网络对摄像头采集到的手势进行预处理,通过卷积层和池化层提取特征,使用激活函数对卷积的结果进行非线性映射,全连接层对结果进行识别分类。卷积神经网络识别准确度相对较高,因此,基于卷积神经网络的手势识别成为热门领域。
卷积神经网络是基于动物视觉感受野设计而成,由卷积层、池化层和全连接层构成。它是人工神经网络的一种。传统的人工神经网络中,每一层都是全连接的,如输入是一副100000000 像素的图像,则输入层与隐藏层的某一个节点将有100000000 个权重需要训练,这将会导致训练困难。而卷积神经网络提出了权值共享的概念,即用同一个卷积核生出卷积层上的所有节点。每个节点是与上一层的某个区域通过卷积核连接,不与除卷积核以外的区域连接,这大大减少了训练的参数量,如对100000000 的图像,若采用1000 的卷积核,则每个节点只需要训练100 个节点。
卷积神经网络结构如图1 所示[2],卷积层主要是提取图像特征,池化层是对提取的特征进行降维、防止过拟合,全连接层主要是输出结果。
图1 卷积神经网络结构图
卷积层主要是实现特征的提取,我们输入一张图片,计算机读取的是通过像素矩阵标识的图像,卷积层将像素矩阵与若干过滤器(卷积核)进行线性乘积(即卷积运算),每一个局部信息通过卷积核提取的特征信息通过权值共享的方法整合到特征图中,如图2 是卷积运算的过程。
图2 卷积运算过程
每个卷积运算得到的特征图可以组合卷积多个特征图的值,通过卷积操作,可以增强图片的特征信息,并降低噪音的影响[3],从而提高手势的识别率。卷积层的计算公式如下所示:在卷积计算公式中,xl
j表示第l 层的第j 个特征图,xli-1表示第i 个特征映射,Mj表示数据的集合,表示权重,表示偏置。例如现有5×5 的图像和2×2的卷积核,通过步长为1 的卷积运算,得到4×4 的特征图,如图3、图4 所示。
图3 图像矩阵(左)、卷积核(右)
图4 运算过程
如图4,当把卷积核置于图像矩阵的右下角执行的运算为:
2*0+1*1+1*1+0*2=2,则输出的特征图中的特征参数为2。通过不断地平移卷积核,与输入矩阵进行卷积操作,就形成了新的特征矩阵。但对于一些比较大的图片,在进行卷积操作时若每次只移一个步长则效率会比较低,卷积后的特征也较冗余,所以可以引入一个超参数对每次移动的步长进行调节,即卷积步长(Stride)。
下面介绍不同步长得到不同特征图的效果:
当步长stride 为1 时,卷积的移动过程如图5所示。
图5 步长为1的卷积移动过程
输出矩阵大小为:
当步长stride 为2 时,卷积移动过程如图6 所示。
图6 步长为2的卷积移动过程
可以看出,卷积核在移动过程中跳过一个单元格,即步长从1 变为2,则输出矩阵大小为(向下取整):
池化层在卷积神经网络中对输入的特征图进行降维,一方面是特征图变小,降低网络计算的复杂度,另一方面是提取主要特征。池化层可以忽略目标的相对位置的变化,来提高识别的精度,在一定程度上可以防止过拟合。常用的池化层有最大池化和平均池化。
对于池化操作,需要界定一个过滤器和步长。最大池化是取输入矩阵在过滤器矩阵块的最大值作为输出矩阵相应位置的输出。平均池化是取输入矩阵在过滤器矩阵块的平均值作为输出矩阵相应位置的输出。池化示意图如图7 所示[4]。
图7 池化示意图
图7是一个4×4 的特征图,现有2×2 的过滤器,步长为2,当过滤器在左上角时,若为最大池化,取过滤器所在大小的最大值,即取6,若为平均池化,则取过滤器所在大小的平均值,即。上节提到卷积层卷积后的矩阵大小的公式同样适用于池化后的矩阵大小。
全连接层在卷积神经网络中起到“分类器”的作用[5],将学到的“分布式特征表示”映射到样本标记空间。如果说卷积层是局部特征的提取,那么全连接层就是将其提取到的局部特征重新通过权值矩阵整合成完整的图片,也就是说全连接层可以整合卷积层中具有类别区分性的局部信息。
在CNN 中,卷积和池化操作相当于做特征工程,全连接层相当于做特征加权。在经过多个卷积层和池化层后,连接着一个或多个全连接层,全连接层的每个神经元都与上一层的所有神经元相连。全连接层可以整合卷积层或池化层具有区分类别的信息,即把卷积或池化输出的二维特征图转化成一个一维的向量。过程的实现如图8 所述。
图8 卷积神经网络过程
如图8 为例,当进行卷积层提取特征后,通过池化层得到30 个12×12 的特征图,在进行全连接,由于全连接层的每个结点与其下一层结点都有连接,即需卷积操作30×100 个12×12 的卷积核,卷积操作之后整个输入图像就会变成一个数值。总共有30 个特征图,那么会产生30 个值,在将这30 个值进行累加求和,浓缩成一个数值。重复进行100 次之后会得到100 个值,即1×100 的向量。
手势识别是人机交互中比较高效率、直接和便捷的一种。该手势识别系统通过采集剪刀、石头和布三种手势进行训练和识别。如图9 所示,用户将手部移入正方形的绿色识别框内,系统会捕捉到手势进行识别判断,将识别结果显示在屏幕的左上角。
图9 手势识别
(1)手势识别过程
手势识别分为几个步骤:通过采集手势数据、利用OpenCV 对手势数据进行二值化处理、将处理后的数据输入到卷积神经网络进行训练、用训练后的模型进行手势识别。识别流程图如图10 所示。
图10 手势识别过程
(2)采集图像数据集
系统要进行识别首先需要采集数据,系统通过调用PC 端摄像头对剪刀、石头、布三种手势进行图像采集。如图11 所示,按键盘上的c 字母创建需要存放手势的文件夹,文件夹名作为训练数据的标签,再输入需要采集图片的数目,将手移入绿色的小方框,按s 键开始采集手势。
图11 手势采集
(3)图像预处理
在手势识别过程中,将采集到的手势图像转换为数字图像时,在传输过程中可能会受到外界因素的干扰和影响,如噪声、光照等。手势图像会因这些干扰而产生畸变,导致训练出来的模型识别准确率不高,因此需要进行图像预处理。
在采集过程中摄像头采集到的图像都是没经过处理的彩色图像,彩色背景会对手势训练产生影响,因此要进行图像分割,将手势与背景分离开来[6]。若将彩色图像作为输入数据进行手势模型的构建和训练会让计算机计算量过大,导致过拟合,从而影响程序的运行效率和手势识别的精确度。为了更好地分割图像,设置了手势的识别区域,如图12 所示的绿色小方框,识别区域缩小可以降低大背景下噪声对图像的影响,手势采集过程中只需将手移入小方框即可。识别区域采集到的原始图利用自适应阈值二值化算法进行预处理[7]。处理后得到的二值化图像如图12 所示,二值化后的图像是黑白图像,图像中将手势的轮廓描绘出来,这样的图像在进行提取特征和模型的训练中将会提高准确率。
图12 二值化图像
(3)构建训练模型
将处理后的图像作为输入数据输入构建好的卷积神经网络中,卷积神经网络通过卷积和池化操作提取手势特征,全连接层进行分类输出,利用soft_max 损失函数来衡量模型预测的好坏。模型训练结果如图13、图14 所示,训练次数为10 次训练后模型的准确率达到97.54% ,训练次数为20 次的模型准确率达到
98.36 %。
图13 训练10次的模型训练结果
图14 训练20次的模型训练结果
(4)手势识别
模型训练完成后,按q 键打开识别窗口进行手势识别,用户将手移到识别区域,系统会调用训练完的模型对摄像头捕捉到的手势进行识别,若识别到三种手势,则将识别到手势的标签作为结果显示在窗口的左上角,识别结果如图15 所示。
图15 三种手势识别结果
人机交互最重要的一点就是电脑是否能准确接收外界的信息并快速做出响应,所以手势识别的成功率成为了手势识别能否应用在人机交互领域至关重要的一点。而图像采集、图像处理和模型训练这三个环节对于识别的成功率有着非常大的影响。图像采集时手部占的比例应尽量大,过多的背景会带来更多的噪点(高频信息),这些噪点会带来过剩的计算量,多余的计算量会大大延长训练的时间,对计算机的性能更是一种考验。图像处理可以压缩一张图像的信息量,经过处理的图像虽然失去了色彩和维度,但可以更全面地获取手势的全局和局部特征,这样有利于提高模型的准确率。并且针对该手势识别人机交互系统的设计思路而言,只保留手势图片的基本特征更有利于模型的训练。经过裁剪采集图像的尺寸,剔除过剩图像信息,最终输入卷积神经网络的图像数据相对小了很多,需要训练的时间也会相对减少很多,这样同样的时间可以进行更多次的训练,从而提高了手势识别的效率。
本文针对传统的人机交互无法让用户与计算机更直接、自然的交互方式,设计了基于卷积神经网络的手势识别人机交互,用户只需将手移到摄像头前就可与计算机进行交互。基于卷积神经网络,手势识别可分为目标检测、图像分割、图像识别,目标检测主要是将手势标注出来,而手势在整个图像占比不大,在剔除背景有一定助力,图像分割主要是获得二值图像,所以分割的好坏直接影响图像的识别精度,基于OpenCV 算法就可以很好地解决分割问题。
手势识别在智能时代的发展尤为重要,它是一种非接触式的人机交互技术,运用卷积神经网络可以解决人机交互在特征提取的问题。目前手势识别仍在追求高精度算法来提高识别的准确率。