基于深度学习的手语学习系统
2019-03-10李成武高宇玥
李成武 高宇玥
摘 要:手语是聋哑人群最常使用的交流方式,但因为手语的普及程度较低,聋哑人与普通人之间交流有很大障碍。本文利用Keras 构建卷积神经网络框架实现对手语图像的识别,通过循环神经网络将语音转为对应的手语视频输出。手语的自动化识别能够使手语使用者更加便利地与外界进行沟通,不懂手语的人也可以和聋哑人正常、顺利地交流。
关键词:手语 Keras 卷积神经网络 循环神经网络
一、引言
最新资料统计说明,我国听力语言残疾居视力残疾、肢残、智残等五大残疾之首,为2057万人,占中国总人口数的1.67%,其中七岁以下儿童约为80万人。手语是听障人之间沟通的主要方式,由手型、动作、表情及姿势等构成的一套手语交流体系。但健听人多数不懂手语,手语沟通障碍造成了社会劳动力的较大浪费。目前,中国残联出台了手语统一标准,这使得聋哑人与健全人之间顺利交流变得有章可循,手语翻译技术具有广泛的应用价值。开发手语识别系统有助于聋哑人融入社会,也有助于加速国家通用手语的推广进程。
过去手语识别的研究主要依赖于各种可穿戴传感器,如颜色手套、数据手套等。基于数据手套的手语识别准确率较高,但设备昂贵、携带不便,难以普及和推广。深度学习的快速发展加速了基于视觉的手语识别应用。本文通过设计手语识别框架,基于卷积神经网络模型实现手语识别。
二、系统总体设计方案
基于深度学习的手语学习系统分为四个部分:手势图像采集、图像信息的提取与识别、语音识别、手语视频输出。“手势图像采集”模块主要完成对手语动作的采集,并将采集到的图像信息发送到NVIDIA JETSON TX2平台。再由“图像信息的提取与识别”模块利用神经网络的卷积层提取手部特征并通过全连接层进行识别。这样就使得正常人能理解聋哑人手语的含义。“语音识别”模块将正常人输入的语音转化为文本,然后通过“手语视频输出”模块将语音识别出来的文本转化为对应的手语视频输出(图1)。这样聋哑人就能理解正常人想要表达的意思。那么,不懂手语的正常人和聋哑人之间的交流变得轻松而简单。
三、数据集构建和预处理
手语信息以视频的形式录入,录入相同手势不同角度下的视频。录入完成后,以帧为单位将录入的视频转换成图片保存在同一目录的不同文件夹中,每个文件包括相同词义的数据,并确定其含义。目前,数据集包含50个不同手势,每个手势100张图片,共5000张图片。其中训练集共4000张图片,每个手势80张;测试集共1000张图片,每个手势20张。
数据集构建完成后需要对训练集进行预处理,利用OPENCV捕捉视频帧,根据背景差分法分割出前景目标,并通过肤色检测模型输出只有手部区域的二值图像。为了增加模型的鲁棒性,本文使用Keras框架中的ImageDataGenerator对视频帧进行随机裁剪、水平翻转、随机旋转角度、尺寸缩放等操作。
四、神经网络训练
因为手语训练数据有限,所以本文采用迁移学习的方法完成手语手势的识别。相比于AlexNet ,VGG-16结构简单,卷积核全部替换为3×3(极少用了1×1),池化核全部使用2×2。参数量大,大部分参数集中在全连接层中。网络名称中有16表示它有16层conv/fc层。本文采用VGG-16作為预训练模型。
本系统迁移学习的具体步骤为:
1.构建VGG-16模型;
2.加载VGG-16模型参数;
3.将网络最后一层卷积层前面的参数固定,不参与训练,即设置参数为trainable=False;
4.在最后一层卷积层的后面加上一个隐藏层为1024的全连接层;
5.修改softmax层的输出,因为本文使用的数据集共有50种手势,所以将softmax的输出设为50。softmax层计算公式如下:
其中,Xj表示第j个输出,K代表总分类数,softmax层的输出代表样本X属于第j个分类的概率。
将4000张图片顺序打乱分为50批(batch),即每个batch有80张图片,然后训练50轮(epoch),并将训练好的模型参数保存在本地。虽然训练时间较长,但是这样可以保证每个手势识别正确率的增加和应对不同状况下两手势发生的意外重合。
五、语音识别
近几年,不少专家和学者都在语音识别任务中尝试了注意力模型。但是截至目前,注意力模型在在线语音服务中的大规模使用,一直鲜有成功案例。究其原因,是因为语音识别的注意力模型存在两个问题:一是流式解码的问题。传统的注意力模型大都是基于整句的建模,比较有代表性的是谷歌的LAS模型。如果在线语音识别采用整句注意力建模,这就客观上要求语音都上传到服务器后,才能开始声学打分计算和解码,这样势必引入较长的用户等待时间,影响用户体验,同时也没办法完成实时语音交互的任务。二是长句建模的精度下降问题。传统注意力模型的核心思想是基于整句的全局信息,通过机器学习的方法,选择出和当前建模单元最匹配的特征。句子越长,进行特征选择的难度越大。出错的概率越高,错误前后传导的概率也越高。
本文语音识别模块是采用百度语音识别API来实现的。百度语音识别所采用的模型解决了传统注意力模型不能进行流建模和解码的问题,并且依靠截断,实现了对长句子的高精准的注意力建模,同时也解决了CTC模型的插入或删除错误对注意力模型的影响。接下来对百度语音识别采用的模型即流式多级的截断注意力模型(SMLTA)进行简略介绍。
SMLTA模型使用CTC(一种语音识别算法)的尖峰信息对连续语音流进行截断,然后在每一个截断的语音小段上进行当前建模单元的注意力建模。这样把原来的全局的整句Attention建模,变成了局部语音小段的Attention的建模。同时,为了克服CTC模型不可避免的插入删除错误对系统造成的影响,该算法引入一种特殊的多级Attention机制,实现特征层层递进的更精准的特征选择。
最终,这种创新的建模方法识别率不但超越了传统的全局Attention建模,同时还能够保持计算量、解码速度等在线资源耗费和传统CTC模型持平。
六、手语手势识别与输出
系统操作界面有四个功能选项,分别为获取手势、识别手势、学习手势、操作提示。
系统启动后打开摄像头获取手势视频,录制的手势视频保存在手势视频文件夹中,并将视频逐帧转为成一张一张的图片保存在手势图片文件夹下,方便后续预处理操作。
将手势图片文件夹下的手势图片送入已训练好的CNN模型进行手势识别,判断手势动作代表的词义,将其与数据库进行比对,匹配出相同词义的手势图片后输出,并将词义打印在显示结果处。
正常人利用麦克输入一个词或一段话的音频信号,通过语音识别模块翻译成文本。翻译好的文本经过分词后会和数据库中保存的各手势词义进行比对,匹配成功的手势将从数据库中输出对应的视频文件给用户,以供学习。
七、实验与结论
本文使用的实验环境为: NVIDIA JETSON TX2 開发板,Ubuntu 16.04操作系统,TensorFlow1.13。
随机选取5种手势对系统进行测试试验。实验中,每种手势由5个实验者各做10次,共得到250个手势视频片段,系统对这250个视频片段进行手势识别,识别结果如表1所示。
表中各种手势的平均识别率为89. 6%,试验结果表明,本文的手识别方法具有较高的精确度。但系统可以识别的手势种类较少,因此,下一步的工作将增加手势的种类,并为了实际需求将加入动态手语识别。
参考文献
[1]王丽光,张根源,刘子龙.基于单目视觉的实时手语识别系统设计与实现[J].电子科技,2017,30(3):131.
[2]李亚丽,王敏,李静.迁移学习的研究现状[J].时代教育,2014,09(169):222.
[3]BG大龍.【专题知识】详解经典CNN结构—VGGNet原理[EB/OL].https://zhuanlan.zhihu.com/p/79258431,2019-08-25.
[4]洞察网.百度提出截断注意力模型SMLTA,第一个注意力模型的语音大规模上线[EB/OL].https://tech.china.com/article/20190116/kejiyuan1205235862.html?qq-pf-to=pcqq.c2c,2019-01-16.
[5]晓坤、思源.超越整句的流式多级Attention:解密百度输入法背后的语音识别模型[EB/OL].https://zhuanlan.zhihu.com/p/55330861,2019-01-20.