改进YOLOv5金属表面缺陷检测方法

2022-08-27 03:36张宇杰蔡乐才
关键词:锚框检测时间金属表面

张宇杰,蔡乐才,成 奎,高 祥,唐 林

(1.四川轻化工大学自动化与信息工程学院,四川 宜宾 644000;2.宜宾学院三江人工智能与机器人研究院,四川 宜宾 644000;3.四川轻化工大学机械工程学院,四川 宜宾 644000))

引 言

在现代化生产过程中,由于技术工艺水平、操作不当等因素所造成的金属表面状缺陷(如裂纹、裂缝、磨损、毛刺等)、条状缺陷(如条状缝等)、体状缺陷(如夹杂物等)等零件表面缺陷是许多重大安全事故的罪魁祸首[1]。工业金属机械零件表面质量检验在制造产业中一直是不可缺少的一项环节,在实际生产工件的过程中,传统的方式是通过人工肉眼检测筛选工件表面的缺陷,不利于长时间高效率地检测。因此,开发准确高效的金属表面缺陷全自动识别和检测方法很有必要[2]。

近年来,深度学习技术在众多领域得到了长足发展,被应用于诸多人工智能任务中,且都取得了理想结果[3],而应用最广的就是工业检测方向。很多企业利用智能检测技术来代替人工检测技术,不仅降低了人工成本,还提高了检测的准确度和效率。深度学习理论的提出[3],为工业检测方向提供了新的能量;YOLO 算法的提出为金属表面缺陷检测提供了更好的解决方案,在原有神经网络基础上,既保留了精确度,又大大缩短了检测时间[4]。程婧怡等[5]采用改进YOLOv3算法,利用特征金字塔与残差层融合特征的方式对图片中的缺陷定位进行了检测。方叶祥等[6]提出一种更改损失函数和改进k-means++聚类的YOLOv3 算法进行了缺陷检测。毛嘉兴[7]提出了基于YOLOv2[8]通用目标检测算法,本身框架是针对遥感卫星图像(You Only Look Twice,YOLT),在YOLOv2 网络结构上进行改进,解决卫星遥感拍摄到图像中的小目标检测精确度不高的情况,对遥感图像进行处理时采用滑动窗搜索进行分块,以确保目标不被遗漏[9]。

YOLOv5 作为目前市面上版本较新的目标检测算法,在实践中可根据不同的项目大小来选择合适的权重进行训练,且在不同数据集上的准确性均高于以前的YOLO 版本。然而YOLOv5 识别单个图像的运算时间相较于其他版本更长。因此,本文以YOLOv5 检测算法为基础,在其原有程序的基础上进行改进,针对增加检测层和检测图像融合后更大特征图却无检测框识别的情况,引入k-means 聚类算法算出最佳检测框的个数及尺寸。在训练过程中,针对细小缺陷不易被检测的问题,采用上采样反向融合图片,增大图片,并增加3 个特征提取层。在后续检测模块中借鉴YOLT 算法中针对遥感目标检测中的方法,对大图进行切割分片,分别检测后再进行融合检测,以此来提升小目标检测的准确率。

1 使用方法提出

1.1 YOLOv5算法关键点分析

在YOLOv5 的输入端中共有下列几个关键点:(1)数据增强:YOLOv5 采用了Mosaic 数据增强的方式,通过采用4 张图片随机缩放、随机裁剪、随机排布的方式进行拼接,大大丰富了检测数据集[10]。Mosaic 增强训练时,可以直接计算4 张图片的数据,且只需要一个GPU 就可以达到比较好的预期效果[11]。(2)自适应锚框:在YOLO 算法中针对不同的数据集,都会有初始设定长宽的锚框[12]。YOLOv5中将外部计算锚框的方式嵌到代码中,每次训练时它能够自适应地计算不同训练集中的最佳锚框值[13]。(3)自适应图片缩放:在常用的目标检测中,输入的图片长宽比并不统一,YOLOv5为改进此问题,在源码中加入填充功能,针对小的原始图进行黑边填充,大的原始图进行缩放,之后变为统一的图像标准,减少了人力操作,提高了效率。

在Backbone 中,YOLOv5 增加了在之前YOLO版本中没有的Focus 结构,其关键操作是将图片切片[14],如图1 所示。其主要作用是从高分辨率的图中,呈周期性地抽出像素点进行重构,组成低分辨率图像,提升每个视野的感受点,减少原图信息的丢失。可在没有参数的情况下将输入维度进行下采样,最大限度地保留原有信息,减少计算量,增加检测速度。

图1 Focus切片操作

YOLOv5整体采用了两种CSP结构[15],主要目的是解决在推理计算中计算量大的问题,采用CSP 模块可将基础层的特征映射划分为两部分,然后通过跨阶段层次结构将它们合并,还可以增强神经网络的学习能力,在降低计算瓶颈和运行内存成本的同时保证准确率[15]。CSPX结构如图2所示。

图2 CSPX结构

在YOLOv5 中 有 两种CSP 结构,即CSP1_X 与CSP2_X。首先CSP1_X 处于主干网络中,其次CSP2_X 处于之后的NECK 中,分别处于不同的部位,YOLOv5 的backbone 及Neck 结构如图3 所示,从图中可看出CSP结构存在的位置。

图3 backbone+Neck

激活函数是在卷积神经网络神经元上运行的函数,负责将神经元的输入映射到输出端,它的作用是为了增加神经网络模型的非线性变化。Mish函数是一种自正则的非单调神经激活函数,其图像相较于其他的函数更平滑,从而可得到更好的准确性和泛化[16]。采用的Mish激活函数[13]如下:

Mish 激活函数的平滑曲线与平滑度如图4所示。

图4 Mish激活函数

Neck 用于形成特征金字塔(Feature Pyramid Networks,FPN)[17],特征金字塔可增强网络对不同尺寸的图像的检测,进而识别不同大小和尺度的同一物体,路径聚合网络(Perceptual Adversarial Network,PAN)如图5 所示[18]。YOLOv5 采用了FPN+PAN 结构,此结构主要加强了信息传播,使得网络能检测到更细微的原图信息,在目标识别上得到更高的精确度。

图5 PAN结构

Head 模块如图6 所示,其作用在最终检测,它在输入的检测图像上生成锚定框,在框上生成检测出的类别以及识别的准确度。

图6 Head模块

YOLOv5 在输出端分为两个部分:一为bounding box 损失函数,二为非极大值抑制(Non-Maximum Suppression,NMS)。YOLOv5 的bounding采用式(2)表示的C-IOU loss 方式,该损失函数[19]相较于传统D-IOU loss 和G-IOU loss,既解决了边界框不重合的问题,又在D-IOU 边界框中心点距离的信息基础上考虑了边界框宽高比的尺度信息[19],从而提高检测速度和精确度。

由LOSS= 1 -CIOU可得:

其中:hgt、wgt分别为真实框的长、宽;h、w分别为需要预测矩形框长、宽。

YOLOv5 中采用加权NMS 的方式[20],其作用是将多余的框和重复的框去掉,以此提高准确率以及使检测人员可更好地进行识别,排查检测物。

1.2 YOLT算法

YOLT 算法是以YOLOv2 算法为基础进行改进的卫星图像目标检测算法,针对输入图片过大而待检测目标相较图片分辨率较小的情况,其中所用到的方法可针对小目标检测。核心思想是将一张大分辨率的图像进行分割,变成一张张的小图,再分别进行检测,对于最小目标像素的下限会大大降低。

2 改进方法

YOLOv5有4种不同大小的网络结构,根据项目适应度,选择YOLOv5m[11]进行改进。

2.1 自适应锚框改进

在实际应用中,由于YOLOv5 自带的计算锚框只有9 个检测框,在遇到不符合锚框尺寸的更细微的小缺陷时很可能会造成漏检、误检。因此需通过外部重新计算,重新进行anchor box 个数及尺寸确定。而使用算法选取k-means 聚类算法,通过自制数据集上的标注目标框信息(ground truth),手动计算最适合的自适应锚框个数及锚框尺寸,可增加检测的准确率及检测的效率。

在金属表面缺陷检测任务中,进行聚类是为了使anchor box 与ground truth 的IOU越大越好,所以不可采用平常聚类方法的欧式距离来计算,应采用IOU作为度量函数进行计算。新公式如下:

其中:box是标注的真实目标框,centorid是聚类的中心点。

anchor box 个数K与IOU(交并比)的关系曲线如图7 所示。数据集的IOU与K成正相关,在K为10~12.5时逐渐趋于平稳,故本文选择K= 12[12]。在原有9 个检测框的情况下又增加了3 个尺寸更小的检测框,用来针对最大图片中的小目标缺陷,使检测更准,图8所示为增加前后锚框尺寸对比。

图7 自适应锚框个数与IOU关系图

图8 更改前后anchors对比

通过k-means 聚类算法得出增加的3 组(5,6)、(8,14)、(15,11)尺寸的检测框,并应用于下一改进阶段所增加感受视野最大的检测图中使用。

2.2 增加小目标检测层

在训练阶段,针对金属表面小目标缺陷检测准确度不够,将特征提取进行增强,在原有特征提取层中,继续增加了3 个特征提取层,使算法在20 ×20、40 × 40、80 × 80 和160 × 160 共4 类特征尺度上进行特征提取。首先,分别针对20 × 20、40 ×40、80 × 80 尺寸的特征图进行特征提取,它们的感受视野分别为大、中、小,在head 中得到小型特征图后,继续对输入特征图进行上采样等处理,使得特征图继续扩大,获得大小为160 × 160 的特征图,将其与骨干网络中第2 层特征图进行concat 融合,以此获取更大的特征图进行金属表面缺陷小目标检测。之后继续进行中型图的特征提取,再进行小型图的特征提取。图9 所示为修改后的MODEL层结构。

图9 改进网络结构部分

2.3 采用YOLT算法分割检测

在检测阶段中,给予输入图像进行小目标分割检测,以输入图像608 × 608 为例,YOLOv5 中进行了5 次下采样,最后得到的特征图大小分别是19 ×19、38 × 38与76 × 76,这3个中最大的76 × 76负责检测小目标,对应到608 × 608 上,每个特征图的感受视野尺寸大小是8 × 8。因为金属表面缺陷存在大量的细微小型缺陷,所以在YOLOv5 检测网络结构的基础上,借鉴YOLT 算法[7]处理输入大分辨率图像检测的方式进行改进,先进行分割,变成一张小图,再进行检测,如图10所示。

图10 YOTL算法操作

检测后再回收所有图像,计算坐标相对值,集体进行NMS 操作,将检测到同一小目标物的两个不同的标注框分开,如图11所示。

图11 集体NMS操作

3 金属表面缺陷检测流程

综合以上分析,配合当前效果较优的图像处理手段,结合现有的摄像头拍摄到待检测的金属表面图,得到检测金属表面伤痕具体位置的完整方案,具体检测流程如下:

(1)相机获取到金属表面图片,进行归一化处理后,记录原图。

(2)图像分割:对图片中待检测的区域进行设置,标注出检测的位置。

(3)图像预处理将图像灰度值改变为(0,255),将图片灰度归一化,去噪(高斯滤波)。

(4)输入训练数据,采用更改后的代码(YOLOv5m_modify)进行训练,得到训练权重。

(5)输入测试数据到检测网络中,采用步骤(4)得到的权重进行检测。

(6)输出检测图像,得到缺陷位置及准确度。

4 实验验证

将YOLOv5各个大小模型、YOLOv3、YOLOv4和YOLOv5m_modify 网络对钢材表面缺陷数据集进行训练和检测,采用召回率(R)、平均精确度(mAP)值与检测速度3个指标进行评估。

本文所有实验都在三江人工智能与机器人研究院的机器上进行。设备选用python3.9 和pytorch作为深度学习库,显卡型号为QTX5000,采用cuda11.1 与cudnn8.4 作为训练加速工具。网络输入的图像大小为200 × 200,并将固定的均值和方差进行归一化处理,通过随机梯度下降法更新权重。其中,在训练过程中批量batch size 设为32,学习率为0.001,训练次数epoch设为300。

4.1 数据集准备

本实验采用He 等[21]制作的钢表面缺陷NEUDET 数据集,该数据集收集了热轧钢带的6 种典型表面缺陷,即轧制氧化皮(RS)、斑块(PA)、开裂(CR)、点蚀表面(PS)、内含物(IN)和划痕(SC)。该数据库包括6 种不同类型的典型表面缺陷,每一类缺陷包含300 个样本,共1800 个灰度图像。对于缺陷检测任务,数据集提供了注释,指示每个图像中缺陷的类别和位置。由于数据集图片太少,且图像在类间差距不够明显以及类内差距过大,本文对所用图像进行了数据增强,将同类的图像进行拼接、旋转、合二为一变成新的特征图等操作,来增加训练集数量和淡化类内差距,增加类间差距。但是在拼接与合二为一过程中,会形成新的图像,仍需要用标注工具labelimg 进行缺陷标注。增强后的数据集达到了3000 张,将其中2400 张作为训练集,将600张作为测试集,数据集改动如图12所示。

图12 数据增强操作

数据集制作采用VOC2007[22]数据集的样式进行处理,针对上述数据增强的操作,对新制作的图片进行编号继而使用标注软件进行缺陷的类别与位置的标注,生成新的XML[22]脚本文件,之后编写Python脚本程序将已经标注好的数据加入原本数据集中集体转换成TXT文件格式用于训练。

4.2 测评标准

为了验证YOLOv5m_ modify 算法的性能,采用平均精准度(mAP)、召回率(R)和单张图片检测时间指标对算法进行评估[23]。其中,mAP是对所有类别的平均精度(AP)求取均值后获得。精确度(P)、R、错误率(E)、AP、mAP分别表示为:

其中:TP表示检测结果为正的正样本,TN表示检测结果为负的负样本,FP表示被检测为正的负样本,FN表示被检测为负的正样本。

另外,本文统计了实验过程中的时间,以检验模型的检测效率。

4.3 实验结果

在完成网络训练后,将改进模型与YOLOv3、YOLOv4、YOLOv5 结构进行对比,设置IOU为0.35,实验结果见表1。

表1 整体网络性能对比

表1 中的网络性能指标通过mAP、R、检测速度进行评估,mAP为由各类缺陷类型AP之和除以6 种不同类型的表面缺陷总数量得到。

分析表1可知,YOLOv5所有模型的mAP和R均明显优于YOLOv3和YOLOv4。至于检测时间降低,可能是由模型结构大小和数据集的数量问题所导致,在0.01 s精度的基础上,时间因素可以忽略。因此,本文基于YOLOv5 进行改进的思路是正确的。同时,在YOLOv5 的4 种模型中,尽管YOLOv5s 的mAP和R表现最好,但相比另外3 种模型相差不大,且其时间效率没有优势。因此,综合考虑,本文选择模型YOLOv5m进行改进的方案是最合适的。

由表1可知,本文改进算法YOLOv5m-modify的mAP达到了95.50%,相对比于YOLOv3、YOLOv4、YOLOv5m这3种模型,分别提高了32.02%、36.74%、15.40%,且总召回率为86.4%,相比于其他算法,提高了10%~20%。此外,从统计的单张图片检测时间可知,本文算法检测时间为0.037 s,虽然较YOLOv5m 和YOLOv5l,分 别 增 加 了0.023 s 和0.013 s,但明显优于YOLOv5s 和YOLOv5x,在准确度和召回率都有很大提高的情况下,时间效率因素是可以接受的。综合来看,本文改进算法的实验效果是很明显的。

4.4 消融实验

在训练时,新增了3个特征提取层,且将图片进行融合,得到更大的特征图,使提取特征更加精确,目的是让精确度增加。

为了明确改进算法中增长的mAP是由哪个改进因素贡献的,对此进行了消融实验,实验结果见表2。其中,优化模型1 针对的是anchor 优化,优化模型2 对应检测层数增加,改进3 为后续检测阶段代码中使用借鉴YOLT分割检测方法的结果。

表2 消融实验结果

由表2 可知,训练时增加了3 个特征提取层,会造成检测时间增加,但是检测的准确度也相应得到了提升,针对缺陷小目标会更精确地提取。检测时,由于采用了YOLT 算法进行检测,将输入图片进行分割成N份,再进行N次检测,会大大增加检测时间,导致了检测时间的延长。对于更细微的缺陷在一张大图直接检测时有很大概率会被漏检,但将图分为N份进行分别检测,再融合进行NMS 操作,去掉重复的框,可提升正确检测缺陷的概率,且更容易使工作人员进行分辨。

5 钢材检测效果

利用改进网络对随机选取钢材表面缺陷图像进行检测,其检测效果如图13 所示。其中,缺陷的位置由矩形框标记,针对不同类型的缺陷采用了不同颜色的矩形框,而且在矩形检测框的左上角生成了每种缺陷被检测到的概率,由图13 可知,除了抓痕的检测准确率在0.6~0.9之间外,其余的准确率都很高。由此可知,改进网络可较好地检测到缺陷的位置与类型,说明网络有较好地检测能力,且重复检测框大幅度减少,这说明引入YOLT 算法是成功的。

图13 金属表面缺陷检测图

6 结束语

传统的金属表面缺陷检测由于过于依赖人工检测的准确性,在进行人工检测时若出现漏检及误检操作会使产品的质量和安全性大打折扣,不仅浪费原材料还会造成不必要的经济损失,为此在YOLOv5m网络结构的基础上,通过增加特征提取层和采用YOLT 算法的方式对输入图像进行特征提取,来提高准确度。通过anchor box个数K与IOU的关系计算出项目适合的先验框,增加了3 种更小尺寸的检测框,用来检测到经过融合得到的大图中更细微的缺陷。针对训练数据太少的情况,做了数据增强。实验结果表明,改进算法的mAP比改进前YOLOv5m 结构提高了15.40%,虽然检测时间稍有增加,但是准确度与召回率的增加弥补了这一点,使速度与精度保持了平衡。综上所述,改进算法具有更强的准确性和实时性,更适合用于实时检测。下一步准备对算法进行优化,使检测时间再进行缩小达到更强的实时性。

猜你喜欢
锚框检测时间金属表面
基于YOLOv3锚框优化的侧扫声呐图像目标检测
锚框策略匹配的SSD飞机遥感图像目标检测
基于SSD算法的轻量化仪器表盘检测算法*
基于GA-RoI Transformer的遥感图像任意方向目标检测
一种基于微带天线的金属表面裂纹的检测
对两种细菌鉴定法在血液检验中的应用效果进行分析
新型溶血素与传统溶血素在临床血常规检验中的应用研究
浅析着色探伤剂
ABL90血气分析仪在急诊科的应用研究
不同检测时长对粉煤灰砌块放射性检测结果的影响