1.一种提高动态手势动作识别准确率的方法,包括如下步骤:步骤一,构建手势关节点坐标识别网络;
利用改进的CPM模型对手势视频进行处理,输出双视点下的手势关节点坐标,其实现流程如下:(1.1)选择手势关节点估计的基础网络模型;
选择VGG-13作为手势关节点估计的基础网络模型;
(1.2)设置感受野;
感受野的大小与卷积或池化的滑动窗口有关,将两者看成是一个映射,将n层特征图上的k×k范围的像素值压缩到n+1层特征图上的一个像素内,表示为fks,其中s表示滑动窗口的步长,k表示卷积核或池化核的大小,其映射关系为:其中:xn,xn+1为第n层和第n+1层的特征图;
基本网络结构基于VGG-13,对于VGG-13的第一个部分,包含了两个卷积和一个池化,这三个结构形成了一个级联,因此映射过程在网络中多次重复,形成一个多级映射;各环节的感受野与卷积核或池化核的参数如表1所示:表1 级联下各层特征图对应的感受野和卷积核参数
记RFn为第n个特征图的感受野,Kn为第n个卷积层的卷积核或池化核的大小,Sn为Kn的步长,由表1中的感受野规律,可以归纳推导出感受野与步长以及卷积核大小的关系;
在第一层卷积后特征图的感受野大小为卷积核的大小:
RF1=K1 (2)当步长为1时,第n≥2个特征图的感受野大小为:
RFn=RFn-1+(Kn-1) (3)对于步长不为1的情况,有n≥2:
RFn=RFn-1+(Kn-1)×Sn (4)(1.3)提取特征;
利用基础网络模型VGG-13对图像进行特征提取;
首先定义第p个关节在图像像素中的位置坐标为Yp,则有,
其中集合Z代表图像中所有像素的位置;
设有P个需要预测的关节点,目标是得到所有P个关节点坐标Y:Y=(Y1,Y2,…,Yp) (6)由以上关系可知,Y是Z的子集;
接着定义一个多阶段的预测分类器gt(x),用于预测每个阶段中每个关节点所在位置;
在每个阶段t∈{1,2,…T},预测分类器都会将图像中的一点z赋给Yp,并在每个阶段都会给每个手势关节点生成一个热图,具体的表达式为:当分类器在第一阶段预测手势关节点位置时,会产生一个热图和相对应的手势关节点置信得分:p
其中b1 (Yp=z)是分类器在第一阶段预测第p个手势关节点在z位置处时的手势关节点置信得分;
对于接下来的每一个阶段,第p个手势关节点在z位置处的置信得分可以表示为:其中,u,v代表图像中某一处位置z的坐标值;
在后续阶段t(t≥2),基于前一阶段的热图和手势关节点的置信得分,继续为每个手势关节点赋更加精确的位置坐标z,这个更加精确的位置z是基于第一阶段分类器所提取的图像特征和前一阶段的分类器所提取到的图片上下文信息共同决定的,同样的,后续每个阶段的预测分类器仍然产生属于每个阶段的手势关节点热图对应的手势关节点置信得分:其中,ψt(z,bt-1)表示一种置信得分与图像上下文信息之间的映射,Xz′表示上一阶段在位置z周边所提取到的图像特征;
在以上过程的不断重复下,每个阶段都基于前一阶段的图像上下文信息和第一阶段提取到的图像特征对第p个手势关节点的位置做出修正,这种逐渐微调的过程使得模型最终估计出较为准确的手势关节点坐标位置;
步骤二,采集双视点视频数据;
考虑到目前的单目摄像头是不含深度信息的,并且在单视点下存在着手势的遮挡和自遮挡引起的手势关节点信息缺失以及手势沿着摄像头法向运动时引起的关节点位置坐标难以变化的问题,以双视点的形式对手势视频样本进行采集;为了增强样本数据的多样性,设计了两种视点角度,第一种的两个摄像头角度呈180°,第二种的摄像头角度呈90°;
(2.1)定义基本手势元素;
重新定义了对视觉识别的基本动作元素,并将确定的具体可识别的基本动作元素,称为基本手势元素,并对其符号进行了定义;
(2.2)选取手势关节点;
通过对手势关节点进行识别,将识别的关节点按照顺序进行连线、标号,形成一个手姿势的骨架,通过对手骨架姿势的识别实现对手的姿势的识别,且将此过程定义为手势估计;
手指弯曲时,手指通常分为三小段,使手指呈现不同的弯曲程度,这三段之间的连接点恰好是手指的关节点,因此,选取每个手指的指尖部位的点作为手指的起始关节点,然后连接各自手指上三小段之间上的关节点,接着每根手指上的末尾关节点都与手腕处的一个关节点相连,选定了模型的关节点之后,将模型的关节点按照一定的顺序标号、连接,以形成手势骨架;
(2.3)准备训练样本数据集;
基于卷积神经网络对图像或视频内容识别的基础是有标准的数据集;考虑到手势在运动变化的过程中存在关节的自遮挡问题,因此采用双视点对手势视频进行采集,以建立基本手势元素数据库;
同时,对于已有的一个大数据集,通常将其划分为训练集、验证集、测试集;三个子集两两之间无交集,三者的并集为全集,由于来自同一个数据集,因此三个子集是独立同分布的;验证集和测试集均用于测试模型的准确率,且两者均与模型训练时的梯度下降过程无关,但由于验证集的参与,其验证结果调节了模型迭代数和学习率,即模型有了一个参数调整的过程,因此认为验证集参与了模型的训练;
步骤三,对基本手势元素视频样本进行卡尔曼滤波处理;
在图像滤波开始之前,首先任意选择图像中的一个像素点,按照水平或者垂直的方向依次对接下来的点进行卡尔曼滤波,通过预测和更新像素值,实现图像的去噪;
图像在第k个状态的估计值xk为:
xk=Fkxk-1+Bkuk+wk (11)式中:Fk为第k个状态时的增益矩阵;Bk为输入控制矩阵;uk为控制向量;wk为白噪声,服从高斯分布,wk~N(0,Qk);
对第k个状态的观测值zk为:
zk=Hkxk+vk (12)式中:Hk为观测矩阵;vk为观测噪声,服从高斯分布,vk~N(0,Rk);
上述初始状态x0与白噪声wk,观测噪声vk相互独立;
有了上一个状态的估计值和当前状态的观测值,就需要对当前状态的估计值进行预测,计算当前状态的估计值包括预测和更新两个步骤;对于预测过程,首先获取上一个状态k-1的估计值xk-1,利用上述公式(11)预测当前状态k的估计值xk;对于更新过程,则将预测好的k状态下的估计值代入公式(12),得到当前k状态的估计值zk,则有公式(13)可以描述一个离散时间线性随机动态系统:在预测开始时,有以下初始条件:
其中P0为初始误差的协方差矩阵; 为观测值; 为首次的估计值;
下一个状态的预测值和预测误差的协方差矩阵分别为:
在获得新的预测值之后,对新的预测值和预测误差的协方差矩阵进行滤波更新:Pk|k=(I-KkHk)Pk|k-1 (18)其中 为k状态下更新后的估计值;Pk|k为更新后的预测误差协方差矩阵;I为单位矩阵; 描述的是观测值和估计值之间偏差,即观测余量,具体的表达式为:Kk为卡尔曼增益,其实质是一个加权值,当上一状态的估计值偏小的时候,当前状态的估计值就会加上卡尔曼增益与公式(19)中的偏差值的乘积;当估计值偏大的时候,当前状态的估计值就会减去卡尔曼增益与偏差值的乘积,保证每一次新的估计都比上一次的估计更准确,循环递归多次以后估计值就会越来越准确,Kk的表达式为:其中Sk为观测余量的协方差,具体表达式为:
将公式(19)、(20)、(21)代入更新公式(17)和(18),则有:步骤四,输出手势高斯热图和手势关节点坐标;
采用热图的形式对手势关节点的真实值进行标注,同时也采用热图作为模型的输出,其中生成的手势关节点热图是以图像中关节点所在像素区域的某一个点为中心,以具体的像素点个数为半径,画出一个圆域,将关节点所在的区域划分出来,作为关节点出现的概率区域,在该区域的中心颜色最深,表示关节点在这个位置的概率最大,而后区域的颜色由中心向外逐渐变浅;这种颜色会在中心达到尖峰,四周逐渐变浅的图像形式与高斯函数图像有着相似之处,因此可利用高斯函数来生成各个关节点区域的热图;中热图的坐标是(x,y)的形式,即有二维高斯函数的公式:式中,x0,y0表示手势关节点的坐标真实值;x,y表示手势关节点热图区域像素点的坐标值; 表示二维高斯函数的幅度值;σ2表示x,y的标准差;
对于手势关节热图的概率区域大小,将其定义为半径为1的圆域,其中对于二维高斯函数的幅度A给定值为1,σ给定值为1.5,则生成一个二维高斯函数的分布图像;
在原图片的基础上生成二维高斯函数分布形态的热点图,该热图基于手势关节点区域的中心坐标,生成一个呈高斯分布的概率区域,在这个区域的中心处的概率值最大,也就是二维高斯函数的尖峰中心点,越向四周扩散,概率值越小;以概率值最大的尖峰点为中心的高斯概率区域中,所有点的总和是超过1的,但在这个概率区域中,所有像素点位置出现手势关节点的概率总和应该为1,为此,对该区域内所有的像素点的函数值进行加和,将每一个像素点对应的函数值除以像素点函数值的总和,以此保证所有点的概率和为1,处理方式如下所示:式中:p(x,y)表示处理后的像素点存在关节点的概率大小;f(x,y)表示概率区域内的像素点对应的二维高斯函数值;∑f(x,y)表示所有像素点的函数值的总和;
在中,将这些基于二维高斯函数生成的热图称为高斯热图,在模型的每一个阶段,都会输出所有关节点的高斯热图,即每一个关节点对应一张高斯热图;
步骤五,构造手势序列识别网络;
网络模型构造的具体流程如下:
(5.1)定义激活函数;
涉及的循环神经网络的层数并不多,在网络层次不深的情况下梯度消失的问题相对较小,因此在循环神经网络中采用Tanh作为激活函数;
Tanh激活函数是双曲正切函数,Tanh及其导数的表达式如下所示:(5.2)选择损失函数;
在网络的最后一层需要输出基本手势元素的类别,采用多分类的Softmax损失函数计算出输入的视频中的手势分别属于每个类别的概率,最后模型输出对该视频中手势的预测结果为每个类别中概率最大的那个类别;
假设x是循环神经网络输入到Softmax层的一组特征向量,W和b是Softmax的参数,则Softmax的第一步是对每个类别进行打分,计算各类别的分值Logit:Logit=WTx+b (28)
接着,用Softmax将每个类别的分值转化为各自的概率值:其中,i表示第i个手势类别,ei表示第i个手势的分值;
至此模型输出了每个手势类别的概率分布,这个概率分布是一个预测值,将其称为q(x),而每个手势还带有一个实际标签,也就是一个真正的概率分布,称其为p(x);由于Softmax函数又称为交叉熵损失函数,而交叉熵描述的是两个概率分布之间的距离问题,其可以定义为:H(p,q)=-∑p(x)logq(x) (35)假设p(x)=(A,B,C),q(x)=(u,v,w),且p(x)是真实值,q(x)是预测值,则通过q(x)来表示p(x)的交叉熵为:H((A,B,C),(u,v,w))=-(Alogu+Blogv+Clogw) (36)当q(x)和p(x)的位置互换时,两者的交叉熵是不同;交叉熵是通过概率来衡量一个事件的出现可能性的,一个事件出现的可能性越大,这个事件包含的信息量越小,即熵值越小,因此当预测的概率分布q(x)与真实值p(x)之间越靠近,两者的交叉熵就越小,意味着模型的输出与真实值就越接近,模型的预测越准确;
(5.3)建立模型;
在模型中X=(x1,x2,x3,...,xT)按照时间序列展开的视频帧,这些时序帧作为循环神经网络的输入,每一帧中包含的信息是每个手势的关节点坐标值,时间序列的长度设为T;第一个隐藏层的隐状态为H=(h1(1),h2(1),...,hT(1)),则对第一个隐藏层的隐状态,有:其中,第一个隐藏层隐的第一个序列的隐状态为:
对于第二个隐藏层,其输入由前一个时刻的隐状态和上一个隐藏中同样处于当前时刻的隐状态的输入共同决定,则第二个隐藏层的隐状态可以表示为:其中,第二个隐藏层的首个序列的隐状态为:
对于最后的输出为每种手势的预测分类结果,Y=(Y1,Y2,Y3,Y4,…,Yn),有:Yi=Softmax(VhT+c) (41)其中i=(1,2,3,4,…,n),U、W、V均为参数矩阵,用于对输入和隐藏层的隐状态进行矩阵变换,b、c均为偏置,所有的参数是在网络的各个阶段是共享的;
最后,将步骤四得到的关节点坐标输入标准手势序列识别网络,就可以得到手势动作序列。