目 录
随着科技的不断进步,各种科学产品、应用软件也逐渐渗透到了人类的生活中。为了让人们的生活变得更容易,科技工作者已经开发出许多可以让人和计算机进行交流的方法。但是,尽管科技日新月异,如不断更新的应用,电脑硬件产品的品质不断提升,由于一些互动方式的特点,这些互动模式仍然难以取得重大突破。因此,在过去几年里,人们一直在讨论如何进行有效、快捷和人性化的互动。
在以键盘、鼠标、语音识别、触摸为基础的人机交互方式等多种交互方式的大背景下,手势识别技术的出现,主要是由于之前的交互方式都会受到各种环境的限制,从而导致出现了这种更直观、更快捷的交互方式。
手势识别是一种非常受欢迎的交流方式,它可以有效地传达出用户的意思,这也是为什么手势识别可以被广泛应用的原因。把双手当作输入装置,可以让人更容易地和电脑这样的人工智能进行沟通。
手势有静态和动态两种,它们都能起到辅助人类与电脑交流的作用,并能对电脑进行指令和控制。手势识别是一种基于计算机视觉的技术,它首先利用二维摄像机捕捉、记录手的动作,然后利用图像处理算法进行特征提取,利用机器学习算法对动作进行特征分析,并对动作中的物体进行分析,通过对动作进行检测,再对训练结果进行分析。
近年来,基于机器学习技术的图像处理技术取得了长远的进步,但是由于受多种环境和其他因素的影响,它还处于一个稳定的发展过程中。在深度学习的帮助下,手势识别技术的发展有了很大的突破,在传统的手形特征识别中,首先进行人工设计,然后使用传统的机器学习方法对其进行处理;而深度学习则是一种基于深度卷积网络的特征抽取和分类的方法。
最早的手势识别,是采用了二维摄像头,通过佩戴装置,捕捉到人的手、胳膊等关键部位的空间和角度,而仪器则是由数据线与电脑相连的数据手套,比如图1.1,数据手套记录了手势的改变和停顿,然后用二维摄像机拍摄手势,并将采集到的图像传递给识别系统。这种装置在识别手势状态、信息转换等方面都有很好的效果,但因其成本高、使用起来不方便等原因,一直没有得到广泛应用。
图1.1 数据手套识别
因为缺乏可穿戴设备,设计人员设计出了光学标记法。光学标记法是一种红外技术,通过红外图像来记录使用者的动作,使用者需要在身体上佩戴一定数量的光学标志,这样电脑就可以通过红外图像将身体的每一个部位都记录下来,并将其传送到电脑的数据库中。虽然它可以弥补像数据手套这样的佩戴装置的某些缺陷,但是因为它的结构比较复杂,给使用者带来不便,所以一直没有被人们所关注。
尽管使用佩戴装置可以确保电脑对手势的辨识和传递的稳定性和精确度,但是外在的装置总是制约着人们使用技术便利生活的本意,于是计算机视觉的手势识别技术就产生了,如图1.2。计算机视觉手势识别就是通过视觉的方式来识别手势,使用者在手势完成动作后,首先将动作进行拍照,然后将动作转化成二维画面,通过电脑视觉技术来完成动作的识别。
图1.2 计算机视觉手势识别
手势识别是从一个完整的动作到一个有意义的指令的过程。手势识别的目标就是要把人类的动作输入,然后将这些手势通过映射并处理,从而设计和发展出一套系统来控制设备。
韩国一些研究者将熵分析用于手势识别。该方法主要包括以下几个步骤:第一,利用连码对手势的外型进行检测,将其转化为二维图形,并求出图形的质心,通过测量由中心到边缘的距离来判断手势的特定意义。该系统因其识别率高达百分之九十五而备受瞩目。
由印度的一些研究者基于原来的方法而改进产生一种新的理论方法通过消除背景,识别手势方向、检测拇指、检测手指数目,从而实现对手势的信息识别,提高手势识别的准确率。
在手势识别这方面,除了一些专业人士的努力之外,很多大的电子企业也纷纷投入到了这方面的研究中来。比如,三星公司就是在与独立研发小组和有业界经验的专家合作下,研发出了与手势识别有关的软件。这些有关的功能被很好地发展和用于电脑应用。其中三星的产品中,就有对应的手势识别技术,能够在产品设备之前通过手势进行无接触的操作,从而让手势识别更贴近于人们的生活。
目前,国内有关手势识别的研究多为高等院校、科研机构和专业人员。例如,清华大学计算机系的专家就提出了一种新的运动分割算法,它可以根据手势的运动、形状、颜色等特征进行识别,从而达到对手势的正确识别,在实验中,十二个手势的正确识别率达到百分之九十以上;其他一些学者则认为,通过将摄像机与电脑相连,可以对手势进行准确的静态识别。目前,我国的研究者已经在手势识别方面取得了许多有意义的创新成果,并在实际工作中积累了丰富的经验,在此基础上进行了相应的改进,为全球手势识别的发展作出了巨大的贡献。从资料上可以看出,目前手势识别的准确率正在不断提高,各种不同的手势识别技术都被运用到了实际的应用当中,这使得它在为人们的生活带来便利的同时,也在推动着科学技术的进步。
深度学习[6][11]是一类模式分析方法的研究。深度学习是指学习样本资料的内部规则和表达层面,而学习所获取的知识对理解文字、图像、声音等数据具有重要意义。其最终目的是使电脑具备类似于人的分析和学习能力,并且可以识别文字、图像和声音等相关的信息。
卷积神经网络是一种以卷积运算为基础的深度学习方法。视觉系统的结构激发而成的卷积神经网络,利用神经元间的局部连接和层次组织图象变换,将具有相同参数的神经元分别置于前一层神经网络的各个部位,从而形成了一个平移不变神经网络结构。之后,采用基于误差梯度的卷积神经网络进行设计和训练,使其在某些模式识别任务中具有较好的效果。基于卷积神经网络的模式识别是当前最常用的一种,特别是在手写体的字符识别中显示了卓越的性能。
在深度学习中,有两种训练方法。第一个由下而上的非监督学习,是一层一层地往顶层训练。利用无标定数据对各个层次的参数进行分层训练,这个步骤可以视为一个无监督的训练,与传统的神经网络不同,它可以被视为特征学习。第二种自上而下的有指导的学习方法是用标记的数据进行训练,误差自顶向下传输。
卷积神经网络[17]在图像分类等方面得到了广泛的应用,它采用了卷积核来识别图像的特点。当人们识别一幅图像时,会自动地搜索出一幅图像的特征,比如根据长鼻子来识别它是一头大象,根据长耳朵识别它是一只兔子,根据它的直的笔画识别是字母“X”,根据它的曲的笔画识别是字母“O”。当我们看到一幅图片的时候,我们会下意识的去分析它的一部分。例如,在字母X中,可以看到三种典型的部分,即两种斜角直线和一种十字交叉。
图2.1 字母X细节部分
由于观测到这个特性,我们可以用数学语言来描述,而矩阵就是一种很好的方法。首先,将原始的文字进行矩阵化,将原图变成一个由 RGB组成的矩阵,在 CNN的卷积层中,有一块块用数字填满的方块,这就是所谓的卷积核。用卷积核扫描原始图像,将卷积核与图片矩阵对齐,然后把相应位置的元素进行乘积后相加,再用一个新的矩阵来记录,上述的操作就是卷积。卷积神经网络的核心就是卷积,卷积核在图象上按一定的距离运动,这就是所谓的步长,得到的新矩阵能反映出图象的局部特性,因而称之为特征图。它们既是这一层的输出,也是下一层的输入,设定不同的卷积核,就能找到各种各样的特征,对于CNN来说,训练就是让网络根据已有的数据和它们的标签自动确定卷积核中的数字,例如拥有5个卷积层的 AlexNet,用人类的眼睛观察边缘、纹理、组成等,越往后的卷积层抽取的特征就越抽象。在图像中,如果被扫描的位置与卷积核的特征相近,则其计算值越大,在结果图像中的色彩越鲜艳,也就会自然而然地提取出这些特征。单个卷积核通常处理单个特征,对一幅图中的多个特征可以分别采用多个卷积核。卷积后的图像往往也很大,而且很有可能会有很多较弱的特征,所以要对其进行压缩和降维,这就是池化操作。池化层可以提取出最大的图象特征,常用的Maxpooling是保留窗口覆盖区域的最大数值,而在矩阵中进行了池化会导致参数的大幅缩减。池化的原理,就是对一块区域内的结果取等效值,可以是取最大值,也可以是取平均值,经过池化后,图像的大小会显著降低。池化可以提高计算速度,并且在一定程度上避免了过度拟合,见图2.2。提高神经网络的泛化能力。
图2.2 拟合现象
之所以进行池化操作,是由于图像中的邻近像素往往有类似的数值,所以一般在卷积层附近的像素也会有相似的值,也就是说,卷积层输出的大部分信息都是冗余的,而池化层则可以通过减小输入的大小,降低输出值的数目。
池化完之后,进入激活层,激活层主要是对池化层的输出进行非线性映射,通常是CNN中的relu函数,之所以进行非线性映射,是为了使得多层的神经网络具有实际意义,否则无论多少层线性的映射,最终都会与单层的感知机等效。引入relu函数来代替sigmoid等其他函数,是由于在使用sigmoid等函数后续的反向传播求误差梯度时,求导涉及除法,计算量较大,使用relu激活函数可以大大节约计算时间,但在深层网络中,如果使用sigmoid函数反向传播,很容易就会出现梯度消失的状况,从而导致神经网络的深度训练失败,relu会使一部分神经元输出为0,减少参数之间的相互依存关系,缓解了过拟合问题的发生,卷积、池化和激活只是三种操作,可以重复的拼接组合以达到最终含有最佳特征的图像,最后我们可以将含有不同特征的二维图像展成一维后,输入全连接神经网络进行训练。卷积神经网络是一种利用卷积等运算来代替全连接网络中的所有运算,它既可以是整体的,也可以是局部的。
最后是全连接层,它一般位于网络的末尾,可以把所撷取的特征集中起来,给出图片可能是某种事物的概率。CNN非常擅长处理图像,这是它在各种比赛中的优异表现引领了深度学习的潮流。不仅如此,将声音当作图谱处理,可以完成语音识别,将词语作为向量处理可以完成机器翻译,总而言之,CNN是个不可多得的好工具。
LeNet-5[13]中主要有2个卷积层、2个池化层、3个全连接层,如图3.1.
图3.1 LeNet-5网络结构
卷积层采用5×5的卷积核,步长为1,一个特征图谱使用同一个卷积核.每个上层节点的值乘以连接上的参数,把这些乘积及一个偏置参数相加得到一个和,把该和输入激活函数,激活函数的输出即是下一层节点的值。
池化层使用2×2的输入域,将上一层4个结点作为下一层1个结点的输入,且输入域没有交叠,即每次滑动2个步长。各下采样点的4个输入结点相加,然后求平均值,再用一个参量乘后加一个偏置参数作为激活函数的输入,使激活函数的输出成为下一层结点的值。
(1)LeNet-5的第一层:卷积层
卷积形成6个特征图。卷积的输入面积为5×5,各特征图中各参数共用,在各特征图中仅采用一种共用的卷积核,而在卷积核中有5×5个连接参数和1个偏移。卷积区域每一次移动一个步长,因此,卷积层所构成的各特征图谱尺寸为28×28。第一层的训练参数为156个,其中的连接为122304个。
(2)LeNet-5的第二层:池化层
第二层为下采样层。第一层6张28×28的图谱,按2×2为单位下采样,获得6张14×14的图。在每一种特征图谱中都有一个较低的样本。总共5880个连接。
(3)LeNet-5第三层:卷积层
第三层为卷积层,其特征与第一层基本一致,只是第三层的结点与第二层上的多张图连接。第三层为16张10×10的图形,采用非对称性结合的方法可以方便地提取出不同的组合特征。这一层包含了1516个训练参数和151600个连接。
(4)LeNet-5的第四层:池化层
第四个层次是一个池化层。第三层16张10×10的图形,按2×2的单元,分别计算出16张5×5的图形。总共有2000个连接。
(5)LeNet-5第五层:全连接层
第五层为全连接层。由于第四层的16个图形的尺寸是5×5,和卷积核大小一样,所以通过卷积得到的图形尺寸是1×1。所得到的120个卷积结果,每一个都连接到前一层的16张图表。参数共有48120个。
(6)LeNet-5第六层:全连接层
第六层是全连接层。有84个结点,对应于一个7×12的图,这层包含10164个训练参数。
(7)LeNet-5第七层:全连接层
Output层也是一个全连接层,它包括10个节点,分别表示0至9。若该节点的i的输出数值是0,则网络辨识的结果是数字i。网络连接方式采用的是径向基函数(RBF)。
3.1.3 LeNet-5的训练算法
主要由4个步骤组成,共分为两个阶段:
a)从样本集中取一个样本(X,Yp),并向网络输入X;
b)计算相应的实际输出Op。
在这个阶段,输入层的信息通过一步一步的转换,传递给输出层。这个过程也是网络在完成训练后正常运行时执行的过程。
a)算实际输出Op与相应的理想输出Yp的差;
b)按极小化误差的方法反向传播调整权矩阵。
3.1.4 LaNet-5的局限性
CNN可以对原始图像进行有效的描述,从而可以在很短的时间内,从原始的像素中提取出一些规律。但是,由于大量的训练资料和计算机运算速度的落后,LeNet-5在处理复杂问题方面的效果并不理想。
AlexNet整体的网络结构包括:1个输入层(input layer)、5个卷积层(C1、C2、C3、C4、C5)、2个全连接层(FC6、FC7)和1个输出层(output layer),如图3.2。
图3.2 AlexNet网络结构
3.2.1 AlexNet[22]网络结构简介
(1)输入层:对于输入层, AlexNet卷积神经网络的预设输入数据必须是尺寸为224×224×3的图片,也就是说,该输入图象具有224的高、宽,以及RGB三个颜色通道。
(2)Conv1层:表示AlexNet的第一个卷积层,所用的卷积核是(11×11×3)×96(卷积核大小为11×11,输入通道为3,输出通道为96),步长为4, Padding为2。通过套用卷积公式,可以得出最终的特征图的高、宽都是55,最终的结果是55×55×96。
(3)MaxPool1层: AlexNet的第一个最大池化层,池化核为3×3,步长为2。通过套用池化公式,可以得到最后输出的特征图的高度和宽度均为27,最终输出的特征图的维度是27×27×96。
(4)Norm1层: AlexNet的第一个归一化层,也就是LRN1层,local_size=5(相邻卷积核个数设为5),并且输出的特征图的尺寸是27×27×96。
(5)Conv2层:表示AlexNet的第2个卷积层,所用的卷积核是(5×5×96)×256,步长是1, Padding是2。利用卷积公式,得出最终的特征图的高、宽都是27,最终的特征图的尺寸是27×27×256。
(6)MaxPool2层:第二个最大的 AlexNet的池化核尺寸是3×3,步长为2。采用池化公式,最终的结果是高、宽分别为13,最终的结果是13×13×256。
(7)Norm2层: AlexNet的第二个归一化层,即LRN2层,local_size=5(相邻卷积核个数设为5),并且输出的特征图的尺寸是13×13×256。
(8)Conv3层: AlexNet的第三个卷积层,所用的卷积核(3×3×256)×384,步长是1, Padding是1。采用卷积公式,最终的结果高、宽都是13,最终的特征图尺寸为13×13×384。
(9)Conv4层: AlexNet的第四个卷积层,所用的卷积核是(3×3×384)×384,步长是1, Padding是1。采用卷积公式,最终的结果高、宽分别为13,最终的特征图尺寸为13×13×384。
(10)Conv5层: AlexNet的第五个卷积层,它采用了(3×3×384)×256的卷积核,步长是1, Padding是1。采用一般的卷积公式,最终的结果高、宽分别为13,最终的特征曲线尺寸为13×13×256。
(11)MaxPool3层:是 AlexNet中的第三个最大的池化层,池化核大小为为3×3,步长为2。采用池化公式,最终的结果高、宽都是6,最后得到输出的特征图的维度为6×6×256。
(12)FC6层: AlexNet的第一个全连接层,输入的特征图的尺寸为6×6×256,首先要将输入的特征图进行平面化,将其变为1×9216的输入特征图,由于此层次的输出数据尺寸为1×4096,因此必须用9216×4096的矩阵来实现输入和输出的全连接,最终获得的输出结果尺寸为1×4096。
(13)Dropout6层:在训练的时候以1/2概率使得隐藏层的某些神经元的输出为0,这样就丢掉了一半节点的输出,反向传播的时候也不更新这些节点,它的输出结果尺寸是1×4096。
(14)FC7层: AlexNet的第二个全连接层,输入的数据尺寸为1×4096,输出数据的尺寸依然是1×4096,因此需要一个4096×4096的矩阵来实现输入和输出之间的全连接,最终的输出尺寸还是1×4096。
(15)Dropout7层:在训练的时候以1/2概率使得隐藏层的某些神经元的输出为0,这样就丢掉了一半节点的输出,反向传播的时候也不更新这些节点,输出的数据是1×4096 (神经元仍然存在,但被设为0,所以输出维度不会改变)。
(16)FC8层: AlexNet的第三个全连接层,输入的数据尺寸为1×4096,输出数据尺寸为1×1000,因此需要一个尺寸为4096×1000的矩阵来实现输入和输出之间的全连接,最后得到输出数据的维度为1×1000。
3.2.2 总结
(1)该网络的深度要超过 LeNet,包含5个卷积层,3个全连接层。
(2)利用RELU激活函数,快速地收敛,有效地克服了在深度网络中 Sigmoid的梯度消失(或梯度弥散)现象。
(3)添加 Dropout层,以避免过度拟合。
(4)采用 LRN归一化层,通过在相邻卷积核生成的feature map之间引入竞争,从而有些本来在feature map中显著的特征在A中更显著,而在相邻的其他feature map中被抑制,这样让不同卷积核产生的feature map之间的相关性变小,从而增强了模型的泛化能力。
图3.3 GoogleNet网络结构
GoogleNet的深度达22层(包含 pool层,共27层),在分类器之前,使用 Network in Network中的 Averagepool (平均池化)取代了全连接层,然后在 avg pool后面加入了一个全连接层。不管是 VGG、 LeNet、 AlexNet,均是在输出层方面采用连续三个全连接层,通过前一个卷积层的输出,经过 reshape来实现。结果显示, GoogleNet在使用 avg pooling layer替换fully-connected layer之后,top-1 accuracy增加了0.6%;但是,即便是在删除了Fully-connected layer之后,仍然需要 dropout。
由于全连接网络中的参数较多,运算量较大,且易于发生过拟合,因此 GoogleNet并未采用 VGG、 LeNet、 AlexNet三层全连接的架构,在 Inception模块后面直接使用 Average Pool和 Dropout算法,既能降低维度,又能在某种程度上避免过拟合。
在 Dropout层前面增加了7×7的 Average Pool,一方面降低了维度,另一方面结合了底层特征。要想在更高的层上把图片的整体特征提取出来,那就应该在上层增加卷积核的大小,或者增大池化区域的大小, GoogleNet把这个动作放在了最后的池化阶段,在之前的 Inception模块中,卷积核的尺寸是固定的,并且很小,这是因为卷积时便于计算。
输入层
原始的输入图像是224×224×3,对其进行了零均值化预处理(每个像素减去均值)。
采用7×7的卷积核(2个滑动步长,padding为3),64个信道,112×112×64的输出,然后进行 ReLU运算。
经过3×3的max pooling(步长为2)后,输出为56,也就是56×56×64,然后进行 ReLU运算
采用3×3的卷积核(1个滑动步长, padding为1),192个信道,56×56×192的输出,然后进行 ReLU运算。
在3×3的max pooling(步长为2)后,输出是28,也就是28×28×192,然后进行 ReLU运算
3a,第三层(Inception 3a层)
将其分成四个部分,采用的卷积核规模大小不相同。
(1)64个1×1的卷积核,再用 ReLU,输出28×28×64,
(2)96个1×1的卷积核,在3×3的卷积核前的降维,将其降到28×28×96,然后进行 ReLU运算,再进行128个3×3的卷积(padding为1)
(3)16个1×1的卷积核,作为5×5卷积核之前的降维,将其降到28×28×16,然后进行 ReLU运算,然后是进行32个5×5的卷积(padding为2),输出28×28×32 。
(4) pool层,用3×3的卷积核(padding 1),输出28×28×192,再进行32个1×1的卷积,输出28×28×32。
将输出的四个结果相互整合,得到的最后输出为28×28×256。
3b,第三层(Inception 3b层)
(1)128个1×1的卷积核,再用 ReLU,输出28×28×128,
(2)128个1×1的卷积核,在3×3的卷积核前的降维,将其降到28×28×128,进行 ReLU运算,再进行192个3×3的卷积(padding为1),输出28×28×192。
(3)32个1×1的卷积核,作为5×5卷积核之前的降维,将其降到28×28×32,进行 ReLU运算,然后是96个5×5的卷积(padding 2),输出28×28×96
(4) pool层,利用3×3的卷积核(padding为1),输出28×28×256,随后进行64个1×1的卷积,从而输出28×28×64。
将输出的四个结果相互整合,得到的最后输出为28×28×480。
之后的第四层4a、4b、4c、4d、4e,第五层5a、5b等运算操作,类似于3a和3b。
3.3.4 GoogleNet网络结构
图3.4 GoogleNet网络结构
VGG总共有16层,13个卷积层和3个全连接层,如图3.5。所有的卷积核都是3×3的尺寸,而池化核都是2×2的大小,采用步长stride=1,padding=0的Max pooling。第一次在64个卷积核中进行了两次卷积,采用一次pooling,第二次在128个卷积核中进行两次卷积卷积后,再采用pooling,再重复两次三个512个卷积核卷积后,再pooling,最后经过三次全连接。
图3.5 VGG网络结构
1)输入图像的尺寸为224×224×3,经过64个通道为3的3×3的卷积核,其步长是1, 将其进行二次卷积,然后用 ReLU激活,其输出尺寸为224×224×64。
2)经max pooling(最大化池化)、2×2滤波器、步长为2、将图像大小缩小二分之一,池化成112×112×64。
3)使用128个3×3的卷积核进行二次卷积, ReLU激活,尺寸为112×112×128。
4)max pooling池化,大小变成56×56×128。
5)通过256个3×3的卷积核,三次卷积, ReLU激活,大小变成56×56×256。
6)max pooling池化,大小变成28×28×256。
7)通过512个3×3的卷积核,三次卷积, ReLU激活,大小变成28×28×512。
8)max pooling池化,大小变成14×14×512。
9)通过512个3×3的卷积核,三次卷积, ReLU激活,大小变成14×14×512。
10)max pooling池化,大小变成7×7×512。
11) Flatten (),将该数据拉平为向量。
12)再经过两层1×1×4096,一层1×1×1000的全连接层(共三层),经ReLU激活。
13)最终通过softmax将1000个预测结果输出。
VGG优点
1)VGGNet的结构非常简洁,整个网络都使用了同样大小的卷积核尺寸(3×3)和最大池化尺寸(2×2)。
2)几个小滤波器(3×3)卷积层的组合比一个大滤波器(5×5或7×7)卷积层好。
3)证实了随着网络结构的持续深化可以提高性能。
VGG缺点
VGG需要更多的计算资源和更多的参数,从而增加了内存的消耗。其中绝大多数的参数都是来自于第一个全连接层。
表3.1 VGG各级别网络结构图
ConvNet Configuration | |||||
A | A-LRN | B | C | D | E |
11 weight layers | 11 weight layers | 13 weight layers | 16 weight layers | 16 weight layers | 19 weight layers |
Input(224×224 RGB image) | |||||
conv3-64 | conv3-64 LRN | conv3-64 conv3-64 | conv3-64 conv3-64 | conv3-64 conv3-64 | conv3-64 conv3-64 |
maxpool | |||||
conv3-128 | conv3-128 | conv3-128 conv3-128 | conv3-128 conv3-128 | conv3-128 conv3-128 | conv3-128 conv3-128 |
maxpool | |||||
conv3-256 conv3-256 | conv3-256 conv3-256 | conv3-256 conv3-256 | conv3-256 conv3-256 conv1-256 | conv3-256 conv3-256 conv3-256 | conv3-256 conv3-256 conv3-256 conv3-256 |
maxpool | |||||
conv3-512 conv3-512 | conv3-512 conv3-512 | conv3-512 conv3-512 | conv3-512 conv3-512 conv1-512 | conv3-512 conv3-512 conv3-512 | conv3-512 conv3-512 conv3-512 conv3-512 |
maxpool | |||||
FC-4096 | |||||
FC-4096 | |||||
FC-1000 | |||||
soft-max |
MobileNetV1是一种基于流水线结构的轻型网络,它采用了一个深度可分离的卷积构造,并且在此基础上引入了两个超参数,允许开发者根据自身的实际情况和资源约束来选择适合的模型。
在概念上,MobileNetV1正尝试实现两个基本目标:
- 更小的模型和更少的参数;
- 计算复杂度低,操作中的乘、加操作更少。
MobileNetV1是一款体积小、时延低、功耗低的参数化模型,能够满足不同情况下对资源的限制。这些模块可以用来完成:分类、探测、嵌入、分割。
图3.6左边表示的是传统卷积,右边表示的是深度可分离卷积。之所以采用更多的ReLU,是因为可以增加了模型的非线性变化,并且增强了模型的泛化能力。
图 3.6 传统卷积和深度可分离卷积的对比
在MobileNetV1中,单个滤波器被用于深度卷积网络的各个输入信道。在此基础上,采用1×1卷积网络逐点卷积,将深度卷积的输出进行合并。该标准卷积法具有滤波和将输入合并成一组新的输出的能力。其中,深度可分解卷积把它分成两个,一个过滤,一个合并。
MobileNet的网络架构总共有28层(不包含AvgPool和FC层,并将深度卷积与逐点卷积分离),除了第一层采用的是标准卷积核之外,其余的卷积层都是Depth Wise Separable Convolution。
表3.2 MobileNet网络架构
Type/Stride | Filter Shape | Input Size |
Conv/s2 | 3×3×3×32 | 224×224×3 |
Conv dw/s1 | 3×3×32dw | 112×112×32 |
Conv/s1 | 1×1×32×64 | 112×112×32 |
Conv dw/s2 | 3×3×64dw | 112×112×64 |
Conv/s1 | 1×1×64×128 | 56×56×64 |
Conv dw/s1 | 3×3×128dw | 56×56×128 |
Conv/s1 | 1×1×128×128 | 56×56×128 |
Conv dw/s2 | 3×3×128dw | 56×56×128 |
Conv/s1 | 1×1×128×256 | 28×28×128 |
Conv dw/s1 | 3×3×256dw | 28×28×256 |
Conv/s1 | 1×1×256×256 | 28×28×256 |
Conv dw/s2 | 3×3×256dw | 28×28×256 |
Conv/s1 | 1×1×256×512 | 14×14×256 |
5×Conv dw/s1 Conv/s1 | 3×3×512dw 1×1×512×512 | 14×14×512 14×14×512 |
Conv dw/s2 | 3×3×512dw | 14×14×512 |
Conv/s1 | 1×1×512×1024 | 7×7×512 |
Conv dw/s2 | 3×3×1024dw | 7×7×1024 |
Conv/s1 | 1×1×1024×1024 | 7×7×1024 |
Avg Pool/s1 | Pool 7X7 | 7×7×1024 |
FC/s1 | 1024×1000 | 1×1×1024 |
Softmax/s1 | Classifier | 1×1×1000 |
在架构方面, MobileNetV2增加了两个新的模块:在层间引入了一个线性的瓶颈;瓶颈之间快速连接。
MobileNetV2的中心理念是:瓶颈可以编码中间的输入和输出模式,而内层可以将诸如像素之类的低级概念转化为更高级的描述符,例如,图像分类等等。最后,与传统的剩余连接方法相比,该方法具有更快的学习速度和更高的精确度。V2 的网络比V1网络深了很多,V2有54层。表3.3中,t 为扩张稀疏,c 为输出通道数,n 为该层重复的次数,s为步长。
表3.3 MobileNetV2网络架构
Input | Operator | t | c | n | s |
2242×3 | Conv2d | - | 32 | 1 | 2 |
1122×32 | bottleneck | 1 | 16 | 1 | 1 |
1122×16 | bottleneck | 6 | 24 | 2 | 2 |
562×24 | bottleneck | 6 | 32 | 3 | 2 |
282×32 | bottleneck | 6 | 64 | 4 | 2 |
142×64 | bottleneck | 6 | 96 | 3 | 1 |
142×96 | bottleneck | 6 | 160 | 3 | 2 |
72×160 | bottleneck | 6 | 320 | 1 | 1 |
72×320 | Conv2d 1×1 | - | 1280 | 1 | 1 |
72×1280 | Avgpool 7×7 | - | - | 1 | - |
1×1×1280 | Conv2d 1×1 | - | k | - |
MobileNetV3在2019年发布,MobileNet-V3有两个版本,一个是MobileNet-V3 Large,一个是MobileNet-V3 Small,分别针对不同的资源需求。V3结合了v1的深度可分离卷积、v2的Inverted Residuals和Linear Bottleneck、SE模块,利用NAS来搜索网络的配置和参数。在MobileNetV3中,作者将1×1 的卷积层放在 avg Pooling 的后面,这样可以使avg Pooling 将特征图的大小由 7×7 降到了 1×1,然后再利用 1×1 提高维度,减少了计算量。MobileNet V3 在能够不牺牲准确率的情况下,删除了 MobilenetV2 体系结构中三个运行成本较高的层。
MobileNetV3有两个版本,分别是large版本(表3.4)和small版本(表3.5)
表3.4 MobileNetV3 large版本
Input | Operator | exp size | #out | SE | NL | s |
2242×3 | Conv2d | - | 16 | - | HS | 2 |
1122×16 | bneck,3×3 | 16 | 16 | - | RE | 1 |
1122×16 | bneck,3×3 | 64 | 24 | - | RE | 2 |
562×24 | bneck,3×3 | 72 | 24 | - | RE | 1 |
562×24 | bneck,5×5 | 72 | 40 | √ | RE | 2 |
282×40 | bneck,5×5 | 120 | 40 | √ | RE | 1 |
282×40 | bneck,5×5 | 120 | 40 | √ | RE | 1 |
282×40 | bneck,3×3 | 240 | 80 | - | HS | 2 |
142×80 | bneck,3×3 | 200 | 80 | - | HS | 1 |
142×80 | bneck,3×3 | 184 | 80 | - | HS | 1 |
142×80 | bneck,3×3 | 184 | 80 | - | HS | 1 |
142×80 | bneck,3×3 | 480 | 112 | √ | HS | 1 |
142×112 | bneck,3×3 | 672 | 112 | √ | HS | 1 |
142×112 | bneck,5×5 | 672 | 160 | √ | HS | 2 |
72×160 | bneck,5×5 | 960 | 160 | √ | HS | 1 |
72×160 | bneck,5×5 | 960 | 160 | √ | HS | 1 |
72×160 | Conv2d,1×1 | - | 960 | - | HS | 1 |
72×960 | Pool,7×7 | - | - | - | - | 1 |
12×960 | Conv2d,1×1,NBN | - | 1280 | - | HS | 1 |
12×1280 | Conv2d,1×1,NBN | - | k | - | - | 1 |
表3.5 MobileNetV3 small版本
Input | Operator | exp size | #out | SE | NL | s |
2242×3 | conv2d,3×3 | - | 16 | - | HS | 2 |
1122×16 | bneck,3×3 | 16 | 16 | √ | RE | 2 |
562×16 | bneck,3×3 | 72 | 24 | - | RE | 2 |
282×24 | bneck,3×3 | 88 | 24 | - | RE | 1 |
282×24 | bneck,5×5 | 96 | 40 | √ | HS | 2 |
142×40 | bneck,5×5 | 240 | 40 | √ | HS | 1 |
142×40 | bneck,5×5 | 240 | 40 | √ | HS | 1 |
142×40 | bneck,5×5 | 120 | 48 | √ | HS | 1 |
142×48 | bneck,5×5 | 144 | 48 | √ | HS | 1 |
142×48 | bneck,5×5 | 288 | 96 | √ | HS | 2 |
72×96 | bneck,5×5 | 576 | 96 | √ | HS | 1 |
72×96 | bneck,5×5 | 576 | 96 | √ | HS | 1 |
72×96 | conv2d,1×1 | - | 576 | √ | HS | 1 |
72×576 | pool,7×7 | - | - | - | - | 1 |
12×576 | conv2d,1×1,NBN | - | 1280 | - | HS | 1 |
12×1280 | conv2d,1×1,NBN | - | k | - | - | 1 |
3.6.1 ResNet结构简介
Resnet[14]在cnn图像上的表现十分出色,通过shortcut的短路连接,可以很好地解决深度网络模型的模型退化问题。与传统的网络相比,每两到三层,都会加入一个短路机制,利用残差学习达到更深网络层次的功能。
ResNet是参照VGG19网络而改进的,并采用短路机制增加了残差单元,其变化主要表现为: ResNet采用 stride=2的卷积进行下取样,而且全连接层被global average pool层所取代。
图3.7 ResNet网络结构
ResNet的激活函数放在跳接之后。
该图中输入的图片尺寸为(224, 224, 3)
经过第一个7×7的卷积层,输出channel为64,步长为2,padding为3,
经过一个3×3的最大池化层,步长为2,padding为1
与VGGNet不同的是,ResNet除了一个3×3的最大池化层,其他下采样全都是使用卷积层实现
如图3.8,conv2_x、conv3_x、conv4_x、conv5_x为四个卷积组,conv2_x的下采样由最大池化层实现,其他三个卷积组的下采样,都是由邻接上一个卷积组的残差块实现。
ResNet的结构可以很方便地进行修改和扩充,通过调整block内的channel数量以及堆叠的block数量,从而轻松地调整网络的宽度和深度,来得到不同表达能力的网络,而不必为网络“退化”的问题担忧,只要有充足的训练数据,逐步加深网络,就可以获得更好的性能。
图3.8 conv2_x的下采样由最大池化层实现,其他三个卷积组的下采样,都是由邻接上一个卷积组的残差块实现。
3.7.1 ConvNext网络结构简介
图3.9总结了 ConvNext的全部优点,它以ResNet-50或者ResNet-200为出发点,从宏观设计、深度可分离卷积、逆瓶颈层、大卷积核、细节设计五个方面,依次参考 Swin Transformer的思想,并在ImageNet-1K上对其进行训练和评估,最后得出 ConvNext的核心架构。
图3.9 ConvNext的优点
模型改进可分为整体结构变化,层结构变化,细节变化三个方面。整体结构变化是指包含在大型模块中的各个模块所占的数量比例的变化。层结构变化包括四个方面,即对模型 stem进行了修改,修改为不相交的卷积;将最基本的卷积改为可分离的深度卷积;将各层的卷积结构修改为为反卷积,再将7×7卷积移至1×1卷积之前,增大通道数目。细节变化包括:使用更大的卷积核、修改激活函数 GELU、减少激活函数、修改 BN为 LN、减少 LN等。
4.1 数据集采集
为确保手势数据更具针对性,并包括第三人称手势,本研究选取八名受试者,由指导老师指导完成采集,分别在不同场景下拍了食指、小拇指、摇滚等动作。在拍照的时候,环境、光线、姿势都会有很大的差别,比如手势拍摄的位置、手势的指向、手势的大小等等。每种手势有5000张图片,将采集到的手势图片裁剪成等量的大小,在采集的画面中随机抽样。将每种手势图像采用9:1的比例进行随机划分,用4500张图片作为训练集,用500张作为测试集。
采用的是微软的Kinect2.0[5][8]采集手势的,kinect采用激光测距,只采集被采集人的手部数据,摄像机距离人大概是1.5-2米之间,通过距离信息直接截取手部区域,捕获的是深度手势数据。就Kinect 的参数而言,彩色图像帧的分辨率是1920×1080,深度帧的分辨率是512×424 16bit 距离值(mm)、可侦测范围0.5 -4.5M,红外图像帧的分辨率是512×484,视场角(FOV)70°×60°。
图4.1 kinect采集图像流程
图4.2 数据集采集
手势食指伸展:当人们在日常生活中,常常会利用手势识别来方便自己的生活,该手势便可在人们平时看电视时来实现此目的,当人们比出该手势时,计算机便会自动匹配,并跳转到结果数字一频道。该手势如图4.3。
图4.3 食指伸展
手势小指伸展:当人们平时在工作或学习抽不开身时,便可通过该手势来降低播放器的音量,当人们比出该手势时,计算机便会自动匹配,并操作播放器达到缩小音量的目的。该手势如图4.4。
图4.4 小拇指伸展
手势拇指和小指同时伸展:当人们遇到喜欢的节目或者听到好听的音乐,便可在计算机面前比出该手势,计算机通过匹配,会自动收藏该节目或音乐。该手势如图4.5。
图4.5 拇指和小指同时伸展
手势拇指和食指同时伸展:该手势可在人们平时看电视比出该手势时或者选取文件夹中所需序号的文件时使用,计算机便会自动匹配,并跳转到结果数字八频道或选取文件并打开。该手势如图4.6。
图4.6 拇指和食指同时伸展
手势食指和中指同时伸展:该手势可在人们平时看电视比出该手势时或者选取文件夹中所需序号的文件时使用,计算机便会自动匹配,并跳转到结果数字二频道或选取文件并打开。该手势如图4.7。
图4.7 食指和中指同时伸展
手势食指、中指和无名指同时伸展:该手势可在人们平时看电视比出该手势时或者选取文件夹中所需序号的文件时使用,计算机便会自动匹配,并跳转到结果数字三频道或选取文件并打开。该手势如图4.8。
图4.8 食指、中指和无名指同时伸展
手势中指、无名指和小指同时伸展:当计算机需要确认时,会自动弹出消息框来提醒人们,此时人们只需比出该手势,计算机便会自动匹配,同意该操作。该手势如图4.9。
图4.9 中指、无名指和小指同时伸展
手势拇指、食指和中指同时伸展:当用户需要截取屏幕信息时,只需比出该手势,计算机便会自动匹配,执行截取屏幕的操作。该手势如图4.10。
图4.10 拇指、食指和中指同时伸展
手势食指、中指、无名指和小指分开伸展:该手势可在人们平时看电视比出该手势时或者选取文件夹中所需序号的文件时使用,计算机便会自动匹配,并跳转到结果数字四频道或选取文件并打开。该手势如图4.11。
图4.11 食指、中指、无名指和小指分开伸展
手势食指、中指、无名指和小指并拢伸展:当计算机需要用户提供拒绝命令时,会自动弹出消息框来提醒人们,此时人们只需比出该手势,计算机便会自动匹配,拒绝该操作。该手势如图4.12。
图4.12 食指、中指、无名指和小指并拢伸展
手势五指分开伸展:该手势可在人们平时看电视比出该手势时或者选取文件夹中所需序号的文件时使用,计算机便会自动匹配,并跳转到结果数字五频道或选取文件并打开。该手势如图4.13。
图4.13 五指分开伸展
4.3 数据集采集失败案例
图4.14中的采集的三个数据在二维摄像头捕捉手势图像时,识别的是被采集人的身体,而非被采集人所要比出的正确手势,所以该数据集采集失败。
图4.14 被采集人的身体被摄像头捕捉
图4.15中采集的三个数据在二维摄像头捕获手势时,将被采集人的胳膊或其他非手部部位一并捕捉,这会导致计算机将该类具有明确含义的手势误认为是具有其他含义的手势,而出现匹配失败的情况,所以该数据集采集失败。
图4.15 被采集人的非手部分也被捕捉
图4.16中采集的三个数据在二维摄像头捕获手势时,因被采集人所占位置的远近,或者手距离二维摄像头的远近的不同,而出现的捕获手势数据中关于手部的大小、完整性、清晰度不准确,进而出现匹配失败的情况,所以该数据集采集失败。
图4.16 手部的完整性不够
图5.1 AlexNet网络训练结果
如图5.1所示,当用AlexNet网络进行手势识别实验时,将采集到的共14种手势,每种手势共5000张图片,按9:1的比例进行划分,用4500张图片进行训练,用500张图片进行测试,并经过多轮划分,多轮训练,交叉验证,得到的训练结果准确率最高百分之九十,最低百分之六十二。
图5.2 VGG网络训练结果
如图5.2所示,当用VGG网络进行手势识别实验时,将采集到的共14种手势,每种手势共5000张图片,按9:1的比例进行划分,用4500张图片进行训练,用500张图片进行测试,并经过多轮划分,多轮训练,交叉验证,得到的训练结果准确率最高百分之六十八,最低百分之四十六。
5.3 GoogleNet网络训练结果
图5.3 GoogleNet网络训练结果
如图5.3所示,当用GoogleNet网络进行手势识别实验时,将采集到的共14种手势,每种手势共5000张图片,按9:1的比例进行划分,用4500张图片进行训练,用500张图片进行测试,并经过多轮划分,多轮训练,交叉验证,得到的训练结果准确率最高百分之七十二,最低百分之五十一。
图5.4 LeNet-5网络训练结果
如图5.4所示,当用LeNet-5网络进行手势识别实验时,将采集到的共14种手势,每种手势共5000张图片,按9:1的比例进行划分,用4500张图片进行训练,用500张图片进行测试,并经过多轮划分,多轮训练,交叉验证,得到的训练结果准确率最高百分之六十八,最低百分之四十三。
图5.5 MobileNetV2网络训练结果
如图5.5所示,当用MobileNetV2网络进行手势识别实验时,将采集到的共14种手势,每种手势共5000张图片,按9:1的比例进行划分,用4500张图片进行训练,用500张图片进行测试,并经过多轮划分,多轮训练,交叉验证,得到的训练结果准确率最高百分之八十七,最低百分之八十。
图5.6 MobileNetV3网络训练结果
如图5.6所示,当用MobileNetV3网络进行手势识别实验时,将采集到的共14种手势,每种手势共5000张图片,按9:1的比例进行划分,用4500张图片进行训练,用500张图片进行测试,并经过多轮划分,多轮训练,交叉验证,得到的训练结果准确率最高百分之九十三点四,最低百分之九十。
图5.7 ResNet网络训练结果
如图5.7所示,当用ResNet网络进行手势识别实验时,将采集到的共14种手势,每种手势共5000张图片,按9:1的比例进行划分,用4500张图片进行训练,用500张图片进行测试,并经过多轮划分,多轮训练,交叉验证,得到的训练结果准确率最高百分之九十一,最低百分之八十九。
图5.8 Convnext网络训练结果
如图5.8所示,当用ConvNext网络进行手势识别实验时,将采集到的共14种手势,每种手势共5000张图片,按9:1的比例进行划分,用4500张图片进行训练,用500张图片进行测试,并经过多轮划分,多轮训练,交叉验证,得到的训练结果准确率最高百分之九十七,最低百分之八十八。
根据训练结果表5.1可以看出经过训练,拥有准确率最高的网络结构是ConvNext网络结构,拥有准确率最低的网络结构是LeNet-5网络结构,准确率最稳定的是ResNet网络结构。但其中有些网络结构在训练的过程会耗费较长的时间,例如GoogleNet网络、VGG网络,如果在不追求较高准确率的前提下,可以选用LeNet-5网络等训练速度较快的网络结构。ResNet网络、ConvNext网络同时具备了训练时间短、准确率高等优点,符合了科技发展适应人们方便生活的初衷。
表5.1 各模型训练准确率
网络结构 | 训练最高准确率 |
LaNet-5网络 | 68 |
AlexNet网络 | 90 |
VGG网络 | 68 |
Google网络 | 72 |
MobileNetV2网络 | 87 |
MobileNetV3网络 | 93.4 |
ResNet网络 | 91 |
ConvNext网络 | 97 |
目前,随着电脑技术的迅速发展,对各种装置的需求不断增加,这也促使了人机互动技术的发展。同时,手势互动技术也从传统的以外部设备为基础的交互方式,逐步向以电脑为基础的方式进行交互,并与用户的日常生活方式相适应。卷积神经网络是一种以深度学习为基础的方法,能够从海量的基础特征和较高层次的抽象特征中抽取特征,因而其准确率较高。
本文通过对不同的手势分割算法的研究得出结论,传统的手势分割算法由于受到外界环境的影响,在复杂的场景中,其识别精度会大大下降,并且传统的分割方法在各种情况下的稳定性也很低,这使得传统的分割方法在实际应用中没有太大的实际意义。在全世界各个科研人员的共同努力下,网络结构正在逐步优化,效果也在逐渐上升,手势识别的准确率在慢慢提高,现在已经有了很多的网络结构证明了手势识别正在得到完善。基于计算机视觉的手势识别终于走进了大众的视野,被大家熟知并充分利用,方便社会日常生活,相信在不远的将来,手势识别的功能会更加的贴近人们的生活,准确率也会更加的稳定。
[1]石昌友,孙强,卢建平,夏榕泽,刘锦锋.多尺度卷积神经网络的图像边缘检测[J/OL].电子测量技术:1-9[2022-05-26].
[2]B.D.C.N . Prasad,Sailaja M.,Suryanarayana V. Analysis on Content Based Image Retrieval Using Image Enhancement and Deep Learning Convolutional Neural Networks[J]. Electrochemical Society Transactions,2022,107(1).
[3]Husain Arshi,Vishvakarma Virendra P.. Face Recognition Method Based on Residual Convolution Neural Network[J]. IOP Conference Series: Materials Science and Engineering,2022,1228(1).
[4]Tu Pu,Huang Chen,Zhu Jinxia. A Hand Gesture Recognition Algorithm Based on Multi-scale Hybrid Features[J]. Journal of Physics: Conference Series,2022,2218(1).
[5]马玉娟,刘晓静.基于Kinect的唐卡图像交互设计与实现[J].计算机技术与发展,2022,32(01):192-196+203.
[6]Adam Ahmed Qaid Mohammed. 基于深度学习的视觉手势识别方法[D].四川大学,2021.
[7]Bakheet Samy,Al Hamadi Ayoub. Robust hand gesture recognition using multiple shape-oriented visual cues[J]. EURASIP Journal on Image and Video Processing,2021,2021(1).
[8]田野. 基于Kinect的中国手语识别方法研究[D].沈阳工业大学,2021.
[9]辛文斌. 基于深度学习的静态手势实时识别方法研究[D].太原理工大学,2021.
[10]张璐,陶然,彭志飞,丁金洋.基于改进AlexNet的双模态握笔手势识别[J].智能计算机与应用,2021,11(06):51-55+62.
[11]张政. 基于深度学习的手势检测和识别研究[D].贵州大学,2021.
[12]Simran Arshiya,Shijin Kumar P.S,Bachu Srinivas. Content Based Image Retrieval Using Deep Learning Convolutional Neural Network[J]. IOP Conference Series: Materials Science and Engineering,2021,1084(1).
[13]王博,朱兆旻,唐天兵.一种改进的LeNet-5卷积神经网络算法[J].大众科技,2020,22(10):1-3.
[14]郝禹哲,袁天夫,田海越.关于残差网络的手势识别算法实现[J].智能计算机与应用,2020,10(07):64-66.
[15]Adithya V.,Rajesh R.. A Deep Convolutional Neural Network Approach for Static Hand Gesture Recognition[J]. Procedia Computer Science,2020,171(C).
[16]Prachi Sharma,Radhey Shyam Anand. Depth data and fusion of feature descriptors for static gesture recognition[J]. IET Image Processing,2020,14(5).
[17]王滨.手势识别技术研究[J].电子测试,2020(08):55-56.
[18]K. G. Akintola,J. A. Emmanuel. Static Hand Gesture Recognition Using Multi-Layer Neural Network Classifier on Hybrid of Features[J]. American Journal of Intelligent Systems,2020,10(1).
[19]Guan Wang,Jun Gong. Facial Expression Recognition Based on Improved LeNet-5 CNN[C]//.第31届中国控制与决策会议论文集(5).,2019:352-357.
[20]龙辉. 基于深度学习的手势识别算法设计[D].杭州电子科技大学,2019.
[21]李源. 基于深度神经网络的手势识别与手姿态估计[D].华中科技大学,2018.
[22]栾迪,周广证.基于深度学习的静态手势识别算法设计[J].信息技术与信息化,2021(05):98-99+102.