常见问题
9博体育机械精密零件零件分类识别
机器视觉是现代制造的一个及其重要的组成部分,涉及人工智能,神经生物学,心理物理学,计算机科学,图像处理,模式识别等多个领域的交叉学科。机器视觉实现制造过程中的运动目标检测和智能控制已成为现代制造领域的研究热点,例如,自动线生产和装配监测,机器人和机械手引导,产品检测和分类,视觉伺服系统,零件图像的自动理解和识别。因此,现代制造中运动零件图像跟踪和识别研究有着十分重要的意义。本文在分析已有的目标分类识别算法的基础上,以机械运动零件图像为对象,建立深度卷积神经网络模型,分别使用VGG16和VGG19模型展开机械零件的分类识别研究。研究发现,VGG模型能够有效的对8种主要的机械零件进行分类识别,分类识别的效果良好,准确率在80%以上。从性能上,VGG16的卷积层数更少,训练时间更短,预测时间更短,并且在对不同类别的零件进行识别时,准确率更加稳定。
神经网络技术诞生于上世纪60年代,但直到最近随着大数据的时代的到来和计算机性能的发展才变得具有一定的使用价值,特别是使用复杂神经网络架构的深度学习技术进行数据模式识别的精度达到了很高的水平。去年年初,AlphaGo战胜了李世石标志着人工智能进入了新的发展阶段。
深度学习是人工智能的一个新阶段,通过模拟人脑的神经连接方式,对数据特征进行提取,从而理解数据的内涵信息[1]。在处理图像信息,语音和文字等信息时具有很大的优势。Google、Facebook、腾讯、微软等公司也在深度学习领域展开了大量相关的研究工作。2012年6月,Google公司一项名为“GoogleBrain”的项目引起了公众的关注。该项目由斯坦福大学的AndrewNG教授领导,以及世界领先的计算机系统专家DeanJ共同领导。他训练了一个称为“深神经网络”机器学习模型,具有16000CPU核心进行并行计算。2012年11月,微软在中国天津公开演示一种全自动同声传译系统,演讲者在英语演讲的同时,电脑自动完成语音识别,英文翻译和中文语音合成,效果非常出众。
机器学习是关于计算机如何模拟或实现人类学习行为以获取新知识或技能,或重组现有知识结构以不断提高其性能的学科。数据通常通过传感器获取,如COMS。然后通过预处理、特征提取、特征选择、推理、预测或识别。最后一部分就是机器学习的一部分,而中间的三个部分,总结起来就是特征表达。合理的特征表达对最终算法的准确性起到了了非常关键的作用,系统的主要计算和测试工作很大程度上发生在这部分。这项工作通常是手工完成的,即人工特征提取。但是,人工特征提取是非常费时费力的,同时选取的成功与否也取决于经验和运气。
1958年,DavidH和TorstenW在约翰霍普金斯大学研究了大脑皮质神经元和瞳孔区域之间的关系。他们在猫的皮质中打了一个3毫米的孔,将电极伸入孔中,并测量了神经元的活动。这个测试的目的是为了证明后脑皮层的视觉神经元与瞳孔受到的刺激之间有一些对应关系。当瞳孔收到一些外界的刺激,大脑皮层中的一部分神经元就会活跃起来。这一发现激发了人们进一步研究神经系统。人类大脑皮层感知外界信息是从提取边缘信息到形成形状信息,再到形成更高级的抽象目标的过程。也就是说,通过低级特征组合的方式可以获得高级特征。从低级特征到高级的特征结构变得越来越抽象,变得能够更清晰地表达语义或意图。这种层次特征模型被广泛应用于许多领域,为机器学习奠定了基础。在2006年,Hinton[2]等人提出了无监督逐层训练模型,为机器学习的发展带来了新的研究方向。
深度学习机器学习是科学研究或工业生产中的热门研究课题,也是人工智能(Artificial Intelligence)的重要发展方向之一。各个公司、大学以及科研机构都在这方面投入巨大。该领域的最新进展具有非常可观的结果,甚至在某些领域超过人类的表现。
朱朝伟[3]等人提出了一种基于深度学习的实蝇图像识别方法,在研究中使用了百度的Paddle框架结合AMS训练模型,实现准确率超过95%的识别效果。唐闻[4]的研究中介绍了神经网络的基本理论,基于PyTorch框架实现了一种残差网络。李锐[5]等人的研究中提出了一种基于卷积神经网络的肺结节图像识别方法,在研究中,将预训练的GooLeNet Inception V3网络与设计的特征融合层结合,提高网络对特征的提取能力;为确定最佳组合方式,对各组以准确率为标准进行测试.实验在LUNA16肺结节数据集上进行.进行分组测试结果表明,改进的网络准确率达88.80%,敏感度达87.15%。陈凯和王海[6]的研究中提出一种基于深度学习的方法对目标焊缝进行识别定位的算法。
IBM的Arthur S开发了一款具有自动学习能力的跳棋程序。该程序能够通过观察学习一个隐含的模型,为之后的提供一种更好地决策。通过这个程序,研究人员发现计算机可以通过学习人类的行为来改善自身的性能,这种学习的过程被定义为机器学习。
李岩[7]等人的研究中提出了一种基于深度学习的沥青路面病害图像智能识别方法,实现了路面病害的智能检测。Quinlan[9]提出了一种被称为决策树(Decision Trees)的机器学习算法,并且被广泛的使用。此外ID3算法也以一种软件的方式发布,它通过简单的规则和引用来搜寻更多现实的案例。
Hochreiter指出了神经网络模型存在的一个问题,当样本数据发生过拟合后会出现梯度下降的问题[12]。它显示了在神经网络模型中经过一定数量的训练之后模型会出现过拟合问题,即便增加训练样本也不会产生更好的训练效果,甚至出现更差的结果。Breiman[13]提出了一种集合了多个分类决策树(Classification And Regression Tree)的模型。其中每个决策树都由一个实例的随机子集组成,每个节点都是从特征的随机子集中选出的。这种模型被称为随机森林(Random Forests)。随机森林还具有抗过度拟合和耐久性高的特点。
Hinton等人提出的深度学习(Deep Learning)模型,在他的研究中提出了解决深层学习模型训练过程中发生的梯度消失的问题:通过无监督的训练和有监督的调整的方式,即在无监督训练中对权值进行初始化,在有监督训练过程进行微调[2]。其主要思想是先通过自学习的方法提取训练数据的结构,然后在该结构上进行有监督微调。
Hinton[10]等人提出了一种深度学习的图像识别模型,获得了Image Net图像识别大赛的第一名,证明了深度学习模型的优势。Hinton,LeCun等提出了在深度模型中解决局部最优问题的方法[8]。
相对于浅层学习来说,深度学习模型具有更多的层次特征,比没有层次结构的浅层模型能够表达更丰富的内容,更有利于实现分类和特征的可视化[14]。深度学习的概念由多伦多大学的Hinton[2]等人于2006年提出,他提出了一种非监督式的多层次网络训练模型结构。深度学习模型包含了大量的神经元,各个神经元之间通过某种联系形成了特殊的结构[15]。通多非线性的叠加某些单层的网络结构可以获得具有深层次网络结构的模型[14]。编码器提供了一种自底向上的映射方式,通过判断重建数据与原始数据的相似程度的方法将隐含特征映射到输入空间[16]。
在图像识别问题中,目前主要的研究点在于图像的分类问题。对于图像的特征提取是图像分类过程的关键,通常使用手工指定局部特征,通过使用词包模型实现图片的全局描述[17]。这种方法在很大程度上依赖于手工设计的底层特征,还是属于一种浅层的结构。人工的特征提取是非常费时费力的,选取的成功与否也取决于经验和运气。余凯[18]等人,提出了从像素到特征层的稀疏编码方法,取得了很好地效果。Krizhevsky[19]等人,使用了卷积神经网络在Image Net上取得了非常显著的效果,展示了CNN网络处理大数据下图像分类问题的能力。
在机械领域, 不管是机器人零件装配工作,还是废品回收站对零件分类的工作, 都存在着机械零件种类繁多、数量庞大、传统的分类环境单一且分类精度不高的问题。零件识别是计算机视觉与模式识别在机械领域中的重要应用之一,它作为机械加工自动化的基础,将工人从繁重的劳动中解放出来,提高了工作效率,也降低了成本[20]。
司小婷[21]等人的研究中中提出了一种基于多轮廓的零件快速识别方法,从零件的轮廓数、各个轮廓的几何特征和形状特征3个方面,将待测零件图像与零件库中的模板零件图像比较和识别。仲伟峰[22]等人中通过LabVIEW 软件进行零件图像的采集和处理,提取Hu不变矩作为零件形状特征,利用MATLAB 神经网络工具箱设计神经网络程序并进行训练,通过训练好的神经网络识别零件的类别。李明富[23]等人的研究中基于结合了SVM和Hu不变矩方法的方法,实现了对机械零件的分类识别。葛森和黄大贵[24]的研究中提出了应用最大互信息方法进行零件图像识别的方法.洪源在研究中提出了一种基于BP神经网络的零件识别方法,基本实现了对零部件形状的识别功能。
本文研究的是基于深度学习的机械零件分类识别算法。本文将首先介绍深度学习理论基础,其中将介绍卷积神经网络理论、VGG16模型和VGG19模型。其次,本文将基于VGG模型,设计用于机械零件分类识别的深度卷积神经网络结构。再次,本文将实现所设计的神经网络模型,基于MATLAB平台进行仿真实验。仿真实验主要包括数据集的制作,模型的训练和模型的预测等部分。最后本文将总结全文的研究结论,分析研究的不足,对未来的研究计划进行展望。
卷积神经网络是一种在计算机图像处理领域应用十分广泛的神经网络结构。从名称来看,CNN使用了数学中的卷积运算。本文将首先给出卷积的定义。
在通常形式中,卷积是对两个实变函数的一种数学运算。为了给出卷积的定义,本文从两个可能会用到的函数的例子出发。
假设我们正在用激光传感器追踪一艘宇宙飞船的位置。我们的激光传感器给出一个单独的输出x(t),表示宇宙飞船在时刻t的位置。x和t都是实值的,这意味着我们可以在任意时刻从传感器中读出飞船的位置。
现在假设我们的传感器受到一定程度的噪声干扰。为了得到飞船位置的低噪声估计,我们对得到的测量结果进行平均。显然,时间上越近的测量结果越相关,所以我们采用一种加权平均的方法,对于最近的测量结果赋予更高的权重。我们可以采用一个加权函数w(a)来实现,其中a表示测量结果距当前时刻的时间间隔。如果我们对任意时刻都采用这种加权平均的操作,就得到了一个新的对于飞船位置的平滑估计函数s:
公式(2-1)所示的运算就称为卷积运算,其中w()是一个有效的概率密度函数。另外,在参数为负值时,w的取值必须为0,否则它会预测到未来,这不是我们能够推测得了的。但这些限制仅仅是对我们这个例子来说。通常,卷积被定义在满足上述积分式的任意函数上,并且也可能被用于加权平均以外的目的。
在卷积神经网络的术语中,卷积的第一个参数(在这个例子中,函数x)通常叫作输入(input),第二个参数(函数w)叫作核函数(kernel function)。输出有时被称作特征映射(featuremap)。
这是由于CNN的结构采用权矩阵和权连接并用的形式导致的.所谓权矩阵,是相邻层之间的连接关系上,并不是一个每个神经元有个独立的权值,而是前后两层的某两个特征面(feature map)之间用一个权矩阵连接,整个feature map上公用这个矩阵.这个矩阵又称为卷积核(convolution kernel),这就是卷积神经网络的由来,具体结构将在CNN的结构中介绍.
正如序言中所提到的,CNN一般是输入的整幅图像,当然该图像一般不大,尤其是训练集合中的图像,一般仅仅包括模式识别中要识别的模式.如人脸识别上,训练集一般是仅仅包含人脸的33x33的灰度图像.虽然在一些研究成果中提出了对输入图像的预处理操作,但是有一些论文上还是提出了直接进行输入原始图像的方法.
真正消耗CPU时间的是重复的训练操作,但是一旦训练完成,权值矩阵被保存。在实际的应用中消耗的时间就会微乎其微。这是相比于SIFT算法等算法的一大优势。
上面已经提到,卷积神经网络的输入直接就是图片,而不用显式的去对图片的特征进行人工的提取和构建,卷积神经网络自己可以通过训练学习完成这个特征提取的过程,而后在对提取出的特征进行识别分类。整体上来看卷积神经网络由两大部分组成:第一部分就是特征的自动提取过程,卷积神经网络对于输入的图片进行特征提取,提取出合适的特征组成特征图。而第二部分就是基于这些特征图,对图片进行识别的过程。具体来说,整个卷积神经网络~般由卷积层、池化层、Dropout层、全连接层等组成,如下图2.1所示。
在卷积神经网络中,最基本的一个概念就是卷积,在前文已经有了介绍,卷积操作也是很多图像处理技术的基础,被用来提取、增强图像的特征。如下图2.2所示,展示了图片和特定的卷积核进行卷积操作的具体过程和结果,输出图片的每个像素点的值是卷积核和以输入图像中对应像素点为中心邻域进行卷积操作得到。
从上面可以看出,卷积操作是图像特征提取的基础,而卷积神经网络正是利用卷积操作来提取图片中的有利于对图片进行区分的特征的。
卷积层,顾名思义,就是应用了卷积操作的一层网络结构。卷积神经网络的卷积层可能有很多个,每一层的卷积核也有多个,分别对图片和每一个卷积核进行卷积操作,进行特征提取,得到的最终结果称之为特征图。每一个卷积层有多少个卷积核就会得到多少个特征图,而这些特征图则作为下一步的输入进行进一步的特征提取或者直接被用来分类。卷积核在神经网络中就是网络需要学习的参数,通过不断的学习,不断的调整卷积核,最终达到稳定,使得通过和卷积核的卷积操作能提取出有利于分类的特征。
池化层(pooling),也叫做子采样层,是对前一步得到的特征图进行子采样,常用的采样算法有最大池化(图2.3)、最小池化和平均池化三种。在两个卷积层之间,往往会加上一层池化层,它可以明显的减少图片的分辨率,减少整个网络的可训练参数和整个网络的计算时间,从而防止过拟合。同时,池化还能减少输出对于图像扭曲和变形的敏感性,比如最大池化,只会保留窗口内的最大值,对于图像的识别这一点起到了很大的作用,使得神经网络具有了一定程度的缩放、平移和扭曲不变性。
全连接层,是最终进行分类的地方,这个从名字就可以看出,其不再采用卷积操作,而是针对前面步骤得到的特征图来对图片进行分类。全连接层就是一个传统的神经网络,利用前面的卷积层提取出的特征来对图片进行最终的分类。
ReLu层,利用ReLu(Rectified Linear Units)激活函数来对网络的输出做出修正,加入非线性因素。ReLu激活函数随着在深度学习领域取得的突出效果,有逐渐取代传统的tanh、sigmoid等激活函数的趋势,成为了目前分类算法中常见的激活函数之一。其定义非常的简单,就是对于每一个输入,如果大于等于0就保留,小于0就被置为0,如图2.4所示。其原理就是利用的神经网络的稀疏性,网络中存在大量的参数冗余,而通过ReLu之后能最大程度的保留网络的数据特征,把不相关的参数全部置为0。
损失函数,一般在卷积神经网络的末端,用来衡量预测结果和实际结果之间的匹配度。一般来说,损失函数由误差部分和正则化部分组成。目前广泛用于卷积神经网络的损失函数主要有两种:Softmax类器中的损失函数和SVM的Hinge损失函数。本文中卷积神经网络在训练时对比了这两个函数,对于本文中卷积神经网络的分类效果影响不大,Hinge损失函数表现略好。而关于正则化,其主要目的是为了防止过拟合,目前常用的有L1正则化和L2正则化,本文采用L1正则化。
关于深度卷积神经⽹络的前世今⽣,就不在此处进⾏过多的介绍。在此,主要对⽹络的各个组成部分进⾏简要介绍:
通过图2.5可知深度卷积神经⽹络主要是由输⼊层、卷积层、激活函数、池化层、全连接层和输出层组成。以下将以⼈脸识别为例对⽹络的各个组成部分进⾏简单的介绍:
输⼊层:深度卷积⽹络可直接将图⽚作为⽹络的输⼊,通过训练提取特征,但是为了获得更好的效果,通常需要将图⽚进⾏预处理,在⼈脸识别中,就需要进⾏⼈脸检测等处理(MTCNN是⼀种较好的⼈脸检测⽅法)。此外,在样本不⾜的情况下会需要进⾏样本增强处 理,包括旋转、平移,剪切、增加噪声、颜⾊变换等。
卷积层:通过卷积运算实质是对输⼊进⾏另⼀种表⽰,若将卷积层视为⿊盒⼦9博体育,那么我们可以将输出看作是输⼊的另外⼀种表⽰,⽽整个⽹络的训练也就是训练出这种表⽰所需的中间参数。图2.6为⼀般神经⽹络的示意图:
图2.6中w和b即为⽹络训练所需得到的参数,在卷积层中需要添加激活函数对运算进⾏⾮线性化。深度卷积⽹络将⼩的神经⽹络串联起来构成深度神经⽹络,主要有两种特殊的处理⽅式:
采⽤局部感受野:神经元仅与其相邻的上⼀层神经元相连接,通过对学习到的局部特征进⾏组合形成最后的全局特征。
采⽤权值共享:同⼀个卷积核在对不同的局部感受野进⾏操作时,采⽤相同的权值参数,能够减少⽹络运⾏过程中所需的参数计算量。通过每⼀层的多个卷积核获得图⽚的不同特征,不需要特意考虑特征在图⽚中的具置,该处理⽅式使得其在分析和处理图⽚任务上具有显著优势。
图2.7为某个三维图进⾏卷积处理,同⼀卷积核对不同输⼊层进⾏卷积操作,得到⼀组输出,多个卷积核得到多少个输出。不同的图层和不同的输⼊图处理⽅法相似,中间的卷积运算时⼀种对参数进⾏处理的过程,⽽最后决定分类个数的是最后⼀层全连接层的个数。如100张图⽚,⼤⼩为32*32,图⽚为3维,即输⼊为100*32*32*3,通过⼤⼩为3*3的256个卷积核进⾏边缘补充后计算,输出为 100*32*32*256,即在该层的卷积运算仅需对256个卷积核进⾏共享就可实现卷积操作,⼤⼤减少了所需参数。
vggnet通过实验证明三个3*3的卷积核效果⽐⼀个7*7的卷积核效果好,2个3*3的卷积核⽐⼀个5*5的⽹络效果好。此外,resnet提出的残差⽹络结构能有效的避免⽹络中参数泛化的问题。
池化层:是卷积神经⽹络中的⼀种对数据进⾏的特殊处理操作,通过池化处理缩⼩图⽚特征尺⼨,能有效的去除由上⼀层的结果作为 输⼊⽽带来的计算量较⼤的问题,图2.8为常使⽤的池化⽅法。
2*2的池化可以使特征图⼤⼩减半,后常采⽤⼤⼩为3*3,步长为2,pad=0的卷积核替换池化层,可实现类似的效果。
激活函数:⽹络中卷积操作和池化操作都是线性操作,⽽⽣活中的⼤量样本,在进⾏分类时并不是线性关系,因⽽需要在⽹络中引⼊⾮ 线性元素使得⽹络能解决⾮线性问题。常见的激活函数如下:
全连接层:该层是⽹络中消耗参数最多的层,若全连接层的输⼊是4*4*100,全连接层的输出是512,则该层需要4*4*100* 512个参数;⽽⼀般的卷积层,若卷积核为4*4,输出为512,则仅需4*4*512个参数。常见的⽹络会含有两个全连接层,第⼆个全连接层的输出 与分类个数的输出对应,⽽近期有⽂献表明,第⼀个卷积层是可以通过全局平均池化层等替换。
上图中,每一列对应一种结构配置。例如,图中的D即指明了VGG16所采用的结构,图中的E指明了VGG19的结构。从配置中可以看出,VGG16有13个卷积层,VGG19有16个卷积层。除了卷积层的不同之外,VGG16和VGG19有完全相同的池化层和全连接层配置。由于全连接层和卷积层有权重系数,而VGG16有13个卷积层和三个最大连接层,所以得名VGG16;VGG19则是因为有16个卷积层和3个全连接层而得名。
ResNet是深度达152层的残差网络,其深度是VGG网络8倍[23],却仍然有着相对较低的复杂度,在卷积神经网络发展史上具有里程碑式的意义。过去人们总是通过构建更深的网络来提高识别的准确率,认为越深的网络性能也就越好,然而简单的叠加网络会出现很多问题。例如,在网络越深的情况下会出现梯度爆炸或者梯度弥散现象,当网络深度足够的情况下,我们希望拟合一个恒等函数来保持性能,然而实验发现网络层无法拟合一个恒等函数,再者,深层的网络会出现退化的问题。
ResNet网络模型引入了一种旁路分支,形成残差模块,残差模块将拟合一个恒等函数的问题转化为学习他们的之间的残差,函数表现形式为是完整的输出,x是旁路连接的输出,xF是主要路径的输出。我们可以转化为学习一个残差函数xxHxF-,如果令xF=0,则xxH,即相当于是构成了一个恒等函数,拟合残差肯定是比原来更加容易。而且这种残差模块还可以在反向传播中保持梯度信息,避免了梯度爆炸或者梯度弥散的问题。
ResNet网络模型有18层网络到152层网络不等,但他们基本都是由相同的基本单元残差块(Residual-block)以不同倍数的堆叠组成4个残差块组。如ResNet-18和ResNet-34具有完全相同的残差块,ResNet-50、ResNet-101和ResNet-152具有完全相同的残差块,但他们之间的不同点就在于4个残差块组中的残差块堆叠倍数不一样。我们选择ResNet-50为例来进行设计实现,原因有两个,第一点是因为ResNet-50一般是残差网络模型的业界测试标准,第二点是因为ResNet-50的基本层只要通过重组就可以组成其他各种网络深度不同的ResNet。ResNet-50卷积网络中的基本层主要是卷积层、池化层和全连接层。
AlexNet模型深度为8层包含5层卷积层和3层全连接层,其中模型包含的参数约为60M个,模型的神经元数量为650k,模型的结果分为2类。2012年的显卡容量比较小,无法将AlexNet的60M个参数全部放在一张显卡上操作,所以采用了两张显卡分开操作的形式。模型的训练在C3,R1,R2,R3层上存在交互作用。
AlexNet中的卷积层,在AlexNet中卷积层是上图所示的C1…..C5,一共5层。每次卷积后的结果可以在图4.1中看到,经过卷积层C1后,原始的图像变成了55*55的尺寸,一共有96个通道分布在2张3G的显卡上,图4.1中一个立方体的尺寸是55*55*48,48是通道数目,在这个立方体里面还有一个5*5*48的小立方体,这个就是C2卷积层的核尺寸,48是核的厚度。通过这种方式可以看到它每一层的卷积核尺寸以及每一层卷积之后的尺寸。
C1层的输出是11*11*3的卷积核卷积后的图像,卷积后的大小是55*55*1,个数为其中48个在一张显卡上,剩余48个在另一张显卡上,最后的输出为55*55*48*2。池化层与激活层,池化层与卷积层不属于AlexNet中的单独的层,也不记入AlexNet的层数内,所以AlexNet共8层,5层卷积层与3层全连接层。
池化层,池化操作(Pooling)在卷积操作之后使用,其作用在于特征融合和降维,是一种类似卷积的操作,但池化层的所有参数都是超参数。最大池化(MaxPooling)的过程,核的尺寸为2*2,步长为2,最大池化采用2*2大小内所有像素值的最大值作为输出通道的像素值,平均池化(AveragePooling)取最大改为取平均值作为输出通道的像素值。输入为224*224*64的图像经过最大池化后的尺寸变为112*112*64,池化操作的降维改变的是图像的宽高,而不改变通道数。
激活层,激活操作应用于卷积层和全连接层。深层网络中一般使用ReLU[44]多段线性函数作为激活函数,
全连接层,CNN中的全连接层与浅层神经网络的全连接层一样,负责逻辑推理,所有的参数均需学习得到。他们的区别在于第一层的全连接层用于链接卷积层的输出,可以去除空间信息(通道数),是一种将三维矩阵变成向量的过程,如果输入图像大小是W*H*C,卷积核的大小为W*H*C,整个输入图像就变成了一个数,一共有K个数,就有K个这样的W*H*C的卷积核,所以全连接层的参数量是非常多。
开发卷积神经网络是用来处理时间序列及图像类的网格结构数据。时间序列是指采集得到的各数据点随时间变化的一维网格,例如振动信号数据,而图像则是指二维像素点网格。常用的经典CNN模型有LeNet、Alex Net以及VGG,其中VGG模型采用两个级联的1×3卷积层代替理论上计算效果等价的1×5卷积层,而相应地模型计算参数量会大大减少,因此本文设计网络时参考了VGG模型的网络结构。
在卷积神经网络的优化过程中通常在模型的某一些隐藏层中添加与损失函数一起作为模型的最后优化目标的惩罚项的方法即正则化来减小模型产生过程中的过拟合问题。本文使用的机械零件数据集是本文自行制作,包含8个类别,240张图片,数据集数据量过小,为了防止出现过拟合的问题于是考虑用一种方法防止卷积神经网络在运行中的过拟合问题的解决办法。具体的操作是在网络的某一项和某几项隐藏的神经元上各设置一个Dropout层来暂时使这一些权值从模型的训练过程中被暂停,但这些权值并不会因为这种暂停而消失仍然被保留在这个模型上,这样就可以通过精简模型的方式即调整Dropout项的位置来减少过拟合问题的影响。
由于本文实验的特点小样本数据集,所以可以增加数据集的量利用图像翻转、旋转等方法扩充数据集的量。这样产生的数据集就不容易出现由于数据集量较小导致的过拟合的问题,且在后续第4章的实验中使用的数据增强方法就是通过这种翻转和旋转拓展训练集。最后将数据集拓展为原数据集的两倍,可以有效减少过拟合的问题。
在后续第4章的实验中参数调整和选择的过程中模型的拟合的过程中作者不断通过添加Dropout层暂时暂停一部分神经元的工作,然后对比剩下部分的工作结果最后得到一个较为合适的参数的选择。
可以通过更改、变换激活函数的方法选择最为适用于本模型的激活函数。本文实验中直接将最后一层的激活函数改成随机森林中的bagging算法,并没有使用卷积神经网络自有的激活函数。而虽然从理论层面就可以得知bagging算法比boosting算法更为优越,但本文依旧会采取对比实验结果的方式选择激活函数,最后选择了实验结果更好的bagging算法。
而考虑到实验的复杂度和实验效率,除了最后一层的激活函数改为 bagging 算法,前面的激活函数并没有改变。
增加神经网络的层数可以使特征的提取更加广泛且更加精细化,从而使后续分类的过程中实验结果得到很大的提高。但是增加神经网络的层数很显然是以延长实验时间作为代价的。对比三个常用卷积神经网络模型,LeNet-5模型和AlexNet-4模型是浅层卷积神经网络而VGGNet-16模型是深层卷积神经网络,对于一般数据集 VGGNet-16 模型的实验精确度往往高于另外两个模型,但与此同时它的实验时间要长于另外两个模型,实验效率低于另外两个模型。通过理论可知 VGGNet-16 模型在其后面的几层卷积对特征的提取能力较差,但却消耗了大量的时间。
交叉熵也时常被称作多类的对数损失需要将其标签修改成为只存在两个数值的序列,本文是多分类问题,选用交叉熵。
在前文的介绍中,已经给出了卷积运算的定义。从卷积运算的定义可以看出,卷积运算的本质是一种交换。卷积层是卷积神经网络中最为重要也是最为基础的部分,它往往是将池化层包含在里面的—卷积层被用来通过滤波提取图像的特征,池化层将卷积过后的图像进行降维工作来为后续的运算提供更好的准备条件。而与传统的卷积方式不同的是深度卷积神经网络中的卷积核的大小还未被定义,须通过实验者不断的尝试并得到一个较为合适的卷积核而这恰好也是卷积神经网络训练过程中一个最为主要的部分。
传统神经网络最为明显的缺点是计算机在运算的同时也要对参数进行存储这样的大规模的双线程工作会导致计算机出现性能不够,计算损耗大机械零件,花费时间长等问题。
对于卷积神经网络中卷积层数的多少对特征的提取影响巨大,一般来说如果卷积的层数太少就会出现特征的利用不全面的问题从而使得实验的准确率较低,而如果卷积的层数太多就会导致实验效率低下---即在后面几层卷积中特征的优化率低但耗费的时间却大大提升。
池化层常常也是被归入到卷积层这一大类内的。池化工作的主要作用是降维-将特征重新提炼整合,使特征在被使用时减少过拟合现象的发生从而提高模型的泛化能力。
本文将选择使用空间金字塔池化方法,这种方法可以将任何尺寸的图像的特征都转换变成同一个维度下的特征。通过这种池化卷积神经网络就可以对任意尺寸的图像进行处理这就避免了通过人工剪裁、缩放图像大小的过程可以有效减少图像数据集信息的损失。
根据不同的样本和不同的问题池化层选用有所区别,不同的池化层得到的结果也有所不同。均值池化会对特征进行模糊,对于本文场景的类别较为接近,所以文本选用最大池化即本文中的池化的步长在应对本文提到的模型中都使用2并且在以往的实验中步长也往往使用2这个数值。
如果上一层卷积的输出大小为aa,需要得到nn大小的池化特征,那么空间金字塔池化的窗口如下所示、步长如下所示。
为了使更为复杂的映射计算的功能得到实现即为了可以拟合各种更为复杂和丰富的函数,激活函数所在的激活层可以使函数的映射成为非线性映射。另外,激活函数能够对高维神经元进行加权,使得高维神经元得到压缩,这就减少了高维数据的累加,加快计算速度。本文将选用ReLU激活函数。
这里的x是指神经元的输入。由于对比其他常用激活函数有更好的分类效果,在实践中常常被用于使用于计算机视觉领域中的图像识别方向。对于上一层神经网络的输入值x,经过线性整流函数的变换,输出的神经元会变成然后输入下一层或者输出整个网络。
ReLU函数存在特别明显的优点,与sigmod函数和tanh函数相对比—这就让它在现在机器学习领域非常流行。首先,如果初始的数为正就不会发生饱和的情况;其次, 它的传播速度无论正反都要远远高于另外两种。然而,也存在一些问题比如当输入值为负数时ReLU无法被激活,换句话说相当于失去了激活函数,不过这种问题在前向传播过程中所产生的影响不大。
全连接层的每一个神经元都与上一个神经元相连,所以它的参数个数最为数量巨大,它从整体的角度分类前面提取的特征,将特征进行整体的利用,通过概率的大小将数据进行分类这种方法可以有效地减少数据地冗余从而使数据集的分类结果变得更加准确。在本文所建立的模型中全连接层不变大大减少全连接层前面的卷积层数,但对参数的使用需全部利用到。
在本文的研究中,使用了自己自作的数据集。受疫情的影响,本文从互联网获得了图像数据,图像数据的格式是jpeg。本文将对8种常见的机械零件进行分类,分别是传动齿轮、滑轮、轴承、垫片、螺母、螺钉、弹簧和丝杠。在八个类别中,本文分别从互联网获得了30张图片,共计240张图片。将图片改为227*227大小,便于输入VGG模型当中。全部的240张图片中,168张图片作为训练集,72张图片作为验证集。
表4-1是VGG16模型和VGG19模型训练中的参数设置情况,对网络模型训练过程中的关键参数进行了定义。
图4-1是VGG16模型的分类识别准确率优化过程和损失函数优化过程。从图4-1的结果可以看出,训练过程共经历了六轮优化,每轮优化共迭代4次,共计迭代24次。整个训练过程历时5分3秒。验证集的准确率为80%。损失函数收敛迅速,算法有效。在图4-1中,浅色实线是实际训练中的准确度和损失函数优化过程,深色实线分别是平滑过的准确度优化过程和损失函数优化过程,而虚线分别是验证集的准确度变化过程和损失函数变化过程。
图4-2是VGG19模型训练过程中的准确度和损失函数变化过程。从图4-2可以看出,训练历时6分44秒,在本次训练进行6轮优化,每轮优化进行4次迭代,共计24次迭代,最终的验证集分类识别准确率达到95%。在图4-2上半部分展示的是准确度的变化过程,其中的浅色实线是实际训练的准确度变化过程,深色实线是平滑过的准确度变化过程,虚线是验证集准确度的变化过程。图4-2的下半部分是训练过程中损失函数的优化过程,其中的浅色实线是实际的损失函数优化过程,深色实线是平滑过的损失函数的优化过程,虚线是验证集的损失函数的优化过程。
图4-5展示了VGG16模型对主要类型机械零件的分类结果。对传动齿轮的分类准确度达到99.9%,对轴承的分类准确度为98.8%和99.9%。对垫片的分类准确度为99.6%。从图4-5的结果可以看出,VGG16模型对主要的机械零件的分类识别准确度很平均,基本保持在95%以上。
图4-6是VGG19模型对机械零件分类识别的结果。从图4-6的结果可以看出,VGG19模型对弹簧和轴承的分类准确度达到了100%,对垫片的分类准确度为53.8%,对滑轮的分类准确度为99.9%。VGG19模型是一种更加复杂的卷积神经网络模型,训练时间更长。然而,总体上对机械零件的分类识别结果没有明显的优势,对不同类别的零件的识别准确率波动很大。
图4-7是resnet18模型训练过程中的准确度和损失函数变化过程。从图4-7可以看出,训练历时1分57秒,在本次训练进行6轮优化,每轮优化进行4次迭代,共计24次迭代,最终的验证集分类识别准确率达到80%。在图4-7上半部分展示的是准确度的变化过程,其中的浅色实线是实际训练的准确度变化过程,深色实线是平滑过的准确度变化过程,虚线是验证集准确度的变化过程。图4-7的下半部分是训练过程中损失函数的优化过程,其中的浅色实线是实际的损失函数优化过程,深色实线是平滑过的损失函数的优化过程,虚线是验证集的损失函数的优化过程。
图4-9是resnet18模型对机械零件分类识别的结果。从图4-9的结果可以看出,resnet18模型对齿轮的分类准确率是97.5%,resnet18模型对垫片的分类准确率是98.1%,对弹簧的分类准确率是99.5%,对滑轮的分类准确率是42.4%。Resnet18模型是一种更加复杂的卷积神经网络模型,训练时间更长。然而,总体上对机械零件的分类识别结果没有明显的优势,对不同类别的零件的识别准确率波动很大。
图4-10是AlexNet模型训练过程中的准确度和损失函数变化过程。从图4-10可以看出,训练历时56秒,在本次训练进行6轮优化,每轮优化进行4次迭代精密零件,共计24次迭代,最终的验证集分类识别准确率达到80%。在图4-10上半部分展示的是准确度的变化过程,其中的浅色实线是实际训练的准确度变化过程,深色实线是平滑过的准确度变化过程,虚线是验证集准确度的变化过程。图4-10的下半部分是训练过程中损失函数的优化过程,其中的浅色实线是实际的损失函数优化过程,深色实线是平滑过的损失函数的优化过程,虚线是验证集的损失函数的优化过程。
图4-12是AlexNet模型对机械零件分类识别的结果。从图4-12的结果可以看出,AlexNet模型对轴承的分类准确率是56.3%,AlexNet模型对滑轮的分类准确率是100%,对垫片的分类准确率是100%,对弹簧的分类准确率是99.5%。AlexNet模型是一种更加复杂的卷积神经网络模型,训练时间更长。然而,总体上对机械零件的分类识别结果没有明显的优势,对不同类别的零件的识别准确率波动很大。
本文的研究中,首先介绍了深度学习的基本理论。其次介绍了基于深度学习的机械零件分类识别算法。最后,基于MATLAB平台实现了本文的算法。研究的主要结论有:
本文对深度学习理论在机械零件分类识别领域的应用进行了一些研究,然而优由于本文水平的限制和条件的限制,还存在很多不足之处。
首先,本文的研究没有进行GPU加速,而是在CPU条件下进行了实验,这可能对训练和预测的速度产生影响。
其次,本文挑选了较为简单的VGG16模型和VGG19模型,没有考虑使用其他的深度学习技术,VGG16和VGG19是有效的卷积神经网络模型,然而在效果上未必是最优的选择。
[24]葛森, 黄大贵. 基于最大互信息方法的机械零件图像识别[J]. 电子科技大学学报. 2007, 36(4): 4.