一种基于深度模型优化的超高速静态手势识别方法转让专利

申请号 : CN201910286584.6

文献号 : CN110096968B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 贺王鹏郭彦宗朱娟娟李赫一李诚朱倩蓓刘硕珣

申请人 : 西安电子科技大学

摘要 :

本发明涉及计算机视觉技术领域,具体公开了一种基于深度模型优化的超高速静态手势识别方法,包括:静态手势识别神经网络模型的设计和训练;神经网络模型结构的融合优化;神经网络模型的量化;输入待识别的静态手势图,通过SimNet神经网络模型输出识别结果。与现有技术相比,本发明可以适应不同背景下的静态手势图像,针对不同手势识别出不同的手势状态,实现高准确率和高速的识别速率。

权利要求 :

1.一种基于深度模型优化的超高速静态手势识别方法,其特征在于,包括以下步骤:

S1、静态手势识别神经网络模型的设计和训练:采用SimNet神经网络对剪刀、石头和布三种静态手势进行训练并实现识别分类;

S2、神经网络模型结构的融合优化:对训练好的SimNet神经网络模型进行修剪,然后对SimNet神经网络模型的算子进行合并优化;

S3、神经网络模型的量化:对已经融合优化后的SimNet神经网络模型进行量化,将单精度浮点型的权重激活信息依据KL散度与整型数值进行范围匹配,将权重中单精度浮点型的数值转换为整型数据;

S4、输入待识别的静态手势图,通过SimNet神经网络模型输出识别结果;

所述S1的具体步骤如下:

S11、设计SimNet神经网络:SimNet神经网络结构的总层数为94层,由卷积层、批标准化层和非线性激活函数构成主干部分,在模型的尾端则添加了池化层和全连接层,其中卷积层包括普通卷积层和可逆卷积层:普通卷积层由点卷积和可分离卷积构成,每一个普通卷积层后再添加一个非线性激活层;可逆卷积层则由瓶颈层和可分离卷积层组成,瓶颈层由两个互补的点卷积层构成,分布于可分离卷积层的上下两侧,可逆卷积层整体采用残差的构造,最后在可逆卷积层的末尾添加线性激活层;整个神经网络中,每个最小单位的卷积层之后添加批标准化层,所有的非线性卷积层由Relu6结构组成;另外,SimNet神经网络使用add和concat两种方式来进行特征融合,在神经网络的主干部分,每个可逆卷积层的尾部使用add进行特征的融合,在主干部分的末端采用最大池化层以及平均池化层进行降维并使用concat操作对两者的结果进行特征融合,在SimNet神经网络的尾端部分使用dropout层进行正则化,并使用两个全连接层预测分类,最后一个全连接层输出神经网络预测的结果,即输出三维的向量,分别代表对剪刀、石头和布三种静态手势形状的概率大小,通过对输出概率进行分析以判断图像中的物体信息;

S12、采集若干个不同个体的成年男女的不同姿势、不同角度、不同环境和不同光照强度下的剪刀、石头和布三种静态手势图组成图像数据集,剪刀、石头和布三种静态手势图的比例为1:1:1,所有静态手势图的分辨率均为三通道彩色RGB,文件格式为jpg格式;

S13、将图像数据集划分为训练集、验证集和测试集,输入SimNet神经网络进行训练,最终使训练好的SimNet神经网络模型对静态手势进行分类识别;

所述S2的具体步骤如下:

S21、对于训练好的SimNet神经网络权重模型,将可逆卷积层结构的扩张系数E最高限制为2,可逆卷积层结构的特定通道网络结构层的数量N最高限制为2;

S22、SimNet网络模型算子的融合:算子的融合操作主要是对整个网络结构中的卷积层以及与卷积层相连的其他网络层进行合并,其中包括:卷积层和批标准化层的融合,每一个最小单位的卷积层都与其之后的批标准化层进行融合;按元素求和操作层的融合,求和层的主要任务为对上一层相同维度的输出特征图A与输出特征图B逐个元素进行相加,对此将特征图A中的元素取出,作为即将输出特征图B信息的卷积层中的偏置值,与该卷积层的偏置值进行融合,从而去除求和操作层;对于神经网络中reshape、unsqueeze和squeeze对输入数据进行维度变形的操作层,将其与上一个网络层进行融合,从而去除这些操作层;对于整个模型中融合特征的concat层,在该层单独将两个输入特征合并,将concat层的两个相同维度的特征直接传递到concat层的下一层中,从而可以直接去除concat层;

所述S3的具体步骤如下:

S31、权重信息的非饱和量化:

S311、将融合优化后的SimNet网络模型进行量化操作,按照INT8整型的范围,设置量化数值范围定为127,将单精度浮点型数值按照比例转化为整型数值;

S312、依次遍历整个SimNet网络模型中所有的网络层,由上到下,对于网SimNet网络中某一卷积层中的所有浮点权重数值,找到其最大值或最小值,将最大和最小值的绝对值进行比较,选取两者中较大值作为阈值;

S313、将量化数值范围与阈值进行相除操作,得到原始权重值和量化权重值中的转化比例,将原始的权重数值与比例值相乘得到量化后的权重数值Sweight=Nquantize/Tthreshold,其中,Tthreshold为阈值,Nquantize为量化范围取127,Sweight为计算好的比例系数;

S32、模型激活信息的饱和量化:

S321、收集矫正数据集,该数据集的总数为2000张图像,这些数据集原始训练集的子集,依次从训练集的不同个体中,抽取不同手势且具有代表性的数据集图像组成矫正数据集,图像大小格式与原始训练集相同;

S322、将矫正数据集输入SimNet网络进行预测任务,在SimNet网络运行过程中,收集每一层激活权重的直方图分布信息并保留下来;

S323、将S31中的量化分布信息,基于不同的阈值产生不同的量化分布,随后计算每个量化分布与原始分布的相对熵,选择交叉熵最少的分布,此时量化分布与原始分布的信息分布最接近;

S324、选择使量化分布和原始分布信息最接近的阈值,并将此阈值保存;

所述S323的具体步骤如下:

S3231、将SimNet网络模型中的权重激活值以2048个bin的形式,转化为直方图,此时原始权重激活的分布为Hp=[bin[0[,…,bin[2047]];

S3232、假设最优的截断数值i为128,令i从128开始,到2048结束,取整数数值依次进行实验,从而挑选出最合适的截断数值i;

S3233、根据假设的截断数值i,设定参考分布Hpr=[bin[0],…,bin[i‑1]],该参考分布为Hq的子集,对于i以及i+1后的bin值进行求和,求和后的值为Soutliers=sum(bin[i],bin[i+1],…,bin[2047]),最后再将求得的Soutliers与Hpr中最后一个bin相加:Hpr[i‑1]+=Soutliers,并将Hpr标准化,最终得到Hpr的概率分布;

S3234、设置量化后的分布为Hq,将参考分布Hpr中[bin[0],…,bin[i‑1]]部分按比例转化为128个bin作为Hq,转化完毕后再将Hq中的bin数量按照比例拓展为与Hpr分布相同数量bin的分布;

S3235、将得到的Hq进行标准化,与之前取得的Hpr进行KL散度计算,通过第二步中i的不断递增,选取从128到2048中KL散度值最小的i,最终的阈值为T=(i+0.5)*Lbin,其中Lbin为一个bin的长度,交叉熵计算公式为:其中p和q分别表示量化分布和参考分

布,N为bin的数量;

将图像数据集输入所述SimNet神经网络之前,对图像数据集内的静态手势图进行图像增强处理,图像增强的方式为图像水平翻转、垂直翻转、图像随机旋转0‑30度、图像亮度随机变化、图像对比度随机变化、图像扭曲、图像缩放中一种或两种的组合;

所述S13中使用5折交叉验证的方法对SimNet神经网络进行训练。

说明书 :

一种基于深度模型优化的超高速静态手势识别方法

技术领域

[0001] 本发明涉及计算机视觉技术领域,特别是一种基于深度模型优化的超高速静态手势识别方法。

背景技术

[0002] 随着图像处理技术的发展,手势识别在人们的日常生活中逐渐得到了广泛的应用,对各种图像中的手势进行识别并分类的算法也十分丰富。对于静态的手势识别任务来说,目前主要的算法分为两个步骤,首先对图像中的手势进行检测,当检测到图像中出现手势之后,再对其进行识别。
[0003] 由于进行手势识别时,往往会受到当前背景的影响,进行识别时的背景可能会十分复杂,背景中的物体也会对图像中的手势检测产生一定的干扰。其次图像中的手部姿态也会对识别时的精度产生一些影响,每个人的手部姿势习惯都不同,导致手势图像具有很大的多样性,对于传统的手势识别方法来说,如果克服这样的问题也是一个较大的考验。
[0004] 一般来说,传统的图像分类方法有支持向量机、聚类算法等,其中支持向量机的方法是将输入的数据利用核函数映射到高维空间中,以便在高维空间更好地进行分类和回归。聚类算法是通过对训练样本的学习寻找数据的内在结构,按照最大的共同点将数据进行归类,为进一步的分析提供基础。但是传统的分类算法对所处理图像的要求比较高,在单一背景下有较高的准确率,但不能适应各种复杂背景下的手势识别任务,具有较大的局限性。
[0005] 对于人工智能神经网络来说,主要有误差逆传播算法、玻尔兹曼机等,对于背景较为复杂情景下的手势识别任务相对传统的图像分类算法具有更好的效果,但是对训练样本的要求较高,在复杂情况下的识别速度不佳,不能适用于对速度要求较高以及低延迟的任务。
[0006] 综上所述,传统的手势识别方法和一般的基于神经网络的手势识别方法都有各自的缺点。前者识别速度较快但识别精度和整体算法的鲁棒性难以得到解决,而后者普通的基于神经网络的手势分类识别算法虽然说精度相比传统的方法有所提升,但是由于算法的复杂性识别的速度并不理想。

发明内容

[0007] 本发明的目的是要解决现有技术中存在的不足,提供一种基于深度模型优化的超高速静态手势识别方法,可以识别手势的高精度模型,并且适应复杂的环境和手势角度的变化,从而在多种复杂环境下准确识别静态手势。另外通过模型融合和量化等技术,可以在牺牲极小的精度前提下实现对识别速度几倍的提升,经过优化后的手势识别方法可以精确又快速地识别静态手势。
[0008] 为达到上述目的,本发明是按照以下技术方案实施的:
[0009] 一种基于深度模型优化的超高速静态手势识别方法,包括以下步骤:
[0010] S1、静态手势识别神经网络模型的设计和训练:采用SimNet神经网络对剪刀、石头和布三种静态手势图像进行训练并实现识别分类;
[0011] S2、神经网络模型结构的融合优化:对训练好的SimNet神经网络模型进行修剪,然后对SimNet神经网络模型的算子进行合并优化;
[0012] S3、神经网络模型的量化:对已经融合优化后的SimNet神经网络模型进行量化,将单精度浮点型的权重激活信息依据KL散度与整型数值进行范围匹配,将权重中单精度浮点型的数值转换为整型数据;
[0013] S4、输入待识别的静态手势图,通过SimNet神经网络模型输出识别结果。
[0014] 进一步,所述S1的具体步骤如下:
[0015] S11、设计SimNet神经网络:SimNet神经网络结构的总层数为94层,由卷积层、批标准化层和非线性激活函数构成主干部分,在模型的尾端则添加了池化层和全连接层,其中卷积层包括普通卷积层和可逆卷积层:普通卷积层由点卷积和可分离卷积构成,每一个普通卷积层后再添加一个非线性激活层;可逆卷积层则由瓶颈层和可分离卷积层组成,瓶颈层由两个互补的点卷积层构成,分布于可分离卷积层的上下两侧,可逆卷积层整体采用残差的构造,最后在可逆卷积层的末尾添加线性激活层;整个神经网络中,每个最小单位的卷积层之后添加批标准化层,所有的非线性卷积层由Relu6结构组成;另外,SimNet神经网络使用add和concat两种方式来进行特征融合,在神经网络的主干部分,每个可逆卷积层的尾部使用add进行特征的融合,在主干部分的末端采用最大池化层以及平均池化层进行降维并使用concat操作对两者的结果进行特征融合,在SimNet神经网络的尾端部分使用dropout层进行正则化,并使用两个全连接层预测分类,最后一个全连接层输出神经网络预测的结果,即输出三维的向量,分别代表对剪刀、石头和布三种静态手势形状的概率大小,通过对输出概率进行分析以判断图像中的物体信息;
[0016] S12、采集若干个不同个体的成年男女的不同姿势、不同角度、不同环境和不同光照强度下的剪刀、石头和布三种静态手势图组成图像数据集,剪刀、石头和布三种静态手势图的比例为1:1:1,所有静态手势图的分辨率均为三通道彩色RGB,文件格式为jpg格式;
[0017] S13、将图像数据集划分为训练集、验证集和测试集,输入SimNet神经网络进行训练,最终使训练好的SimNet神经网络模型对静态手势进行分类识别。
[0018] 进一步,所述S2的具体步骤如下:
[0019] S21、对于训练好的SimNet神经网络权重模型,将可逆卷积层结构的扩张系数E最高限制为2,可逆卷积层结构的特定通道网络结构层的数量N最高限制为2;
[0020] S22、SimNet网络模型算子的融合:算子的融合操作主要是对整个网络结构中的卷积层以及与卷积层相连的其他网络层进行合并,其中包括:卷积层和批标准化层的融合,每一个最小单位的卷积层都与其之后的批标准化层进行融合;按元素求和操作层的融合,求和层的主要任务为对上一层相同维度的输出特征图A与输出特征图B逐个元素进行相加,对此将特征图A中的元素取出,作为即将输出特征图B信息的卷积层中的偏置值,与该卷积层的偏置值进行融合,从而去除求和操作层;对于神经网络中reshape、unsqueeze和squeeze等对输入数据进行维度变形的操作层,将其与上一个网络层进行融合,从而去除这些操作层;对于整个模型中融合特征的concat层,在该层单独将两个输入特征合并,将concat层的两个相同维度的特征直接传递到concat层的下一层中,从而可以直接去除concat层。
[0021] 进一步,所述S3的具体步骤如下:
[0022] S31、权重信息的非饱和量化:
[0023] S311、将融合优化后的SimNet网络模型进行量化操作,按照INT8整型的范围,设置量化数值范围定为127,将单精度浮点型数值按照比例转化为整型数值;
[0024] S312、依次遍历整个SimNet网络模型中所有的网络层,由上到下,对于网SimNet网络中某一卷积层中的所有浮点权重数值,找到其最大值或最小值,将最大和最小值的绝对值进行比较,选取两者中较大值作为阈值;
[0025] S313、将量化数值范围与阈值进行相除操作,得到原始权重值和量化权重值中的转化比例,将原始的权重数值与比例值相乘得到量化后的权重数值Sweight=Nquantize/Tthreshold,其中,Tthreshold为阈值,Nquantize为量化范围取127,Sweight为计算好的比例系数;
[0026] S32、模型激活信息的饱和量化:
[0027] S321、收集矫正数据集,该数据集的总数为2000张图像,这些数据集原始训练集的子集,依次从训练集的不同个体中,抽取不同手势且具有代表性的数据集图像组成矫正数据集,图像大小格式与原始训练集相同;
[0028] S322、将矫正数据集输入SimNet网络进行预测任务,在SimNet网络运行过程中,收集每一层激活权重的直方图分布信息并保留下来;
[0029] S323、将S31中的量化分布信息,基于不同的阈值产生不同的量化分布,随后计算每个量化分布与原始分布的相对熵,选择交叉熵最少的分布,此时量化分布与原始分布的信息分布最接近;
[0030] S324、选择使量化分布和原始分布信息最接近的阈值,并将此阈值保存。
[0031] 进一步,所述S323的具体步骤如下:
[0032] S3231、将SimNet网络模型中的权重激活值以2048个bin的形式,转化为直方图,此时原始权重激活的分布为Hp=[bin[0],...,bin[2047]];
[0033] S3232、假设最优的截断数值i为128,令i从128开始,到2048结束,取整数数值依次进行实验,从而挑选出最合适的截断数值i;
[0034] S3233、根据假设的截断数值i,设定参考分布Hpr=[bin[0],...,bin[i‑1]],该参考分布为Hq的子集,对于i以及i+1后的bin值进行求和,求和后的值为Soutliers=sum(bin[i],bin[i+1],...,bin[2047]),最后再将求得的Soutliers与Hpr中最后一个bin相加:Hpr[i‑1]+=Soutliers,并将Hpr标准化,最终得到Hpr的概率分布;
[0035] S3234、设置量化后的分布为Hq,将参考分布Hpr中[bin[0],...,bin[i‑1]]部分按比例转化为128个bin作为Hq,转化完毕后再将Hq中的bin数量按照比例拓展为与Hpr分布相同数量bin的分布;
[0036] S3235、将得到的Hq进行标准化,与之前取得的Hpr进行KL散度计算,通过第二步中i的不断递增,选取从128到2048中KL散度值最小的i,最终的阈值为T=(i+0.5)*Lbin,其中Lbin为一个bin的长度,交叉熵计算公式为:
[0037] 其中p和q分别表示量化分布和参考分布,N为bin的数量。
[0038] 作为本发明的进一步优选方案,将图像数据集输入所述SimNet神经网络之前,对图像数据集内的静态手势图进行图像增强处理,图像增强的方式为图像水平翻转、垂直翻转、图像随机旋转0‑30度、图像亮度随机变化、图像对比度随机变化、图像扭曲、图像缩放中一种或两种的组合。
[0039] 作为本发明的进一步优选方案,所述S13中使用5折交叉验证的方法对SimNet神经网络进行训练。
[0040] 与现有技术相比,本发明具有以下有益效果:
[0041] 本发明采用深度学习技术,构建神经网络对静态手势进行识别的判断,基于神经网络的模型相比传统的识别方法具有较高的鲁棒性和准确度,并且可以在复杂的环境中识别手势。
[0042] 本发明有针对性地提高了神经网络的运行速度,针对已经设计好的网络进行模型压缩和修剪操作,去除模型中冗余的部分。在精度下降理想的情况下实现对模型的压缩,从而增加神经网络模型运行的速度。除了模型压缩和修剪外,本发明还采用了模型操作融合和量化等操作,其中模型融合针对模型前向网络中的操作运算符进行优化,对网络中的前向算子进行合并从而增加运算速度。而量化则将模型权重的数值精度有单精度转化为整型,在精度减少在可控范围的前提下实现神经网络推断的加速。

附图说明

[0043] 图1为本发明的总体流程图。
[0044] 图2(a)为本发明的SimNet神经网络模型结构图;图2(b)为SimNet神经网络中基本的Bottleneck单元。
[0045] 图3为本发明的代表手势识别结果的混淆矩阵。

具体实施方式

[0046] 为使本发明的目的、技术方案及优点更加清楚明白,以下结合实施例,对本发明进行进一步的详细说明。此处所描述的具体实施例仅用于解释本发明,并不用于限定发明。
[0047] 本实施例的基于深度模型优化的超高速静态手势识别方法,包括以下三个阶段静态手势识别神经网络模型的设计和训练、神经网络模型结构的融合优化、神经网络模型的量化。
[0048] 第一阶段包括以下步骤:静态手势识别数据的收集、神经网络模型的设计以及模型的训练方法,最后展示训练结果以及精度。
[0049] 一、手势识别数据收集
[0050] 本方法所使用的数据集信息均采集于日常图像,由10个不同个体的成年男女在不同背景和不同光照情况下,以不同角度进行拍摄的不同的静态手势图像。平均每人采集1,500张不同角度的图像。
[0051] 手势图像数据集总共包含15,000幅图像,分辨率皆为640px×640px,图像为三通道彩色RGB,文件格式为jpg格式。将数据集中的图像根据手势分为石头、剪刀和布三种形状,三种类型的图像比例接近1:1:1,以上数据集用于以下步骤中手势识别网络的训练和测试。
[0052] 在实际训练中,首先需要将图像数据集划分为三个部分,分别是训练集、验证集和测试集。其中训练集在训练过程中输入神经网络进行训练,验证集则在训练过程中周期性地验证方法的合理性,而测试集则在方法完成时对方法的性能进行评估。在总共的15,000幅图像中,挑选10,000幅图像作为训练集的数据,挑选1,500幅图像作为验证集的数据,其余的3,500幅图像作为测试集数据,整个数据分配比例为20:3:7,符合深度学习训练标准。
[0053] 二、图像输入与图像增强
[0054] 这一步骤中的主要任务为,使用上一步设计好的神经网络对手势识别数据集进行训练。在利用神经网络进行训练之前,需要先对将要进行训练的图像进行图像增强处理,可以增加神经网络学习图像特征的难度,并且合理地扩充了数据集。最终的效果算法可以使整个网络更加深入地挖掘图像的特征信息,达到准确的分类效果。
[0055] 针对采集的手势图像数据集的特点,本发明采取了以下几种图像增强方式:图像水平翻转、垂直翻转、图像随机旋转0‑30度、图像亮度随机变化、图像对比度随机变化、图像扭曲、图像缩放等七种图像增强策略,最终以两两组合的方式对输入模型的训练图像进行增强。
[0056] 三、整体的神经网络结构
[0057] 本发明采用SimNet神经网络对手势图像数据集进行训练,其中SimNet神经网络模型如图2(a)所示,而图2(b)展示了SimNet神经网络中基本的Bottleneck单元,该网络层结构共有94层,主要由卷积层、批标准层和非线性激活函数构成。其中卷积层的功能即为对输入图像数据进行卷积运算,与传统滤波器的运算方式相似,在对输入图像进行分析训练的过程中,神经网络由浅到深逐渐提取手势图像数据集的特征来进行分析。基本的卷积操作如下:
[0058]
[0059] 其中x为卷积输入的图像,h为卷积核,y为卷积后的结果,卷积操作是基于深度学习的图像处理中基本的计算方法,通过对卷积核进行参数更新,实现对输入图像特征提取的效果。
[0060] 批标准层的功能是通过一定的规范化手段,把每层神经网络任意神经元向非线性函数映射后逐渐向取值区间极限饱和区靠拢的输入值的分布强行拉回到均值0方差为1的比较标准的正态分布。使非线性变换函数的输入值落入对输入比较敏感的区域,从而避免梯度消失问题的产生,同时梯度的增大也相当于学习的收敛速率的增大,能大大减小训练的时间。
[0061] ReLU6激活函数为ReLU函数的变换形式,其函数表示如下:
[0062]
[0063] 其中x为输入的特征信息,y为激活函数,本方法采用ReLU6作为非线性激活函数,可以在使用低精度进行计算时具有一定的鲁棒性。
[0064] 本方法采用的SimNet神经网络结构中使用了九个可逆残差块作为网络的主体部分,残差块结构可以解决深度神经网络中随着网络层数的增加而产生的梯度消失或者梯度爆炸问题,以及模型不收敛的问题,使深度神经网络的层数可以达到很深,来增加识别的准确率。可逆残差块中,块内部层的维度大于块边缘层维度的大小,将输入特征维度缩小扩大再缩小从而输出。通过这种方法可以在计算时节省不必要的内存使用,从而加快识别的速度。
[0065] 此外,为了进一步地加快图像识别的速度,在每个可逆残差块中采用线性瓶颈层,从而可以避免在使用非线性激活层时一部分特征信息的损失。其次将内部的普通卷积层改进为深度可分离卷积层与点卷积层相结合的形式,通过这种方式,可以在使用K*K大小的卷2
积核进行计算时将计算量降低为原始计算量的1/K ,从而加快识别的速度。此外,本方法在每个深度可分离卷积层之前增加了一个点卷积层,作为扩张层,通过这种方式可以提升数据通道的数量,获得更多的特征信息,减小了由于数据通过非线性层损失的部分信息,增加了模型的表达能力,可以进一步提升网络识别的准确性。
[0066] 本方法在网络中分别使用了add和concat两种方式来进行特征融合,在神经网络的中间部分,每个倒置残差块的尾部使用add进行特征的融合,融合之后通道数量不变,可以增加模型的特征利用率。在神经网络的尾部添加最大池化层和平均池化层来缩减模型大小,提升计算的速度,并同时提高所提取特征的鲁棒性,此时使用concat的方式对通过最大池化层和平均池化层的特征进行融合,融合之后通道数量增加,可以增强模型的表达能力。
[0067] 为了避免深层神经网络中的过拟合问题,本方法在神经网络的最后部分使用了dropout层进行正则化,并使用全连接层进行分类得到神经网络预测的结果,最后输出一个三维的向量,分别代表对测试图像进行预测得到的剪刀、石头和布三种手势形状的概率大小,通过对输出概率进行分析可以判断图像中的物体信息。
[0068] 四、交叉验证法训练
[0069] 在设计好训练用于训练的手势神经网络之后,需要将数据集中的训练集输入到网络中进行计算。训练过程使用5折交叉验证的方法,将训练集分成5个大小相同的互斥子集,每个子集含有2,000副手势图像,并且每个子集中石头、剪刀和布三种手势图像的数量比接近1:1:1。
[0070] 首先从5个子集中任意挑选一个作为训练时的验证集,剩下的四个子集作为训练集。以此类推,总共训练5个批次,每个子集都分别作一次验证集,每个批次训练20个回合。通过交叉验证训练的方式可以充分利用数据集,使神经网络能够充分学习图像的特征信息,并且有效避免了过拟合的问题。
[0071] 训练过程中采取的批次为32,优化函数为Adam优化器,其中动量参数为0.9、0.99,初始学习率为0.01。在每个回合中有目的地对学习率进行衰减,至最后一个回合学习率衰减为0.00001。
[0072] 最后,通过对整个神经网络模型训练180回合之后,模型准确率达到98.9%,其中混淆矩阵如图3。此时模型在1080Ti显卡上的推断速度为2.3ms/帧,整个模型所占用的大小为24Mb。
[0073] 第二阶段主要介绍本发明使用的SimNet手势识别模型的优化步骤,优化模型作为推断端的运行速度,结合图1的总体流程,这一部分的主要的过程分为两个步骤:SimNet神经网络模型的修剪、SimNet网络模型算子的融合。
[0074] 一、SimNet神经网络模型的修剪
[0075] 在上一阶段,设计的神经网络模型可以高精度地识别静态手势的类型,并且拥有300FPS的运行帧率。虽然该网络可以满足精度的要求,但是运行速度仍有很大的提升空间。
因此,这一步骤中,主要操作为对上一阶段设计的神经网络模型进行压缩和修剪,从而去掉模型中的冗余部分,实现网络提速。
[0076] SimNet神经网络的结构如图2(a)所示,图中可以看到本发明使用的模型中是由很多相同的模块结构组成的,其中主要构成模型的核心结构是可逆卷积层结构。随着层数的加深,可逆卷积结构中的卷积通道数也越来越多,可学习的特征也越来越抽象。其中整个网络中的通道数变化量为16、24、32、64、96、160、320,接下来在保证这些通道数不变的情况下对网络进行修剪。
[0077] 可逆卷积层结构拥有四个可变参数,分别代表该结构内部的扩张系数E、中间卷积网络层的通道数C、特定通道网络结构层的数量N,以及中间卷积层的步长S。其中通道数C是固定不变的,代表每个可逆卷积层结构在整个网络体系中的通道数变化趋势,即由一开始的16个输入通道变化为320个输出通道,而中间卷积层的步长S与图像下采样有关系,为了保证不同尺度的特征学习,在优化阶段不对步长做出改变。接下来主要对其他两个变量进行调整。
[0078] 扩张系数E代表该网络层结构的通道扩张倍数,当扩张系数为1时不进行通道数扩张,当扩张系数越大时,该网络结构可以学习到的特征信息更加深入和抽象。在第一阶段中设计的网络层结构的扩张系数皆为6,在此阶段经过精度和速度的权衡测试最终选择将扩张系数定为2,达到精度和速度的权衡。
[0079] 特定通道网络结构层的数量N则代表每一个可逆卷积层结构的数量,由图2(a)可知,未优化的网络层数量由1依次升高至4随后减少到1,在此优化阶段将网络的数量最高限制为2,同样遵循数量由高到低的构造,同时也去除了部分相似结构。在将模型修剪后,使整个网络更加适合低分辨率输入的手势图信息,可以达到精度和速度的权衡。
[0080] 综上所述,模型经过适当的修剪后,整个网络结构更加紧凑,并且实现在准确率没有明显下降的前提下将运行速度提升了约两倍。
[0081] 二、SimNet网络模型算子的融合
[0082] 经过上一步的优化模型后,SimNet网络的层数由200层缩减为100层,而在整个神经网络模型构架中,包含许多的核大小为3×3的普通卷积,核大小为3×3的分组卷积以及核大小为1×1的普通卷积,这些卷积操作在整个网络中贡献了较多的计算量。
[0083] 其中,对于核大小为3×3的普通卷积,假设输出特征图的高和宽的尺寸为Hout×Wout,其输入维度为Cin,输出维度为Cout,那么这个卷积贡献的计算量M3×3可表示为:
[0084] M3×3=3×3×Cin×Hout×Wout×Cout;
[0085] 同样地,对于核大小为1×1的普通卷积,其贡献的计算量为:
[0086] M1×1=Cin×Hout×Wout×Cout;
[0087] 分组卷积与普通卷积不同,本发明使用的分组卷积中的group参数与输入通道数相同,即分组卷积将上一个输入进来的特征图中的通道进行分离,并利用不同单独的卷积核进行操作,最后将处理结果进行合并。其中,核大小为3×3的分组卷积所需的计算量为:
[0088] Mg:3×3=3×3×Hout×Wout×C;
[0089] 其中C为输入和输出的通道数量,在分组卷积中输入和输出的通道数相同。
[0090] 如图2(a),整个模型框架中大部分的卷积层之后都添加了批标准化层,即上述三种不同的卷积层后都和批标准化层进行了连接。批标准化层的作用在于对输入输出的隐含层的信息进行规范化,使每一层的激活函数分布在线性区间。其中批标准化层的计算公式为:
[0091]
[0092] 其中X为输入特征信息,m为整个批次特征信息的均值,σ为整个批次特征信息的方差,s和bbn为在训练中学习到的参数。∈为为了防止数值计算溢出使用的辅助数,通常为0.001。经过第一步骤中优化后的模型中存在30个批标准层,接下来对紧跟在卷积层后的批标准层进行优化,将其与前一个卷积层合并,从而减少运算量。
[0093] 在实际的融合过程中,由于卷积层的基本计算公式为Xconv=X*W+bconv,其中W为权重,bconv为偏置而Xconv为输出的信息,在接下来的步骤中本发明将卷积层的输出Xconv作为批标准化层的输入,在上述的批标准化的公式中作为X输入,最终得到的公式为:
[0094]
[0095]
[0096]
[0097] 其中W′conv为融合后的卷积层中的权重信息,此时卷积层中的卷积信息吸收了批标准化中的参数。而b′conv为卷积层中的偏置,W′conv与b′conv的计算在模型推断之前已经计算好,更新了模型中卷积的权重信息,故融合后的卷积层的计算量与之前相同,而省略了批标准化的运算过程。
[0098] 经过卷积层和批标准化层的融合后,整个模型的总层数由100层下降为72层,经过试验经过优化后模型的运行时间缩短了1.5倍,实现了模型的加速。
[0099] 除了上述优化后,模型中的add(按元素求和)操作、reshape(变形)操作、unsqueeze操作和squeeze操作也可以进行优化融合,从而减少每个层之间的信息传递损耗的时间,增加模型的运行速度。
[0100] 其中,对于按元素求和操作,在这一层中对上一层中相同维度的输出特征图A与输出特征图B逐个元素进行相加,对此情况可以将特征图A中的元素取出,作为得出特征图B信息的卷积层中的偏置值,与该卷积层的偏置值进行融合,从而可以去掉add层。
[0101] 对于reshape、unsqueeze和squeeze等变形类的层,同样可以将其与上一层的计算融合,从而节省数据量的传输时间,加快模型运行速度。另外网络模型中融合特征的concat层也可以直接去除,需要在该层单独将两个输入特征合并,只要将concat层的两个相同维度的特征直接传递到concat层的下一层中即可,不需要合并的计算过程,充分利用了GPU的并行处理能力。
[0102] 经过上述的优化后,整个模型的层数由72层减少为57层。其中总体速度相比第一阶段的原始模型提升约3倍,大大加快了手势识别的速度。
[0103] 第三阶段主要介绍本发明使用的SimNet手势识别模型的量化步骤,结合图1的总体流程,这一部分的主要的过程分为两个步骤:模型权重信息的非饱和量化以及模型激活信息的饱和量化。
[0104] 一、权重信息的非饱和量化
[0105] 利用神经网络对输入噪声的不敏感性,在接下来的步骤中将上一阶段优化后的模型继续进行量化操作,将数值类型为FP32单精度浮点型的权重信息量化为INT8整型,其中38 38
单精度浮点型的动态范围为‑3.4×10 ~+3.4×10 ,整型的动态范围为‑128~+127。对比单精度,整型的动态范围拥有极低的精度和动态范围,但是相应地运算速度理论上可以提升4倍。
[0106] 由前文可知,对于整个神经网络模型来说,主要的计算贡献量为卷积层的计算。而对于普通的卷积来说,一个卷积核与特征层中的一个区域进行一次点乘的计算量为:
[0107] M=K×K
[0108] 其中K为卷积核的大小,M的运算单位为乘法累加运算(MACC),一个乘法累加运算可以表示为:W*X+b,其中W、X、b皆为卷积计算中最小单位的数据。在原始导出的模型中,权重W、数据X以及偏置b的数值类型皆为单精度浮点型。
[0109] 对于权重数值来说,由于网络模型对噪声并不是很敏感,因此使用不需要进行额外矫正的非饱和转化的方式。这种转化方式采取对称法,按照某一浮点型数值的最大绝对值对量化后的整型数据进行划分。这种方式简单直接,可以有效地将模型权重量化为整型,经过实验采取这种方式对实际预测精度的影响很小,简单分为以下几步:
[0110] 1.按照INT8整型的范围,设置量化数值范围定为127,这样可以将单精度浮点型数值按照比例转化为整型数值;
[0111] 2.依次遍历整个模型中所有的网络层,由上到下,对于网络中某一卷积层中的所有浮点权重数值,找到其最大值或最小值,将最大和最小值的绝对值进行比较,选取两者中较大值作为阈值。
[0112] 3.将量化数值范围与阈值进行相除操作,从而得到原始权重值和量化权重值中的转化比例,将原始的权重数值与比例值相乘即可得到量化后的权重数值。
[0113] 上述的三个步骤可以用以下的公式来表示:
[0114] Sweight=Nquantize/Tthreshold
[0115] 其中,Tthreshold为阈值,Nquantize为量化范围取127,Sweight则为计算好的比例系数,在遍历整个模型的卷积层的同时,将这些比例系数保存起来,在接下来的步骤中使用。
[0116] 二、模型激活信息的饱和量化
[0117] 在上一步中使用的量化方法属于对称、非饱和量化。对于模型权重来说,这种直接的量化方法可以方便快速地将单精度浮点型权重值转化为整型权重值。实际测试中对精度无明显的影响。
[0118] 对于激活权重值来说,采用第一步中的直接量化方式容易造成信息的丢失,最终导致推断精度的下降。为此这一步骤中,本发明采用非对称、饱和的量化方法来量化模型中的激活权重。这种方法简单分为以下三步:
[0119] 1.首先收集矫正数据集,该数据集的总数为2000张图像。这些数据集原始训练集的子集,依次从训练集的不同个体中,抽取不同手势且具有代表性的数据集图像组成矫正数据集,图像大小格式与原始训练集相同。
[0120] 2.将矫正数据集输入网络进行预测任务,在神经网络运行过程中,收集每一层激活权重的直方图分布信息并保留下来。
[0121] 3.将上一步中的量化分布信息,基于不同的阈值产生不同的量化分布,随后计算每个量化分布与原始分布的相对熵,选择交叉熵最少的分布,此时量化分布与原始分布的信息分布最接近。
[0122] 4.选择使量化分布和原始分布信息最接近的阈值,并将此阈值保存。
[0123] 上述为饱和量化的具体步骤,其中第3步中交叉熵比较的具体步骤如下:
[0124] 1)首先将网络模型中的权重激活值以2048个bin的形式,转化为直方图,这个直方图当中储存了不同bin值下的权重信息分布。此时原始权重激活的分布为Hp=[bin[0],...,bin[2047]]。
[0125] 2)假设最优的截断数值i为128,令i从128开始,到2048结束,取整数数值依次进行实验,从而挑选出最合适的截断数值i。
[0126] 3)根据假设的截断数值i,设定参考分布Hpr=[bin[0],...,bin[i‑1]],该参考分布为Hp的子集。对于i以及i+1后的bin值进行求和,求和后的值为Soutliers=sum(bin[i],bin[i+1],...,bin[2047])。最后再将求得的Soutliers与Hpr中最后一个bin相加:Hpr[i‑1]+=Soutliers,并将Hpr标准化,最终得到Hpr的概率分布。
[0127] 4)设置量化后的分布为Hq,将参考分布Hpr中[bin[0],...,bin[i‑1]]部分按比例转化为128个bin作为Hq。转化完毕后再将Hq中的bin数量按照比例拓展为与Hpr分布相同数量bin的分布。
[0128] 5)将得到的Hq进行标准化,与之前取得的Hpr进行KL散度计算。通过第二步中i的不断递增,选取从128到2048中KL散度值最小的i,最终的阈值为T=(i+0.5)*Lbin,其中Lbin为一个bin的长度。
[0129] 上述最后一步中所使用的交叉熵公式为:
[0130]
[0131] 其中p和q分别表示量化分布和参考分布,N为bin的数量,KL散度公式用来比较两种不同分布的差异,KL散度值越小表明两种分布所包含的信息越相近,整个过程也就是将单精度浮点型权重信息分布重新编码为整型权重分布的过程。
[0132] 通过对比两者的权重分布,在整个网络模型中得到每一层激活权重信息的阈值信息,将这些阈值信息称为校准表。以后在进行预测的时只需要读入已经得到的校准表即可以直接得到整数类型的激活权重,从而实现对模型的量化。
[0133] 量化后的网络与量化前相比,整体模型的体积缩小一倍,在精度下降0.9%的前提下,模型的运行速度提升约1.5倍。
[0134] 第四阶段、输入待识别的静态手势图,通过SimNet神经网络模型输出识别结果。具体可以通过下述实验加以说明:
[0135] 1、实验条件:
[0136] 本发明在英特尔酷睿i7‑7800x,32GB内存、图形计算器为GTX1080TI的Ubuntu‑16.04系统上运行。采用软件平台为PyCharm、OpenCV和TensorRT,对分辨率为128px×128px的三通道RGB手势图像数据集进行测试。
[0137] 2、实验结果:
[0138] 本发明设计的手势识别算法可以在平均精度为98.7%的条件下,在GPU端,实现约830FPS的高帧率静态手势识别。在模型操作融合以及量化步骤后,精度略微下降到97.8%的条件下,在GPU端的精度可以达到约2600FPS的超高帧率静态手势识别。与此同时在CPU端在相同精度的前提下,分别可以达到约300FPS和600FPS的帧率。
[0139] 综述,本发明能够针对不同手势识别出不同的手势状态,实现高准确率和高速的识别速率。
[0140] 本发明的技术方案不限于上述具体实施例的限制,凡是根据本发明的技术方案做出的技术变形,均落入本发明的保护范围之内。