吴 越, 杨延竹, 苏雪龙, 韩阜益
(1.东华大学 a.机械工程学院; b.资产管理处, 上海 201620; 2.上海船舶研究设计院, 上海 201203)
钢板表面在生产过程中会产生各种各样的缺陷,如白铁鳞、刮痕和结疤等,这些缺陷会影响钢板的质量以及进一步的加工,因此生产中需对钢板缺陷进行检测、分类和定位。随着机器视觉的发展,国内外很多学者对钢板表面缺陷视觉检测方法进行了研究。胡超[1]采用主成分分析法得到16维缺陷特征,采用二叉树支持向量机(BT-SVM)对钢板表面缺陷进行分类;Suvdaa等[2]提出一种基于尺度不变特征变换和支持向量机的算法,并将其用于钢板表面缺陷检测;为提高钢板表面缺陷分类的精度,Gong等[3]提出一种对噪声不敏感的支持向量超球面分类方法。这些方法需要设计特定的特征提取算法,并且能够检测的缺陷种类有限。钢板表面色泽暗淡且不均匀,有些缺陷与钢板颜色极为相近,故缺陷特征不明显,并且不同类型缺陷存在较大的相似性,同种类型缺陷也不尽相同,这些都提高了传统视觉检测的难度。
深度学习的快速发展使得其具备通用性、自我学习能力,以及无需针对某一缺陷设定特定算法等特点,因而在缺陷视觉检测中得到了广泛的应用。Liu等[4]提出一种基于卷积神经网络和长短期记忆的缺陷检测方法,这对于检测辊印这种周期性钢板缺陷具有较好的效果;Li等[5]针对冷轧带钢表面缺陷改进了YOLO算法,可实现端到端的自动化缺陷检测;He等[6]提出一种基于YOLO算法的分类优先网络,并将其用于自动检测钢板表面缺陷。基于深度学习的检测方法,仅需将采集的缺陷图像输入到网络模型中即可自动完成特征提取,从而实现多种类型缺陷的检测,但目前研究涉及的缺陷种类还较少,且分类和定位的检测准确率尚待进一步提高。
本文对钢板表面的常见缺陷进行分析,根据钢板表面缺陷特点,选用基于Faster R-CNN(region-based convolutional neural network)的网络模型并对其进行改进,同时将在小缺陷细节特征中表现较好的RoI Align用于Faster R-CNN中RoI区域的特征池化,以提升算法的检测精度[7]。
图1为5种常见的钢板表面缺陷,由于各缺陷原图像尺寸大小不一,本文将其缩放为统一大小。
(a) 白铁鳞
(b) 辊印
(c) 刮痕
(d) 结疤
(e) 锈皮
图1所示5种缺陷的基本特征如下:
(1) 白铁鳞。主要呈长短不一的条状,颜色一般为白色,多为成片聚集分布,缺陷尺寸大小不一。
(2) 辊印。主要包括3类特征:缺陷为较浅的灰白色时分布为微弧形散状,与背景的对比度较低;缺陷为暗灰色时呈弧形微折叠状;少量缺陷为灰黑色时呈连续周期性直带状。
(3) 刮痕。主要呈宽度不一的连续周期性带状,一般为灰黑色。当背景颜色较暗时,缺陷与背景颜色相近,对比度较低。
(4) 结疤。主要呈大小不一的黑色点或面状,通常成片聚集分布,部分分布较散。图像背景明亮程度不一,随着背景颜色越来越深,特征对比度逐渐下降。
(5) 锈皮。主要呈一定宽度的灰黑色短条状,特征较为明显,通常为单个分布,极少数呈聚集分布。
主要对以上5种缺陷进行研究。分析大量缺陷图像可知,不同类型缺陷之间存在相似性(如锈皮的断续部分与结疤,较浅、较小的结疤与白铁鳞等),同种类型缺陷具有多种不同形态和尺寸(如辊印缺陷有3种不同形态和尺寸)。传统的视觉检测方法难以解决这些问题,而基于深度学习的智能视觉检测算法则可有效检测这些复杂形态的缺陷。
基于深度学习的表面缺陷检测算法主要有Faster R-CNN、 YOLO系列网络模型等。Faster R-CNN算法主要是通过区域生成网络(region proposal network, RPN)生成候选区域并进行初步分类和定位,然后对获取的候选区域进行池化,最后对池化后的缺陷特征再次进行分类及位置回归,其主要特点是对缺陷进行了两次分类和定位,可提高检测精度,适合检测小目标缺陷,而池化使其适用于各种尺寸缺陷的检测,但该方法的检测速度稍慢[8]。YOLO系列网络模型通过卷积网络对图像直接进行处理,只实现一次缺陷目标定位与分类,其主要特点是检测速度快,但对小目标缺陷检测效果不好,定位误差较大[9-10]。
分析上述缺陷检测网络模型特点并结合1.1节中钢板表面缺陷的特点可知,在钢板生产线上对钢板检测精度要求比速度要求更为重要的前提下,对检测钢板这种小目标、多尺度和多类别的缺陷而言,采用Faster R-CNN可获得更好的检测效果。
Faster R-CNN结构图如图2所示,其可分为4个部分,即特征提取网络、RPN模块、RoI Pooling模块和R-CNN模块。
图2 Faster R-CNN结构图Fig.2 The architecture of Faster R-CNN
特征提取网络。由于钢板表面缺陷图像色泽暗淡,缺陷特征不明显,为获得较好的特征图,采用VGG16的13层卷积网络等提取缩放后图像的缺陷特征。卷积层使用参数量较少的3×3小卷积核,而更多的激活层使其具有更好的非线性能力,可提高卷积网络的学习能力[11]。此部分包括5个卷积模块,每个模块输出特征图的数量依次为64、 128、 256、 512和512。
RPN模块。对特征图进行Anchor生成,预测每一个Anchor的类别得分与位置偏移值,根据获取的Proposal分别进行缺陷的二分类(即是否存在缺陷)以及缺陷初步定位。训练时对预测Anchor生成的大量Proposal进行筛选得到RoI,测试时则直接将Proposal作为RoI。此模块与R-CNN检测网络共享全图的卷积特征,节省了时间,且为R-CNN检测网络提供高质量的Proposal,可提高模型的检测精度。3×3卷积部分输出特征图数量为512,后面分类和定位部分输出特征图数量分别为18和36。
RoI Pooling模块。由于Faster R-CNN后面的R-CNN模块使用了全连接层,因此在将缺陷特征子图输入至全连接层前要求其为统一的固定维度(本文的特征子图大小为7×7)。由于钢板缺陷图像尺寸不一,其RoI对应的特征图尺寸也不相同,故利用RoI Pooling进行特征尺度变换,以使其可将任意大小的缺陷图像作为输入,最后输出固定的特征图尺寸,适合用于检测本文中的5种不同尺度的缺陷,可使训练过程更为灵活和准确。此部分特征图数量保持不变。
R-CNN模块。将RoI Pooling得到的RoI特征子图映射至整张特征图上,输出到R-CNN模块的全连接网络中,分别再次进行缺陷类别预测与位置回归并计算损失值,可提高检测精度。此部分全连接层输出特征图数量为4 096,分类和定位部分输出特征图数量为6和24。
Faster R-CNN会分别在RPN和R-CNN模块中计算损失值,其中RPN 可为R-CNN提供较好的RoI,如式(1)所示。该多任务损失函数将分类损失和边框定位回归损失结合在一起进行统一训练,最终输出对应的分类和边框位置,可提高检测精度,并适合检测小目标缺陷。
(1)
RoI Pooling部分承上启下,连接VGG16中提取的特征图和RPN的RoI特征子图,实现端到端的形式缺陷检测,可加快训练和测试速度,是检测过程中尤为重要的部分,其核心思想是利用最近邻差值算法实现特征的池化过程。具体原理如图3所示。
以钢板结疤缺陷图为例,假设图中结疤缺陷的RoI大小为332×332。由于下采样率为16(图像缩小为原图的1/16),则缺陷RoI特征池化后对应大小为332/16=20.75。此时RoI Pooling进行第1次量化,将该缺陷RoI的特征图大小取整为20×20,如图3中第3步所示。然后将该20×20区域固定成7×7大小的特征子图,由于20/7≈2.857不是整数,故采用RoI Pooling进行第2次量化,将2.857取整为2,从左上角开始以2为步长,取2×2区域中的最大值作为输出,获得7×7的特征图。由图3中第4、5步可知,原图像中完整的缺陷特征在进行两次RoI Pooling量化取整后,最后输入到R-CNN模块的全连接层中检测到的缺陷特征的实际大小为224×224(7×2×16=224)。然而原图像中缺陷特征的大小为332×332,由此可见RoI量化取整操作带来的偏差影响较大。
图3 RoI Pooling实现过程Fig.3 The implementation process of RoI Pooling
由2.1节分析可知, RoI Pooling量化取整带来的计算偏差导致RoI区域内的像素偏差及空间对应位置的偏差。因此从实质上来说,Faster R-CNN并未实现完全的平移不变性,即在实现从RPN的卷积映射到实际图像的像素映射时,两者的结构是不同的。Faster R-CNN的输入与输出之间并不是像素到像素的对齐,尤其对于钢板这种小尺寸缺陷而言,微小的偏差也会对其检测精度产生较大的影响,包括缺陷分类准确率和缺陷位置回归精确度。
为降低RoI Pooling量化取整造成偏差的影响,需对Faster R-CNN的池化方法进行改进。RoI Align中并未进行量化取整操作,故保留了所有的浮点,采样点的特征值通过周围相邻的整型特征点双线性插值获得,不会造成量化偏差,更适合用于钢板缺陷特征的池化。
RoI Align的具体实现原理如图4所示。同样是将结疤缺陷的RoI映射对应到原图像的特征图对应位置,下采样后的缺陷大小为20.75×20.75,坐标与大小都保留浮点数,不做量化取整。然后将特征图上的20.75×20.75区域划分为7×7的49个同等大小的小区域,中间的点仍然保留浮点数。RoI Align双线性插值与池化过程如图5所示,假设一个小区域内取2×2大小的方格,在每个方格内选取4个采样点进行特征采样,并取其最大值作为此方格的最终特征输出。
图4 RoI Align实现过程Fig.4 The implementation process of RoI Align
图5 RoI Align双线性插值与池化Fig.5 The bilinear interpolation and pooling of RoI Align
每格里面4个采样点的位置确定,即将单个小方格均分为4份,然后取每份中各自的中心点作为采样点的位置。RoI Align使用双线性插值计算得到4个中心点的值,即此4个中心点中每个中心点的周围会有特征图上的4个特征点,利用这4个特征点双线性插值出该中心点的值作为此方格的采样点的值。由于使用了采样点与保留浮点的操作,RoI Align可获得更好的检测性能,尤其是对于受RoI Pooling影响较大的情形,如钢板缺陷这种本身特征区域较小的目标,其改善效果更为明显。
在湘潭钢铁厂搭建试验台,利用线扫相机对钢板进行在线图像采集,筛选后得到缺陷样本共5 000张,每种缺陷样本各1 000张,其中,4 000张作为训练样本,1 000张作为测试样本。在本文的数据集中,每张缺陷图像中至少含有一个缺陷,部分图像中含有多个不同尺度的缺陷,以确保训练后的检测模型能适应不同尺度的多类型缺陷检测。
本文中缺陷样本采用Labelimg标注软件以矩形框对缺陷进行标注,其中标签名为各缺陷中文拼音的首字母大写,如白铁鳞为TL、辊印为GY、刮痕为GH、结疤为JB、锈皮为XP。
在Ubuntu 18.04系统下完成试验,计算机CPU为Intel®Xeon(R) W-2135,运行内存为32 G;GPU型号为GeForce RTX 2080Ti,显存为8 G;Python版本为3.6.9;利用Cuda 10.0和Cudnn 7.4.1进行加速运算;采用的深度学习框架为PyTorch 1.2.0。
为进一步证明本文使用的Faster R-CNN方法的有效性,共训练了3种模型,即YOLOv3、Faster R-CNN及改进Faster R-CNN,并在预训练后在本文数据集上训练了100个epoches(轮次),训练时间及权重文件大小如表1所示。训练方法如下:模型的初始学习率设置为0.000 1;采用adam优化器;每5个epoches进行一次学习率衰减,其衰减率为0.1; batch_sizes设置为8(batch sizes为一次训练所选取的样本量,其大小受设备的GPU限制,根据模型最佳优化和速度选择);采用Tensorboard进行训练过程中的可视化,以便实时监督损失值变化。
表1 模型训练时间与权重文件大小
改进后的Faster R-CNN网络模型在进行预训练后,再在本文数据集上训练了100个epoches的损失值图如图6所示,其中,纵坐标为损失值(loss),横坐标为训练次数。训练过程中的损失值收敛较快,最终收敛于0.18左右。
图6 改进Faster R-CNN的损失图Fig.6 The loss of the improved Faster R-CNN
本文采用平均精度和帧率作为缺陷检测的实际度量标准,取最终保存的最优网络模型进行测试。5种缺陷在测试集上的平均检测精度如表2所示。
表2 缺陷的平均检测精度
由表2可知,YOLOv3、Faster R-CNN、改进Faster R-CNN网络模型的平均检测精度依次为82.33%、85.07%与87.14%。每种模型每张图像的平均检测速度如表3所示。
表3 缺陷的平均检测速度
由表2和3可知:采用Faster R-CNN可在测试集上获得比YOLOv3更好的检测精度;改进Faster R-CNN的缺陷检测精度有所提高,其中锈皮缺陷的平均检测精度提高至97.67%,相比Faster R-CNN提升7.5%。相比Faster R-CNN及YOLOv3模型,改进Faster R-CNN模型消耗的检测时间有所增加,但影响不大,可满足实际要求。
图7为采用改进Faster R-CNN模型检测后缩放至统一尺寸的效果图。
图7 改进Faster R-CNN检测效果Fig.7 The detection results of the improved Faster R-CNN
利用训练好的模型对测试集进行测试,发现存在缺陷误检、漏检等问题。白铁鳞:小面积的单个缺陷在多次卷积后易丢失缺陷特征,易造成漏检。辊印:当颜色较浅、偏亮且为白色时,易被误检为白铁鳞;当与背景颜色极为相近时,特征不明显,容易漏检。此类缺陷类间缺陷特征差异大,与其他几类缺陷具有一定的相似性,检测准确率较低。刮痕:当缺陷为聚集型的灰白色条状时,易被误检为白铁鳞。结疤:靠近图像边缘的小结疤易漏检,当结疤分散为断续的横状短条时与锈皮特征相似,易造成误检。锈皮:当缺陷颜色较深且缺陷为断续状态时,易被误检为结疤。
对比3种检测方法的平均检测精度,以及不同类缺陷的平均检测精度和速度可知,当需要检测图像中较多小目标缺陷时,如锈皮缺陷,推荐采用改进Faster R-CNN模型,其平均检测精度得到显著提高。
本文分析5种常见钢板缺陷特征及Faster R-CNN网络的特点,采用基于Faster R-CNN网络模型对钢板缺陷进行检测。为提高缺陷检测的精度,用RoI Align池化方法代替原有的RoI Pooling算法,可减少池化过程中的量化误差。通过搭建深度学习环境进行试验可知,改进的Faster R-CNN网络可提高缺陷,尤其是小目标缺陷的平均检测精度。