基于深度学习的手势识别系统的设计与实现【高分毕设】
实验基于Windows平台的CPU版本tensorflow进行训练,经过调参、训练,完成了模型训练过程,最终训练出来了分类准确率达到93%以上的模型,为以后的手势分类使用产品落地奠定了基础。本实验过程中,针对图像耗费算力的情况,采取了将图像压缩至128*128维度的方法,可以满足在较低资源之下进行模型训练,有效扩展了应用使用场景,降低硬件使用需求。另一方面,分类准确率达到93%以上,说明基于深度学
手势识别在互联网环境下有重要作用,手势识别可以应用在智能设备操作系统和游戏场景中,可以提升手势操作在智能设备中的操作便捷性和智能水平。基于深度学习的图像处理的方法可以对手势识别图像进行分类处理,要求是原始数据必须有标记,通过收集具有标记的手势分类,可以满足图像分类算法对数据的要求。
本人专注于软件开发,可以助你升学、就业、深造,我会定期发布对应的软件设计和内容,大家如果有开发需求,或者有毕业设计需要辅导,可以私信联系、评论,我看到一定就回。
资源链接
论文链接
源码链接
1 绪论
1.1课题背景
手势识别系统可以对人体的手势进行识别,在很多方面都有应用,比如在设备的应用方面,可以通过摄像头获取手势信息并并识别,提升电子设备的交互体验。人们可以通过手势的方式,不用触摸屏幕,就可以将自身的操作信息传递给电子设备,可以大幅提升操作的便捷性,提升操作交互体验。在医疗应用中,可以通过识别手势,从而将医生的动作传导到远程的手术室,进行远程手术,可以在医疗场景中通过远程手术提升急救的效率,从而有可能挽救生命。在游戏场景中,可以使用基于手势的识别系统识别玩家的动作,从而可以根据玩家的手势进行游戏互动,改变了传统手柄的操作方式,提升游戏体验,加强沉侵式感受。
1.2课题意义以及目标
从理论层面来说,基于图像的手势识别技术可以在图像手势识别中有所理论建树,可以完善现有的一些理论体系,目前基于手势识别技术的理论成果相对丰富,但是主要是基于SVM、也有基于神经网络的,但是基于神经网络的图像一般使用超大规模的设备和集群训练完成,无法实现在算力限制的情况下有较好效果,本文拟采用图像压缩的方式基于深度学习神经网络进行训练,可以在算力紧张的场景下进行手势分类训练。从实践层面来讲,基于图像的手势识别有很多应用,一是可以给智能设备提供操作界面,提升人机交互体验,可以突破现有触摸的操作方式,提升设备可操作性和智能水平;二是在游戏领域,可以使用手势识别代替传统的键鼠操作和手柄操作方式,可以进一步提升沉侵式体验;三是在工业控制等流程中,可以使用手势的方式和机器互动和协调,完成对应的工业操作流程;此外,在其他一些场景中,也可以使用手势,比如手势绘画、截肢患者控制等都可以使用手势识别。
1.3国内外研究现状
国内外在手势识别中的研究成果较多,研究方向和思路也不尽相同,但是以机器学习和计算机视觉为主要研究方法和思路,而且在这个方向上取得的成果最多,落地应用场景也较广泛。
1.4论文主要研究内容
基于深度神经网络的手势分类的算法研究,需要从以下几个步骤展开工作进行研究。
首先要对手势分类现状进行了解,包括手势分类的一些研究现状以及应用情况。比如基于机器学习的手势分类研究、基于手部生物学特征的手势分类研究和基于肌电的手势识别研究等。
第二,需要广泛收集手势分类的相关资料,包括国内外学者对手势分类的算法研究,以及国内外工业界的具体实现,从而给本课题的研究奠定基础,确定本课题的研究思路,使用基于图像的数据表示手势,并使用基于深度神经网络的方法对手势图像进行分类。
第三,进行手势分类算法的设计,手势分类算法设计是论文的核心内容,包括的内容有如下几个方面,一是确定如何表示手势,本文采用图像的方式表示手势图像,即手势图像的原始数据使用图像来表现;二是如何对原始手势图像图像进行预处理,由于手势图像图像的原始数据大小不一,图像的精度也不一样,可以采用统一的方式对图像进行压缩,一方面可以确保图像的格式符合训练的要求,整齐划一,另一方面可以通过对图像压缩的方式实现图像数据的降维,降维的现实意义既可以加速训练过程,又可以节省算力,尤其在算力不足的情况下可以使用图像压缩的方式在有限的硬件资源之下对图像进行训练,以完成图像的分类工作,既可以保证训练效果,又可以节省算力。三是选用合适的模型对图像分类问题进行训练,可供选择的模型有支持向量机SVM、线性回归、岭回归、lasso回归、逻辑回归、k-means聚类、贝叶斯方法、经典神经网络、深度学习等,但是通过收集现有的研究进展,评估现有学者提出的算法效果,选用深度学习作为手势分类的算法。
第四,进行算法实现。先要选用合适的代码框架进行训练,可供选择的算法框架有tensorflow、pytorch等框架,由于tensorflow支持的机器学习模型丰富,并且提供了相关的辅助工具,而且安装简单,因此选用tensorflow以及keras进行模型训练。使用已经确定的深度学习框架对经过预处理的图像进行实验,实验中需要做的是区分训练集和测试集,可以使用一个比率来区分原始图像数据,拿其中一部分来作为训练集,另一部分作为测试集,设计训练集和测试集的分割函数和方法。最后进行模型训练,并对模型进行调参,训练完成之后,可以对模型的训练效果进行评估,使用测试集对算法的效果进行评估。并选用一个图像来进行预测。
1.5论文的主要创新点
在各类文献中,尤其是谷歌、百度等一些巨头的实验中,可以看到训练超大规模的数据,而且模型的隐藏层非常多,这需要耗费很大的算力,这样虽然在科学上有一定的意义,但是在实际中却无法落地,本文基于手势分类算法既要相对准确,又要耗时较短,开销要小的现实需求,提出了采用图像压缩的方式进行图像的预处理,这样即使在一台廉价的PC机上就可以完成模型的训练,并且取的一定效果,在算力和准确度之间的平衡,既可以确保算法的落地,又可以达到目前工业上的算法准确度的要求,可谓一举两得。本文可以将原始图像压缩之后编程128*128的大小,虽然图像变小了,但是经过测试论证,算法的准确度可以达到工业应用场景的要求。
1.6本文研究内容及章节安排
本文主要对基于神经网络对手势分类进行研究与实现,本文的章节内容安排如下所示。
第一章:绪论,本章主要介绍本课题的背景意义以及国内和国外对于基于深度学习的手势分类的研究现状,并简要介绍本文的主要工作和章节结构。
第二章:本章主要介绍了神经网络以及相关的基本原理,
第三章:本章详细介绍了本文的硬件环境和软件环境,并对系统进行设计。
第四章:本章基于第三章的基本算法设计完成算法实现代码,并介绍了实验的核心代码,最后展示了实验结果,并对结果进行分析。
第五章:本章对整篇文章进行总结和展望,总结基于神经网络对手势图像进行分类的实验成果,同时客观分析了我们方法的不足,以及在未来改进的方向。
2 基本概念与基础理论
2.1 机器学习研究步骤
机器学习的一般研究步骤描述如图2-1所示。
图2-1 机器学习研究步骤
2.2 图像识别的研究步骤
图像识别的步骤如下图2-2所示。
图2-2 图像识别步骤
2.3 浅层神经网络
机器学习方法中按照模式的不同有连接主义和非连接主义两个流派。非连接主义以符号主义和逻辑推理为主要代表,而连接主义的机器学习以神经网络为主要代表。
神经元的内部表述用数学语言描述如下:
(2-1)
前馈性网络的表示如图2-2所示。
图2-2 前馈性神经网络示意图
前馈性神经网络可以使用反向传播算法来求得神经网络中的权值数据,从而最终训练出模型,其基本思路是,首先初始化一个网络参数,然后根据整个神经网络的输入计算神经网络的输出,计算到输出之后,再用计算得到的输出值和神经网络的标记值进行对比,然后按照一定的比率来反向调整参数,使得最终的参数可以满足训练数据。反向传播算法如式(2-2)所示。
(2-2)
其中,t代表时间序列因素,η表示调整步幅,x表示输入,y表示输出。
2.4 深度学习网络
了数据降维,然后在训练的时候也可以提升其训练效果,并且对算力的要求也会较之前大幅降低。
基于深度神经网络的循环神经网络在文本分析中有一定应用,但是由于其存在梯度消失和梯度爆炸的问题,基于卷积神经网络的CNN(Convolutional Neural Networks,CNN)模型可以在一定程度解决这些问题。具体来讲,CNN采用可视野可以降低计算复杂度,使用卷积、最大池化和全连接层等算法和技术完成模型训练。
3 手势算法设计
3.1 数据收集
收集的数据涵盖有10中手势。图4-1展示了
表4-1 数据集说明
| 手势种类 | 人数 | 每个图像背景 |
|---|---|---|
| 10种 | 24 | 3 |
3.2 图像预处理
表4-2表示图像的不同模式。
表4-2 图像模式
| 图像模式 | 模式说明 |
|---|---|
| 1 | 1位像素,黑和白,存成8位的像素 |
| L | 8位像素,黑白 |
| P | 8位像素,使用调色板映射到任何其他模式 |
| RGB | 3× 8位像素,真彩 |
| RGBA | 4×8位像素,真彩+透明通道 |
| CMYK | 4×8位像素,颜色隔离 |
| YCBCR | 3×8位像素,彩色视频格式 |
3.3手势分类算法设计
整体手势分类算法如图4-1所示。
图4-1 分类算法设计
模型训练是整个图像分类问题的重点工作,深度神经网络在手势分类的问题中的主要工作是基于输入层的图像,并按照有师学习的十个标签,每个标签都有一个名字,分别是“点子圆”、“四季财”、“月半圆”、“金兰指”、“指方向”、“手枪指”、“小拇指”、“八仙到”、“胜利指”和“六六顺”,这些图像的名字都是根据图像的指向和特征来获取的,具有一定主观性,但是对图像的标签和训练不造成任何影响。
这些手势种类中的“点子圆”的代表如图4-2所示。
图4-2 点子圆图像
“四季财”的代表如图4-3所示。
图4-3 四季财图像
“月半圆”的代表如图4-4所示。
图4-4 月半圆
“金兰指”的代表如图4-5所示。
图4-5 金兰指图像
“指方向”的代表如图4-6所示。
图4-6 指方向
“手枪指”的代表如图4-7所示。
图4-7 手枪指
“小拇指”的代表如图4-8所示。
图4-8 小拇指
“八仙到”的代表如图4-9所示。
图4-9 八仙到
“胜利指”的代表如图4-10所示。
图4-10 胜利指
“六六顺”的代码如图4-11所示。
图4-11 六六顺
然后构建一个多层级,每层有多个节点的多隐层的深度学习网络。整个模型结构如图4-12所示,其中最下面是输入的128*128的图像数据,最上层是标签,表示十个不同的手势分类,要训练的重点就是中间的网络结构。
图4-12 模型结构
4 实验与分析
4.1 实验环境
系统涉及到的平台、工具、软件和包如表4-1所示。
表4-1 实验环境说明
| 硬件 | cpu:Corei9 内存:三星16G存储:SSD 256G |
|---|---|
| 操作系统 | Windows 10 专业版 |
| 编程环境 | Python:3.6 |
| 相关包 | tensorflow:1.15.0 pillow numpy |
4.2 实验过程
4.2.1图像预处理
图像预处理的过程是对原始的图像经过变换,最终生成128*128矩阵的数据。处理的流程是现先分类读取图像,然后分类对图像进行处理,处理之后将这些数据放到新的路径下存储。处理后的jpg格式的图像如图4-1所示。上面两个是“点子圆”,下面两个是“六六顺”。
图4-1 预处理后的图像举例
将原始图像转换为压缩图像,也就是给原始数据降维的过程是利用pillow函数重新reshape图像,最终生成128*128大小的图像。
将原始的数据从原始的目录移动到新目录的基本逻辑就是先读取原始文件,然后将生成的新的图像放到新的路径下,方便后续处理,这样做的好处还有一个就是可以不影响原来的图像。
图像预处理的代码如附录1所示。
4.2.2训练集和测试集分离
在模型训练中,既需要按照原始数据进行模型训练,这个时候就是使用数据feed模型,其结果是模型,重点是训练模型参数,在模型训练完成之后,就需要用模型在测试集合上面来进行测试,这个时候可以展示模型的效果,因此需要有训练集和模型集。但是训练集和测试集必须要分开,也就是使用模型机进行训练,但是测试集中的数据最好不要包括训练集中的数据,这样可以客观判断模型训练效果,引入如果使用训练集中的一部分来进行模型测试,那么由于训练的时候使用的是这些数据,那么其测试效果会偏高,因此要确保测试集合训练集分割。可以选用一个比率,按照这个比率计算出一个具体数值,这些数量的数据是训练集,而剩下的是测试集,由于本文的图像本身具有随机性,因此可以使用前面的数据作为训练集,而剩下的数据作为测试集。
4.2.3模型训练
模型训练是系统的核心功能,模型训练的任务是寻找合适的网络层数和每层的节点数,并且对网络进行训练获得模型参数。训练的原始输入是128*128的数据,训练模型的最终输出结果是10维数据,分别是“点子圆”、“四季财”、“月半圆”、“金兰指”、“指方向”、“手枪指”、“小拇指”、“八仙到”、“胜利指”和“六六顺”。根据模型训练的一般经验,在设置层数的时候,可以采用逐层减少的方式,而隐层不宜过多,如果隐层过多,一是增加了模型训练的复杂度,二是容易陷入过拟合。经过实验,在模型中的隐层数为5的时候,模型在测试集上的表现会降低,最终选用的模型层数中隐层一共有四层,分别有1000、500、256、128个节点。在本文中选择不同的隐层和节点的时候,取得的实验结构如下表4-2所示,实验结果表明当选用4层隐层的时候,取得了较好的训练效果和拟合效果。
表4-2 实验过程
| 隐层数 | 各层节点数 | 准确率 |
|---|---|---|
| 2 | 800、400 | 67.31 |
| 3 | 800、400、200 | 76.35 |
| 4 | 800、600、400、200 | 83.26 |
| 4 | 1000、500、256、128 | 93.22 |
| 4 | 400、600、800、400 | 84.32 |
| 5 | 1000、800、600、400、200 | 93.3 |
| 6 | 1000、800、600、500、400、300 | 83.4 |
实验过程如图4-2所示。
图4-2 训练过程展示
4.2.4实验分析
模型评估的方法较多,但是一般采用的都是指标有准确率、精确率、召回率等指标,和这些指标相关的一些基本信息是数据本身的真伪和训练结果的真伪的比较。将本身是正例而训练的结果也是正例的数据称之为真阳,而相应的数据的数量就是真阳数据量,简称真阳,用TP表示;真阴是指数据本身是反例,而且预测的结果也是反例的数据量,用TN表示;假阳是数据本身是反例,而预测的结果是正例的数据,用FP表示;假阴是指数据本身是反例,而预测的结果是反例的数据,使用FN表示。在众多的模型评估指标中,准确率是使用广泛的一个指标,如式4-1所示。
式4-1
本模型评估的最终的准确率是93.22%,可以满足应用落地的实际需求。
在实验中训练了200epoch,下图记录了连接着的10此epoch的acc均值,将每一个epoch得到的训练结构都是用测试集来验证结果。整个实验过程如图4-3所示。
图4-3 训练过程acc变化
在选用不用的隐层和节点的时候,实验的结果都有不同的表现,但是当隐层为4,每层节点数逐层减少而且步长也逐步降低的时候,取得了最好的效果,当节点数更少或者更多的时候,其准确率都相对较低;当隐层是4层的时候,采取节点数均匀减少的方式或者先减少后增加的方式,其准确率表现都不如逐层减少而且步长页逐步减少的方式。
另一个展示训练效果的方式是混淆矩阵,混淆矩阵是以分类种类作为横坐标和纵坐标的表示方法,一个横坐标和纵坐标的交叉点的数值代表的是将改横坐标的样本识别为该纵坐标样本的数量。比如横坐标为“点子圆”,纵坐标为“六六顺”交叉点的数值为6,则代表原本是“点子圆”的手势被识别为“六六顺”的一共有6个图像。本实验的混淆矩阵展示如图4-4所示。
图4-4 混淆矩阵
4.2.5预测过程
在完成了训练之后,就会训练并完成了一个训练的模型,将这个模型保存下来,就可以在有一个新的图像的时候,对新的图像进行预测。也是模型应用的最主要方面,模型的预测过程就是应用已经训练好的模型去预测新的图像。
比如对如下图4-5的图像预测的结果是“点子圆”,其预测的结果是0.934,显著高于其他九个类别的图像。可以看到这个图像确实是一个“点子圆”的图像。
图4-5 预测图像
5 总结与展望
本文使用图像识别的方法对手势进行分类技术进行研究,本文基于当前热门的深度神经网络技术对垃圾进行分类,经过图像收集、图像预处理、模型训练、模型预测等步骤的研究,验证了可以使用基于深度神经网络的方法对手势进行分类,经过验证,分类准确率达到99%以上,这说明基于图像识别的手势识别技术有一定的应用前景。本文在手势识别技术上做的重点工作有两个,一是基于收集到的原始图像进行预处理,然后将高纬数据转换为先对低纬度的数据,最终使用128*128的图像进行训练;二是使用深度学习对图像进行训练,训练过程中,对不同的层数和每次不同的节点数都进行了实验,从而确定了最终的网络层数,完成了最终的训练。本算法由于使用了一定的压缩办法,可以在普通PC完成训练,降低了算法的应用门槛。
然而,本文还存在一定不足,一是数据的质量有待进一步提高,本文的数据是通过收集公开数据集的方式完成,然而这些数据和实际中的垃圾数据还有一定距离,因此在真正落地的过程中如果能有质量更高的数据进行训练,可以进一步提升应用的可用性。二是基于神经网络的分类算法还需要与其他硬件或者设备一起使用才能发挥更好的作用,比如需要在具体的游戏设备或者智能手机上进行测试验证。
更多推荐


所有评论(0)