段聪昊,王西峰,姬丽娟,曹润宁
(1.机械科学研究总院集团有限公司,北京 100044;2.机科发展科技股份有限公司,北京 100044)
作为世界第一大产钢国,中国钢铁工业保持着量的领先,然而在高附加值、高技术产品层面,仍与世界发达国家存在较大差距。带钢是高端钢铁工业的核心产品之一,是各个制造领域不可缺少的原材料,一般以钢卷形式向下游企业供应。在钢卷生产加工过程中,由于生产环境、设备和加工工艺等因素的影响,会产生边裂、边损、毛刺、塔形边等端部缺陷,可能导致下游产品降级改判、断带等严重问题。
由于钢卷端面纹理复杂,而缺陷面积占比例较小,导致传统视觉算法以及一些深度学习算法在钢卷端面缺陷检测应用上效果不佳。目前针对带钢表面缺陷检测的研究很多,但是针对钢卷端面缺陷检测的研究甚少,难以满足工业生产对钢卷端面缺陷检测的需求。
目前,深度学习已经成为缺陷检测的主流方法。应用于缺陷检测的算法主要分为两类,一种是被称为twostage的Faster R-CNN、Mask R-CNN等算法,另一类是被称为one-stage的YOLO、SSD等算法。Two-stage算法将检测任务分为两个阶段,第一阶段受用RPN网络生成目标候选区域(即边界框),第二阶段进行目标的类别识别和区域精准定位[1]。One-stage算法不需要单独进行目标候选区域阶段,直接通过网络端到端的识别目标类别和位置。相比较而言,one-stage算法检测速度更快,更加符合工业生产需求,但是检测精度稍逊于two-stage算法[2]。
本文采用改进的YOLOv3算法应用于钢卷端面缺陷检测,合并BN层参数到卷积层,加速模型运算速率;使用GIOU度量损失定位边界框,提高检测精度,以工业生产中实时检测的需求。
YOLOv3的提取特征网络从YOLOv2采用的darknet-19升级到darknet-53,加深网络,减少在计算过程中信息损失量。同时,配合ResNet残差网络,使深层网络结构表现更加良好[3]。Darknet-53网络结构如图1所示。
图1 Darknet-53网络结构
YOLOv3采用特征金字塔网络提取不同尺度的特征图,并对特征图进行检测。特征图浅层特征和上采样深层特征进行融合,生成三种不同尺寸的特征图,分别检测大、中、小三种尺寸的缺陷,提高检测准确率。其中,每种尺寸的特征图生成3个Anchor Box,共9个Anchor Box。检测时输入图片会被分割为S×S个网格,网格宽、高分别为cx、cy,网格输出相对于Anchor Box的偏移中心点坐标为(σ(tx),σ(ty)),相对偏移宽、高为tw、th,预测框坐标计算公式为:
图2 预测框示意图
其中预测框的宽、高、中心点坐标值、预测框的置信度及分类信息作为损失函数计算参数。置信度为预测框与标注框之间的交集与并集的比,即IoU,设置当IoU>0.7时为正例,当IoU<0.3时为反例。
YOLOv3损失函数将分类与位置预测融合到一起,提升了算法计算速度,实现了端到端的检测。损失函数具体式如下:
式中,S为图像的划分系数,B为每个网格中所预测的预测框个数,C为总分类数,p为类别概率,λcoord为权重系数,λnoobj为惩罚权重系数。
Batch Normalization层一般在卷积层之后,能够加速网络收敛[4],控制过拟合。虽然Batch Normalization层在训练时起到了积极的作用,但在网络前向传播计算时增加了运算量,影响了算法性能,而且占用了更多的内存或显存。所以提出将Batch Normalization层参数合并到卷积层,在卷积层参数计算过程中同时计算Batch Normalization层的参数,提升前向传播时的运算速度。
首先使每一维数据成为标准的高斯分布,可使用如下公式:
为了使归一化计算能够在前向传播中激活的非线性区域工作,需要对标准高斯分布再次进行位移和缩放,设前一层输出为h,则处理公式如下:
其中β、γ为需要学习的参数,ϵ为常规参数。
综合2016年和2017年水稻季可知,在不同水文年间歇灌溉相对传统淹水灌溉均可提高水稻产量,提高比例在3.8%~5.5%之间。在减量施肥且两次施肥的模式下不仅可以提高水稻产量,还可以降低化肥施用量,避免面源污染产生的潜在风险。可为洱海流域过量施肥问题的解决提供一定的参考和理论支持。
具体到前向传播中,卷积层的计算公式如下:
BN层详细推导过程公式如下:
在BN层计算完成后,可以将BN层合并到卷积层,公式如下:
至此可以删除BN层,将前向传播中的参数更新为:
目标检测的主要任务之一是对目标进行定位,通常我们使用边界框来表示它。衡量目标检测定位性能的主要指标是IoU[5],即交并比。最初使用、等损失函数优化定位结果,但是这类损失函数度量的定位精准不能总是很好的反映实际情况,如图3所示。
图3 损失函数失效示意图
图3(a)中,部分距离相等但是IoU和GIoU不相等;图3(b)中,部分距离相等但是IoU和GIoU不相等。因此,直接选择使用IoU度量目标定位损失。
IoU计算公式为:
损失函数定为:
但是IoU也存在出现两个问题:
1)如果两个框没有相交,则IoU=0,此时无法反映预测框与真实框的距离,并且损失函数无法进行梯度回传,无法通过梯度下降进行训练。
2)IoU无法精准反映两个框的重合度大小。如图4所示。
图4 相同IoU不同定位效果示意图
图4中三种情况的IoU均为0.33,但是从左到右定位效果越来越差。针对以上两个问题,Hamid Rezatofighi[6]等人提出了使用GIoU作为新的指标。GIoU计算公式为:
式中C为包围A、B的最小同类形状。损失函数变为:
GIoU继承了IoU的尺度不变性,与IoU只关注重合区域不同,GIoU不仅关注重合区域,还关注了非重合区域,可以更好的反映预测框与真实框的重合程度。
模型训练环境为Windows10系统。CPU为AMD R7 4800H;GPU为NVIDIA GeForce RTX 2060。为系统配置CUDA 10.0以及CUDNNv7.6.4,提高GPU运算性能。
数据集来自于现场采集图片,图片数量为1000张。采集图片完成后对图片进行分割,实验中发现YOLOv3对整体大图学习效果一般,但是分割为小块矩形图片之后,学习效果会提升。将分割后的图片以9∶1的比例随机分为训练集和测试集。数据类图如图5所示。
图5 数据集图像
模型训练完成后,与未改进的原模型进行对比。
通过合并Batch Normalization层到卷积层,提高了模型收敛速度,实时检测速度提升了约10.8%。实验结果如表1所示。
表1 fps对比图
通过改进IoU为GIoU后,检测精度有一定的提升,mAP提升了6.89%,结果如表2所示。
表2 mAP对比图
算法检测结果对比如图6所示。
图6 算法检测效果对比图
对比图中原始YOLOv3算法和改进后的YOLOv3算法检测结果,可以看出改进后的YOLOv3算法在一些较小的缺陷检测效果上优于原始YOLOv3算法,提高了检测准确率,降低了漏检率。
原始YOLOv3在检测速度上优于Faster R-cnn等two-stage算法[7],但是检测精度稍逊于后者。本文改进原算法中预测框的回归损失,用GIoU代替IoU,提升预测框的检索准确度,提高了对较小型缺陷的检测率。YOLOv3检测速率虽然优势明显,但是还有可以提升的空间,实验结果说明合并Batch Normalization层到卷积层可以有效提升模型计算效率,提高了Fps。
针对钢卷端面缺陷检测研究不足以及存在的问题,本文提出了一种改进的YOLOv3算法应用于钢卷端面缺陷检测,首先合并Batch Normalization层参数到卷积层,减少梯度下降运算量,增加模型收敛速率,Fps提高了10.8%,其次改进预测框的损失函数,提高预测框的检测精度,使得在较小型缺陷上表现得以提升,mAP提高了6.89%。
与其他算法相比,本文改进后的YOLOv3算法在检测精度上尤其是小型缺陷检测精度上得到了提升,检测速率维持在了50Fps以上,有了略微提升,满足了工业生产中实时检测的需求。但是一些与钢卷纹理相似的缺陷以及极小型缺陷目前检测效果不佳,后续将尝试进行多尺度融合提取特征,以及使用多种数据扩充方法提高数据量,提高对多种复杂小型缺陷的检测精度。