谭暑秋 石 林 张建勋
(重庆理工大学计算机科学与工程学院 重庆 400054)
对于电力公司来说,配电箱的使用必不可少。常用的配电箱大多由金属制造而成,不可避免地存在金属腐蚀问题。且在金属箱体腐蚀过程中会发生多种化学反应,进而使箱体处于氧化状态,降低金属箱体结构的稳固性、耐久性,甚至可能会造成配电箱疲劳断裂。目前存在多种预防金属腐蚀的方法,但这些方法并没有将防腐材料完全浸入箱体,同时并没有很好地解决箱体受蚀问题。所以有必要对配电箱箱体进行定期的防腐处理,从而防止箱体的受蚀。而对于配电箱维护人员来说,检测出箱体金属表面准确的腐蚀程度信息显得尤为重要。可以协助维护人员做出及时判断和进行相关的防腐处理。因此能够快速、精确地检测到金属表面腐蚀的相关信息是本文研究的重点。
目前传统的金属腐蚀检测方法可分为两类:一类是利用物理、化学的方法对存在金属腐蚀现象的金属制品进行检测;另一类是基于计算机视觉的检测方法对类似存在金属腐蚀现象的金属制品进行检测。在基于物理、化学方法的金属腐蚀检测中,最早的研究是利用粗糙度测量仪检测。即通过对比、分析测量试件除锈前后的数据,获得金属腐蚀相关信息的检测方法[1]。但这种方法费力、耗时且易受工作人员主观经验判断的影响。为了解决该问题,有人将电化学噪声技术[2]应用到金属腐蚀检测中。该方法通过对接收到的数据、信号进行分析,从而获取金属腐蚀的信息。但该技术在数据的提取及分析、模型的建立和干扰的消除上还没有形成统一的理论和方法,一些关键技术还没有得到较好的解决。基于此,北京航天发射技术研究所提出了微波检测法[3]和基于多功能涂层的腐蚀显示法[3],该方法能较好地实现金属腐蚀的无损检测。但这两种检测方法需要准备较多的材料和设备,操作起来较为烦琐,且花费时间较长。
上述方法对于金属表面腐蚀的自动化检测效果并不理想,而基于计算机视觉的金属腐蚀检测却能较好地解决自动化检测的问题。如Pakrashi等[4]提出了一种基于区域光学对比度的腐蚀检测方法,该方法能检测和量化铝表面点蚀的周边区域,并能较好地利用边缘检测信息对腐蚀区域进行识别。然而并不是所有的腐蚀形式都具有与点蚀相同的主要特征,因此该方法并不适用于其他形式的表面腐蚀。Ghanta等[5]将单尺度Haar小波变换应用于RGB子图像,并将小波域内的能量和熵作为分类特征,能较好地检测出钢涂层桥梁表面图像上的缺陷,但该检测方法对图像像素有一定的要求。Jahanshahi等[6]提出了基于颜色小波的纹理分析方法,该方法需要完备的纹理和颜色特征信息。即如果没有提取到最佳腐蚀特征,将会影响腐蚀检测的准确性。在民用基础设施系统中,有许多基于视觉的自主腐蚀检测方法。如Idris等[7]提出的基于视觉的管道腐蚀检测和Ortiz等[8]提出的基于视觉的船舶腐蚀检测,这些方法需要了解金属腐蚀形式、特征,并进行识别和特征实验。由于金属腐蚀具有纹理多样性、噪声种类繁多、分布无规律等特点,传统的金属腐蚀检测算法较难准确检测出金属腐蚀的等级。
卷积神经网络(Convolutional Neural Network,CNN)[9]是一种包含卷积计算,各个神经元分层排列的深度学习模型。近年来,CNN在图像识别[10-11]、视频处理[12-13]、语音识别[14-15]中取得了较大的成功。目前CNN已被证明可以在ImageNet挑战中实现人类级别的分类能力[16]。相对于传统的计算机视觉检测算法,CNN能够从大量的输入图像中得到图像的全部表征信息,避免了复杂的特征提取过程。而且CNN具有局部感知和参数共享等优点,能够在学习大量特征的同时,缩短处理时间。基于此,本文将采用CNN对多维的金属腐蚀图像进行处理,同时提取图像中较丰富的金属表面腐蚀特征。通过CNN建立模式分类器,结合腐蚀图像标签信息能够对金属表面腐蚀等级进行较好的区分。另外,为了较好地对复杂图像进行特征提取,本文在创建的CNN模型中加入了SENet[17]模块。故改进的基于CNN模型的检测方法能够较准确地实现金属表面腐蚀等级的检测。
CNN网络模型在结构上主要分为卷积层、池化层和全连接层。每层的作用各不相同,其中卷积层通过卷积对输入图像进行特征上的提取;池化层则是对输入的特征图进行降维,降低特征图的尺寸,提升网络的计算速度并降低网络的过拟合概率;而全连接层则是将所有学习到的特征连接起来并将其映射到样本标记空间。基于此,本文提出MS1Net(Multilayer Small One Networks)卷积神经网络结构模型。为了有效地减少网络的参数,避免网络的过拟合,同时减少网络的计算量,MS1Net网络模型采用了小型卷积滤波器。同时为了获取更加重要的金属腐蚀特征信息,该模型加入了SENet特征提取模块。而且为了在一定程度上降低数据的过拟合,使用Dropout算法[18]。最后使用交叉熵损失函数,较好地保持模型的收敛性。
由于原始图片的分辨率为2 144像素×1 608像素,考虑到计算机内存的消耗,将原始图片的宽高按比率整体缩小为原始图片的0.2倍,最终获得的金属表面腐蚀图片形状参数为428×321×3。且该网络模型使用卷积层、池化层、全连接层的数量分别为10层、5层、2层。同时在卷积层和池化层之间添加SENet模块;在第2、4、6、8、10层卷积层、第一层全连接层后面各加一个激活函数;同时在第一层全连接层后面添加dropout。最后通过Softmax输出金属腐蚀图片属于六个类的概率,每个值的大小范围为0到1,相加为1。整体模型网络结构MS1Net如图1所示。
图1 整体网络结构MS1Net
在本文提出的检测模型中,使用了多个小型卷积滤波器(卷积层)来代替大型卷积滤波器,即采用了3像素×3像素分辨率的卷积核。尽管较大的卷积核可以带来较大的感受野,有利于提取金属腐蚀图片中的结构信息,但多个连续的3像素×3像素的叠加卷积层就能近似拥有5像素×5像素的卷积层的感受野,而且减少了网络参数。例如假设2个3像素×3像素的叠加卷积层的输入输出都为C个单位通道,而2个3像素×3像素的叠加卷积层需要的参数则为18C2。在同样的情况下单个5像素×5像素的卷积层则需要25C2位参数,增加了大概1.4倍的参数量。故采用多个小型卷积滤波器在保证网络检测性能的同时可减少网络的计算量,进而提升系统的检测效率。
针对金属腐蚀图片表面腐蚀特征的复杂性,本文添加了SENet特征提取模块对各个通道进行权重的分配,如图2所示。即对于每个通道,用一个权重来表示该通道在下一阶段的重要性,进而帮助网络获取较重要的特征信息。该特征提取模块需将特征图空间和深度上的信息进行融合,通过一系列的卷积层来学习层级的样式和全局的感受野。本文将SENet特征提取模块设置在每个卷积层和池化层之间,不仅可以激发金属表面的腐蚀信息特征,而且能将金属表面腐蚀特征之间的差异性放大,有利于更好地区分金属腐蚀的程度。另外,在该特征提取模块中输入的特征图尺寸大小W×H×C和输出特征图尺寸大小W′×H′×C′在数值上保持不变,其中:符号W代表特征图的宽度;H代表特征图的高度;C代表特征图的通道数。SENet的处理过程包括:首先通过一个全局平局池化将输入的特征图转化为1×1×C大小的特征图;再通过第一个全连接层将特征图的通道数降到原来的1/r倍,经过ReLU函数激活后通过第二个全连接层将通道数量恢复到原来的数量;然后通过sigmiod函数得到归一化的权重;最后通过Scale操作将得到的权重分配到各个通道中。
图2 SENet特征提取模块
由于Dropout能够在一定程度上减少网络的计算量,提升网络检测金属腐蚀程度的效率,故本文在基于CNN的检测结构中采用了Dropout算法。该算法的具体内容即在卷积神经网络训练过程中,让网络中的神经元以一定的概率在此次训练过程中停止工作。但在下次样本输入的时候,由于神经元是以一定的概率停止工作,上次暂时不工作的神经元在此次的训练过程中可能又开始工作。所以样本的每次输入,相当于从原始的网络中随机选取了一个不同的网络进行训练。因此Dropout可以通过取均值或多数取胜的方法,在一定程度上降低过拟合的概率。本文在每次训练时让每个神经网络单元有50%的概率暂时不工作,这样可以让一个神经元的出现不依赖于另一个神经元,提高网络的泛化能力。
本文除了按照以上几点依据逐步构建MSINet网络模型之外,模型中经过SENet处理后的特征映射图大小和经过池化层所得到的特征映射图大小还需要满足式(1)所表述的计算关系,这也是确定MS1Net模型网络深度和卷积层个数的主要依据之一。式(1)中,(Wi-1,Hi-1)表示前一卷积层输入到本层的特征映射图,P表示给当前特征映射图添加的边界宽度,K为当前卷积层卷积核的大小,S为池化层的步长,(Wi,Hi)表示当前层的特征映射图经过池化后输出的特征映射图。
(1)
该网络模型结构参数配置如表1所示。其中:I(Data)层表示网络的输入层,该层为整个网络输入428像素×321像素的三通道彩色图片;Conv1_1表示第一个卷积层,由32个特征图谱构成,卷积核大小为3像素×3像素;Conv1_2表示第二个相连的3像素×3像素的卷积层,而该层卷积核数量被设定为32。由于卷积核数量需要跟通道数保持一致,所以其输出为32个大小为428像素×321像素的特征图。对于添加的第一个SENet模块,由于通过SENet处理后的输出维度跟输入维度保持一致,所以其输出是32幅大小为428像素×321像素的特征图。Pool1表示第一个池化层,输出维度满足式(1)所述的逻辑关系。FC1、FC2均表示全连接层。该网络模型最后通过Softmax输出一维向量,如式(2)所示,其中,qi代表本文设定的金属腐蚀图片的类别。
F={q1,q2,q3,q4,q5,q6}
(2)
在理想情况下,人们希望网络模型能够快速地纠正错误,从而得到更加准确的结果,但在实践过程中往往难以达到预期结果。损失函数可以估量预测结果和正确答案之间的距离,损失函数的值越小,模型预测的效果越好。对于损失函数的选取,需要依据具体的网络模型和将要解决的问题。
均方误差损失函数(Mean Squared Error,MSE)是估量预测值和正确值之间距离平方的平均值,其表达式如式(3)所示,其中:q为网络结构模型的实际输出,概率分布p为期望输出(标签)。回归损失函数(Log-Cosh,LC)是估量预测值和正确值之间距离的双曲余弦的对数,其表达式如式(4)所示。这两种损失函数的图形和工作原理有较大的相似度。如果样本中出现偏离正确答案的预测值,这两种损失函数都会遭受梯度问题,导致学习速率下降。且MSE会让错误的分类变得平均,Log-Cosh易受到样本类别不平衡的影响,这些因素都会降低网络模型的整体性能。
(3)
(4)
交叉熵能够表示两个数据概率分布之间的差异大小,且在神经网络的反向传播过程中,交叉熵对于网络权重的更新能起到一定的作用。交叉熵损失函数的表达式如式(5)所示。在MS1Net网络模型中Softmax输出的节点个数与分类任务的目标数相等,如果原始的神经网络输出表示为y1,y2,…,yk,Softmax回归处理后,其输出表达式如式(6)所示。此时神经网络输出表现为一个概率分布,故可以通过交叉熵损失函数来计算预测结果的概率分布与正确答案的概率分布之间的距离。交叉熵损失函数的Loss对于神经网络输出(yi)的梯度满足式(7)所示关系。由式(7)可以看出交叉熵损失最后仅与预测值和正确值之间的差值有关,能够避免激活函数在梯度下降过程中出现学习速率降低的问题。综上所述,本文使用交叉熵损失函数来优化网络模型,可以使网络模型得到更高的检测准确率。
(5)
(6)
(7)
本文为了对金属腐蚀等级进行较好的检测及分析,采集了湖北区域内的配电箱金属腐蚀图片作为本文的实验数据,并对金属腐蚀的环境进行了简要分析,进而做了两组对比实验。第一组实验将本文用到的损失函数和其他损失函数做了综合性能的对比。第二组实验对多个网络模型进行检测准确率的对比,验证本文提出的网络结构在金属腐蚀图片的检测准确率上效果较好。
本文的实验数据集均来自于湖北电力公司,其中采集到的配电箱金属表面腐蚀图片的分辨率均为2 144像素×1 608像素。本文将配电箱金属表面腐蚀程度设定为3个等级,即c1、c2、c3。其存在的等级关系为c1 图3 部分金属腐蚀图片 由于本文的检测模型是基于深度学习的检测模型,为了获得较丰富的金属腐蚀特征,故对原始数据集进行了必要的数据增强,从而增加模型的泛化能力。本文采取了比较常用的数据增强方法:水平和垂直镜像翻转、锐化、添加浮雕效果、改变原始图像像素值和对比度。所有原始图像进行一次数据增强为一次循环,循环多次。本文实验样本总数为4 320幅,另本文将训练集和测试集的分配比例设定为4∶1,即训练集为3 456幅,测试集为864幅。 为了实现算法之间的公平对比并防止网络到达误差阈值内而提前结束训练的情况。MS1Net将网络损失函数的最小值设为0,每次参数上的更新即批训练(Minibatch)为32,网络迭代次数(Iterations)设为400,从而更好地观察不同损失函数在迭代次数增加时损失值的变化情况。本文将交叉熵损失函数(Cross Entropy,CE)和均方误差损失函数(Mean Squared Error,MSE)、回归损失函数(Log-Cosh,LC)分别加入MS1Net卷积神经网络结构模型中进行了对比实验,其结果如图4、图5所示。 图4 3种损失函数loss值对比 图5 3种损失函数检测准确率对比 结合图4、图5中的loss值和准确率变化情况可以看出,CE、MSE、LC这3种损失函数的loss值均随着迭代次数的增加而下降。从图4中可以看到交叉熵损失函数loss值下降迅速,且在350次迭代后loss值趋于零,网络收敛。但另外两种函数的loss值在350次迭代后还有波动。从准确率的变化情况来看,使用交叉熵的网络经过训练,预测准确率最高能达到98.44%。实验表明,基于交叉熵的梯度下降算法更适合MS1Net。 在整体网络结构这方面,本文选择了ZFNet(Zeiler and Fergus Networks)、VGG16(Visual Geometry Group Sixteen)和MS1Net进行检测准确率的对比。ZFNet[19]在网络结构上采用了大型滤波器和多层卷积层。VGG16[20]是一个相当大的网络,其网络结构很规整简洁,没有过多的超参数。专注于构建简单的网络结构,通过不断加深网络结构来提升性能,但是其训练的特征数量非常大。考虑到GPU的消耗,在使用VGG16作为对比的时候将批训练(Minibatch)降低了50%,这样得到的效果更好。在保持迭代次数一样的情况下,各个网络检测准确率对比如图6所示,不同网络经过300、350、400次迭代后的具体检测准确率及其平均值对比如表2所示。 表2 3种迭代次数下的检测准确率对比表(%) 图6 4种网络检测准确率对比 根据图6和表2可以看出,MS1Net卷积神经网络结构模型在添加SENet特征提取模块后,准确率有了较大的提升,收益比较大。ZFNet在本文中的检测准确率一般,最高准确率达到84.33%。VGG16在本文中的检测准确率在0~50次迭代之间有很大的波动,在300次迭代后相对稳定,最高准确率达到93.75%。总体来说,本文提出的网络MS1Net卷积神经网络结构模型在金属腐蚀图片的检测准确率上效果较好,最高准确率达到98.44%。 本文用深度学习的方法实现了配电箱金属表面腐蚀等级的检测。通过同一网络结构条件下不同损失函数之间的对比实验,发现交叉熵损失函数对本文所提网络结构有较好的收敛性,loss最低值达到0.077。通过多个网络结构如ZFNet、VGG16和MS1Net的对比实验,验证了MS1Net在配电箱金属表面腐蚀等级检测上的优势,达到了98.44%的检测准确率。在今后的研究中,可以在网络模型MS1Net的基础上提升网络层次,改善网络结构,提取更丰富且更具代表性的金属表面腐蚀图像特征,进一步提高检测准确率。这也意味着网络更复杂,参数更多,因此优化算法,提高处理速度,也是需要解决的难题。2.2 损失函数的对比实验及分析
2.3 网络结构的对比实验及分析
3 结 语