基于改进的YOLOV4的手势识别算法及其应用*

2021-06-24 09:58郭紫嫣韩慧妍何黎刚
中北大学学报(自然科学版) 2021年3期
关键词:先验集上手势

郭紫嫣, 韩慧妍, 何黎刚, 韩 燮

(1. 中北大学 大数据学院, 山西 太原 030051; 2. 华威大学, 计算机系, 考文垂 CV4 7AL)

手势是人们日常生活中沟通交流的一部分, 随着科技的进步以及智能设备的发展, 手势作为一种自然、 直观的交互方式逐渐应用于人机交互, 在模拟实战游戏、 航空航天、 智能家居、 安全驾驶等方面都有广泛应用. 手势识别是使用采集设备获取各种手势动作, 通过模式识别或者其他方法对人类手势动作进行解释的新型技术[1]. 在人机交互中, 为了使计算机能够准确识别手势, 理解手势代表的含义并做出相应的操作, 提升手势识别的准确率就显得尤为重要. 目前, 对手势识别的研究主要分为三类: 基于外部硬件设备的手势识别、 基于计算机视觉的手势识别以及基于深度学习的手势识别.

基于外部设备的手势识别技术通常需要借助一些外部设备对手势进行采集与识别[2-4], 如基于可穿戴数据手套、 Kinect、 Leap Motion的手势识别. 这一类方法识别准确度高、 速度快, 但是其硬件设施昂贵、 操作不方便. 基于计算机视觉的手势识别主要包括手势分割、 特征提取和识别三部分. 手势分割是利用肤色在RGB[5]、 HSV[6]、 YCbCr[7]等颜色空间下建模对人手进行分割提取. 特征提取通常采用SIFT[8]、 HOG[9]、 SURF[10]等描述符对手势进行特征提取. 手势识别算法包括基于模板匹配和基于数据分类的方法[11-12], 这类方法容易受到光照、 人工设计特征、 计算复杂度高等影响而导致手势识别率不高、 鲁棒性较差.

近年来, 深度学习在图像分类、 目标检测等计算机视觉领域得到了巨大的发展. 与传统的手势识别方法相比, 基于深度学习的方法避免了手工提取特征, 使模型具有更好的自适应能力. 目前, 深度学习的目标检测算法分为两大类: 一类是以YOLOV3[13]为代表的基于回归的目标检测算法, 如SSD, YOLOV4[14]等, 不生成候选区域, 直接利用检测网络产生目标的位置信息和类别, 有更高的检测速度, 满足实时性; 另一类是以Fast R-CNN[15]为代表的基于区域建议的目标检测算法, 如SPP-Net, Faster R-CNN[16]等, 需要先生成候选区域, 使得检测速度较慢, 不满足实时性的需求. 在手势识别中, 要求手势识别准确率以及识别速度尽可能高, 因此本文选用YOLOV4用于手势识别, 使其能很好地平衡识别精度和速度. 若将原算法直接用于手势识别, 会出现以下问题: 1)由于人手目标大小不一, 无法有效检测不同尺度的目标手势; 2)由于不同手势的相似性, 导致部分手势漏检以及误检的问题, 识别率不高.

鉴于上述问题, 本文利用数据增强的方法解决手势数据较少的问题, 其次对YOLOV4进行改进, 改变原特征图的分辨率使其能够检测到更多的特征, 利用K-means聚类算法调整先验框尺寸, 加强对不同尺度手势的检测能力, 进一步提高手势识别的准确率, 在标准数据集以及自制的手势数据集上进行实验.

1 YOLOV4算法简介

YOLOV4是一种端到端的目标检测算法. YOLOV4首先通过主干网络Darknet53提取输入图像的特征, 输出19×19, 38×38, 76×76三种尺度的特征, 送入检测网络. 检测网络对这三种特征进行回归, 使用非极大值抑制算法删除置信度较低的预测框, 保留置信度较高的预测框并将其作为目标检测框, 从而得到目标的类别和位置. 将得到的类别和位置输出作为最后的目标检测结果.

YOLOV4算法是在原有YOLOV3目标检测架构基础上, 从数据处理、 主干网络、 网络训练、 激活函数等各个方面引入一些优化方法, 使得模型在检测速度和精度上达到了最优匹配. 在YOLOV3基础上的改进如下:

1) YOLOV4的主干网络采用了CSPDarknet53网络. CSPDarknet53比YOLOV3的主干网络Darknet53多了5个CSP模块, CSP模块将基础层的特征映射划分为两部分, 再通过跨阶段层次结构合并, 在减少计算量的同时保证准确率. YOLOV4只在主干网络中使用了Mish函数, 其余部分使用Leaky_Relu激活函数, 使用Dropblock正则化方式随机删除神经元的数量, 简化网络结构.

2) 为了使预测框获取更大的感受野, 有效分离数据中的显著特征, YOLOV4在CSPDarknet53结构后添加了SPP模块. SPP结构能有效地增加主干网络的特征接受范围, 显著地分离出重要的特征信息.

3) YOLOV4采用了FPN+PAN模块. 与YOLOV3的FPN不同的是, YOLOV4在FPN后面还添加了一个自底向上的特征金字塔, 其包含两个PAN结构. 运用这种改进的结构取代了YOLOV3中单一的FPN结构, FPN层从顶部到底部传达了强大的语义特征, 而特征金字塔不同, 是从底部到顶部传达了强大的定位特征, 进而使得改进后的FPN+PAN结构可用于不同级别检测器的参数聚合, 进一步提高了特征提取的能力, 从而提升对目标的检测能力.

2 改进的YOLOV4算法

YOLOV4算法在通用的PASCAL VOC数据集上进行训练后不能很好地检测手势, 这是因为PASCAL数据集中有20个分类模型, 其中并不包含手势模型, 故而不能很好地检测出手势. 针对此情况, 本文在原始YOLOV4算法的基础上优化了YOLOV4的网络结构, 改变原特征图的分辨率, 同时利用K-means聚类算法重新调整先验框尺寸, 使网络对小尺度目标更加敏感, 避免因人手目标大小不一和手势相似而导致手势的误检和漏检, 加强对不同手势的检测能力, 提高手势的识别准确率.

2.1 改变原特征图分辨率

YOLOV4使用Darknet53网络提取输入图像的特征, 通过对图像进行5次下采样, 得到5个不同尺度的特征图. 具有大分辨率的浅层特征图能够包含更多像素点的信息, 也就是细节信息, 如轮廓、 边缘、 纹理等, 并且目标定位准确, 具有小分辨率的深层特征图包含更多的语义信息, 利于物体分类. 如果将浅层特征与深层特征相融合, 可以扩大分类网络的接受域, 同时学习到更多的全局信息, 浅层特征图可以提高模型的语义表示能力, 从而提高网络区分不同目标的能力. 为了提高不同手势的识别率, 本文对YOLOV4模型提取的特征图进行修改并融合, 首先将原特征图的三个尺度19×19、 38×38、 76×76修改为两个较大的尺度38×38、 76×76, YOLOV4模型在这两个尺度下对目标进行预测, 其流程图如图1 所示.

图1 改变原特征图分辨率流程图

2.2 K-means聚类调整先验框尺寸

先验框的提出将目标检测转化为两个问题且同时进行, 即固定网格内是否有目标和判断预测框与真实框距离的问题, 由于抛弃了其他网络中的滑动窗口环节, 所以使得目标检测的精度和速度大大提升. 先验框的大小对于YOLOV4目标检测网络十分重要, 原始的YOLOV4的先验框是在VOC数据集的标注上聚类得到的. 由于VOC数据集中的物体多样, 长宽比例差别大, 先验框的差别也很大. 然而在手势数据集中, 由于人手距离摄像头远近不同或者人手大小不一, 直接使用原来的先验框并不能很好地满足识别要求. 为了提高手势识别的精度, 重新使用K-means聚类算法对本文数据集进行聚类分析, 得到先验框的尺寸. 首先对已标注的数据集进行聚类, 不断增加聚类中心的个数, 经过迭代, 分别获得聚类中心, 然后将聚类中心与预测框和真实框的交并比IoU作为K-means聚类算法的相似度参数. 距离计算公式为

d=1-IoU,

(1)

式中:IoU表示预测框与真实框的交并比. 式(1)在一定程度上使得生成的预测框更加接近于目标真实的标记框.

对于手势数据集, 使用上述方法重新进行聚类分析, 得到的先验框分别为(62, 70), (83, 132), (114, 93), (186, 128), (254, 127), (374, 404). 先验框尺寸与特征图尺度大小成反比, 在较大的特征图上用较小的先验框, 用于检测较小的目标, 在较小的特征图上用较大的先验框, 用于检测较大的目标. 因此, 尺度较小的特征图38×38 使用较大的先验框(186, 128), (254, 127), (374, 404), 尺度较大的特征图76×76分配较小的先验框(62, 70), (83, 132), (114, 93). 具体如表1 所示.

表1 改进的YOLOV4先验框尺寸

3 实验结果及分析

3.1 手势数据集准备

本文实验中采用的手势数据集为标准手势数据集以及实验室自制的手势数据集.

标准手势数据集为Sign Language Digis Dataset数据集, 是由土耳其安卡拉Ayranc阿纳多卢高中学生准备的手语数字数据集, 数据集网址为: https://github.com/ ardamavi/Sign-Language-Digits-Dataset. 由每个学生拍摄十种手势, 分别表示数字0~9, 共有2 180张手语数字图像, 此数据集是在同一背景下拍摄的.

自制的手势数据集是由实验室采用红外摄像头进行拍摄的. 选取五种手势作为代表, 分别为手势张开(hand_palm), 手半弯曲(hand_wan), 握拳(hand_fist), 食指型(hand_finger), OK手势(hand_ok), 采用红外摄像头对8名实验者的五种手势进行不同距离不同角度的手势图像采集.

为了丰富手势训练集, 获得更好的训练结果, 本文使用随机转换的方式增强手势数据集, 包括图像翻转、 顺时针旋转、 逆时针旋转、 尺度变换等对手势数据集进行扩充, 由原来五种手势的600张图像扩充到5 000张.

手势数据集(标准数据集以及自制的数据集)参考VOC2007数据集的格式制作. 使用LabelImg图像标注软件, 对JPEGImages中的图像进行人工标注, 对图像中的手势以最小外接矩形进行画框标定, 得到手势区域的边界框以及手势所属的类别标签并生成对应的XML文件, 完成VOC2007数据集格式的转换. 之后将数据集按照8: 2的比例随机生成了训练验证集和测试集, 再进行模型训练及测试.

3.2 算法评价指标

本文采用精准率P(Precision)和召回率R(Recall)作为手势识别的评价指标. 精准率计算的是所有被正确识别的样本占所有被识别到的样本的比例, 而召回率指的是所有被正确识别的样本占所有应该被识别到的样本的比例, 计算公式为

(2)

式中:TP表示正确识别的手势图像数量, 即真阳性;FP表示错误识别的手势图像数量, 即假阳性;FN表示漏识别的手势图像数量, 即假阴性. 除此以外, 检测时间也作为评价指标, 每张手势图像的检测时间越短说明算法的运行速度越快.

3.3 实验平台

本文所有的实验均在Windows10系统下进行, 硬件环境: GPU NVIDIA GTX970; CUDA版本号为CUDA10.1; cuDNN版本号为cuDNN7.6; 训练设置如下: 每次迭代训练样本数为64, 分16个批次, 动量因子设置 为 0.949, 权重衰减系数为0.000 5, 最大迭代次数设置为10 000, 学习率为0.001; 训练迭代次数达到6 000 和8 000时, 将学习率分别降至初始学习率的10%和1%.

在自制的手势数据集上训练, 对应的迭代次数与损失函数的关系如图2 所示.

图2 迭代次数与损失函数的关系图

由图2 的曲线可以看出, 在迭代至10 000次左右的时候, 模型达到了收敛, 损失值在0.1上下浮动.

3.4 标准及自制手势数据集上手势识别的实验结果及分析

为验证本文改进算法的有效性, 在标准手势数据集以及自制的手势数据集上分别进行了Faster R-CNN算法、 原始YOLOV4算法与改进后的YOLOV4算法的对比实验.

3.4.1 改进算法对小目标手势的识别结果

改进先验框尺寸后, 对距离摄像头较远的小目标手势的识别结果如图3 所示, 目标框代表识别手势所在的位置, 文本第一部分表示手势的识别结果, 第二部分表示手势的置信度, 图4~图6 类似. 对小目标手势的识别结果分析如表2 所示, 其中, 未识别的手势以及识别错误的手势其置信度以及目标框定位用“×”表示.

表2 小目标手势识别结果分析

图3 改进先验框对小目标手势识别的实验结果

图3 中第一行(图(a)、 (b)、 (c))为改进前的手势识别结果, 第二行(图(d)、 (e)、 (f))为改进先验框后的对应手势识别结果.

通过表2 分析可以得知, 算法经过改进后, 可以准确识别小目标, 避免漏检问题, 且置信度有所提高, 对于不同大小尺度的目标能同时识别且准确定位.

3.4.2 三种算法在标准数据集上的识别结果

在标准手势数据集上分别使用改进前与改进后的YOLOV4算法、 Faster R-CNN算法对手势进行检测. 部分手势检测结果如图4 所示, 手势识别的结果分析如表3 所示, 三种算法手势识别率的比较结果如表4 所示, 图中使用目标框来标出手势所在的位置, 方框左上角为该手势所属的类别以及置信度, 置信度表示该手势被正确识别的概率, 但是文字较模糊, 为此, 在图像的右上角再次标记出来.

表3 标准数据集上三种算法的手势识别结果分析

表4 三种算法在标准数据集上的手势识别率比较

图4 Faster R-CNN算法与改进前后算法在标准数据集上的手势识别结果对比

图4 为标准数据集上的部分手势识别结果图. 图4 中第一行为Faster R-CNN算法的识别结果, 简写为F R, 第二行为原始YOLOV4手势识别结果, 第三行为改进YOLOV4手势识别结果. 由表3 的分析可得出, 使用Faster R-CNN算法以及改进前的算法, 会出现手势定位不准确、 漏检、 误检现象, 且置信度较低; 而改进后的算法检测效果良好, 可以准确识别各种手势, 置信度较高且目标框定位准确, 同时手势的漏检、 误检现象得到了改善.

表4 结果表明, 改进后的YOLOV4算法在标准手势数据集上的精准率为97.80%, 召回率为92.45%, 相比于改进前的算法, 识别精度提高5.35%, 召回率提高4.85%, 相比于Faster R-CNN算法, 识别精度提高8.47%, 召回率提高7.75%. 平均单幅图像的检测时间为0.086 s, 比原始算法及Faster R-CNN时间短, 很好地满足了实时性.

3.4.3 三种算法在自制数据集上的识别结果

为了进一步验证本文改进网络的优越性, 使用Faster R-CNN算法在自制的手势数据集上进行训练. Faster R-CNN也是通用的目标检测算法, 使用区域建议的方式生成候选区域来进行目标检测. 自制数据集共有5 000张手势图像, 随机选取其中的1 000张作为测试集, 分别使用本文原始算法、 改进算法以及Faster R-CNN算法进行检测, 文中选取了其中的10张图像(简单背景下5张, 复杂场景下5张)作为代表进行识别效果的比对. 简单背景手势识别结果如图5 所示, 识别结果分析如表5 所示, 并计算其平均精准率、 召回率以及检测时间, 如表6 所示. 复杂场景识别结果如图6 所示, 识别结果分析如表7 所示.

图6 复杂背景的手势识别结果

图5 中第一行为利用Faster R-CNN获得的手势识别结果, 其中将Faster R-CNN简写为F R, 第二行为原始YOLOV4算法手势识别结果, 第三行为改进YOLOV4算法检测结果. 表5 的识别结果分析表明, 相比较原始YOLOV4算法和Faster R-CNN算法, 本文改进算法能准确识别各种手势, 且目标框定位准确, 识别置信度高, 说明本文改进算法的性能优于前两种算法.

表5 简单背景下三种算法的手势识别结果分析

表6 结果表明, 改进后的YOLOV4算法的精准率为98.57%, 召回率为93.89%, 相比于改进前的算法, 识别精度提高了5.24%, 召回率提高了4.57%, 相比于Faster R-CNN算法, 识别精度提高了8.61%, 召回率提高了8.46%. 平均单幅图像的检测时间为0.090s, 比原始算法以及Faster R-CNN检测时间都短. 综上可以看出, 本文方法能同时兼顾检测精度和检测速度, 满足手势实时识别的需求.

表6 三种算法在简单场景的手势识别率比较

图6 中, 第一行为利用Faster R-CNN获得的手势识别结果, 将Faster R-CNN简写为F R, 第二行为原始YOLOV4算法手势识别结果, 第三行为改进YOLOV4算法检测结果. 由表7 得出, 在复杂场景中, 本文改进算法相比较Faster R-CNN算法和原始YOLOV4算法, 能准确识别各种手势, 且目标框定位准确, 手势置信度较高, 充分说明改进后的YOLOV4算法用于手势识别任务时具有较高的精度和鲁棒性.

表7 复杂场景下三种算法的手势识别结果分析

4 手势交互实验

手势交互实验主要是通过识别不同的手势控制场景中的坦克模型进行相应的动作, 其对应关系如表8所示. 表8 给出了截取手势图像以及包含坦克模型的部分场景图像. 由系统的手势识别模块所得结果可以看出, 该系统能正确识别手势图像, 从而控制坦克模型做出正确的动作.

表8 不同手势对应的坦克动作

5 结 论

本文提出了一种基于改进YOLOV4的手势交互算法, 利用数据增强的方法来解决手势数据较少的问题, 同时优化YOLOV4的网络模型, 利用K-means聚类算法重新计算先验框的尺寸, 加强了对不同手势的检测能力. 在标准的手势数据集以及自制的手势数据集上对本文的算法进行了验证, 实验结果表明, 本文提出的方法在手势识别准确率方面优于传统算法和Faster R-CNN算法, 满足实时性要求, 可以实现手势的快速检测, 同时能识别复杂场景下的手势, 可进行实时手势交互, 控制坦克模型做相应的动作. 下一步将对受环境光照影响或者背景剧烈变化而导致的手势识别精度差等问题进行研究, 以获得更高的识别率.

猜你喜欢
先验集上手势
关于短文本匹配的泛化性和迁移性的研究分析
基于暗通道先验的单幅图像去雾算法研究与实现
基于互信息的多级特征选择算法
先验想象力在范畴先验演绎中的定位研究
一种考虑先验信息可靠性的新算法
挑战!神秘手势
胜利的手势
先验的风
师如明灯,清凉温润
几道导数题引发的解题思考