基于改进AlexNet的复杂背景手势识别方法研究
2021-01-04郭书杰
郭书杰
(大连东软信息学院 智能与电子工程学院,辽宁 大连 116032)*
随着科技的进步,日常生活中的各类电子设备越来越多,为了与这些设备进行高效的交流,人们研究出各种各样的人机交互方法.作为一种肢体语言,手势具有简单、便捷的特点,它提供了一种有效的人机交互手段,特别是在AR和VR技术快速发展的今天,越来越多的设备开始使用手势作为人机交互方式,手势交互已经被广泛地应用于汽车、消费电子产品、机器人、游戏、智能家庭、自动手语翻译等诸多领域[1-3].精准高效的手势识别,是将手势应用于人机交互的关键,因此手势识别技术是人机交互领域的一个重要研究方向,研究者提出了多种解决方案,大概可以分为基于传感器的方法和基于机器视觉的方法两种.王龙等[4]提出了一种结合肤色模型和卷积神经网络的手势识别方法.Oyebade等[5]提出了一种基于卷积神经网络的手势识别方法.彭玉青等[6]通过改进YOLO算法提出了一种基于深度学习的手势识别算法HGDR-Net.彭理仁[7]等提出了一种基于深度图像进行静态手势识别的方法.这些基于深度学习的手势识别方法大多是对原始图像直接进行手势识别,或者是结合肤色模型对图片进行简单的预处理,当图像中手所处的背景相对复杂时,特别是与人脸、手臂等裸露皮肤的部分有重叠时,算法的识别率就会降低;同时,这些算法所采用的神经网络模型也比较复杂,训练成本较高,实时性能稍差.为了解决这些问题,提出了一种手势识别方案,方案通过对图像的预处理,在一定程度上屏蔽了裸露的皮肤对识别结果的影响;同时对AlexNet网络做了增加批标准化操作的改进,从而提高了模型的优化效率.
1 基于CNN的复杂背景手势识别方案
1.1 手势识别问题的特点
与其他图像分类问题比较起来,手势识别问题具有以下特点:
(1)不关注图片的颜色:由于手势识别的重点是手型的轮廓,所以无需关注图片的颜色,使用灰度图像就足以求解.
(2)硬件性能相对较弱:使用手势识别作为人机交互手段的设备,一般都是硬件性能相对较弱的嵌入式系统,这就要求手势识别方案要具有较高的执行效率,因此算法要具有较少的内存访问消耗(memory access cost 简写为 MAC)和较低的算量(float-point operations,简写为FLOPs)
1.2 基于CNN的手势识别方案
针对手势识别问题的上述特点,制定了基于CNN的手势识别方案.方案选用改进的AlexNet模型作为手势识别的卷积神经网络.AlexNet是由Krizhevsky等[8]提出的轻量级CNN网络,AlexNet的结构相对简单,对硬件性能的要求不高;同时在图像识别领域,AlexNet也具有非常好的表现.然而由于AlexNet采用非线性激活函数,随着训练的进行,可能会出现神经元死亡的情况,进而改变数据的分布.为了能够更好地解决手势识别问题,对AlexNet进行了两个方面的改进.一是对网络结构进行优化,增加了三个批标准化(Batch Normalization)操作;二是通过对比实验对网络的超参数进行了优化选择.
在对改进的AlexNet网络进行模型训练之前,首先对数据集中的图片进行统一规格、边缘提取等预处理,从而屏蔽脸部、手臂等裸露皮肤对识别结果的影响;然后使用预处理后的数据集对改进的AlexNet进行训练并导出训练好的模型参数;最后使用训练好的网络进行手势识别.方案的具体流程如图1所示.
1.3 数据集
为了对深度学习模型进行训练和测试,需要大量的包含各种手势的图片作为数据集.数据集的大小决定了训练出来的模型的识别准确率,为了保证训练出来的模型的识别性能,需要有足够大的数据集.本文用到的数据集有两部分:NUS-II 数据集[9]和自己采集的数据集.NUS-II 数据集共有2750张复杂背景手势图片,实验结果显示,该数据集的图片数量过少,很难解决模型的过拟合问题,为此又采集了13796张手势图片对数据集进行了扩容.数据集中的部分图片如图2(a)和2(b)所示.
1.4 数据集预处理
为了降低MAC和FLOPs,根据手势识别问题对数据集中的图片做了如下处理.
(1)统一图片的尺寸.为了便于深度学习模型在训练和测试中使用,将数据集中的图片统一转换为200×200;
(2)对图像进行边缘提取.在进行手势识别时,关注的重点是手的轮廓,为了降低计算量,在进行模型训练之前,对数据集中的图片进行了边缘提取.常用的边缘提取滤波有三种,Sobel算子、Laplacian算子和Canny算子,有通过对比他们的边缘提取效果,最终选择使用Sobel算子是一种边缘提取滤波器.边缘提取效果如图3所示.
1.5 深度学习网络选择及改进
在进行模型选择时,一般要遵从够用即可的原则,为了能够找到适合问题求解的简单模型,使用Python编写了自定义的3层卷积神经网络、LeNet-5和AlexNet三种模型分别进行了测试.测试时,对三种模型,分别使用相同的数据集和相同的损失函数、激活函数、优化器等超参数配置.每种模型分别进行了15期训练,通过对比每种模型在测试数据集上的识别准确率来评价模型的优劣.测试结果如图4所示.
由图4不难看出,三种复杂度相近的深度学习模型中,AlexNet模型具有最好的优化能力,并且经过15期的训练就能达到超过90%的识别正确率,所以选择该模型来进行手势识别.
由于深度神经网络需要用到多层的叠加处理,每一层参数的更新往往会导致上层的输入数据的分布发生变化,随着叠加层数的增加,高层的输入分布会发生非常剧烈的变化,这就使得高层需要不断的更新以便适应底层的数据变化,从而降低了学习速度.同时,这也可能导致模型落入饱和区,使得学习过早停止.另外,由于每层的更新都可能会对其他层产生影响,因此很难制定每层的参数更新策略.批标准化操作可以有效防止模型梯度爆炸或弥散,能够让大部分的激活函数远离饱和区域,可以提模型对于各个超参的鲁棒性.从图4可以看出,AlexNet同样具有容易导致梯度消失、模型优化过程进展缓慢,从而使得分类准确保持在某一值附近不能再提高的问题.为了解决这一问题,对AlexNet网络进行了结构优化,在其第3、4、5个卷积层中,也加入了批标准化操作来降低数据的分布的改变带来的影响,进而提高算法的优化效率.改进前后模型的性能对比如图5所示.
由图5可以看出,改进模型具有更好的持续优化能力,能够使得识别准确率持续提高.最终结果显示,与经典AlexNet模型相比,改进模型能够将手势识别的准确率提高4%左右.
1.6 深度学习网络超参数的设置
超参数是深度学习中的一个重要概念,它是指那些在开始对模型进行训练之前,需要人为设置参数值的参数.超参数的设置,对一个深度学习模型的性能具有很大影响.所以寻找一组合适的超参数是建立一个深度学习模型的关键步骤之一.根据Mishkin D等[10]的研究结果,选取激活函数、池化操作、Batch size和数据集大小等四个超参数作为研究对象,通过对比实验,以他们在测试数据集上的识别准确率给标准,考察了他们对模型性能的影响.在进行实验时,为了减少运算时间,除了“数据集对模型性能的影响”外,其他实验均采用5070个图片的小数据将进行.各个参数对模型性能的影响如图6(a)~图6(d)所示.
由实验结果不难看出,由于加入了更多的批标准化操作的,更好地发挥了ReLU激活函数的性能;Batch size和数据集的大小对模型的性能具有比较明显的影响,不同池化操作对算法性能的影响并不明显.根据上述实验结果可以,选择以下超参数配置方案.激活函数选ReLU;Batch size设置为32;选用MaxPool池化操作;数据集中的图片数量选在1.6万张.
1.7 使用模型进行手势识别
有两种方式可以使用训练好的模型进行手势识别,一个是通过摄像设备实时采集图像并识别;另一种是对给定的图片进行识别.不管是使用哪种方式,都会首先使用1.3节说描述的方法对待识别的图像进行预处理,然后在用训练好的模型来进行手势识别.
2 实验及结果分析
为了验证方案的可行性,使用python编程实现了改进AlexNet模型,按照1.5节中的超参数配置方案配置模型,并使用扩容后的NUS-II 数据集(共有16546张图片)对模型进行了100期的训练.然后使用自己编写的基于OpenCV的图像采集程序,采集了三个人的手势图片,并从中随机选出100张来对训练好的模型进行验证测试.测试中正确识别了93张图片,5张图片未能识别出结果,2张图片识别错误.未能识别出结果的图片可能是因为进行采集时,被采集人离摄像头较远,采集出的图片中人手部分显得特别小.识别错误的图片主要是两个背景比较复杂的手势,手势C和手势H.
3 结论
使用改进后的AlexNet模型进行手势识别时,能够达到约93%的识别准确率.但是识别结果仍然受图像背景以及手势占全图的百分比的影响,当背景过于复杂或手势占比较小时,识别不出结果或识别错误的概率就会增大.在下一步工作中,可以先检测并标记图片中手的位置,然后对手势所在部分进行归一化后,再做识别.