目前越来越多的中外学者致力于机器视觉的研究, 但却少有导光板检测的成熟方法以及学术论文可被参考, 通过借鉴液晶屏缺陷检测的研究方法进行研究. 在数字图像算法检测方法中, 文献[1]中将图像作为像素矩阵, 利用奇异值分解(SVD)检测缺陷, 首先去除图像背景, 然后利用剩余奇异值重建图像并显示缺陷区域. 但是这种方法中没有提供消除各种缺陷类型时必须的奇异值数, 以获得良好的实验结果. 文献[2]中, 利用奇异值对图像进行分类, 并将缺陷图片分为粗缺陷和细缺陷两类, 采用二维离散小波系数与区域增长相结合的方法提取缺陷区域, 该算法在时间复杂度上表现较为优异, 但是在应对导光板复杂特征时表现欠佳. 文献[3]中扩展了原霍夫变换的点到线的距离差, 在非平稳灰度梯度的缺陷检测中得到了有效的应用. 然而不同的距离差值与相同的控制参数组合将会导致得到不同的结果, 文中并未提到此自动检测方法是否需要人工干预来设置参数. 在神经网络的检测算法中, 文献[4]中作者为Mura缺陷的定量评估设计了一个模糊神经网络, 然而对于低对比度的Mura缺陷, 如何准确地提取到缺陷特征是一个挑战. 文献[5]中作者为预测Gap Mura缺陷使用4种神经网络, 分别是BP神经网络、径向基函数、学习向量量化1和学习向量量化2进行训练, 但是BP神经网络本身具有收敛速度慢、权值收敛局部极小化等问题, 并不能提供稳定的解决方案. 文献[6]中作者针对Mura缺陷采用监督学习网络, 将观察到的Mura缺陷标记为特征, 并被输入到一个卷积神经网络提取所选择的特征. 文中所使用的网络需要提前表及特征, 过程繁杂, 工作量大, 且文中使用网络结构简答单一, 捕获特征较少, 无法应对复杂纹理的图像分类任务. 文献[7]中作者使用神经网络光学模型和遗传算法等方法优化设计棱镜型液晶导光板, 以求在现有条件下获得优异的亮度均匀性. 但是使用的网络BP神经网络训练方面问题多多, 无法保证使用不同的数据集时的检测效果. 文献[8]中作者融合STN和DenseNet卷积神经网络组成新型网络结构ST-DenseNet用于树种叶片数据集分类. 文献[9]中作者通过改进AlexNet完成遮挡猕猴桃目标识别任务. 文献[10]中作者使用VGG16分类卷积神经网络对血液细胞进行诊断分类研究. 在理论研究方面, 人们在探索分类卷积神经网络时注意到了注意力这一概念, 例如: 文献[11]中简单的形状检测, 文献[12-15]中基于数字的任务, 文献[16]中的捉住的视觉控制游戏; 文献[17]中的正面人脸检测等, 都是面向分类卷积神经网络中注意力机制的探索和研讨.
上述分类卷积神经网络的分类效果虽然表现不错, 但是由于网络参数较多, 运行时卷积神经网络的时间复杂度较大. 因工业产品检测需要考虑时间成本和资金成本, 无法直接使用上述分类网络进行分类检测. 由于目前用于工业检测的卷积神经网络案例较少, 查阅相关文献后, 选择对现有卷积神经网络进行改进, 完成导光板分类检测算法. 针对工业检测需求, 更改DenseNet网络中的卷积结构, 结合Bilinear-CNN算法提高卷积神经网络局部特征注意力. 最终在900张的测试图片组成的测试数据集上达到了95.53%的准确率, 平均单张图像检测时间为40.1 ms.
导光板是一种亚克力材质的塑料板材, 经过花纹烫印后, 被广泛用于显示器背光模组核心组件. 对导光板标记线的检测, 则是验证当前烫印工艺是否合格的一个重要标准. 使用数字图像算法检测导光板标记线虽然可以有效地对图片进行检测, 但是面对特征更加复杂的大面积气泡、严重污染和无标记线等情况无法得到满意的结果. 使用深度学习方法进行工业检测, 是学术界和工业界共同探索的课题. 使用深度学习的方法对小数据集、低对比、高纹理、高相似的导光板标图片进行缺陷检测, 导光板缺陷板材示意图如图1所示.
1 相关理论方法
卷积神经网络(Convolutional Neural Networks, CNN)是一种特殊的人工神经网络, 其主要的特点是卷积运算操作. 卷积神经网络在进行分类或者回归的时候, 大致都分为两个部分, 他们分别是前馈运算和反馈运算. 前馈运算是产生运算数据的过程, 其主要通过卷积操作、汇合操作和非线性激活函数映射等一系列操作共同完成. 反向传播主要是计算预测值和真实值之间的误差或损失, 凭借反向传播算法将损失逐层向前反馈, 更新每一层的权重和偏置, 通过周而复始的进行前馈运算和反馈运算, 最终得到期望的模型.
2 基于双线性CNN和DenseBlock的分类检测框架
本文算法分上下两步, 第1步, 基本权重训练: 通过修改DenseNet网络, 改进DenseBlock中特征计算单元的结构, 减少卷积神经网络卷积层数量, 避免过拟合, 以及减少卷积神经网络参数数量. 第2步, 权重模型优化: 使用Bilinear-CNN分类算法组成混合深度模型进行迁移学习, 将使用第1步训练得到的权重迁移到第2步的Bilinear-CNN分类网络重新训练, 通过捕捉特征通道之间的成对相关性, 提高分类准确率, 各步网络结构如图4所示. 通过对实验的卷积神经网络算法的权重进行分析发现, 本文所设计的卷积神经网络算法仅需要极少的参数参与运算.
2.1 改进的神经网络模型介绍
与传统的为提高识别精度, 通过增加卷积层数量或使用金字塔特征融合的方法不同. 卷积神经网络在工业检测应用的场景, 主要运行在工控机或者普通PC机上. 因此设计卷积神经网络时, 首先考虑减少卷积神经网络卷积层, 然后再考虑提高卷积神经网络分类精度.
2.1.1 减少卷积神经网络参数
减少DenseBlock中的卷积层数, 通过减少卷积操作次数和卷积数量, 提高卷积神经网络运行速度. 减少卷积层数量可以在减少运行时间的同时减少网络参数数量. 但是随之而来的副作用, 则是无法获得足够的特征, 使得特征激活映射区域无法正确映射到目标物体上.
减少卷积操作中的通道数量, 随着卷积操作中通道数量的增加, 网络参数数量也随之增加, 使得网络在运行时需要申请更多的显存和内存空间. 减少卷积操作中的通道数量, 可以有效的降低卷积神经网络的空间复杂度.
在特征计算单元中加入DropOut算法, 通过设置忽略特征检测器的概率, 使某些神经元的激活值以一定的概率停止工作. DropOut的加入可以使当前模型泛化性更强, 减少对某些局部特征的依赖, 从而避免过拟合.
在每个DenseBlock后面加入多层感知器(MLP)[20], 与Caffe中MLP的实现方法不同, 实验算法中的MLP算子中没有使用3×3大小的卷积核进行卷积, 仅使用两层1×1大小的卷积核进行卷积, 这样做有助于在加深网络卷积深度与增强网络容量和复杂度的同时, 减少网络参数数量[21].
2.1.2 加速损失函数收敛
在实验中, 发现使用原DenseNet网络结构中的GAP结构, 无法有效降低损失函数的损失值. 在使用三层全连接层代替Global Average Pooling (GAP)之后, 损失函数的损失值快速下降. 对比前后结果, 三层全连接层作为一个小型网络, 相比于GAP算法其可以获取更多的特征. 使用GAP算法对高纹理、低对比的灰度图分类时, 会造成特征图上的特征丢失.
GAP对所接收到的每一个特征图都进行了极端降维, 它将尺寸为h×w×d的张量缩小为1×1×d大小的张量. GAP激活区域与分类结果之间的关系证明如下所示[22]:
使用三层全连接层可以有效地降低损失函数损失值, 加速了梯度下降, 促使网络可以更加快速的拟合权重参数, 找到当前网络的局部最优解. 但是随着三层全连接层的使用, 导致卷积神经网络的参数数量增加, 所以在下一步的迁移学习过程中通过修改全连接层结构的方法, 降低网络参数数量.
2.2 双线性CNN算法
双线性CNN(如图5)由两组CNN特征提取器组成, 它使用两个卷积神经网络的输出在图像的每个位置进行外积相乘, 并在原图各个位置进行池化以获得最终的图像特征描述符. 通过外积操作捕捉特征通道之间的成对相关性, 对局部特征之间的交互进行建模. 由于双线性CNN的两个CNN的输出是线性的, 所以被叫做双线性CNN[23]. 在双线性CNN算法中, 有并行子网络A、B, 网络A的作用是对图像中对象的特征部位进行定位, 而网络B则是用来对网络A检测到的特征区域进行特征提取, 由这两个网络共同完成了图像分类中最重要的两个任务: 区域检测和特征提取[24].
双线性CNN的全局图像描述符, 表示如下:
目前双线性CNN有两种实现方法, 第1种: 使用不同的两组卷积神经网络作为特征提取器, 第2种: 使用同一组网络获取的最终特征描述符进行运算. 通过对比研究, 因考虑到算法最终的应用环境, 最终选择第2种实现方式进行实验.
2.3 损失函数
3 实验分析
训练数据集共有4059张图片, 验证和测试数据集各有896张图片. 为应对不同工厂的不同产品, 旨在寻找简单易用的端到端的神经网络, 本文分类卷积神经网络算法在训练时并未对图片预处理.
实验电脑硬件配置如下:
(1) CPU: Intel Core(TM) i5-4590; 四核四线程; 主频: 3.3 GHz.
(2)实验训练用GPU: NVIDIA Titan V; 显存: 12 GB; 内存: 250 GB.
(3)实验测试用GPU: NVIDIA GTX 1060; 显存: 6 GB.
(4)本机内存: DDR3: 1600 MHz; 内存: 16 GB.
实验软件环境如下:
(1)操作系统: Windows 10, ubuntu 16.04.
(2)编程语言: Python.
(3)第三方库: Pillow, numpy, matplotlib, tensor-flow, keras, scikit-image.
3.1 DenseNet实验参数与结果
在第1步的训练中, 将训练集输入到网络中进行模型训练, 训练过程所涉及的参数有 batch_size" role="presentation" style="max-width: none; display: inline; line-height: normal; text-indent: 0px; word-spacing: normal; float: none; direction: ltr; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; box-sizing: border-box !important; overflow-wrap: break-word !important;">batch_size 大小、学习率、激活函数、迭代次数和优化函数(训练参数设置如表1所示).
使用实验网络模型对同一个数据集、在相同的训练参数下, 进行多次训练后发现, 每次训练后得到的准确率在92%左右震荡. 从侧面验证, 通过改进所得到的卷积神经网络具有较好的鲁棒性(loss变化图如图6所示, 本文使用留一法数据进行展示, 用以凸显卷积神经网络拟合效果).
3.2 双线性CNN实验结果与分析
使用迁移学习技术对双线性CNN" role="presentation" style="max-width: none; display: inline; line-height: normal; text-indent: 0px; word-spacing: normal; float: none; direction: ltr; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; box-sizing: border-box !important; overflow-wrap: break-word !important;">CNN 网络进行训练, 通过修改第一步中的DenseNet" role="presentation" style="max-width: none; display: inline; line-height: normal; text-indent: 0px; word-spacing: normal; float: none; direction: ltr; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; box-sizing: border-box !important; overflow-wrap: break-word !important;">DenseNet 网络结构, 使用双线性CNN算法替换三层全连接层, 在减少网络参数的同时提高了分类准确率. 在第二步训练双线性CNN时依然采用交叉熵损失函数作为图像分类训练的损失函数(如图7).
将训练集输入到网络中进行模型训练, 训练过程所涉及的参数有 batch_size" role="presentation" style="max-width: none; display: inline; line-height: normal; text-indent: 0px; word-spacing: normal; float: none; direction: ltr; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; box-sizing: border-box !important; overflow-wrap: break-word !important;">batch_size 、学习率、激活函数、迭代次数和优化函数等(如表2).
实验所用训练数据集(如图8)由3类缺陷图片组成, 分别是无线、有线和气泡, 每类有1353张图片, 共计4059张训练图片, 图片大小为 448×448×1" role="presentation" style="max-width: none; display: inline; line-height: normal; text-indent: 0px; word-spacing: normal; float: none; direction: ltr; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; box-sizing: border-box !important; overflow-wrap: break-word !important;">448×448×1 的灰度图片. 测试数据集和验证数据集各有896张图片, 在上述数据集中无线、有线和气泡的缺陷图片各有300张测试图片, 图片大小为 448×448×1" role="presentation" style="max-width: none; display: inline; line-height: normal; text-indent: 0px; word-spacing: normal; float: none; direction: ltr; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; box-sizing: border-box !important; overflow-wrap: break-word !important;">448×448×1 的灰度图片. 使用实验算法在测试数据集上测试, 最终得到分类准确率为95.53%.
经过对测试数据集图片内容逐张图片验证发现, 误判主要于有线板材被严重污染的情况下出现. 在对气泡和无线板材进行逐张图片验证时发现, 这两类图片的检测准确率为100%. 根据工厂质量品控标准, 可以将合格的检测为不合格的, 但是不能存在不合格检测为合格的情况. 所以无线板材的准确检测是保障导光板质量的最低标准, 实验算法基本实现了导光板标记线的检测要求. 实验网络分类结果如图9.
使用VGG-16、V2-ResNet-101、AlexNet与本文网络相对比, 分类结果如表3所示.
根据表3数据所示, DesneNet-BCNN 与其他主流网络对比结果如下.
在网络参数方面, 较V2-ResNet-101卷积神经网络参数减少了97.2%, 较AlexNet卷积神经网络参数减少了97.5%.
在准确率方面, 较V2-ResNet-101卷积神经网络准确率提升了0.44%, 较AlexNet卷积神经网络准确率提升了3.34%.
在平均单张图片检测时间方面, 较V2-ResNet-101卷积神经网络快了13.3 ms, 较AlexNet卷积神经网络慢了29.5 ms.
4 结语
本文卷积神经网络主要分两步完成, 第1步: 通过修改DenseNet 网络结构降低参数数量、提高检测速度、减少图片检测所用时间以及避免训练过拟合. 第2步: 使用迁移学习方法, 将第1步训练所的权重迁移到双线性CNN进行进一步训练, 通过外积操作捕捉特征通道之间的成对相关性, 提高分类准确率. 使用本文算法在低对比、高纹理、高相似的灰度图片小数据集上进行分类, 最终取得了95.53%的准确率. 相比于V2-ResNet-101 网络结构, 准确率提升了0.44%, 参数减少了97.2%, 平均单张图像检测时间大约减少25%. 因为使用机器视觉的方法对导光板缺陷进行检测的相关文献较少, 使用深度学习方法的文献更加稀少. 因此现有的导光板检测方面的文献, 无法提供有价值的参考和对比. 由于工场计件生产规则限制, 无法在工厂生产线上进行长时间的、大负荷的、连续的算法鲁棒性和稳定性评测. 但是在与传统算法搭配进行缺陷检测的过程中, 就目前的算法检测结果来看, 已基本满足工业生产的缺陷检测需要. 下一步, 在面对减少缺陷检测时间、提高缺陷检测准确率、保证算法鲁棒性和稳定性等方面, 需要更深入的研究和分析。
本文转载《计算机系统应用》期刊 2020年第29卷第7期
End
声明:部分内容来源于网络,仅供读者学术交流之目的。文章版权归原作者所有。如有不妥,请联系删除。