姚明海 杨 圳
(浙江工业大学信息工程学院 杭州 310023)
在制造业中,工件上的疵病主要通过人工检测进行识别。由于受个人精神状态和主观因素的影响,人工检测识别的效率和质量难以确保,传统的人工识别方法已无法满足生产需求。与传统的检测方法相比,基于卷积神经网络(convolutional neural network,CNN)的机器视觉是一种无接触、无损伤的自动检测技术,是实现设备自动化、智能化的有效手段,具有安全可靠、光谱响应范围宽、可在恶劣环境下长时间工作和生产效率高等突出优点[1]。近年来,随着深度学习的发展,基于卷积神经网络的检测与识别模型已成功应用于人脸识别[2,3]、图像检索[4]、语音识别[5,6]和自然语言处理[7]等研究领域,在工业检测识别方面[8]也得到广泛应用。
随着对网络性能的要求越来越高,使网络模型在实际中有更广泛的应用,许多学者通过对网络的结构进行改进提出了VGG[9]、GooGLeNet[10]、ResNet[11]等一系列性能优良的网络。这些网络模型通过扩展网络的深度,增加每层网络的特征面,其识别精度得到了很大的提高[12]。随着卷积神经网络的模型越来越复杂,网络中的参数大大增加,计算量也随之增加。在实际的工件疵病识别过程中,较大的网络虽然在识别精度上有了很大提升,但是降低了工件疵病实时检测的效率,同时网络的存储大小和网络参数的计算对硬件设备的要求很高,不具有普遍性。
训练卷积神经网络模型中巨大的网络参数需要大量数据集的支持。在使用传统的监督学习方法做分类时,通常是训练样本规模越大分类的效果越好。当训练样本的规模过于庞大时,训练所需的时间成本也会大幅增加。实际应用中发现,大量的数据集可以很容易地获取,但是标注样本的获取是比较困难的。而且数据标注的人工成本高,有些数据标注可能还需要领域内的专家才能完成,不可能实现快速或者低成本的数据标注。主动学习则可以通过标记大多数信息实例来以最低成本训练准确的预测模型[13]。
为了解决高精度大网络模型实时检测效率低和获取标注数据集困难的问题,本文提出了一种基于轻量级卷积神经网络与主动学习的工件疵病识别方法。该方法首先在不损失精度的前提下对较大的网络模型进行优化,使网络模型更加轻量化。然后针对实际生产中大量数据获取比较容易但是人工标注成本较高的问题,采用一种改进的主动学习方法来解决。最后将该轻量级卷积神经网络和主动学习相结合应用在金手指工件上进行疵病识别。实验结果表明,在网络模型精度不损失的情况下,该方法减少了计算量和参数量,提高了检测效率,而且通过主动学习的方法节约了大量的人力标注成本。
卷积神经网络随着深度的增加,模型中会存在大量的参数冗余,这种冗余会对计算资源和存储资源造成巨大的浪费。近年来,很多研究都集中在通过模型压缩来减少计算量和参数。目前对卷积神经网络进行压缩主要有3类:网络裁剪、核的稀疏化和轻量级的网络模型。
网络裁剪是针对具有冗余性的深度卷积神经网络模型,通过判断网络参数的重要性,更改网络的结构,将网络中的冗余部分裁剪掉,以达到压缩模型的目的。He等人[14]通过将网络模型的特征图谱裁剪前后的误差最小化,尽可能减少卷积核的通道数目,在影响指标最小的情况下,最大化地提升网络性能。核的稀疏化是在训练时对网络权重的更新加以正则项引导,使大部分不重要的权值为零。Guo等人[15]提出了一种动态的网络模型,在训练过程中通过一个可学习的掩码限制权重的更新,达到稀疏网络的目的。轻量级CNN是在模型训练之前就对网络结构进行优化,达到减少参数、降低计算量的目的。SqueezeNet[16]利用瓶颈方法设计了一种达到AlexNet[17]相同精度水平的轻量级网络结构。MobileNets[18]通过深度可分离卷积的方式来代替传统的卷积方式。这种卷积结构可以降低网络的复杂度,而不会造成明显的精度损失。ShuffleNet[19]通过对通道数的重新排列,解决了进行卷积时信息流通不畅的问题。MobileNetV2[20]通过引入残差网络中的跳跃连接达到了在更小的模型参数下得到更高的分类精度和更快的实时性效果。
网络裁剪、核的稀疏化都是通过后处理的方式减小大型CNN模型的尺寸。然而,这种后处理的方式需要对专门的超参数进行优化。此外,随着网络架构的改变,模型需要额外的微调。本文基于深度可分离卷积和反转残差卷积设计的轻量级CNN是从模型的结构方面进行改进,所设计出来的网络模块可以在不损失精度的情况下降低模型的复杂度。
在卷积神经网络模型中通常会采用标准卷积的方式来构建卷积层,如图1所示。标准的卷积方式会先在区域上提取特征,然后再考虑通道数,在减少网络参数的计算量方面有很大的局限性。假设输入特征图的大小为I×I×M,卷积核为D×D×M,输出特征图大小为O×O×N,则标准卷积所需要的计算量如式(1)所示。
C1=D×D×M×N×O×O
(1)
图1 标准卷积
本文采用深度可分离卷积来构造卷积层,深度可分离卷积会同时考虑通道和区域的改变,在通道和区域上可分解为深度卷积和逐点卷积,如图2所示。深度卷积是将输入的特征图谱逐通道进行卷积,1个卷积核负责1个通道;逐点卷积是将深度卷积输出的特征图谱进行多通道卷积。当逐点卷积中采用的卷积核为1×1×N时,深度可分离卷积所需要的计算量如式(2)所示。
C2=D×D×M×O×O+M×N×O×O
(2)
在相同的输入和输出情况下,标准卷积和深度可分离卷积的计算量比值R如式(3)所示。通过计算量比值R可以得出在深度可分离卷积实现区域和通道分离的情况下,可以减少模型的计算量。
(3)
图2 深度可分离卷积
深度可分离卷积中大于3×3的卷积核都可以分解为连续的3×3的卷积层来降低网络模型的参数数量。因此,深度可分离卷积中通常采用的是3×3的卷积核。本文通过对3×3的卷积核进一步进行优化,将其在空间上分解为2个形状为3×1和1×3的连续卷积核,与原始的3×3的卷积核相比较计算量减少了33%。然而将3×3卷积核在空间上分解为2个连续的卷积核会导致输入层向下传递的特征有所缺失,降低模型识别的精确度。同时大多数的模型在深度可分离卷积层都会采用步长为2的卷积操作取代池化操作,这会使特征的提取出现混叠现象。为了解决这些问题,通过在分解的2个非对称卷积层之间增加一种汇集策略取代采用步长为2的卷积操作,对输入信息进行提取和汇集。
当搭建层次较深的神经网络模型的时候,为了解决梯度消失和梯度爆炸的问题,通常会采用残差模块来搭建。残差模块中对信息的提取是对通道先进行压缩,然后提取特征,最后再对通道进行扩张。当采用2.1节中的深度可分离卷积进行卷积操作的时候,为了减少参数量和计算量,会在深度卷积后面加上多个逐点卷积来压缩模型大小,使计算量都集中在逐点卷积上。当深度可分离卷积中直接采用残差结构时,由于逐点卷积层已经压缩过网络了,再采用残差结构中先压缩后扩张的方式在压缩部分进一步压缩网络时,会导致最终提取到的特征信息减少。
本文提出一种反转残差结构,如图3所示。在经过逐点卷积层提取信息以后,通过增加1×1卷积核的个数与前一层进行卷积来扩张输出通道的数目,对扩张后的输出采用3×3的卷积核提取信息,最后通过减少1×1的卷积核个数将扩张后的通道数目压缩回去,同时保留残差结构中的跳跃连接,使前层的信息也能够直接向后层传递。
在残差模块中通常采用Relu函数来激活。由于Relu函数的特性,对于输入为负时,输出全为0。在经过反转残差卷积模块以后,最后输出的特征图谱经过了压缩。当对压缩后的特征图谱采用非线性的Relu函数激活时,会损失已有的特征,降低模型的精确度。因此,在反转残差中采用线性函数进行激活。
图3 反转残差卷积
本文提出的轻量级卷积神经网络主要通过优化深度可分离卷积和反转残差卷积来构建一种名为空间可分离残差(spatial separable residual,SSR)卷积模块,如图4所示。在模块的初始阶段,通过第1次深度卷积操作后,采用反转残差中的逐点卷积扩张输出通道,再在扩张后的输出通道中将深度可分离卷积在空间上分解为1个3×1和1个1×3的深度可分离卷积,在2个非对称的深度可分离卷积之间采用最大池化的汇集策略来提取更多的信息,然后再采用1×1的逐点卷积将通道压缩,在压缩后的输出特征图谱中采用线性激活尽可能地保留通道被压缩后的信息。最后保留残差网络中的跳跃连接将输入信息传到神经网络的更深层。本文首先由1个初始的卷积层开始,然后连接3个空间可分离卷积模块,接着采用全局平局池化来汇集特征,最后搭载1个softmax分类器来搭建轻量级卷积神经网络SSR-Net模型。
图4 空间可分离残差模块
在训练一个深度神经网络模型的时候,随着训练数据集的增加,网络模型的精度会不断提升。但是当训练数据集达到一个临界值时,精度基本不会产生变化,而这个临界值和数据样本本身有关。主动学习可以通过主动选择策略在未标注的样本集中挑选更具代表性的样本训练模型[21,22]。主动学习可以使临界值更早地到来,提升了模型收敛的速度,同时节省了人力标注的成本。节省的人力标注成本可以通过式(4)来衡量。
(4)
其中,N1代表随机选择所需要的样本数据集大小,N2代表主动学习所需要的样本数据集大小,S代表可节省的人力标注成本。
一个主动学习算法A=(L,U1,S,E,U2)可以通过5个部分来构建。其中L为学习模块;U1为一组已经标注好的训练数据集;S为选择策略,用于选取需要进行标注的样本;E为执行者,通过某种选择策略对未标注样本进行标注;U2为整个未标注样本数据集。主动学习算法主要包含2个阶段:第1阶段为初始化阶段,利用已经标注好的样本集U1去训练学习模块,获取网络学习模型的初代参数。第2阶段为循环更新阶段,执行者E根据选择策略S从未标注样本集U2中选择部分样本进行标注,并加入到已标注好的训练样本集U1中,重复训练网络模型,直到网络学习模型满足达到所需分类的精度为止。
主动学习中最重要的就是“学习模块”和“选择策略”2个部分。“学习模块”通过在训练集中不断增加新的标注样本,迭代训练网络模型,使网络模型达到最终的分类精度。本文中选取第2.3节中提出的SSR-Net网络来作为主动学习的学习模块。“选择策略”是通过某种选择策略选择出更具代表性的样本,重新标注样本后,不断扩充标注样本集,加快学习模型的收敛速度。在常用的选择策略中,会选择“信息熵”这种单一的选择策略。信息熵是图像所包含信息量的一种度量,其值越大,则说明该图像包含的信息越多,不确定性越强,越难反映出图像的主要特征;反之则表明包含信息量越少,更容易反映出图像的主要特征。信息熵值的大小可以根据式(5)来计算。
(5)
其中,y代表分类的类别,P(y|xi,ω)表示在网络参数为ω时样本xi属于y的概率,N为所有可能分类类别的集合。
本文中采用“信息熵”和“多样性”2种选择策略相结合来选取样本,使加入到标注样本集中的样本更加均匀。多样性策略就是通过比较未标注样本和已标注样本之间的相似度,将与已标注数据相似的样本作为简单样本,而那些不相似样本需要人工重新进行标注,提高整个数据集的多样性和准确性[23]。
基于轻量级CNN和主动学习的算法流程图如图5所示,具体流程如下。
(1)在所有样本中随机选择m个训练样本U1=(x1,x2, …,xm)进行人工标注来作为训练集。
(2)通过U1=(x1,x2, …,xm)来训练第2.3节提出的SSR-Net网络模型,得到网络参数ω。
(3)在所有未标注的n个样本U2=(x1,x2, …,xn)中用式(5)计算出每个样本的信息熵H(y|xi,ω)。
(6)
(5)结合信息熵和相似度2种选择策略,用式(7)计算2种策略的比值D(i,j),对D(i,j)进行降序排列,根据D(i,j)的大小在未标注的样本集中选择k个样本进行人工标注。
(7)
(6) 将重新标注的k个样本加入U1=(x1,x2, …,xm)中,组成新的已标注样本集,重复执行步骤(2)、(3)、(4)、(5)、(6),直到分类精度达到临界值为止。
图5 算法流程图
本文采用深度可分离卷积和反转残差卷积搭建轻量级卷积神经网络,并在训练网络的过程中结合主动学习来标注样本。为了验证模型的性能和通用性,在Cifar-10数据库中将该网络与轻量级网络SqueezeNet、MobileNet、ShuffleNet以及经典网络AlextNet进行比较。然后在结合主动学习标注的情况下,将该轻量级卷积神经网络模型应用在金手指工件上,对其进行疵病识别。
本文的网络模型对比实验是在Cifar-10数据库中进行的。Cifar-10数据库是由5万张彩色训练数据集和1万张彩色测试集组成的图像分类数据集。该数据集中图片的尺寸是32×32,总共分为10个物体类别。实验中,使用TensorFlow框架搭建网络模型,采用Adam优化算法,并以Xavier来初始化网络模型的参数。同时在每层后面使用批量标准化(batch normalization),批处理大小(batch size)为96,权重衰减(weiGht decay)为0.00004。初始学习率(learninG rate)设置为0.005,学习率的衰减率(decay rate)为每代的0.98。训练时的损失曲线如图6所示,实验结果如表1所示。由表1可见,本文提出的SSR-Net网络结构相对于其他几种网络模型不会出现精度高低与模型大小之间相互约束的情况。在精确度上,该网络有更高的性能,同时在网络的模型规模上,该网络更加轻量化,更容易嵌入到移动平台上。
图6 损失曲线
表1 各种网络模型的识别精度和模型大小
本文的实验对象为工业生产中采集到的金手指工件图像。在金手指的制造过程中,由于外部的一些因素会出现各种类型的疵病。所有的金手指数据集被分成了“正品”、“变色”、“刮痕”、“掉漆”4类,如图7所示。本文通过提出的SSR-Net轻量级卷积神经网络结合主动学习对金手指的疵病进行识别。首先选取6 000个已标注好的样本作为初始训练集放入SSR-Net网络中训练。当网络训练完以后,在没有标注的数据集中根据信息熵和多样性选择策略再次选择2 000个样本加入初始训练集中。重新对SSR-Net网络模型进行训练。针对再次训练好的网络,重复加入5次样本,训练出最终的网络模型参数。主动学习和随机挑选样本的对比如图8所示。采用本文的主动学习方法选择大约13 000个样本进行人工标定就能达到随机选择16 000个样本的准确率,可以使模型更快地收敛。同时,根据式(4)可以计算出节约了18.8%的人工标注成本。因此,该方法具有一定的工程应用意义。
图7 4种类型的金手指图像
对训练好的网络模型,分别选取3 000个样本作为验证集和测试集。各种金手指类型的识别结果如表2所示,疵病识别的准确率达到了98.3%。将SSR-Net网络模型嵌入到金手指工件生产流水线上的检测系统后,通过取多次在单位时间内检测到的金手指数目,然后计算平均值,得出金手指在流水线上的检测速度大约为35 ms/个。
图8 随机挑选和主动学习的对比曲线
表2 各种金手指类型的识别结果
本文提出了一种基于轻量级卷积神经网络和主动学习的工件疵病识别方法。通过深度可分离卷积和反转残差构建成SSR-Net网络模型,并将SSR-Net与多种经典网络在Cifar-10数据库上进行对比验证。把金手指工件作为实验对象训练该网络模型,同时结合主动学习来标注样本。实验结果表明,本文提出的方法具有很好的泛化能力,网络模型更加轻量化,在标注样本上节约了大量的人力成本,使模型能够更早地达到最优。但是目前该方法针对不同的对象需要重新训练网络模型,下一步可以研究具有自我发育机制的轻量级疵病识别网络。