一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

基于Reders模型的手势识别方法与流程

2021-12-03 23:00:00 来源:中国专利 TAG:

on hand pose estimation and siamese lstm network)。
10.本发明的目的是通过以下技术方案来实现的:
11.基于reders模型的手势识别方法,具体包括以下步骤:
12.选择训练数据集,借助ipnhand数据集以及自行拍摄的少量视频数据作为训练数据集;
13.使用mediapipe框架对训练数据集中的视频进行逐帧的手部姿态估计,提取到多帧手势信息;
14.采用基于人体姿态估计的光流算法,将提取到的手势信息转换成时序数据信息,即光流信息,并将时序数据信息进行存储;
15.建立孪生网络,将处理得到的时序光流数据输入,进行训练及优化,使得模型具备一定的手势分类能力,得到预训练模型;
16.将预训练模型进行迁移训练,在自制的小规模数据集上进行参数微调,使得模型具备一定的手势分类能力,得到最终模型。
17.基于reders模型的手势识别方法,还包括:对数据集中的视频进行筛选和裁剪预处理,排除一些在过暗和过亮环境下拍摄的视频,并将长段的连续多动作视频进行分析裁剪,制作成单动作的短视频,根据动作进行分类。
18.所述mediapipe框架定义的模型包括手掌检测器、手部姿态估计模型和渲染器。
19.所述逐帧的手部姿态估计具体包括以下步骤:将数据集中的单帧图像输入mediapipe框架,经过手掌检测器得到图像中框选出的手部区域,将其输入手部姿态估计模型中,用以推理得到由21个关键点表征的手部姿态,最终经由渲染器渲染后输出。
20.所述光流算法具体包括:对于获取到的视频t时刻的关键点p
t
,该时刻的光流f(p)
t
被定义为p与上一时刻的估计点p
t
‑1之间的l2范数,由于不同视频的帧率不同,因此一个人以同样的速度做同一动作在不同帧率视频时得到的光流可能不同,为了标准化,在计算光流时还需将计算得到的l2范数与该视频该时刻帧率fps相乘,得到的f(p)
t
计算公式:
21.f(p)
t
=||p
t

p
t
‑1||2*fps,
22.对光流的计算做认为约束:如果在某一时刻的某一帧中,点p未被识别,那么f(p)
t
和f(p)
t
‑1将被置为0,
23.基于以上的限制条件,如果以t=0作为视频第一帧的开始,那么t≥1时,人体的某一关键点p的光流f(p)
t
的计算方法可以被归纳为:
[0024][0025]
所述孪生网络架构包括依次连接的输入层、嵌入层、距离层、全连接层和输出层。
[0026]
所述孪生网络的训练过程具体包括以下步骤:
[0027]
将两个光流信息作为孪生网络模型的输入,通过编辑器使得相近的输入能够被映射到高维空间中相近的位置,用嵌入向量表示;
[0028]
距离层通过计算两个嵌入向量每一维之间的距离,将两个嵌入向量合并起来,得到一个可以表征量嵌入向量之差的距离向量;定义函数d(.,.)用于计算距离向量,若有两个等长向量x和y,且有x=[x1,x2,...,x
n
],y=[y1,y2,...,y
n
],则x和y之间的距离向量d被定义为:
[0029]
d=d(x,y)=[|x1‑
y1|,|x2‑
y2|,...,|x
n

y
n
|],
[0030]
全连接层将距离层输出的距离向量的每个元素作为输入,通过一个浅层的全连接神经网络将距离向量映射成孪生网络最终的输出,该输出可以表示该孪生网络两个输入之间的相似程度;将全连接层看作一个可以实现距离向量d到相似度s映射的相似度计算函数t,则整个孪生架构可被表示为:
[0031]
s=t(d)=t(d(e
i
,e
j
))=t(d(g(x
i
),g(x
j
))),
[0032]
通过函数将控制在闭区间区间[0,1]内,s越接近0表示两输入光流相似度越低;反之,若s越接近1则表示相似度越高。
[0033]
所述孪生网络的训练过程还包括选择对比损失函数进行孪生网络的优化,具体过程为:对于每一对手势光流输入(x
i
,x
j
),共有两种可能的标签来表征两者是否属于同一动作,1来表示两者属于同一动作,0表示两者不属于同一动作;若其真实标签表示为w,孪生网络预测的相似度表示为s,则对比损失可表示为:
[0034]
l(w,s)=(1

w)(s)2 w(1

w)2。
[0035]
所述迁移训练具体过程为:摄制五种标准动作的训练集和测试集,每一类动作20个视频,并将其经过和预训练数据集相同的预处理,得到每个视频的光流数据;通过组合与欠采样后,形成了用于迁移训练的数据集;将模型训练400epochs,观察模型的收敛情况,最终确定模型训练迭代次数,获得最终手势识别模型。
[0036]
本发明的有益效果:
[0037]
(1)实时性(real

time)方面,reders模型采用了轻量级的手部姿态估计框架和神经网络模型,在保证模型效果的同时减少了计算机的计算负载,为用户提供良好的实时性体验。
[0038]
(2)动态性(dynamic)方面,reders模型借助目前主流的lstm时序模型,对用户面向摄像头做出的动态手势进行处理和分析。
[0039]
(3)高效识别性(efficient recognition)方面,在使用大手势数据集对模型进行预训练的基础上使用少量的会议手势动作数据进行迁移训练,令reders模型具备高效的手势识别和判断能力,能够准确分析出用户的手势动作类别。
[0040]
(4)可扩展性(scalability)方面,reders模型采用了孪生网络架构,在解决了因数据集不完备导致的小样本学习问题的同时,为后续拓展增添新的手势动作提供了方便快捷高效的解决方案。
附图说明
[0041]
图1是本发明的方法流程框图;
[0042]
图2是本发明的ipn数据集各视频环境信息图;
[0043]
图3是本发明的预训练epochs

loss图;
[0044]
图4是本发明的标准光流可视化图;
[0045]
图5是本发明的本发明的迁移训练epochs

loss图;
[0046]
图6是本发明的迁移训练epochs

accuracy图;
[0047]
图7是本发明的21个关键点与人手各个部位的对应关系图;
[0048]
图8是本发明的光流数据结构图;
[0049]
图9是本发明的孪生架构框图;
[0050]
图10是本发明的编码器架构框图。
具体实施方式
[0051]
为了对本发明的技术特征、目的和效果有更加清楚的理解,现对照附图说明本发明的具体实施方式。
[0052]
本实施例中,如图1所示,基于reders模型的手势识别方法,具体包括以下步骤:
[0053]
1、选择训练数据集,借助ipn hand数据集以及自行拍摄的少量视频数据作为训练数据集;作为连续手势数据集,ipn hand dataset中的视频时长通常大于两分钟,每个视频包含21个动作和3次随机的停顿。在自定义的13种手势中,包含了单指向前指、双指点击和三指放大/缩小等基本手势,在场景上和本系统的应用场景相似。首先需要进行预处理,将长段的连续多动作视频进行分析裁剪,制作成单动作的短视频,并根据动作进行分类,才能进行后续的网络训练。
[0054]
在对视频进行裁剪预处理时,选择python的开源图像处理库opencv。如图2首先依据数据集的metadata(各视频环境信息)对视频进行筛选,排除一些在过暗和过亮环境下的拍摄的视频。完成数据集的初步筛选后,还需要依据数据集的annotations(标注)对各视频进行裁剪,分类为单个动作的集合。在选择训练使用的手势种类时,对原始数据集中的部分动作进行了筛选。如数据集中定义的“pointing with one/two finger”,展示者需要单手向前指,沿着摄像头的边缘画方框,但在实际观察中,展示者会经常将手移动到画面边缘,甚至半只手移出画面。
[0055]
为了保证后续手势姿态估计的准确性,选择移除上述两个动作。经过选择和裁剪后的各动作数据集内容如表1所示。
[0056]
表1
[0057][0058]
2、使用mediapipe框架对训练数据集中的视频进行逐帧的手部姿态估计,提取到多帧手势信息;为了让神经网络在进行动作分类时聚焦于手部信息,在得到了单个动作组成的视频集后,还需要进行手部姿态估计,将数据集中的手部图像信息抽象为手部特征点的位置信息,提升后续网络的分类效率和准确性。
[0059]
使用mediapipe hands对手部进行姿态估计后,原图像中的手部姿态和运动信息
被抽象为每一帧的21个手部特征点数据,用以指示手各关节等位置的坐标。
[0060]
3、采用基于人体姿态估计的光流算法,将提取到的手势信息转换成时序数据信息,即光流信息,并将时序数据信息进行存储;考虑到动态手势识别模型主要利用帧间各点的运动信息进行分类,而并不需要各帧内手部特征点的绝对位置;同时,为了保证后续孪生网络模型的时延,需要尽量减少无关信息的输入。故在手部姿态估计后,需要对手部特征点位置信息进行光流计算,从而得到帧间的光流值用以运动信息表征。
[0061]
同时,由于手部姿态估计过程产生的手部特征点位置信息,由图像相对位置给出,坐标表示各点在图像中相对整体长宽值的位置,其值最大为1。当使用上述公式计算帧间坐标值的l2范数时,会出现数值过小的情况。经过实际测试,如果直接对手部姿态估计输出的坐标值进行光流计算,得到的数值多在到数量级左右,考虑到数据精度可能会对数据造成的影响,将整体数据进行了放大,将数值扩张到了大于1的数量级上。
[0062]
另外,数据集中有部分动作的帧数是不满60帧的,但进行手势识别时是以60帧为单组输入的,训练数据也需要保持一致,所以还需要对数据集进行光流填充,将帧数不足的光流数据填充至60帧。考虑到光流度量的是手部各点的运动信息,光流为0则代表无有效运动,故在填充时可以在原始光流数据的首尾填充相同数量的0光流,将含有运动信息的原始光流数据置于整组数据的中部,一定程度上保证训练数据的鲁棒性。
[0063]
4、建立孪生网络,将处理得到的时序光流数据输入,进行训练及优化,使得模型具备一定的手势分类能力,得到预训练模型;利用ipn数据集的光流数据,可以开始对模型进行预训练。在孪生网络模型的设计中,将输入定义为两个动作的光流数据,网络输出两者的相似度,故需要将单个动作的光流数据两两匹配,作为神经网络的输入。但如果将所有动作的光流数据进行全排列,会使不同动作的组合远多于相同动作的组合,差距可以达到10倍,导致训练数据不均衡问题。
[0064]
为了平衡训练数据的正反例数量,对不同动作的组合进行了欠采样(under

sampling),将两者的数据量控制在1:1左右,提高了孪生网络的准确性。
[0065]
同时,为了探究孪生网络模型的最优结构,还设置了不同的超参数来进行模型训练与测试,分析各结构下模型的准确率。根据编码器中lstm层数和相似度计算器中全连接层数的不同,我们设计了六种孪生网络结构,为了方便理解,设计了一套符号系统,如表2所示。
[0066]
表2
[0067][0068]
在此基础上,根据不同模型的训练时期(epochs),优化器(optimizer)和损失函数(loss f),给出了对应的训练方案,如表3所示。
[0069]
表3
[0070][0071]
过于轻量的网络会导致模型欠拟合,无法提取足够的信息用以手势分类;而过于大型的网络结构会显著提高模型预测时延,无法做到实时性,且容易发生过拟合和网络退化现象。故需要横向测试对比上述六种孪生网络结构,以确定可以正常拟合且足够轻量的模型结构。
[0072]
使用tensorflow对上述六种模型在ipn hand数据集下进行预训练,采用损失的变化情况来评估预训练的情况,最终得到的预训练结果如图3所示。从图3中可以看出,两层lstm单元的模型拟合程度普遍高于一层lstm单元的模型,整体loss水平较低,且模型在300~400epoch时均已接近收敛。
[0073]
4、将预训练模型进行迁移训练,在自制的小规模数据集上进行参数微调,使得模型具备一定的手势分类能力,得到最终模型。
[0074]
将预训练模型直接用于五种手势分类,准确率最高只能达到80%左右,在实践中这一准确率是不够的,所以需要使用特定的五种手势数据,对预训练模型进行参数微调(parameter fine

tuning),提高模型迁移效果。
[0075]
为了对模型进行迁移训练,摄制了五种标准动作的训练集和测试集,每一类动作20个视频,并将他们经过和预训练数据集相同的预处理,得到每个视频的光流数据;再通过组合与欠采样后,形成了用于迁移训练的数据集。
[0076]
同时,考虑到在实际部署时,需要将摄像头从采集到的数据与五种动作的光流输入孪生网络进行相似度预测,所以还需要制作五种动作的标准光流数据。各手势标准光流可视化如图4所示。图中从左到右,从上到下依次为点击、旋转、缩放、抓取和平移手势的标准光流。从可视化的热力图中可以看到,不同手势的在光流的分布上有明显的区别。
[0077]
对六种模型均训练了400epochs,观察各网络结构下模型的收敛情况。迁移训练的训练过程loss曲线和在训练集上的准确性表现如图5和图6所示。
[0078]
由图5、6可知,虽然1l2f模型在训练过程中出现了明显的震荡现象,但其他的模型基本上都表现出训练至50~150epochs损失和准确率都已经趋于稳定。因此,我们最终将预训练epochs定为350,迁移训练epochs定为100。完成训练后,我们在相同的个人电脑对不同模型在gpu(nvidia geforce mx350/2gb)和cpu(intel(r)i5

10210u/16gb)环境下的平均识别用时(和)和平均准确率(acc)进行了记录,结果表4所示:
[0079]
表4
[0080][0081]
由表4可知,2l3f(编码器为双层lstm,相似度计算器为三层全连接神经网络)模型整体有较高的准确率。同时,其在gpu和cpu环境下也有较好的表现。因此,最终我们将选择该模型部署到我们的系统中。
[0082]
所述手部姿态估计模型,在mediapipe定义的图模型使用单个帧图像作为输入,经过三个主要模块:手部检测器(hand detector)、手部姿态估计模型(hand landmark model)和渲染器(renderer)完成手部检测和手部特征点提取,最后得到渲染结果。
[0083]
其中手部检测器对完整的输入图像进行操作,通过一个边界框来定位手掌位置,用于后续手部姿态估计的特征点提取。为了实现对手的检测,选择训练一个手掌检测器而非直接的手部检测器,因为检测类似手掌和拳头这样的刚性物体的边界,比检测有关节和手指的复杂的手更为容易。另外,由于手作为较小的物体,用于消除冗余检测结果的非极大值抑制算法(non

maximum suppression algorithm)能有较好的表现。手部检测模型的结构与valentin bazarevsky等人提出的模型相似,采取了single shot multibox detector(ssd)的anchor机制,赋予了模型准确性和高效性。
[0084]
经过手部检测器可以得到图像中框选出的手部区域,将其输入手部姿态估计模型中,用以推理得到由21个关键点表征的手部姿态。图7分别说明了mediapipe手部检测器的模型结构以及21个关键点所对应的人手各个部位。
[0085]
从图7中可以看出,模型的输出除了预定义的21个关键点,还包含了每个输入的边框为手的概率,即置信度,和对每一个手部识别结果的二分类,即对输出的手部特征点进行左右手区分。
[0086]
所述光流算法具体包括:对于获取到的视频t时刻的关键点p
t
,该时刻的光流f(p)
t
被定义为p与上一时刻的估计点p
t
‑1之间的l2范数,由于不同视频的帧率不同,因此一个人以同样的速度做同一动作在不同帧率视频时得到的光流可能不同,为了标准化,在计算光流时还需将计算得到的l2范数与该视频该时刻帧率fps相乘,得到的f(p)
t
计算公式:
[0087]
f(p)
t
=||p
t

p
t
‑1||2*fps,
[0088]
对光流的计算做认为约束:如果在某一时刻的某一帧中,点p未被识别,那么f(p)
t
和f(p)
t
‑1将被置为0,
[0089]
基于以上的限制条件,如果以t=0作为视频第一帧的开始,那么t≥1时,人体的某一关键点p的光流f(p)
t
的计算方法可以被归纳为:
[0090][0091]
基于人体姿态估计的光流算法的优点在于以下两方面:
[0092]
数据压缩:基于人体姿态估计得到的关键点特征代替了像素特征,完成了数据降维,降低了数据的数量,有利于降低针对光流数据进行进一步处理的时序模型的尺寸。于我
们的项目而言,小数据量为实时性提供了保障;
[0093]
绝对位置相对化:基于l2范数的光流计算方法很好地将绝对位置转换为相对位置。在我们项目的实际应用中,模型不会因为用户在摄像头拍摄范围中的不同位置做手势动作而得到不同的识别结果。
[0094]
在数据结构方面,对于每个从视频中获取到的光流信息,以python字典的形式存储,如图8所示。
[0095]
如图9所示,所述孪生网络架构包括依次连接的输入层、嵌入层、距离层、全连接层和输出层。
[0096]
所述孪生网络的训练过程具体包括以下步骤:
[0097]
将两个光流信息作为孪生网络模型的输入,通过编辑器使得相近的输入能够被映射到高维空间中相近的位置,用嵌入向量表示;
[0098]
距离层通过计算两个嵌入向量每一维之间的距离,将两个嵌入向量合并起来,得到一个可以表征量嵌入向量之差的距离向量;定义函数d(.,.)用于计算距离向量,若有两个等长向量x和y,且有x=[x1,x2,...,x
n
],y=[y1,y2,...,y
n
],则x和y之间的距离向量d被定义为:
[0099]
d=d(x,y)=[|x1‑
y1|,|x2‑
y2|,...,|x
n

y
n
|],
[0100]
全连接层将距离层输出的距离向量的每个元素作为输入,通过一个浅层的全连接神经网络将距离向量映射成孪生网络最终的输出,该输出可以表示该孪生网络两个输入之间的相似程度;将全连接层看作一个可以实现距离向量d到相似度s映射的相似度计算函数t,则整个孪生架构可被表示为:
[0101]
s=t(d)=t(d(e
i
,e

j
))=t(d(g(x
i
),g(x

j
))),
[0102]
通过函数将控制在闭区间区间[0,1]内,s越接近0表示两输入光流相似度越低;反之,若s越接近1则表示相似度越高。
[0103]
孪生网络的训练过程还包括选择对比损失函数进行孪生网络的优化,具体过程为:对于每一对手势光流输入(x
i
,x

j
),共有两种可能的标签来表征两者是否属于同一动作,1来表示两者属于同一动作,0表示两者不属于同一动作;若其真实标签表示为z,孪生网络预测的相似度表示为s,则对比损失可表示为:
[0104]
l(z,s)=(1

z)(s)2 z(1

z)2,
[0105]
当我们考虑s取到0或1的情况,可以得到表5:
[0106]
表5
[0107][0108]
由表5可知,当孪生网络计算得到的相似度与原始标签越接近,对比损失的值越小,越不需要对网络参数进行优化;反之则越大,越需要对网络参数进行优化。
[0109]
编码函数g(
·
)是孪生网络架构中的核心组成部分。由于需要处理的事时序的光流数据,因此,在该项目中,使用lstm网络对函数g(
·
)进行建模。
[0110]
lstm是一种著名的循环神经网络(rnn)结构,用于捕获时间序列中的特征。相对于
基础的rnn,网络只有一个状态向量h
t
,lstm新增了一个状态向量c
t
,同时引入了门控(gate)机制,通过门控来控制信息的遗忘和刷新。
[0111]
一个lstm细胞共有3个门,分别为遗忘门(forget gate)、输入门(input gate)和输出门(output gate)。t时刻的lstm细胞的输入为前一个细胞传递来的c
t
‑1和h
t
‑1一个模型输入矩阵中t时刻对应的向量x
t
,输出为该细胞经过计算后得到的传送带状态向量c
t
和细胞新的隐藏层状态h
t

[0112]
遗忘门通过sigmoid层实现决定从细胞状态里遗忘什么信息。以上一步的h
t
‑1和这一步的x
t
作为输入,然后为c
t
‑1里的每个数字输出一个0

1司的值,记为f
t
。f
t
的计算方法为:
[0113]
f
t
=σ(w
f
·
[h
t
‑1,x
t
] b
f
),
[0114]
lstm通过输入门层和一个tanh层分别计算i
t
和来共同将新的信息选择性地记录到细胞状态中。i
t
和的计算方法分别为:
[0115]
i
t
=σ(w
i
·
[h
t
‑1,x
t
] b
i
),
[0116][0117]
完成前面的计算后,lstm细胞通过得到的f
t
、i
t
、以及输入c
t
‑1计算出新的传送带状态c
t
。计算方法为:
[0118][0119]
最后,lstm细胞需要完成隐藏层状态h
t
的计算,实现方法为:通过sigmoid层来决定输出的本细胞状态c
t
的哪些部分,得到o
t
。然后将细胞状态通过tanh层,并与o
t
相乘得到最终的输出h
t
。计算方法为:
[0120]
o
t
=σ(w
o
·
[h
t
‑1,x
t
] b
o
),
[0121]
h
t
=o
t
*tanh(c
t
)。
[0122]
本发明采用两个相同的双层lstm对输入光流对进行编码,如图10所示:第一层lstm对时序光流进行处理后将每个细胞得到的状态向量向上传递到第二层对应的lstm细胞中,最终输出第二层lstm最后一个细胞输出的状态向量作为编码器输出的嵌入向量。
[0123]
以上显示和描述了本发明的基本原理和主要特征和本发明的优点,本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本发明要求保护的范围由所附的权利要求书及其等效物界定。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献