数据建模算法在显示屏瑕疵检测中的应用

2022-07-06 06:57李永红张瑞云
科技创新与生产力 2022年4期
关键词:瑕疵准确率神经网络

李永红,张瑞云

(中北大学信息与通信工程学院,山西 太原 030051)

手机屏幕作为人机交互的第一环,不管是对于企业还是对于用户都具有极为重要的作用。企业通过手机屏幕的设计来获得用户的好奇和好感,手机屏幕的质量直接影响着用户的使用体验。

显示屏的缺陷检测本质上属于物体表面缺陷检测的算法问题,因此以往研究者在物体表面缺陷检测方面积累的经验具有参考价值,例如瓷砖、玻璃、纺织品的表面缺陷检测方法等[1]。本文收集的手机屏幕图像具有均匀的纹理,因为当高分辨率相机捕获纹理图像时,来自不同RGB 成像单元的光会导致灰度值的规则变化。纹理图像缺陷检测大致分为4 类:基于统计的方法,如协方差矩阵和直方图特征;基于结构的方法,如边缘检测和骨架表示;基于过滤的方法,如时域过滤、频域过滤[2-3];基于模型的方法,如纹理模型。

深度学习的本质是构建一个机器学习的模型框架,该模型有许多隐层,它通过大量的数据输入进行训练,经过大量的训练可以得到许多具有代表性的信息,从而更加准确地提取出训练样本的特征,最终提高分类和识别样本的精确度。假设一个系统具有n 层网络结构,通过调整网络的参数,使得输出和输入尽可能地相似,这样将数据输入后就可以得到一系列数据的特征值。将前一层的输出作为后一层的输入来实现对数据的分级表达,深度学习的思想就在于此。

神经网络采用和深度学习模型一样的结构,即分层结构,二者都包含输入层、隐含层和输出层。神经网络采用误差反向传播算法来不断调整网络的权重,即通过逐层迭代训练整个网络,这是它同深度学习模型的区别。但这种算法对于多层网络的模型来说不是很理想,如果将其应用在深度学习的模型训练中会出现梯度弥散的现象,使得模型训练成果很不理想。因此,深度学习并不采用误差反向传播算法来进行训练,而是采用逐层训练的方法。

1 基于深度学习的瑕疵分类算法简介

深度学习的分类算法离不开卷积、池化、激活函数以及全连接层、预测层(常用softmax函数)。本文以VGG-16 网络结构为例,介绍深度学习的分类算法是怎样实现的。第105页图1为VGG-16 网络结构图。

图1 VGG-16 网络结构

当输入一张图片后,通过卷积层来提取图片的特征,可以对图片进行多次卷积,也就是说可以对卷积后的图片再次卷积依次提取出图片的低层次、中层次和高层次特征,对原始特征进行一步又一步的浓缩最后得到的特征才可靠。激活函数是对卷积层得到的输入进行非线性的操作,主要作用是提高神经网络的非线性建模能力和非线性学习能力。如果网络结构没有激活函数,那么这样的多层(多个隐藏层) 网络其实是和单层网络等价的。池化层也叫下采样或欠采样,主要用于对得到的特征图进行降维操作。全连接层跟传统的神经网络连接方式一样,两层之间的每个神经元都有权重连接,它将上一层得到的特征进行了综合,所以该层的参数也是最多的。预测层(softmax函数,也称归一化函数)的作用是将全连接层输出的信息转化为相应的类别概率或者说是得分,得分最高的值一般都远大于其他分值,从而起到分类的作用。可以看出,VGG-16是由13 个卷积层和3 个全连接层叠加而成的。

上述就是对基于深度学习的分类算法的一个简单介绍,本文提出的瑕疵分类算法主要是基于预训练模型中的特征提取而实现分类以及后续对图片进行切割从而达到优化这两者并将其结合的目的。

2 瑕疵分类算法的实现

选用VGG-16 网络结构作为预训练模型。数据集用工业相机拍到的手机屏幕,这些图片中包括无瑕疵的良品,称之为正样本,以及存在各种大小瑕疵的次品,称之为负样本;数据集不大,数据相似度高,与预训练模型所训练的数据集ImageNet(超过1 400 万个数据) 相比,这里选用的数据集少之又少,但与此同时,ImageNet 中的1 000 个分类又保证了数据集的相似性。所以研究的核心问题在于改变输出层的个数,训练出自己的分类器,从而实现瑕疵分类。

实现瑕疵分类算法的具体步骤主要包括:加载预训练模型;设置网络参数,重组最后一层;定义自己的优化器和损失函数;加载图片;训练阶段;测试阶段。

1) 加载预训练模型。在加载预训练模型之前,先添加两个程序参数resume 和lr,resume 用于在命令执行中控制加载模型的操作,lr 则用于之后的训练过程中改变学习率以便能训练出更高的准确率。之后,加载VGG-16 模型的网络,包括网络的整个结构和参数,可以直接使用加载之后的结构和参数来进行训练。

2) 设置网络参数,重组最后一层。在预训练模型的基础上训练出自己的分类器,从而针对手机屏幕上是否有瑕疵进行分类,这里的类别数设置为2 个:0 和1 分别表示良品和瑕疵品。基于此,需要修改最后一层全连接层的数量,VGG-16 最后一层的输出为1 000 个,这里将其改为2 即可。

3) 定义优化器和损失函数。本算法中采用交叉熵损失函数与mini-batch 来进行优化。因为交叉熵损失函数对于最后一层权重的梯度不再跟激活函数的导数相关,只与输出值和真实值之间的差值成正比,这样的话最后一层的收敛会加快,而反向传播又是一个连乘的过程,所以整个权重的更新都会加快。而采用mini-batch 这种对数据集中的小批量样本进行迭代计算的方式会让计算量大大减少,减少了计算资源的消耗,计算速度也得到了提高。

4) 加载图片。获取数据集之后,需要对图片进行预处理,即常见的图像变换操作,改变给定图片的尺寸大小。将图片中的像素值归一化到均值为0,方差为1,归一化可以提高模型的收敛速度(梯度下降时保证方向的正确性),提高模型的精度(涉及距离算法,如欧氏距离),让各个特征对结果做出相同的贡献。对数据按通道进行标准化,此处选取的是PyTorch 中的通用值。

5) 训练阶段。在训练阶段,从数据加载器中加载一个batch 的数据,喂入数据并前向传播获取模型输出,也就是手机屏幕在0 和1 类别上的得分,将最高得分所对应的索引值进行输出;计算loss 函数,反向传播计算梯度,更新参数;统计loss 值;统计准确率(acc),acc 就等于预测与标签吻合的次数/样本数。

6) 测试阶段。测试阶段同训练阶段步骤一样,只需要将输入数据(训练阶段是训练集,测试阶段是测试集) 以及之后保存的数据路径做相应的更改即可。当完成训练之后,需要用测试集检验模型训练成果。

3 分类算法的优化

上述算法对良品和瑕疵品进行了分类,但是存在一个问题:工业相机拍摄出来的手机屏幕图片是比较大的,但是屏幕中的瑕疵位置相对于图片来说一般是很小的,这会影响神经网络的学习,导致影响最后的准确率。因此可以先对图片进行切割,再将切割之后的图片进行分类,这样做的好处包括:一是切割图片其实是变相地增加了神经网络的输入量,如果将图片切割为5 张,数据集的大小就会变为原来的5 倍,神经网络的投喂量增大对神经网络的学习有好处,可以提高神经网络的训练效率;二是切割之后瑕疵的大小相对于图片来说变大,瑕疵的特征相对于它所在的屏幕区域变得明显,神经网络提取到的特征也变得更加精准,准确率也会相应地得到提高。

4 实验结果分析

在实验过程中,设置世代数为100(经验值),该值表示算法在训练过程中逐步提高了100 次,逐个世代的训练会逐渐逼近最高的准确率。选取学习率的原则是:首先选取较大的学习率1,然后根据得到的训练过程按指数次幂下降为0.3,0.1,0.01,0.003,0.001 依次进行训练,最后对训练较好的两个学习率区间进行学习率选择,分析实验结果。

设置不同的学习率对3 个模型进行训练,训练结果见图2。图中的横轴表示世代数(0~100),纵轴表示准确率(acc);A表示预训练模型且对数据进行切割优化之后的训练过程曲线,B表示加载预训练模型的参数和结构,也就是迁移学习之后的训练过程曲线,C表示迁移学习的优化训练过程曲线。

图2 不同学习率的训练过程图(序)

图2 不同学习率的训练过程图

当学习率不同时,A 算法、B 算法、C 算法在100 世代的准确率见第107页表1。

表1 不同学习率所对应的100 世代准确率 (%)

根据表1 可以得到如下结果。

1) 学习率为0.001 时,三者整体表现最优;学习率为1 时,三者整体表现最差,训练失败。

2) A 算法的最高准确率为76.050 8%,B 算法的最高准确率为89.303 4%,C 算法的最高准确率为94.589 5%。

3) C 算法相较于A 算法而言,准确率最大提高了18.538 7%,从这一点可以看出预训练模型相较于非迁移学习的好处还是十分大的。

结果表明,在学习率合适的情况下,迁移学习相较于非迁移学习准确率提高了近20%,优化后的迁移学习准确率相较于迁移学习又提高了近5%。

5 结束语

本研究仅对瑕疵品和良品进行了分类,之后应该对瑕疵中的点瑕疵、线瑕疵和团瑕疵进行更详细的研究,例如如何对它们进行更详细的分类,如何对它们进行定位等,这些都是今后的研究方向。

猜你喜欢
瑕疵准确率神经网络
乳腺超声检查诊断乳腺肿瘤的特异度及准确率分析
不同序列磁共振成像诊断脊柱损伤的临床准确率比较探讨
2015—2017 年宁夏各天气预报参考产品质量检验分析
登记行为瑕疵与善意取得排除的解释论
神经网络抑制无线通信干扰探究
哦,瑕疵
哦,瑕疵
基于神经网络的中小学生情感分析
高速公路车牌识别标识站准确率验证法
基于神经网络的拉矫机控制模型建立