1. 引言
随着科学技术的不断发展,人工智能技术在不同领域得到广泛的应用,人们期望与电子设备的交互更加自然、直观。传统的键盘、鼠标和触摸屏虽然高效,但限制了交互的自由度,手势识别提供了无需物理接触的交互方式。
手势识别可以拓展人机交互维度,使得一些非接触式的控制成为了一种可能,在虚拟现实与增强现实等场景中,手势控制能够提供更好的体验。对于有语言功能性障碍手势识别肯定会成为他们最好的助理,代替传统的输入设备,为他们提供另一种与外界交流的方式,帮助他们更加方便地操作设备与外界进行沟通[1]。
手势识别技术的发展不仅提升了人机交互的效率和体验,也推动了相关硬件和软件产业的进步,催生了一系列创新应用和服务。随着AI和计算机视觉技术的不断成熟,手势识别的准确性和实用性将进一步增强。
张云鸽等人研究基于数据增强的机车司机手势识别,丰富机车司机的操作,辅助驾驶保证行车安全[2]。王新等人研究交警手势识别,能够辅助驾驶人员判别交警手势的含义[3]。李达良基于MediaPipe进行手部信息的判断但是识别信息较少[4]。
本文使用YOLOv5 (You Only Look Once version 5)、ReXNet (Residual eXception Network)与ResNet-50 (Residual Network with 50 layers)相结合的方式实现手势的识别。其中YOLOv5用于定位手部信息的位置,ReXNet用于检测手部的关键位置、ResNet-50用于手势的分类。
2. 理论与方法
深度学习在图片识别的应用领域越来越广泛,本文基于深度学习的方法进行手部特征信息提取的研究[5],为了提高算法的运行效率,本文选取一次性预测的方法YOLO,作为手部特征信息提取的基本方法,确保手部位置信息不出现较大偏差,然后通过ReXNet对手部21个关键点进行回归检测,最后通过ResNet50做手势信息的识别。
2.1. YOLOv5算法
YOLOv5是由Glenn Jocher等基于YOLO优化改进而来,模型分为四个部分,分别是输入端、主干网络、颈部网络以及预测网络组成,其模型框图如图1所示。
(1) 输入端
在使用YOLOv5进行预测或训练时,可以通过调用模型的相应函数并传递适当格式化的图像数据来处理输入。这些预处理步骤通常已经集成在加载和运行模型的过程中。
图像尺寸:YOLOv5支持多种输入分辨率,但常见的预训练模型通常使用640 × 640的图像尺寸作为输入。用户可以根据需要调整输入大小,以平衡检测精度和速度。改变输入尺寸可能需要重新训练模型
Figure 1. YOLOv5 model block diagram
图1. YOLOv5模型框图
或调整一些超参数以获得最佳性能。
图像格式:输入图像应为RGB格式,即红绿蓝三通道。
归一化:在送入模型之前,图像像素值通常需要归一化到[0, 1]。
批量处理:在实际应用中,为了加速推理或训练,通常会以批次的形式输入多张图像。这意味着你需要将多张图像堆叠成一个四维张量,其形状为(batch_size, channels, height, width),其中channels = 3 (对应RGB三个通道),height和width是图像的尺寸,batch_size则是批次大小。
预处理:除了归一化,可能还需要进行其他预处理步骤,如缩放或填充,以确保所有输入图像尺寸一致。YOLOv5模型通常期望固定的输入尺寸,因此需要调整输入图像以匹配该尺寸。
数据类型:确保图像数据在送入模型前转换为适合模型运算的数据类型,通常是浮点数(float32)。
(2) 主干网络
主干网络的主要由移动平均池化块、复合缩放、路径聚合网络、SPP-Block (Spatial Pyramid Pooling)、全局平均池化等模块组成。YOLOv5的主干网络设计旨在高效地提取图像特征,同时保持较低的计算复杂度,以适应实时目标检测的需要。通过选择不同的EfficientNet变体,可以在性能和资源消耗之间找到合适的平衡点。
移动平均池化块:它包含了一个倒置瓶颈结构,通过步长为1的卷积、膨胀卷积和逐点卷积来减少计算量并保持模型性能。
复合缩放:通过复合缩放来调整模型的宽度、深度和分辨率,以平衡模型的性能和计算成本。
路径聚合网络:YOLOv5在主干网络中结合了PANet的设计,以提高特征金字塔的性能。PANet通过引入上采样路径和跳跃连接,增加了不同层次特征的融合,从而提高了目标检测的准确性。
SPP-Block:在某些版本的YOLOv5中,主干网络可能还包括SPP-Block,它在特征映射上应用不同大小的池化窗口,以捕获不同尺度的信息,这对于处理不同大小的目标非常有用。
全局平均池化:主干网络的输出通常会经过全局平均池化,将高维特征映射降维,为后续的分类和定位分支提供输入。
(3) 颈部网络
YOLOv5的颈部网络是模型中负责特征融合和提升的部分,它通常位于主干网络之后,头部网络之前。颈部网络的设计目的是为了更好地提取和融合不同尺度的特征,以提升目标检测的性能。以下是YOLOv5颈部网络中可能包含的关键组件:PANet (Path Aggregation Network)、FPN (Feature Pyramid Network)。具体形式如图2所示。
PANet:PANet引入了上采样路径和跳跃连接,将低层的细致信息与高层的抽象信息结合起来。这种设计有助于捕捉不同大小和尺度的目标,特别是在小目标检测中表现突出。
FPN:FPN是另一种常用特征金字塔结构,它通过将底层的高分辨率特征图与高层的低分辨率特征图结合,生成多尺度的特征金字塔。
颈部网络的作用是整合来自不同层的特征,增强模型对不同尺度和复杂背景下的目标检测能力。这些结构通常会提升模型的性能,特别是在处理多尺度目标和复杂场景时。
Figure 2. The network structure of FPN + PAN
图2. FPN + PAN的网络结构
(4) 预测网络
YOLOv5的损失函数由分类损失、定位损失、置信度损失三部分组成,损失函数计算公式如式(1)所示,其中
表示分类损失部分,
表示定位损失部分,
表示置信度损失部分,
、
、
是损失权重,用于平衡不同类型的损失对总损失的影响。分类损失对于每个锚框(anchor),模型预测一个类别概率分布,分类损失衡量的是预测类别与真实类别之间的差异。通常使用二元交叉熵损失函数计算,对于多类别问题,可以使用多类别交叉熵损失。定位损失衡量预测边界框与真实边界框之间的差距。YOLOv5使用的是GIoU损失,这是一种改进的IoU损失,即使在框不重叠时也能提供梯度,有助于模型更好地学习目标位置。模型为每个锚框预测一个置信度分数,表示该框是否包含一个对象。置信度损失也是使用二元交叉熵损失计算的,它区分了预测框是否包含目标物体。
(1)
同时使用非极大值抑制NMS (Non-Maximum Suppression),确保手的位置不会被反复识别,一个手势只识别一次。
2.2. ReXNet
ReXNet是一种深度学习模型,它是ResNeXt (Residual Network with eXtreme cardinality)的变体。ResNeXt引入了“分组卷积”的概念,通过并行的路径来增强网络的表达能力,提高模型的效率和性能。而ReXNet在此基础上进一步改进,提出了“深度可分离分组卷积”,它结合了深度可分离卷积和分组卷积,旨在减少计算量的同时保持甚至提高模型的准确性。本文使用ReXNet来检测手势的21个关键位置用于进一步手势的识别。网络结构如表1所示。
Table 1. ReXNet structure
表1. ReXNet结构
网络层 |
输出大小 |
输入层 |
224 × 224 × 3 |
卷积层 |
112 × 112 × 32 |
瓶颈层 |
112 × 112 × 16 |
瓶颈层 |
56 × 56 × 27 |
瓶颈层 |
56 × 56 × 38 |
瓶颈层 |
28 × 28 × 50 |
瓶颈层 |
28 × 28 × 61 |
瓶颈层 |
14 × 14 × 72 |
瓶颈层 |
14 × 14 × 84 |
瓶颈层 |
14 × 14 × 95 |
瓶颈层 |
14 × 14 × 106 |
瓶颈层 |
14 × 14 × 117 |
瓶颈层 |
14 × 14 × 128 |
瓶颈层 |
7 × 7 × 140 |
瓶颈层 |
7 × 7 × 151 |
瓶颈层 |
7 × 7 × 162 |
瓶颈层 |
7 × 7 × 174 |
瓶颈层 |
7 × 7 × 185 |
卷积层 |
7 × 7 × 1280 |
池化层 |
1 × 1 × 1280 |
全连接层 |
k |
2.3. ResNet-50
ResNet-50的核心是残差块,它由两个或三个连续的卷积层组成,中间有一个跳跃连接。跳跃连接直接将输入信号加到块的输出上,允许信息直接流过块,解决了深度网络中的梯度消失问题。每个残差块内部采用了“瓶颈”结构,即先通过一个较窄的卷积层(通常通道数为原输入的1/4)降低特征维度,然后通过一个较大的卷积层恢复到原始维度,最后是一个1 × 1的卷积层。这种设计减少了计算量,同时保持了模型的表达能力。ResNet-50在每个卷积层后都应用了批量归一化,以加速训练过程并提高模型的稳定性。为了减小输出尺寸,ResNet-50在某些层中使用步长为2的卷积,而不是池化层,这有助于保留更多的空间信息。在最后一个卷积层之后,ResNet-50使用全局平均池化代替全连接层,减少了模型的参数数量,降低了过拟合的风险。全局平均池化后的特征向量被馈送到一个全连接层,用于输出类别概率。具体结构如图3所示。本文使用ResNet-50拥有对手势具体含义的判别具体类别详见第三章。
Figure 3. ReXNet structure
图3. ReXNet结构
2.4. 手部关键点
手部关键点通常指的是在手势识别、人机交互、运动捕捉等应用中,为了精确描述手部姿态和运动,所定义的一系列具有代表性的位置。上述列表详细列举了手部的主要关键点,涵盖了从手腕到每个手指尖端的关节,具体包括图4中的21个关键点。使用ReXNet算法就是识别这21个关键点。
Figure 4. 21 key points on the hands
图4. 手部21个关键点
3. 实验设计与结果分析
3.1. 实验环境
手势识别软件环境如表2所示。
Table 2. Experimental environmental parameters
表2. 实验环境参数
项目 |
参数 |
操作系统 |
Windows 11 |
CPU |
i5-12500H |
内存 |
16 G |
系统类型 |
64位操作系统 |
3.2. 数据集
数据集中的如图5所示,本软件共处理了十种类型的手势,包括call (打电话)、dislike (讨厌)、fist (拳头)、good (棒)、ok (好的)、one (一)、two (二)、three (三)、four (四)、five (五)等10种手势。原始HaGRID数据集大小为716 GB,数据集包含552,992张全高清(1920 × 1080) RGB图像,分为18类手势。本文对这些数据集进行了精简处理,选择了10种手势每种手势选择了2000张图片,使用了共计20,000张的图片进行了数据的训练。实验结果的数据集均来自网络。
Figure 5. Data set
图5. 数据集
3.3. 实验结果
本文通过模型的训练得到模型,实验结果如图6所示,能够较好的识别出手部的位置,并提取手部的21个关键性特征,并完成对手势的识别,从图6中可以看出,该模型对有较好的识别效果,能够完成手势识别的任务。试验结果如表3所示,其中YOLOv5可以准确的将手部信息提取出来,准确度为98.5%;ReXNet捕捉手部21个关键点的准确度为97.2%;ResNet-50手势识别的准确度为98.2%。模型基本完成手势的识别。
Table 3. Algorithm result statistics
表3. 算法结果统计
算法 |
准确率 |
召回率 |
YOLOv5 |
98.5% |
99.9% |
ReXNet |
97.2% |
98.7% |
ResNet-50 |
98.2% |
99.3% |
Figure 6. Gesture recognition results
图6. 手势识别结果
4. 结束语
在基于YOLOv5、ReXNet以及ResNet-50相结合的方法实现对手势的识别,能够准确识别不同的手势信息。通过YOLOv5检测手部位置,通过ReXNet算法确定手部21个关键特征点,通过ResNet-50算法实现对手势的判定,结果显示该方法能够捕捉到图片中的手势信息,有能力实现手势控制与交互的功能。后续可以进一步优化算法,实现更多手势的识别。
NOTES
*通讯作者。