基于克罗地亚手语的智能家居控制动态手势识别接口
1. 引言
大多数人在生命中的某个时刻,尤其是年长时,可能会经历暂时性或永久性的残疾,或面临日益加剧的功能障碍[1,2]。考虑到本文所关注的残疾类型——2019年,全球约有4.66亿人因听力障碍导致残疾,其中3400万为儿童。到2050年,预计这一数字将上升至9亿人,他们每天都将面临无法平等交流的后果[3]。无论这些数量指标多么令人担忧,不可否认的事实是,这类人群必须依赖特定的沟通方式才能实现融入。聋哑和言语障碍人士的交流主要依靠手语,掌握手语虽有助于融入,但仅能在一定程度上实现。残疾作为一种无法融入的状态,是周围环境缺乏无障碍设计和过于复杂而直接导致的结果,这种环境对健康受损者构成了障碍[1]。环境要么阻碍人们的融入,要么支持他们参与社会整体生活[1]。
技术在无障碍倡议和解决方案中发挥着至关重要的作用,其中特别强调面向自然用户界面(NUI)的人机交互(HCI)新方法的研究与开发。鉴于对熟悉、实用、直观且自然的界面,研究社区和工业界开始关注基于语音和视觉的交互及界面[4,5]。考虑到聋哑和言语障碍人士使用手语进行交流的情况,基于视觉的系统成为一个合理的方向,具有提供可行且有效解决方案的巨大潜力。手语是复杂的语言,具有特定的结构、语法和词汇,因此属于自然语言范畴。这主要意味着手语不具备普遍性,并且由于地区、语系、使用区域、方言等因素,不同手语之间不存在绝对的相互理解性[6,7]。由于手语本身的特性,手语识别的研究本质上涉及手势识别的研究,这是最主要的相关子问题。通常,手势识别主要有两种方法:基于视觉的方法和非视觉方法[9]。长期以来,非视觉方法(即使用各种传感手套)的性能相较于基于视觉的方法占据主导地位,这种差异在模拟真实世界条件(如光照不足和背景复杂度高)的实验环境中尤为明显。尽管非视觉方法在准确率和速度方面表现出良好结果,但该方法需要特定的硬件和支持设备,这在大多数人机交互场景中并不实用。与目标检测和面部识别等大多数计算机视觉任务一样,在手势识别领域的科学研究中应用深度学习方法已取得卓越成果,超越了现有最先进的方法[8]。这些改进使得基于视觉的方法更受青睐,因为它能够实现远程、非接触式的数据采集。近年来,基于卷积神经网络的人机交互系统展现出优异的性能。由于卷积神经网络能够通过多层结构自动学习空间特征,因此它几乎成为近期所有计算机视觉问题解决方案中的核心组成部分。
动态手势识别领域主要侧重于对大型数据库的研究[10,11],其中通常采用基于时空变换扩展训练集的不同方法,以实现更优的性能[12]。此外,为了验证和比较结果,或将系统调整用于另一组手势,常采用迁移学习方法,即通过在大型数据集上训练获得的深度架构初始参数,再利用目标数据库进行额外的再训练加以调整[4]。基于深度学习的手势识别中最关键的挑战在于如何处理时间维度问题。如相关工作所示,已有多种不同方法被用于建模动态手势的时间序列;然而,我们选择使用三维卷积神经网络(3DCNN)的主要动机在于,其在提取视频中与动作识别和行为定位相关领域常用的时空特征方面表现出色。当提供足够的数据以覆盖不同的背景复杂度、光照条件以及多样化的手势使用者时,基于3DCNN的系统能够在泛化未见数据方面展现出良好性能。此外,使用多种输入模态(如RGB、深度和红外图像)所取得的结果因实验环境而异,研究表明,结合多种模态可提高准确率,并增强对遮挡等因素的鲁棒性。相较于相关科学研究,本研究除了利用模态融合提升性能外,主要动机还在于探索适用于实时识别的合适深度学习架构。许多研究仅关注识别性能,而部分方法由于包含多个深度架构和多种输入模态,无法实现实时运行,从而受到内存和计算资源的限制[13]。所提出的系统通过引入实时手势检测来减少不必要的计算溢出。此外,系统的整体有效性表明其具备向连续手语实现方向扩展的可能性,而这需要我们纳入姿态与运动估计、面部识别等其他非语言交流因素,其实现必须与手势检测并行进行。
2. 相关工作
手势识别是人机交互中最突出的领域之一。目前有许多关于使用可穿戴[9]和非可穿戴传感器[8]进行手势识别的相关研究。根据所使用的不同传感器,这些研究涉及使用专用硬件,如微软Kinect[14–16],、立体相机[17],、传感器手套[18–20],,以及非专用硬件,如手机摄像头[21,22],、网络摄像头[23],等。使用专用硬件进行手势采集主要能够弥补流程中原本需要考虑的一些步骤,例如手部分割、手势检测、手部方向、手指分离等。传统的手势分类方法主要基于隐马尔可夫模型 (HMMs)[24],、支持向量机 (SVMs)[25],、条件随机场 (CRFs)[26],以及多层感知机 (MLP)[27]。近年来,由于基于深度学习的计算机视觉领域的快速发展,研究兴趣已从基于传感器的方法转向基于视觉的方法。在基于深度学习的手势识别中,最关键的挑战是如何处理时间维度。最近的研究趋势是采用基于深度卷积神经网络(CNN)、长短期记忆网络 (LSTM) 及其衍生架构的模型。早期,二维卷积神经网络(2DCNN)在图像上已表现出高准确率,因此被结合不同方法应用于视频处理。在[28,29]中,视频帧被用作二维卷积神经网络(2DCNN)的多个输入。在[30]中提出了一种二维卷积神经网络(2DCNN)与长短期记忆网络(LSTM)的组合方法,其中通过二维卷积神经网络提取特征,再输入到长短期记忆网络(LSTM)中以捕捉时间信息。在[30],中,首先利用长期循环卷积网络(LRCN)从视频帧中提取空间特征,然后通过循环神经网络(RNN)提取时间特征。在[29]中使用了双流卷积网络(TSCN)来分别提取空间和时间特征。在[31],中,采用卷积长短期记忆网络——VideoLSTM,从先前提取的空间特征中学习时空特征。在[32]中,提出的模型是三维卷积神经网络(3DCNN)与长短期记忆(LSTM)的组合,用于从包含RGB和深度图像的数据集中提取时空特征。在[33],中,利用三维卷积神经网络(3DCNN)并行提取时空特征。在[34], 3中,使用深度卷积神经网络(DCNN)结合三维卷积和池化操作进行时空特征提取。在识别过程中,空间特征的提取及其质量受到背景复杂度、手部位置、手与场景的比例大小、手/手指重叠等因素的显著影响[8,35]。在这种情况下,空间特征容易被这些因素干扰,导致在识别过程中失去区分能力。因此,由连续场景/帧提供的时序信息成为关键因素[36]。对于实时手势识别过程而言,考虑到视频帧的持续输入和学习需求,这一信息尤为重要。
同时提取时空特征比单独或依次提取更有可能提供高质量的结果[4,36]。
考虑到模态,在[37]中,结合了手部与上半身的RGBD数据,并用于手语识别。为了检测手势,在[38],中将YCbCr和皮肤掩码分割图像作为卷积神经网络的双通道输入。在[39],中提出了一种基于RGBD模态和使用三维卷积神经网络的指尖检测与实时手势识别方法。此外,在[40],中报告的最佳性能是使用RGBD数据以及梯度直方图(HOG)与支持向量机(SVM)作为分类器实现的。进一步地,在[41],中采用动态时间规整(DTW)方法对梯度直方图(HOG)和光流直方图(HOF)进行处理以识别手势。
自动手语识别领域的发展在很大程度上依赖于相关手语数据库的可用性,这些数据库针对特定语言区域[42]或在应用领域具有有限词汇[43]。鉴于自动手语识别的实际应用,大多数研究集中于将手语手势翻译为文本信息的方法。一项用于提升手语使用者社交互动的有趣解决方案在[38],中被提出,作者引入了一个使用20个常用手语词的手语翻译模型。在[42],中提出了一种深度学习翻译系统,可用于紧急情况下的105个句子。考虑到手势是最自然且因此在人机交互通信中最常用的模态之一,必须将手语视为自然用户界面的主要媒介。在[44]中展示了一个实用系统,该系统通过Leap Motion和英特尔RealSense硬件结合支持向量机分类,实现美国手语指拼字母的自动识别,以帮助有言语或听力障碍的人群。在[45],中提出了一种可穿戴腕戴相机(WwwCam),用于实时手势识别,从而实现对擦地机器人、移动机械臂或智能家居场景中家电的控制等服务。
3. 提出的方法——手语命令接口
在本节中,我们描述了一种基于克罗地亚手语的人机交互系统。所提出方法的设计被设想为一种用于与智能环境进行交互的基于动态手势的控制模块。我们的目标是实现一种专为手语使用者定制的无接触控制接口。通过选择以智能家居自动化命令形式定制的有限词汇,该解决方案可用于管理灯光、恒温器、门锁和家用机器人等家用电器。所提出的手语控制模块的基础设施设计满足了实时在线应用的特定要求,例如合理的分类性能、硬件效率以及快速响应时间。所提出的基础设施由三个主要部分组成:唤醒模块(见第3.1节)、手势识别模块(见第3.2节)和手势命令接口(见第3.3节)。图1展示了所提出的手语命令接口的流程。在定义的工作流程中,该系统持续接收RGB‐D数据,并将其放入两个独立的输入队列中。唤醒模块订阅包含深度图像序列的数据队列。在每个操作周期中,唤醒模块基于N个连续帧执行手势检测。如果成功检测到手势的开始,则将命令接口置于注意状态,并激活手语识别模块。该模块从输入队列的起始位置开始,对最大长度为M的两种模态序列执行分层手势分类。手语分类的结果以独热编码向量的形式传递给命令解析器,用于将识别的手势符号映射到预定义词汇词,进而用于构建JSON格式的自动化命令。
3.1. 唤醒手势检测器
唤醒模块的主要目的是降低功耗,并在实现所提出的手语命令接口时提供更好的硬件性能和内存资源效率。考虑到控制接口持续接收来自RGB‐D数据的视频流,而在大多数时间内并无手势存在的情况,所提出的唤醒模块的主要任务是作为手势识别模块的启动器。该组件对深度数据队列的前N帧进行二分类(手势、无手势),从而减少所提议命令模块的不必要激活次数。为了充分应对现实场景中克罗地亚手语的不同手势具有不同持续时间的问题,本文采用所提出的检测器来管理手势识别模块所使用的输入序列M。当手势识别处于激活状态时,检测器模块以步幅为1的滑动窗口方式持续运行。当连续“无手势”预测的数量达到阈值时,唤醒模块通过对大小为M的输入序列进行重采样,将其变为固定大小m,供手语分类使用。本文中,重采样通过在线性分布于1到M之间的位置选取m个输入帧来实现。
由于唤醒模块需要持续运行,因此其实现采用了轻量级3DCNN架构,如图2左侧所示。
该网络由四个卷积块和两个全连接层组成。每个卷积层之间均插入了批归一化层、修正线性单元(ReLU)以及最大池化层。三个卷积层分别包含32、32和64个滤波器。每个Conv3D层的卷积核大小为 3 × 3 × 3,且在各个方向上的步幅为1。在最后一个卷积层之后的训练过程中使用了dropout,并对所有权重层应用了L2正则化。为了降低误报预测的概率,模型采用小批量大小16,基于二元交叉熵损失并通过Adam优化进行训练。所提出的手势唤醒架构是一种适用于实时应用的快速且鲁棒的方法。
3.2. 手势识别模块
该模块代表了所提出的智能家居系统的核心功能。其任务是识别用户手势并将其解码为手语。鉴于本系统的实际应用,有必要考虑适用于现有内存容量和功耗预算的深度学习架构。同时,该架构需要在分类性能、快速响应时间以及对环境条件(如变化的光照条件和复杂背景)的良好鲁棒性之间实现良好权衡。受近期采用多模态数据进行鲁棒动态手势识别取得成功的启发,本文提出使用一种多输入网络。
分类器。所提出的解决方案由两个相同的并行子网络组成,每个子网络处理不同的数据模态。两种模态流(分别为RGB和深度数据)在空间和时间上对齐,这有助于我们的子网络对输入的手语手势具有相同理解。通过采用两种不同的模态,我们的网络架构确保每个子网络能够学习给定输入模态相关的时空特征。在我们的方法中,使用三维卷积从输入的视频数据中提取时空信息。所提出的手语分类器的网络架构如图3所示。
|
输入层
输入_1 | 输入: | [(?,112,112,16,3)] | 参数 # |
|---|---|---|---|
|
输入层
输入_1 | 输出 | [(?,112,112,16,3)] | 0 |
|
三维卷积
卷积神经 网络_1 | 输入: | [(?,112,112,16,3)] | 参数 # |
|
三维卷积
卷积神经 网络_1 | 输出 | [(?,112,112,16,32)] | 2624 |
| 批归一化 BN_1 | 输入: | [(?,112,112,16,32)] | 参数 # |
| :— | :— | :— | :— |
| 批归一化 BN_1 | 输出 | [(?,112,112,16,32)] | 128 |
|
三维最大池化
最大池化_1 | 输入: | [(?,112,112,16,32)] | 参数 # |
| :— | :— | :— | :— |
|
三维最大池化
最大池化_1 | 输出 | [(?,56,56,15,32)] | 0 |
|
三维卷积
cnn_2 | 输入: | [(?,56,56,15,32)] | 参数 # |
| :— | :— | :— | :— |
|
三维卷积
cnn_2 | 输出 | [(?,56,56,15,64)] | 55360 |
| 批归一化 BN_2 | 输入: | [(?,56,56,15,64)] | 参数 # |
| :— | :— | :— | :— |
| 批归一化 BN_2 | 输出 | [(?,56,56,15,64)] | 256 |
|
三维最大池化
MaxPool_2 | 输入: | [(?,56,56,15,64)] | 参数 # |
| :— | :— | :— | :— |
|
三维最大池化
MaxPool_2 | 输出 | [(?,28,28,7,64)] | 0 |
|
三维卷积
cnn_3 | 输入: | [(?,28,28,7,64)] | 参数 # |
| :— | :— | :— | :— |
|
三维卷积
cnn_3 | 输出 | [(?,28,28,7,128)] | 221312 |
| 批归一化 BN_3 | 输入: | [(?,28,28,7,128)] | 参数 # |
| :— | :— | :— | :— |
| 批归一化 BN_3 | 输入: | [(?,28,28,7,128)] | 参数 # |
| 批归一化 BN_3 | [(?,28,28,7,128)] | ||
| 输出 | 输出 | [(?,28,28,7,128)] | 512 |
|
三维最大池化
MaxPool_3 | 输入: | [(?,28,28,7,128)] | 参数 # |
| :— | :— | :— | :— |
|
三维最大池化
MaxPool_3 | 输入: | [(?,28,28,7,128)] | 参数 # |
|
三维最大池化
MaxPool_3 | [ (?,14,14,3,128) ] | ||
| 输出 | 输出 | [ (?,14,14,3,128) ] | 0 |
|
三维卷积
cnn_4 | 输入: | [ (?,14,14,3,128) ] | 参数 # |
| :— | :— | :— | :— |
|
三维卷积
cnn_4 | 输入: | [ (?,14,14,3,128) ] | 参数 # |
|
三维卷积
cnn_4 | [(?,14,14,3,256)] | ||
| 输出 | 输出 | [(?,14,14,3,256)] | 884992 |
|
三维卷积
cnn_5 | 输入: | [(?,14,14,3,256)] | 参数 # |
| :— | :— | :— | :— |
|
三维卷积
cnn_5 | 输入: | [(?,14,14,3,256)] | 参数 # |
|
三维卷积
cnn_5 | [(?,14,14,3,256)] | ||
| 输出 | 输出 | [(?,14,14,3,256)] | 1769728 |
|
批归一化
BN_4‐5 | 输入: | [(?,14,14,3,256)] | 参数 # |
| :— | :— | :— | :— |
|
批归一化
BN_4‐5 | 输入: | [(?,14,14,3,256)] | 参数 # |
|
批归一化
BN_4‐5 | [(?,14,14,3,256)] | ||
| 输出 | 输出 | [(?,14,14,3,256)] | 1024 |
|
三维最大池化
最大池化_4‐5 | 输入: | [(?,14,14,3,256)] | 参数 # |
| :— | :— | :— | :— |
|
三维最大池化
最大池化_4‐5 | 输入: | [(?,14,14,3,256)] | 参数 # |
|
三维最大池化
最大池化_4‐5 | [(?,7,7,1,256)] | 0 | |
| 输出 | 输出 | [(?,7,7,1,256)] | |
| 展平 展平 | 输入: | [(?,7,7,1,256)] | 参数 # |
| :— | :— | :— | :— |
| 展平 展平 | 输入: | [(?,7,7,1,256)] | 参数 # |
| 展平 展平 | [(?,12544)] | 0 | |
| 输出 | 输出 | [(?,12544)] | |
| 丢弃率 丢弃层1 | 输入: | [(?,12544)] | 参数 # |
| :— | :— | :— | :— |
| 丢弃率 丢弃层1 | 输入: | [(?,12544)] | 参数 # |
| 丢弃率 丢弃层1 | 输出 | [(?,12544)] | 0 |
| [(?,12544)] | |||
| 全连接 fc_1 | 输入: | [(?,12544)] | 参数 # |
| :— | :— | :— | :— |
| 全连接 fc_1 | 输入: | [(?,12544)] | 参数 # |
| 全连接 fc_1 | 输出 | [(?,1028)] | 12896260 |
| [(?,1028)] | |||
|
丢弃率
丢弃率_2 | 输入: | [(?,1028)] | 参数 # |
| :— | :— | :— | :— |
|
丢弃率
丢弃率_2 | 输出 | [(?,1028)] | 0 |
| 全连接 fc_2 | 输入: | [(?,1028)] | 参数 # |
| :— | :— | :— | :— |
| 全连接 fc_2 | 输出 | [(?,512)] | 526848 |
|
丢弃率
丢弃层_3 | 输入: | [(?,512)] | 参数 # |
| :— | :— | :— | :— |
|
丢弃率
丢弃层_3 | 输出 | [(?,512)] | 0 |
|
全连接
全连接_软最大 | 输入: | [(?,512)] | 参数 # |
| :— | :— | :— | :— |
|
全连接
全连接_软最大 | 输出 | [(?, 25)] | 12825 |
|
输入层
输入_1 | 输入: | [(?,112,112,8,3)] | 参数 # |
| :— | :— | :— | :— |
|
输入层
输入_1 | 输出 | [(?,112,112,8,3)] | 0 |
| 批归一化 BN_1 | 输入: | [(?,112,112,8,32)] | 参数 # |
| :— | :— | :— | :— |
| 批归一化 BN_1 | 输入: | [(?,112,112,8,32)] | 参数 # |
| 批归一化 BN_1 | 输出 | [(?,112,112,8,32)] | 128 |
|
三维最大池化
最大池化_1 | 输入: | [(?,112,112,8,32)] | 参数 # |
| :— | :— | :— | :— |
|
三维最大池化
最大池化_1 | 输入: | [(?,112,112,8,32)] | 参数 # |
|
三维最大池化
最大池化_1 | 输出 | [(?,56,56,7,32)] | 0 |
| [(?,56,56,7,32)] | |||
| :— | :— | :— | :— |
|
三维卷积
卷积神经 网络_1 | 输入: | [(?,112,112,8,3)] | 参数 # |
|
三维卷积
卷积神经 网络_1 | 输出 | [(?,112,112,8,32)] | 2624 |
|
三维卷积
cnn_2 | 输入: | [(?,56,56,7,32)] | 参数 # |
| :— | :— | :— | :— |
|
三维卷积
cnn_2 | 输入: | [(?,56,56,7,32)] | 参数 # |
|
三维卷积
cnn_2 | 输出 | [(?,56,56,7,32)] | 27680 |
| [(?,56,56,7,32)] | |||
| 批归一化 BN_2 | 输入: | [(?,56,56,7,32)] | 参数 # |
| :— | :— | :— | :— |
| 批归一化 BN_2 | 输入: | [(?,56,56,7,32)] | 参数 # |
| 批归一化 BN_2 | 输出 | [(?,56,56,7,32)] | 128 |
| [(?,56,56,7,32)] | |||
|
三维最大池化
MaxPool_2 | 输入: | [(?,56,56,7,32)] | 参数 # |
| :— | :— | :— | :— |
|
三维最大池化
MaxPool_2 | 输入: | [(?,56,56,7,32)] | 参数 # |
|
三维最大池化
MaxPool_2 | 输出 | [(?,28,28,3,32)] | 0 |
| [(?,28,28,3,32)] | |||
|
三维卷积
cnn_3 | 输入: | [(?,28,28,3,32)] | 参数 # |
| :— | :— | :— | :— |
|
三维卷积
cnn_3 | 输入: | [(?,28,28,3,32)] | 参数 # |
|
三维卷积
cnn_3 | 输出 | [(?,28,28,3,64)] | 55360 |
| [(?,28,28,3,64)] | |||
| 批归一化 BN_3 | 输入: | [(?,28,28,3,64)] | 参数 # |
| :— | :— | :— | :— |
| 批归一化 BN_3 | 输入: | [(?,28,28,3,64)] | 参数 # |
| 批归一化 BN_3 | 输出 | [(?,28,28,3,64)] | 256 |
| [(?,28,28,3,64)] | |||
|
三维最大池化
MaxPool_3 | 输入: | [(?,28,28,3,64)] | 参数 # |
| :— | :— | :— | :— |
|
三维最大池化
MaxPool_3 | 输入: | [(?,28,28,3,64)] | 参数 # |
|
三维最大池化
MaxPool_3 | [ (?,14,14,1,64) ] | 0 | |
| 输出 | 输出 | [ (?,14,14,1,64) ] | |
| 展平 展平 | 输入: | [ (?,14,14,1,64) ] | 参数 # |
| :— | :— | :— | :— |
| 展平 展平 | 输入: | [ (?,14,14,1,64) ] | 参数 # |
| 展平 展平 | [(?,12544)] | 0 | |
| 输出 | 输出 | [(?,12544)] | |
| 丢弃率 丢弃层1 | 输入: | [(?,12544)] | 参数 # |
| :— | :— | :— | :— |
| 丢弃率 丢弃层1 | 输入: | [(?,12544)] | 参数 # |
| 丢弃率 丢弃层1 | [(?,12544)] | 0 | |
| 输出 | 输出 | [(?,12544)] | |
| 全连接 fc_1 | 输入: | [(?,12544)] | 参数 # |
| :— | :— | :— | :— |
| 全连接 fc_1 | 输入: | [(?,12544)] | 参数 # |
| 全连接 fc_1 | [(?,512)] | 6423040 | |
| 输出 | 输出 | [(?,512)] | |
|
丢弃率
丢弃率_2 | 输入: | [(?,512)] | 参数 # |
| :— | :— | :— | :— |
|
丢弃率
丢弃率_2 | 输入: | [(?,512)] | 参数 # |
|
丢弃率
丢弃率_2 | [(?,512)] | ||
| 输出 | 输出 | [(?,512)] | 0 |
| 全连接 fc_2 | 输入: | [(?,512)] | 参数 # |
| :— | :— | :— | :— |
| 全连接 fc_2 | 输入: | [(?,512)] | 参数 # |
| 全连接 fc_2 | [(?,256)] | ||
| 输出 | 输出 | [(?,256)] | 131328 |
| 丢弃率 | 输入: | [(?,256)] | 参数 # |
| :— | :— | :— | :— |
| 丢弃率 | 输入: | [(?,256)] | 参数 # |
| 丢弃率 | [(?,256)] | ||
| 丢弃层_3 输出 | 丢弃层_3 输出 | [(?,256)] | 0 |
|
全连接
全连接_软最大 | 输入: | [(?,256)] | 参数 # |
| :— | :— | :— | :— |
|
全连接
全连接_软最大 | 输入: | [(?,256)] | 参数 # |
|
全连接
全连接_软最大 | (?, 1) | 257 | |
| 输出 | [ ] |
在我们的方法中,每个网络都使用相应的数据类型单独训练,并在最后一个全连接层上保持各自的辅助损失。对于模态融合,两个子网络通过一个新的密集层进行拼接。训练过程中,在冻结卷积网络块权重的同时,优化密集层的权重。每个单模态架构由编号为1到4的块组成,后接两个全连接层和输出Softmax层。在每个块中,Conv3D层后接批归一化和最大池化三维层,其中块4包含两个 Conv3D层。各层每层Conv3D的特征图数量分别为32、64、128、256、256。所有Conv3D层的滤波器大小定义为 3 × 3 ×3,填充和步长维度设置为 1 × 1 × 1。此外,在第一个块中仅执行空间下采样,而对于其余块,最大池化三维层的池化大小和步长设置为 2 × 2 × 2。在每次全连接层之前,训练过程中采用0.2的dropout。训练使用Adam优化器,小批量大小16。单模态RGB模型的详细结构如图2右侧所示。
为了正确训练三维卷积神经网络,所需的训练数据远多于二维模型,因为其可学习参数数量要高得多。为防止在本研究中训练期间发生过拟合,我们进行了在线时空数据增强。空间增强包括平移、旋转和缩放,其中变换参数对特定数据批次是固定的。除了仿射变换外,我们还在RGB数据上应用了高斯模糊。由于我们的网络是从头开始训练的,因此我们采用了较低的变换值,这有助于模型更快收敛。对于时间增强,我们在定义的输入尺寸范围内随机选择连续帧。在融合训练的情况下,数据增强的参数保持固定,以维持两种输入模态之间的空间和时间对齐。所有这些操作都在馈送到模型的小批量内部随机进行。
3.3. 手势命令接口
当唤醒模块判断输入数据流中不再有手势出现,即连续的“无手势”预测次数达到预设阈值时,它将向手语识别模块发出信号,对当前的RGB‐D队列执行手语分类。手语分类的结果通过Softmax层以类别成员概率的形式输出。这些概率随后以独热编码向量的形式传递给手势命令接口。
手势命令接口的主要任务是从已识别语言手势的序列中创建结构化输入。该序列随后可由智能家居自动化系统用于实现用户命令。在本研究中,我们建立了一个适用于家庭自动化场景中特定命令范围的手语词汇,并定义了包含所有可能命令模式的语法文件。针对给定的智能家居自动化场景,我们将设备分为两种类型:一种是用户可以设置状态的执行器,另一种是传感器,它能够进行信息采集以获取传感器/环境参数的状态。
此外,我们设计了命令模式以控制或读取单个设备或一组设备的状态。该命令模式的格式如下:动作部分、设备名称/设备组部分,以及可选的命令部分,即位置描述符(例如,房间、厨房)。图 4 展示了一个用户命令的示例。
命令接口的另一个功能贡献是改进了对用户手语命令的识别。基于已建立的命令模式/格式(被视为序列结构),所提出的手势接口额外执行了分类优化。如果当前序列步骤的预测不符合预期的语言手势子类,则选择下一个概率最高的预测。该优化可递归重复进行接下来的两个步骤。例如,当系统识别到与家用设备相关的手势而系统期望一个命令动作时,它可以拒绝预测并寻找具有最高概率分数的下一个手势命令,这可能正是所期望的。
3.4. 克罗地亚手语数据集
手语是一种听障人士使用的视觉交流语言。根据[46],,几乎所有的欧盟国家都以某种形式承认其手语。自动手语识别任务主要包含与动态手势分类相关的相同约束。在该任务背景下,通常使用标记视频片段集合,其中用户执行预定义手势。尽管目前已存在大量可用的动态手势数据集,例如 20BN‐jester [11], EgoHands [47],英伟达动态手势 [48],,但可用的手语语料库数量相对较少[49]。
由于手语具有地区独特性,且目前尚无可用的克罗地亚数据集,因此在本研究中,我们基于克罗地亚手语创建了一个新的小型数据集——SHSL。考虑到这一点
手语包含多种因素,我们将其范围限定在智能家居自动化命令上。首先,通过与聋人社区合作,定义了家居自动化词汇。所提出的手语语料库包含了构建智能家居命令所需的25个语言手势。前述的命令模式将SHSL手势分为三类:动作、家用物品和房屋位置,每类分别包含13个、8个和4个手势。为了制作SHSL数据集,选取了40名志愿者,每人重复执行25个手势各两次,最终共收集了2000段手语视频。手势平均时长为3.5秒。在本研究中,使用ZED M相机进行
基于克罗地亚手语的智能家居控制动态手势识别接口
数据采集,以获取RGB‐D数据。视频以 1920 × 1080分辨率、30帧率录制。相机支架放置在距离手势执行者1.3米的位置,并要求每位执行者穿着深色衬衫。
4. 实验
在本节中,通过对所提出系统的每个组件进行单独分析,对系统进行了实验评估。鉴于轻量级唤醒模块和高性能手势识别模块的网络架构基于三维卷积,而三维卷积通常具有大量可学习参数,如图 2所示,因此需要大量数据以最小化过拟合的可能性。在本研究中,除了应用数据增强方法外,我们还使用Nvidia手势数据集对模型进行预训练,以获得适当的模型初始化。Nvidia手势数据集包含1532 个视频片段,分布在25个动态手势类别中。总共记录了20名受试者,通过安装在汽车模拟器内部多个位置的多个传感器进行采集。为了初始化模型,我们仅使用提供的RGB和深度数据模态,并按5:1的随机比例划分为训练集和验证集。系统的每个组件均在两块英伟达 RTX 2080 Ti 上使用TensorFlow镜像分布策略进行训练。在测试阶段,将各模块集成并导出至高效节能的嵌入式AI计算设备英伟达 Jetson T2X,以计算前向预测。Jetson TX2 是CUDA兼容设备,这是我们的ZED M相机实时计算深度模态所必需的。
4.1. 唤醒模块的性能评估
在本研究中,唤醒模块充当实时手势检测器,其功能除了区分“手势”和“非手势”外,还负责管理手势识别模块所使用的输入序列M的长度。考虑到手语命令接口的效率在很大程度上依赖于唤醒模块的性能,因此我们需要分析手势检测器在不同输入尺寸N下的准确率。使用较长的输入序列N会直接影响手势识别所需的时间,从而影响用户命令的执行速度。对所提出的唤醒模块的性能评估以二分类准确率为指标,针对三种输入尺寸4、8和16进行了测试。为了实现实时执行,采用仅基于深度模态数据的轻量级架构进行训练,相应结果如表1所示。
| 表1. 唤醒二分类准确率。 | 4帧 | 8帧 | 16帧 |
|---|---|---|---|
| Nvidia手势识别 | 91.3 | 94.5 | 94.7 |
| SHSL | 89.2 | 95.1 | 95.7 |
从结果可以看出,使用16帧时获得了最佳的准确率结果。考虑到第3节中解释的实际实时需求,所提出的手语命令接口集成了8帧唤醒模块。该决定是基于参数减少且性能下降可忽略不计,较小的帧大小也提供了更好的唤醒分辨率。
图 5展示了使用8帧时提出的模型在训练集和验证集上的分类准确率,从中可以看出该模型在问题上具有良好的拟合效果。训练时“无手势”与“手势”的类别比例为5:3,因为我们的实验表明,该比例足以使模型的精确率达到93.8%,召回率达到93.1%。
4.2. 手势识别模块的性能评估
在本研究中,手势识别模块被实现为一种分层架构,包含两个相同的并行子网络,每个子网络处理不同的输入模态。在训练过程中,我们首先分别使用Nvidia手势数据集中的RGB和深度数据对这两个子网络进行初始化。为了模型初始化,共进行了五次训练‐验证运行。预训练子网络的选择基于各自在RGB模态和深度模态下报告的最高验证准确率,分别为62.3%和65.6%。在获得验证准确率后,模型使用剩余的306个验证样本进行更新,以完成初始化过程。随后针对SHSL数据集的微调过程以 0.005的学习率开始,并由调度器控制,当损失函数未提升10%时,学习率将降低为原来的五分之一。
在本实验中,我们比较了每种单模态子网络以及模态融合模型在不同输入帧数M下的性能,以确定特定输入模态对手势识别结果的影响。手势识别模块在SHSL数据集上采用留一法交叉验证(LOSO)方案进行评估。如第3.4节所述,SHLS数据集包含40名用户的视频数据,每位用户对25个手语手势各执行两次。在所提出的验证方案中,分析的网络使用来自39名受试者的视频数据进行训练,并在单个用户上进行测试。表2展示了LOSO在40名用户上的平均分类结果。从结果可以看出,网络准确率依赖于输入序列M的长度,使用更长的输入序列可获得更高的性能。此外,我们可以观察到,深度模态网络的表现优于RGB数据,而引入模态融合后,性能提升显著。
| 表2. 手语识别—留一法交叉验证(LOSO)。 | 8帧 | 16帧 | 32帧 |
|---|---|---|---|
| SHSL–深度 | 60.2 | 66.8 | 67.4 |
| SHSL–RGB | 59.8 | 62.2 | 63.4 |
| SHSL–融合 | 60.9 | 69.8 | 70.1 |
为了提高个性化使用的识别效果,我们实施了一个额外的微调过程,在该过程中,使用包含25种手势的用户首次试验版本重新训练全连接层。与留一法方案类似,性能评估通过使用39名用户的数据(1950个视频)以及当前用户的前25个对应视频共同训练每个模型来进行
signer. 结果如表 3所示,40名用户的平均准确率为,由此可以看出,用户自适应技术可以进一步提高性能。
| 表3. 手语识别—用户自适应。 | 8帧 | 16帧 | 32帧 |
|---|---|---|---|
| SHSL‐深度 | 62.2 | 68.8 | 69.4 |
| SHSL‐RGB | 60.3 | 63.5 | 63.9 |
| SHSL‐融合 | 63.1 | 71.8 | 72.2 |
每位用户的性能如图 6 所示,其中可以看出使用者#5 的准确率最低,为 58.8%,而使用者#2 的准确率最高,达到 80.9%。此外,图 6使我们能够检查每位用户的准确率提升情况,可以看出使用者 #21 的提升最为显著,达到 7.8%;但也存在少数情况下该流程导致结果下降,例如使用者#12(−3.3%);在平均受试者中,自适应带来了 2.1% 的提升。
4.3. 手势命令接口的性能评估
提出的手势命令接口的目的是将已识别语言手势的序列解释为由三部分组成的命令格式:动作部分(A)、设备部分(D)和位置部分(L)。根据应用领域,所提出的手语语料库包含25个语言手势,按照命令格式分别归类为13个、8个和4个手势,对应动作、设备和位置部分。各命令组的性能如下表 4–6 所示。表 4中的混淆矩阵以每个手势的精确率和召回率为基准,展示了动作手势(1–13)之间的误分类情况,其平均分类准确率为73.3%。同样,表 5中的混淆矩阵对应设备手势(14–21),平均分类准确率为 70%,而表 6对应位置词汇(22–25),实现了71.9%的准确率。从这些混淆矩阵可以看出,如果预先知道手势类型,则可以减少错误,即通过拒绝所有不属于观察集合的手势,A、D和I部分的精确率可分别达到90.2%、81.6%和73.1%。
为了分析所提出系统在实际应用中的可能可用性,我们针对句子错误率(SER)测试了我们的解决方案,并分析了所提出的唤醒和手势识别模块的执行时间。在本研究中,SER被计算为与参考手语序列完全不匹配的手语序列的百分比。根据聋人的建议,本次实验定义了15种不同的手语序列(命令)组合,以确保每个手势至少执行一次。
句子错误率的报告结果与图6得出的结论一致,其中使用者#5的表现最差(实际上无法使用),而用户 #2取得了最佳得分,在留一法下达到40%,在用户自适应下达到33%。此外,还引入了一种优化过程
基于遵循既定的命令格式进行了改进。该方法实现了性能提升,因此在留一法和受试者自适应下的句子错误率报告为20%。
| 表4. 关于动作标志的混淆矩阵。 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | D | L | 精确率 | 召回率 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 28 | 0 | 0 | 3 | 0 | 0 | 0 | 8 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0.7 | 0.73 |
| 2 | 0 | 29 | 0 | 0 | 0 | 0 | 0 | 4 | 0 | 0 | 0 | 0 | 0 | 7 | 0 | 0.73 | 0.69 |
| 3 | 1 | 0 | 33 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 5 | 0 | 0.83 | 0.80 |
| 4 | 0 | 1 | 0 | 32 | 0 | 0 | 3 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 3 | 0.8 | 0.82 |
| 5 | 0 | 0 | 1 | 0 | 29 | 0 | 2 | 0 | 0 | 0 | 4 | 0 | 0 | 4 | 0 | 0.73 | 0.88 |
| 6 | 0 | 5 | 0 | 0 | 0 | 29 | 0 | 0 | 0 | 2 | 3 | 0 | 0 | 0 | 1 | 0.73 | 0.81 |
| 7 | 0 | 0 | 0 | 0 | 0 | 0 | 27 | 0 | 5 | 0 | 0 | 0 | 0 | 4 | 4 | 0.68 | 0.79 |
| 8 | 0 | 4 | 0 | 0 | 0 | 0 | 0 | 26 | 0 | 0 | 0 | 7 | 0 | 3 | 0 | 0.65 | 0.49 |
| 9 | 7 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 29 | 0 | 0 | 0 | 0 | 2 | 2 | 0.73 | 0.62 |
| 10 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 27 | 0 | 0 | 9 | 2 | 2 | 0.68 | 0.57 |
| 11 | 0 | 2 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 33 | 1 | 0 | 0 | 3 | 0.83 | 0.73 |
| 12 | 0 | 0 | 0 | 0 | 0 | 3 | 0 | 0 | 0 | 0 | 4 | 27 | 0 | 6 | 0 | 0.675 | 0.66 |
| 13 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 6 | 0 | 0 | 0 | 0 | 32 | 2 | 0 | 0.8 | 0.56 |
| D | 0 | 1 | 7 | 0 | 4 | 1 | 2 | 8 | 4 | 12 | 1 | 0 | 10 | 261 | 9 | 0.82 | 0.85 |
| L | 2 | 0 | 0 | 4 | 0 | 2 | 0 | 1 | 9 | 5 | 0 | 5 | 6 | 9 | 117 | 0.73 | 0.83 |
| 表5. 关于家用设备标志的混淆矩阵。 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | A | L | 精确率 | 召回率 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 14 | 26 | 0 | 6 | 0 | 0 | 0 | 0 | 3 | 5 | 0 | 0.65 | 0.72 |
| 15 | 0 | 29 | 0 | 0 | 0 | 0 | 3 | 0 | 8 | 0 | 0.73 | 0.88 |
| 16 | 0 | 0 | 28 | 0 | 0 | 4 | 3 | 0 | 5 | 0 | 0.7 | 0.67 |
| 17 | 1 | 0 | 0 | 30 | 0 | 0 | 0 | 0 | 7 | 2 | 0.75 | 0.81 |
| 18 | 0 | 0 | 0 | 0 | 28 | 0 | 0 | 5 | 7 | 0 | 0.7 | 0.82 |
| 19 | 0 | 0 | 2 | 0 | 0 | 27 | 0 | 0 | 10 | 1 | 0.68 | 0.75 |
| 20 | 0 | 0 | 0 | 0 | 0 | 0 | 28 | 0 | 6 | 6 | 0.7 | 0.78 |
| 21 | 0 | 0 | 0 | 4 | 0 | 4 | 0 | 30 | 2 | 0 | 0.75 | 0.58 |
| A | 9 | 4 | 6 | 2 | 6 | 0 | 2 | 7 | 469 | 15 | 0.90 | 0.85 |
| L | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 7 | 34 | 117 | 0.73 | 0.83 |
| 表6. 关于房屋位置手势的混淆矩阵。 | 22 | 23 | 24 | 25 | A | D | 精确率 | 召回率 |
|---|---|---|---|---|---|---|---|---|
| 22 | 30 | 0 | 0 | 0 | 10 | 0 | 0.75 | 0.88 |
| 23 | 1 | 29 | 1 | 0 | 9 | 0 | 0.725 | 0.86 |
| 24 | 0 | 0 | 28 | 0 | 4 | 8 | 0.7 | 0.72 |
| 25 | 0 | 0 | 0 | 28 | 11 | 1 | 0.7 | 0.82 |
| A | 2 | 5 | 4 | 4 | 469 | 36 | 0.90 | 0.85 |
| D | 1 | 0 | 6 | 2 | 50 | 261 | 0.82 | 0.85 |
为了满足实时应用的设计要求,我们的实际解决方案基于Nvidia TX2平台,采用TensorRT框架以实现深度学习应用的低延迟运行和高吞吐量。基于TensorRT的解决方案比CPU对应方案性能提升高达 40×,使我们的系统能够在实时条件下高效执行主体自适应过程。[50],为分析所提出方案的有效性,我们测量了预测阶段中每个模块的执行时间。使用数据批量大小为10的情况下,唤醒模块、单模态子网络和模态融合的记录执行时间分别为180 ms、290 ms和510 ms,结果表明,该方案能够在高效节能的嵌入式AI计算设备上满足实时处理标准。
5. 结论
手语是听障人士的主要交流方式。这种视觉语言拥有自身的词汇和语法体系,这给聋人社区融入社会和工作环境带来了严峻挑战。为了帮助听障人士进行交互,我们提出了一种高效的智能家居自动化系统。该系统集成了专为手语使用者设计的无接触界面。在与聋人协作下,创建了一个小型克罗地亚手语数据库,其中包含25种不同的语言手势,这些词汇专门用于智能家居自动化场景。为了开发实时应用,我们提出了一种新颖的分层架构,该架构由一个轻量级唤醒模块和一个高性能手势识别模块组成。所提出的模型基于三维卷积来提取时空特征。为了实现高性能分类,本文采用了多模态融合方法,并对两种输入模态——RGB和深度模态——进行了时序对齐。此外,应用了有效的时空数据增强技术,以提高准确率并防止模型过拟合。评估结果表明,所提出的手语分类器在留一者出验证方案下能够达到合理的准确率,用于识别单个语言手势。我们还展示了在进行用户自适应后结果的提升情况。整个系统的性能以句子错误率来衡量。从第3节所示的结果可以得出结论:所提出的 gesture command 接口可以在智能家居环境中高效使用。该实时系统的在线阶段作为实际实现,已在 Nvidia Jetson TX2嵌入式系统上结合StereoLabs ZED M立体摄像头进行了实施和测试。
在未来的工作中,研究将致力于在智能家居环境中实现手语的连续识别。我们计划扩展克罗地亚手语数据库的词汇,并在此基础上构建更复杂的语法和语言模型。此外,还将改进深度学习框架,纳入更多用户模态信息,如面部表情、头部和身体姿态。
533

被折叠的 条评论
为什么被折叠?



