1. 引言
近年来,以TFT-LCD(薄膜晶体管液晶显示器件)为代表的液晶显示器在显微镜、液晶电视、手机和平板电脑等领域获得了十分广泛的应用[1]。偏振片是TFT-LCD的关键部件之一,直接影响到显示器的成像效果。质量正常的偏振片其表面必须保证干净清洁,不允许有明显的脏污、折痕、划痕、气泡、凹凸点等缺陷。但偏振片在生产、运输和存储等环节中不可避免地会产生这些缺陷,因此对偏振片进行缺陷检测是不可缺少的工序。
目前国内,包括大型厂家,对于偏振片的缺陷检测依然停留在人工检测层面,除了检测效率低,长时间对人的眼睛和身心都会带来不小的伤害。采用机器视觉技术,通过相机代替人眼捕捉偏振片缺陷形成图像,再交由计算机进行一系列图像处理,可达到自动、快速和准确检测偏振片缺陷的目的。然而目前国内、外针对偏振片缺陷检测采用机器视觉技术的研究比较少,其方法也主要停留在传统算法上。例如,曾小星[2]采用黑白间隔的条纹光做光源,提高缺陷的对比度,然后使用RPCA(鲁棒性主成分分析),将缺陷从条纹光提取出来。赖文威[3]采用主动光扫描法,通过主动光四步扫描将缺陷捕捉,然后使用Rangefilt滤波原理实现了缺陷的提取。许少鹏[4]采用结构光饱和成像方法继续增大缺陷对比度,然后采用基于RPCA的图像检测方法将缺陷提取了出来。贺健[5]提出了一种差分法也成功提取出了缺陷。但是这些方法虽然提取出了缺陷,而并未很好地解决缺陷分类和缺陷位置的提取问题,不利于现场在线检测。而随着机器深度学习的发展,各类目标缺陷检测算法[6]日益增多,例如,赵睿[7]等人提出一种改进的YOLOv5s检测安全帽的算法,采用DenseBlock模块代替主干网络中的切片(Focus)结构,提高了网络提取特征的能力;王静[8]等人采用YOLOv5检测白细胞,在主干网络中添加坐标注意力机制CA [9],改良了网络的性能;李春霖[10]等采用YOLOv3-Tiny网络来提取偏振片缺陷,使用Dense Block模块和SPP-Net模块来优化其特征提取网络,取得了良好的效果。
本文根据深圳某偏振片生产厂家提出的人眼可见的缺陷为研究目标,例如:气泡、凹凸点等圆状物缺陷半径不小于0.1 mm;折痕、划痕等线状物缺陷长度不小于2 mm,宽度不小于0.05 mm。以YOLOv5算法为基础,但针对偏振片缺陷数据集的特点又对YOLOv5算法进行改进,使之更适合偏振片自动化检测;并通过在原来网络输出三种特征图的基础上再增加一层特征图的输出,增加注意力机制和修改损失函数三个方面对原有网络进行优化,使之模型的泛化能力更强,从而增强了对目标不同尺度大小下的检测能力[11]-[17]。
2. 改进型YOLOv5算法
本文是在YOLOv5网络的基础上进行改进,与经典的YOLOv4 [18]算法相比,YOLOv5总体结构也由四个部分组成:输入端(Input),主干网络(Backbone),多尺度特征融合模块(Neck)以及输出层(Prediction)。YOLOv5算法拥有4个版本的网络模型,包括:YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x,本文是以YOLOv5l为基础的研究模型。改进型算法主要体现在主干网络和特征融合模块。把原来的YOLOv5l的网络模型Backbone中的Conv全部改进为了Conv_CBAM;这样可以提高目标识别的精度。损失函数采用了CIOU_LOSS函数,从中心距离、重复面积、两框的长宽比3个方面综合考虑CIOU_LOSS能够显著提升目标检测的回归精度。并且增加了输出层,是针对小型气泡检测效果不佳的。进而提升整个改进算法的精确度。下面分别具体介绍注意机制添加、损失函数的选择、输出层的增加。
2.1. 添加注意力机制
通常情况下目标检测任务都是目标占比小而背景占比大,导致许多检测算法只关注背景,不关注缺陷;导致检测缺陷的精确度不佳。引入了注意力机制(Attention Mechanism)帮助算法忽略不重要的信息[19],把注意力集中在重要的信息上。本文引入注意力机制旨在提高检测算法对缺陷的敏感性。目前注意力机制种类较多,常见的有通道注意力机制(SENet) [20]和卷积模块的注意力机制(CBAM) [21]两种。
SE (Sequeeze-and-Excitation)是一个模块,将现有的网络嵌入SE模块的话,那么该网络就是SENet。SENet认为一张特征图上并不是所有的通道都同等重要,也就是说每个通道其实还应该有一个重要性权值才行,然后每个通道的重要性权值乘以每个通道原来的值,就是我们求的真正特征图(feature map)。SENet的结构如图1所示。
Figure 1. SENet structure diagram
图1. SENet结构图
SENet解决了卷积池化过程中不同通道重要性不同带来的损失问题。进一步考虑到通道相同但位置不同的像素的重要性也可能不同,所以出现了CBAM。CBAM不仅考虑了不同通道像素的重要性,还考虑了同一通道不同位置的像素的重要性。CBAM它比SENet多了个全局池化操作,这意味着它提取了更多的高级信息。鉴于此,本文采用CBAM。
CBAM (图2)是将通道注意机制(图3)和空间注意机制(图4)结合在一起的技术。对于一个特征图,CBAM模块会从通道和空间两个维度推断注意力图,然后将注意力图与输入特征图相乘进行优化。本文结合原算法中的标准卷积模块Conv和CBAM模块设计Conv_CBAM模块,将主干网络中的Conv模块替换为Conv_CBAM模块。如图5所示。
Figure 2. CBAM structure diagram
图2. CBAM结构图
Figure 3. Channel attention module
图3. 通道注意力机制
Figure 4. Spatail attention module
图4. 空间注意力机制
Figure 5. Conv_CBAM module
图5. Conv_CBAM结构
2.2. 采用CIOU_Loss损失函数
YOLOv5的损失函数包括三个方面:置信度损失函数(Lobj)、分类损失函数(Lcls)和边框回归损失函数(Lbox)。总的损失函数计算公式如(1)所示:
(1)
其中边框回归损失函数是一个不断演变的过程,最开始使用的是IOU_Loss。IOU_Loss是在2016年被提出来的,其计算公式如(2)所示:
(2)
IOU_Loss很好地解决了预测框冗余的问题,但也存在局限:当预测框和真实框不相交,或者两框相交但交集大小相同时,这两种情况都会导致IOU_Loss相同,这样就无法做正确的回归。为此,2019年又提出了GIOU_Loss来进行改进。
GIOU_Loss的演示图如图6所示。其计算公式如(3)所示:
(3)
传统YOLOv5算法针对边框回归多采用GIOU_Loss [22]损失函数,该函数虽然考虑了目标框和预测框的最小外接矩形,但忽略了预测框在目标框内部且不同预测框大小一致的问题如图7所示,这样导致GIOU_Loss退化成普通的IOU_Loss函数。
Figure 6. GIOU_Loss demo image
图6. GIOU_Loss演示图
Figure 7. The prediction box is inside the target box
图7. 预测框在目标框内部
为了解决这种问题相继出现了DIOU_Loss函数和CIOU_Loss函数。DIOU_Loss函数考虑到了重复面积和两框的中心点距离,而CIOU_Loss函数既考虑了中心点距离,又考虑到了两框的长宽比,所以能够提高边框回归的精度和速度。本文采用CIOU_Loss函数作为边框回归的损失函数。CIOU_Loss的计算公式见(4):
(4)
其中b是预测框中心点,bgt是目标框中心点,ρ表示两框中心点距离,c是两框的最小外接矩形的对角线长度,α是权重,v是表示长宽比的参数。公式如(5)、(6)所示:
(5)
(6)
2.3. 增加输出层
最初的网络有三个输出,当输入图片的尺寸为608 × 608像素时,经过主干网络的Focus和4个步长为2的卷积之后,特征图大小分别变为304 × 304,152 × 152,76 × 76,38 × 38和19 × 19,随后网络选取最后三种尺寸大小的特征图进行输出,76 × 76的感受野最小,用于检测小目标,38 × 38的感受野中等,用于检测中等大小目标,19 × 19的感受野最大,用于检测大目标。经实验,以上特征检测面积大的目标效果较好,但针对偏振片上一些较小的缺陷,如小型气泡则检测效果不佳。为此,本文在原来的基础上再增加了一层152 × 152的输出,拓展为四个尺度。最后共得到四个尺度不同的输出结果。相比于原来的输出,新的输出层多了个更大的预测特征图,该特征图的感受野最大,能够更好地检测小目标,并且中间两种尺度的特征图分别融合了多个其它尺度的浅层信息:如第12层融合了6层的信息;第16层融合了4层的信息;第20层融合了2层的信息;第23层融合了18层的信息;第26层分别融合了14层的信息,第29层分别融合了10层的信息这种多融合的方式减小了过程中特征信息的丢失。改进后的最终网络结构如图所示图8所示:
Figure 8. Improved network structure
图8. 改进后的网络结构
3. 实验与分析
3.1. 实验环境
实验相关设施如表1所示,偏振片来源于深圳某厂家生产线上的不合格样品,其主要缺陷为划痕和气泡,样品大小为150 mm × 150 mm。为了扩大样本图数量通过人工做标记方式,并利用旋转,缩放和模糊等手段扩充到1000张,典型的样本图如图9所示。得到缺陷样本图后,再使用labelimg软件进行标注,采集到的缺陷样本中,划痕数量为3097个,气泡数量为5589个。多个缺陷,所以缺陷数量的总和远大于缺陷图的数量。由于一张缺陷图上可能存在每标注完成一张图后会在指定文件夹下生成一个对应的xml数据集文件,该文件里保存了标注的信息,如类别,边框的坐标等。标注界面如图10所示。
Table 1. Experimental configuration
表1. 实验配置
名称 |
配置 |
CPU |
INTER COREI7 |
GPU |
NVIDIA GEFORCE GTX 1080Ti |
操作系统 |
Ubuntu 16.0406 LTS |
开发环境 |
Python3.7 Pycharm2019 |
深度学习框架 |
Pytorch1.6 |
工业相机 |
MV-GEA1201M-T |
镜头 |
AFT-2514MP |
偏振片样本 |
150 mm × 100 mm |
Figure 9. Defect sample chart
图9. 缺陷样本图
Figure 10. Defect labeling
图10. 缺陷标注
3.2. 评价指标及结果分析
本文采用的算法评价指标有精确率P (Precision)、召回率R (Recall)、和平均精度均值mAP (Mean Average Precision)和帧率FPS共四个指标衡量算法性能。指标计算公式如式(7)~(9)所示:
(7)
(8)
(9)
将缺陷样本数据集按照1:8的比例分为测试集和训练集,使用预训练权重YOLOv5l.pt进行初始化,并将训练得到的权重文件用作测试的权重文件,图片的输入大小设为416 × 416,迭代的epochs设为400次,batch_size设为4,学习率设为0.01,本次实验训练了2种模型,分别是YOLOv5和本文的改进型YOLOv5算法。实验流程如图11所示。
Figure 11. Experimental process
图11. 实验流程
如表2所示,为了验证改进型算法的性能,将两种算法进行了两组对比实验。通过一步步在网络中添加注意力机制,更改损失函数和增加输出层之后,YOLOv5的mAP值由最初的0.8162增长到了0.8598;推理速度方面原算法为52.6 FPS,改进型算法为51.2 FPS,由此可见mAP提升了4%,而推理速度却并未下降太多,充分体现了改进型算法的优良性。
Table 2. Comparison of algorithm parameters
表2. 算法参数对比
模型 |
P |
R |
mAP@0.5 |
FPS |
YOLOv5 |
81% |
90% |
0.8162 |
52 |
YOLOv5-new |
85% |
92% |
0.8598 |
51 |
最后得到的损失函数结果如图12所示。其中(1)、(2)、(3)分别为改进前算法YOLOv5-ori和改进后算法YOLOv5-new的定位损失、置信度损失和分类损失函数的对比图,横坐标是训练轮数,纵坐标是损失值。如图12所示,训练到350个epochs基本上开始收敛,而且改进后的损失函数曲线比改进前下降得更多,更加直观地表明了改进型算法比原算法更优良。
Figure 12. Loss function contrast curve
图12. 损失函数对比曲线
Figure 13. Improved pre- and post-test results
图13. 改进前后检测结果
现随机选取了几张缺陷样本图在两种算法下展示测试效果(放大图),如图13所示,左列为原算法结果,右列为改良算法结果。图中可见,改进型算法在检测精度上有不少提升,并且原算法检测不出来(较淡)的缺陷都能由改进型算法检测出来,并由此验证了算法改进的正确性。
由图可见,相对于改良之前,改良之后的算法在检测精度上有不少提升,并且原算法检测不出来的较淡的缺陷本文算法都能检测出来,这也验证了本文所作改进的正确性。
4. 结论
为了智能化在线检测偏振片缺陷,本文提出采用YOLOv5深度学习方法,并对YOLOv5算法进行改进:
1) 在Backbone层增加CBAM注意力机制,使得算法更加注重目标;
2) 在Prediction层增加了一个新的输出层,以此增强检测小目标的能力;
3) 修改了边框回归损失函数为CIOU_Loss,以此提高边框回归的精度。
通过缺陷样本实验测试表明,在检测效果方面,改进型算法尽管增加了一个输出层导致参数增加,且FPS略微降低,但mAP却提升了4个百分点,并且检测的精准度达到了85%。
NOTES
*通讯作者。