刘 佳,卞方舟,陈大鹏,李为斌
南京信息工程大学 自动化学院B-DAT&CICAEET,南京 210044
人手指尖检测在人机交互领域有着十分重要的意义。指尖检测方法主要可分为传统方法和基于深度学习的方法。传统的方法利用Kinect获取深度图像,结合凸包与曲率分析法来检测指尖[1],但该方法在手部有遮挡情况下的效果有待提升;王艳等[2]提出一种将Hu不变矩和指尖个数相结合的静态手势识别方法,该方法在识别静态手势上效果显著;杨洋等[3]提出用YCbCr色彩空间来检测肤色,以便对输入的图像进行手势区域分割,该方法易受有类肤色的背景影响;Wang等[4]提出了一种融合二维轮廓和三维深度信息来检测指尖并利用卡尔曼滤波来跟踪指尖的三维位置的方法;孟浩等[5]提出一种基于深度信息的指尖检测-跟踪-监督的融合算法,该方法在指尖跟踪速度上有待提高。传统的方法大多利用手部特征来检测指尖,对手部轮廓的完整性、光照强度、背景复杂度等都有一定的要求,因此这些方法或多或少都存在一些缺陷,指尖检测的准确率与实时性有待提高。
近些年,随着深度学习快速发展,越来越多的研究尝试利用深度学习的相关方法来解决指尖检测的问题。例如,贠卫国等[6]通过构建深度卷积神经网络(convolutional neural network,CNN)来对手势进行分类,提出了一种基于深度学习的多特征融合的手势识别方法;Huang等[7]提出了一种具有双层级联结构的CNN模型,该模型第一层网络用于生成手部区域框,第二层用于检测指尖并返回精确位置;Nguyen等[8]提出一种把RGB-D图像和卷积神经网络相结合的指尖检测方法,此方法可以同时处理静态与动态场景;Wu等[9]提出一种基于神经网络热图回归的指尖检测解决方案,通过构建的YOLSE网络,该方案可以从单个RGB图像中检测出指尖。以上方法大多需要训练一个单独的模型,导致训练成本高,实用性差,并且为了追求准确率将网络堆叠层数加深,导致平均运行时间变长,实时性表现不佳,因此在实时性上有待优化。
预测高斯热图方法主要应用在人体姿态估计上,受到此方面研究的启发,本文利用预测高斯热图与深度学习方法设计一个精确、鲁棒的指尖检测模型,以实现快速且准确地检测出指尖并识别手势。该模型结合了卷积神经网络(CNN)与全卷积神经网络(FCNN)的特点,是一种可以同时进行指尖位置预测和识别手势的统一卷积神经网络(unified-gesture-and-fingertip-network,UGF-Net)。
如图1所示,本文提出的指尖检测算法主要包含以下步骤:首先使用深度学习目标检测算法YOLO[10-12]对输入的原始图像进行检测,并裁剪手部候选区域;将裁剪的手部区域作为UGF-Net网络的输入,利用CNN[13-14]的全连接层来预测不同手势中可见的指尖数目以进行手势分类,然后利用FCNN输出各指尖的热图,并根据热图中的高斯概率分布获取多组指尖位置的集合,通过计算平均值来预测最终的指尖位置。
图1 指尖检测算法流程框图Fig.1 Flow chart of fingertip detection algorithm
本文使用YOLO目标检测算法来提取手部区域。YOLO是由Joseph Redmon等提出的一种以实时性为优先级的目标检测算法,它将物体检测问题转换为回归问题来求解,直接利用输入图像的特征值来预测目标对象的空间位置、范围以及条件类别概率,检测速度非常快。YOLOv2通过使用anchor机制、批归一化以及维数聚类等多种优化方式来改进原始YOLOv1的检测过程,在保持原有速度的同时提升了检测精度[15]。本文提出了一种基于YOLOv2的手部区域检测算法,如图2所示。
图2 手部区域检测流程图Fig.2 Flow chart of hand area detection
基于YOLOv2的手部区域检测算法的具体实现过程如下:
(1)图像预处理
首先将原始图像640×480缩放为224×224的输入图像,然后将输入图像划分为7×7个单元格,每个单元格的尺寸大小为32×32,单元格将用于预测一定数量的候选边界框(bounding box)。尺寸缩放的目的一是为了降低计算复杂度,二是便于等比例划分单元格且保证每个候选框中仅有一个中心单元格。
(2)先验框聚类
与YOLOv1直接预测边界框的坐标位置不同,YOLOv2引入了Faster R-CNN中的anchor机制,通过预测先验框(anchor box)中的偏移量和置信度来获取手部区域的位置和类别概率。在Faster R-CNN中,先验框的尺寸参数均是人工设定的,这存在一定的局限性和主观性。YOLOv2利用K-means算法来聚类分析训练样本中真实边界框的位置信息,以找出最佳的先验框的坐标。由于设置先验框的主要目的是提高候选框和真实边界框的“交并比”(IOU),因此采用IOU值为评价标准,即K-means的距离度量可定义为式(1),其中centroid是聚类时被选作中心的边框,box表示为其他边框。
(3)位置预测
经实验测试,最终选取5个聚类中心作为先验框,并将特征图划分为7×7个单元格,每个单元格都将预测5个候选边界框(对应于先验框的数量),每个候选框包含5个预测值tx、ty、tw、th和Conf( )bbox。其中(tx,ty)表示候选框相对于单元格坐标的偏移量,(tw,th)表示的是尺寸缩放。根据以下四个公式可计算出候选框的位置和范围:
其中,(cx,cy)表示中心单元格与图像左上角的横纵距离、(pw,ph)表示先验框的尺寸大小、σ表示的是sigmoid激活函数,作用是将边界框的中心点约束在当前单元格内。bx、by、bw、bh就是候选框的中心点和尺寸。如图3所示,蓝色实线矩形表示候选框,红色虚线矩形表示先验框。
图3 边界框位置参数预测Fig.3 Prediction of boundary box location parameters
置信度Conf(bbox)由两部分组成,一是单元格中是否存在目标实例,二是边界框的准确率,其定义如式(6)所示。如果目标存在,则Pr(Obj)为1,置信度Conf(bbox)等于IOU;否则,Pr(Obj)为0,置信度Conf(bbox)也等于0。
每个单元格不仅能输出候选框的5个预测值,同时还能预测条件类别概率Pr(Classi|Object),它表示单元格中存在目标实例且属于某一类别的概率。在检测过程中,可以根据式(7)计算得到各个单元格的类别概率值:
(4)筛选边界框
类别概率值包含了预测的类别信息和边界框的准确度。本文中候选框的总数是特征图尺寸与先验框数目的乘积(即为7×7×5=245)。首先根据式(6)和式(7)过滤掉一些置信度较低的候选框,然后根据经验设定一个固定阈值(本文设定为0.7),并过滤掉那些类别概率值小于该阈值的候选框,最后利用非极大值抑制(nonmaximum suppression,NMS)筛选出最佳的手部区域边界框。如图4所示,图中的紫色矩形框即为筛选出的最佳手部区域边界框。
图4 手部区域提取结果Fig.4 Hand region extraction results
手势区域检测完成以后,再对裁剪出的手势区域进行指尖检测与手势识别。在文献[13]中,指尖的位置信息是直接从CNN的全连接层中回归得到的,经实验分析可知,该方法对单点指尖具有较好的识别率,但在多点指尖检测任务中表现一般,并且它需要训练多个模型用于检测不同手势中的指尖。热图回归方法最初用于人体关节点的预测任务,Pfister等[16]提出了一种基于关节点的人体姿态估计算法,首先利用FCNN输出人体各个关节点的热图,每个热图中均分布了一组高斯概率,通过计算高斯峰值来预测各个关节点的位置。在计算复杂度和实时性等方面,该方法的表现结果明显优于直接对关节位置进行回归的方法。
1.2.1 高斯热图回归
预测高斯热图这种方法主要应用在人体姿态估计,可以输出人体关节关键点实现人体姿态估计。本文受到此方面研究的启发,将这个方法应用在指尖检测上,首先利用FCN输出手部各个关节点的热图,每个热图中均分布了一组高斯概率,通过计算高斯峰值来预测各个指尖的位置。
文中使用argmax算法来计算关键点的坐标,计算得出的峰值就是关键点的坐标值。如式(8)所示,已知一个映射g:X→Y,x的取值范围为S,argmax的结果为使得g(x)取得最大值的x的点集。
如图5所示,在对高斯热图进行argmax处理的时候,图中0.8为最大值,它的位置就是关键点激活的对应像素点。
图5 高斯热图回归Fig.5 Gauss thermograph regression
本文利用FCNN来得到输出,并在全卷积特征图后面接一个转换模块,将空间高斯热图转换为关键点坐标点集合,通过取集合的平均值来回归指尖位置的最终输出,如式(9)所示:
1.2.2 UGF-Net
结合两种检测方法的优势,本文设计了一种同时用于指尖检测和手势识别的统一卷积神经网络UGF-Net算法,该算法通过预测手指类别的概率来识别不同手势,并利用FCNN回归指尖的坐标信息集合,然后通过取集合的平均值来回归最终的指尖位置输出。图6显示的是UGF-Net网络结构。
图6 指尖检测网络结构Fig.6 Fingertip detection network structure
由图可知,UGF-Net网络是以VGG16-Net[17-18]作为主干网络,主要包含两个部分。第一部分是卷积神经网络模块,它含有若干卷积层和全连接层;第二部分是全卷积神经网络模块,它只含有较少的卷积核和上采样层。在基于UGF-Net网络的指尖检测任务中,考虑到计算复杂度和实时性等性能要求。该模型首先将网络的输入尺寸设定为128×128,然后利用VGG16的前五个Block输出手势图像的特征图,并将该特征图用于后续的研究工作。
在指尖坐标位置检测任务中,在得到手势图像的特征图后,通过最终层输出大小为4×4×512的手势特征图。然后采用双线性插值的上采样方法扩张最后卷积层输出的特征图的尺寸,将尺寸转换为12×12×512,接着使用一个3×3的卷积核将新的特征图生成一组表征指尖的热图集合。利用热图得到10组指尖的位置集合,最后通过计算指尖坐标集合的平均值来预测最终的指尖位置。
在手势识别任务中,本文首先将特征图映射成一组长度为8 192的特征向量。然后利用全连接层来输出各个指尖的概率,如果概率值大于预先设定的阈值P(本文设定为0.5),则表示能检测到对应的指尖;如果概率值小于阈值P,则不能检测到指尖。最后通过一组一维向量来表示不同姿态的手势。例如日常交流中“胜利”手势可表示为[0,1,1,0,0],图6中手形则表示为[1,1,1,1,1]。
SCUT-Ego-Gesture数据集[9]是由华南理工大学人机智能交互实验室建立并公开的一组手势数据集,它包含16种不同姿态的手势,共收集了59 111张以自我为中心的彩色手势图像。该数据已预先标注了手部区域包围框、指尖点以及部分关节点的二维坐标信息。本文选用前8类单手交互样本进行手部区域分割和指尖检测模型的训练,如图7所示。
图7 单手手势样本Fig.7 Sample of one hand gesture
本实验的硬件平台选用高性能的英伟达GeForce GTX1080显卡,英特尔i5-7400处理器,主频3 GHz,16 GB显存,32 GB内存。软件方面则选用了tensorflow深度学习框架,并基于并行计算架构CUDA和CUDNN完成并行优化。
在指尖识别模型训练过程中,本实验选用了Adam优化算法来更新神经网络权重,其中参数初始学习率lr为1E-5,参数β1和β2分别为0.9和0.999,模糊因子ε设置为1E-8。本实验的迭代次数epoch为100,数据批处理大小batch_size设置为8。
2.2.1 测试集实验结果
图8显示了指尖检测算法在手势测试集上可视化的结果,图(a)表示了在不同光照变化环境下的检测结果,可以看出,本文指尖检测算法均能够准确地裁剪出手势图像,并检测出指尖点的二维坐标。图(b)表示了在不同复杂背景下的检测结果,可以看出,本文指尖检测算法在复杂情形中仍然表现出了较高的识别率和较好的鲁棒性。
图8 指尖检测算法结果展示Fig.8 Fingertip detection algorithm results display
2.2.2 实时视频图像检测结果
图9显示了本文指尖检测算法在视频图像中的实时表现结果,其中紫色方框表示了基于YOLOv2的手部区域检测的结果,彩色实心圆表示的是基于UGF-Net网络所预测得到的指尖坐标位置。
图9(a)显示了正常情况下用户的手势的检测结果,图片依次为手势一到手势八,均能检测准确;图9(b)显示了不同指尖角度的情况下的检测结果,包括用户的手势离相机较远且有45°倾斜时、用户手势90°垂直于相机平面、用户手势离相机较远等情况。图9(c)表示的复杂环境下的检测结果,包括环境中有类肤色物体的出现。综上所述可知,本文指尖检测算法在不同情况中均表现出了较好的准确性和鲁棒性。此外,本文算法的平均帧率达到了34.51 frame/s,满足实时性的要求。
图9 实时指尖检测算法结果展示Fig.9 Real time fingertip detection algorithm results display
与传统方法相对比,传统的指尖检测方法大多利用手部的特征来检测指尖,对手部轮廓的完整性、外界光照强度、背景复杂度等都有一定的要求,因此检测速度与精度都有待于提高。受到人体姿态估计方面研究的启发,UGF-Net算法使用基于高斯热图的输出方式,由于高斯热图输出的特征图较大,因此它的空间泛化能力强。并且使用全连接层进行预测不同手势中可见的指尖数目以进行手势分类,来提高指尖预测的精度。UGF-Net算法在保证检测精度的情况下适当地减少了网络的堆叠层数,有效地提高了速度,因此实时性得到了改善。
UGF-Net算法通过实验验证,在上文提到的复杂情况下,指尖检测的准确率与实时性相对于传统方法来说都有了较大的提升。
为了准确地评估UGF-Net算法的准确性和实时性,本次实验选取了在SCUT-Ego-Gesture数据上表现结果较为突出的三种指尖检测算法进行比较分析,它们分别是Hand-RCNN、HF-Net、RGB-D&CNN以及YOLSE。表1描述了本文算法与其他指尖检测算的性能比较结果,包括准确率、召回率、平均误差以及运行速度。
表1 各指尖检测算法性能对比Table 1 Performance comparison of fingertip detection algorithms
通过上述分析可得,本节描述的基于UGF-Net网络的指尖检测算法在准确率、召回率上相对于Hand-RCNN、HF-Net、RGB-D&CNN以及YOLSE有所提高,平均误差也所降低,运行速度相对于YOLSE来说有所降低,但相比于其余两个网络结构来说速度有所提升。因此该UGF-Net算法在整体性能上相对于其他指尖检测算法有所提升,指尖检测效果也更为优异。
如图10所示,规定检测出指尖为“1”,没有检测出指尖为“0”,将选用的8种手势分别用一维向量来表示。例如,第一个手势可表示为[0,1,0,0,0],第六个手势可以表示为[1,0,0,0,1]。
图10 各手势的向量表示Fig.9 Vector representation of gestures
指尖检测的准确性如表2所示,分别进行了100组实验,分别记录了每组检测到的指尖个数,根据结果可知,其中第三个手势和第七个手势分别出现了一次误判的情况,可能是由于测试时手部比划手势存在晃动的情况,以至于模糊导致的误判断,但是整体准确率达到99.8%,因此该指尖检测算法的性能可靠,可满足要求。
表2 各指尖检测准确性结果Table 1 Accuracy results of fingertip detection
本文设计了一个基于深度学习的指尖检测系统,它由手部区域算法和指尖检测算法两部分组成。首先利用YOLOv2网络训练一个手部区域检测模型,用于定位二维空间内的手势位置信息,并将检测到手势区域裁剪出来用作指尖检测部分的输入。在指尖检测部分,设计了一个UGF-Net网络用于精细的手势识别和指尖检测,首先利用CNN的全连接层来预测不同手势中可见的指尖数目以进行手势分类,然后利用FCNN输出并可视化各指尖的热图,并根据热图中的高斯概率分布获取多组指尖位置的集合,通过计算平均值来预测最终的指尖位置。该算法目前通过指尖检测信息可判断简单的八种手势,接下来将研究更多的手势姿态,以能够更加地贴合生活实际,使其具有一定的现实意义。