文章信息
- 李澄非, 蔡嘉伦, 邱世汉, 梁辉杰, 徐傲
- LI Chengfei, CAI Jialun, QIU Shihan, LIANG Huijie, XU Ao
- 基于改进YOLOv4的铝材表面缺陷检测方法
- Defect detection method in aluminum material surface based on improved YOLOv4
- 中国测试, 2024, 50(5): 160-166
- CHINA MEASUREMENT & TEST, 2024, 50(5): 160-166
- http://dx.doi.org/10.11857/j.issn.1674-5124.2022050145
-
文章历史
- 收稿日期: 2022-05-21
- 收到修改稿日期: 2022-07-01
在铝材生产过程中,由于生产工艺技术的限制,常常会出现各种各样的缺陷,常见的缺陷有起坑、擦花、漆泡、漏底、脏点等,这些铝材表面缺陷不仅影响美观,而且会对铝材的质量和性能造成极大的影响,严重时,甚至会导致意外的发生,造成人员伤亡。因此,对铝材表面缺陷进行精准的检测,十分必要。
人工检测方法存在很大的局限性,长时间的工作会导致工人眼部疲劳,效率降低,不能准确完成任务。许多研究人员开始提出各种金属表面缺陷检测方法,这些工作大致可以分为两类,传统和深度学习检测的方法。传统检测方法,常通过人工设计的特征来提取缺陷,如HOG[1]和SIFT[2],而后经过分类器SVM[3]进行分类识别。SUVDAA B[4]等描述了对于钢板缺陷检测和分类的框架,先使用Sift进行特征提取,后通过SVM进行分类,实验表明了算法的有效性。郭慧[5]等人通过连通域对缺陷轮廓进行提取,使用几何、形状和灰度等作为特征,通过SVM进行分类,实现了对钢板缺陷的识别。人工设计的特征并不能满足检测需求,对于缺陷的提取能力不足。这些方法对于特定缺陷检测精度高,但是泛化性低,且容易受到周围环境的影响。
近年来,随着深度学习技术的飞速发展,越来越多人将深度学习应用在工业检测上[6-8],也带动了其在金属缺陷的检测。程婧怡[9]等提出了改进YOLOv3的金属表面缺陷检测方法,优化了对小目标的检测。吴越[10]等提出了基于Faster R-CNN的钢板表面缺陷检测方法,采用ROI Align作为池化模块,改善对于小目标的检测精度。李庆党[11]等提出了基于YOLOv3的钢板缺陷检测方法,采取了增加尺度的方法来提高缺陷检测的精度。基于Faster R-CNN[12]的方法,精度高,检测速度慢。YOLO系列算法取得了精度和速度上平衡,更适用于工业检测。
YOLOv4[13]算法在YOLOv3[14]的基础上进行改进,拥有着更好的性能,本文以YOLOv4算法为基础,针对算法在金属铝材缺陷检测中精度不高,容易漏检的问题进行改进。结果表明,与原YOLOv4算法相比,改进后的算法检测精度获得显著的提升。
1 YOLOv4算法 1.1 YOLOv4网络结构YOLOv4整体网络结构可以分为四部分,输入层、Backbone主干网络、Neck结构以及最后的输出层YOLO Head。输入层是3通道的训练图片。主干网络使用Mish激活函数,引入CSP残差结构,采取CSPDarknet53作为特征提取网络。Neck结构主要由空间金字塔池化模块(SPP)和路径聚合网络模块(PANet)组成,SPP的引入增大了网络感受野,PANet的使用有利于底层信息的传输,从而获取更好的特征。输出层YOLO Head负责将获取的特征图进行整合,预测出目标的坐标,边框大小以及置信度等信息。整体网络结构如图1所示。
1.2 YOLOv4预测原理
以608×608输入尺寸为例,经过主干网络时,图片会经过5次下采样,取最后3次下采样结果作为检测的特征层。最底部特征层经过SPP模块进一步扩大感受野,而后与其余两个特征层通过PANet进行自顶而下、自底向上的特征融合,获得三个尺寸为76×76、38×38、19×19的特征图,最后在输出层中进行预测,分别用于检测小目标、中目标以及大目标。
将特征图的大小设定为
$ {b_x} = \sigma \left( {{t_x}} \right) + {C_x} $ | (1) |
$ {b_y} = \sigma \left( {{t_y}} \right) + {C_y} $ | (2) |
$ {b_w} = {p_w}{{\rm e}^{{t_w}}} $ | (3) |
$ {b_h} = {p_h}{{\rm e}^{{t_h}}} $ | (4) |
式中:
获取预测框的信息后,需要进行类别置信度得分计算,如式(5)所示。
$ {\text{Score}} = P\left( {{\text{clas}}{{\text{s}}_i}|{\text{obj}}} \right) \times P\left( {{\text{obj}}} \right) \times {\text{IoU}}_{{\text{pred}}}^{{\text{truth}}} $ | (5) |
式中:
最后,通过非极大值抑制对获得的预测框进行筛选,得分高的预测框作为检测框。
1.3 YOLOv4在铝材缺陷检测中的问题1)铝材缺陷数据集中存在着不同种类的复杂缺陷,对于算法的特征提取能力要求高。YOLOv4算法采取CSPDarknet53网络,同时引入SPP和PANet结构,加强了网络的特征提取能力,但是在铝材缺陷数据集中仍显不足,对于特征不明显的缺陷以及宽高比例大的缺陷容易漏检。
2)铝材缺陷数据集中既存在大目标,也存在小目标,原YOLOv4算法在检测时,很难同时兼顾大小目标的检测,小目标检测精度低。
2 改进的YOLOv4算法 2.1 SE模块为了提高网络的特征提取能力,在网络中引入了挤压与激励模块(squeeze and excitation, SE)[15]。整体结构如图2所示。
首先将输入Input进行挤压,通过全局平均池化,使得每个通道都被压成1×1的维度,接着通过全连接层去寻找各个通道间的相关性,比起一个全连接层,使用两个全连接层具有更多的非线性,可以很好地拟合各个通道之间地相关性,同时在参数量和计算量上也没有增加多少。然后通过sigmoid激活函数对各个通道权重进行归一化,最后再与输入进行scale操作,即各个通道权重与输入Input对应通道的二维矩阵相乘。
如图3所示,是本文实际使用的SE模块,由于此处全连接和1×1卷积是等价的,为了统一,将2个全连接层都替换成1×1卷积,在权重归一化上,使用Hard-sigmoid激活函数来替代Sigmoid,前者是后者的近似,计算速度更快,不需要经过幂运算,能够在保证引入SE模块提高精度的同时,又不会带来复杂的运算,花费代价小。两种激活函数曲线如图4所示。
2.2 改进SPP
YOLOv4网络中的最大池化层SPP,采取的是3个池化核,尺寸分别是5×5,9×9,11×11,具体实现是将输入特征图分别进行最大池化,将池化后的特征图与输入特征图进行通道拼接,即为输出结果。由于铝材缺陷数据集中存在着宽高比例大的缺陷,所以原池化核尺寸并不完全适用。本文将3个池化核改为2个,池化核尺寸分别为3×1和1×3,对应水平和垂直方向的特征信息,将水平和垂直方向的信息分别提取,然后再与原输入特征图拼接,这种方式更适用于铝材数据集,在对长条形缺陷进行池化时,能够保留短边的信息,改善训练效果。
2.3 改进PANet图5是YOLOv4中的PANet结构示意图,P3、P4、P5是3个输入,表示特征提取网络输出的3个特征层,通过自底向上和自顶向下的方式进行连接,最后获得三个输出,P3_out、P4_out、P5_out。
改进PANet如图6所示,P3,P4,P5在经过卷积层后才进行拼接,其中P5不仅经过更多卷积层,还经过了SPP层,在进行拼接时,由于扩大了感受野,损失了很多浅层信息。为了保留更多的信息,将输入信息也拼接进来,即做一个通道维度上的拼接,这样能够融合更多的特征,不仅能优化对小目标的检测,网络整体的特征提取能力也获得提高。
2.4 改进后的YOLOv4整体结构
改进后的YOLOv4整体网络结构如图7所示,注意力机制SE模块被添加进了CSPResblock中,与之搭配,在主干网络的三个特征输出层后采用了Mish函数,有利于模型的训练,提高网络的特征提取能力。SPP模块中的3个池化核被2个尺寸分别为3×1和1×3的池化核替代,改善对于大宽高比缺陷的检测能力。PANet模块也进行了改进,将浅层输入信息与后续的输出进行拼接,整合了更多浅层的信息,有利于小目标的检测。
3 实验与分析 3.1 铝材数据集
数据来自天池铝材缺陷数据集,数据中的缺陷是在真实工业环境下收集的,包含十种铝材表面缺陷,不导电(D1)、喷流(D2)、擦花(D3)、杂色(D4)、桔皮(D5)、漆泡(D6)、漏底(D7)、脏点(D8)、角位漏底(D9)及起坑(D10)。本文使用了2774张单瑕疵缺陷图,其中训练验证集(9:1)为1938张,测试集为836张。在数据增强上,采取了离线和在线增强的方式,通过翻转(上下、左右、同时进行)操作对训练集数据进行了离线数据增强,主要针对数量较少或尺寸较小(喷流、擦花、脏点、漆泡、桔皮)的缺陷类别进行增强,避免各类别间数量差距过大,在网络输入时也结合在线增强的方式进行训练,避免过拟合,提高训练效果。离线增强后的训练集见表1。
缺陷类型 | 图片数量 | 包含缺陷数量 |
不导电 | 273 | 321 |
喷流 | 240 | 332 |
擦花 | 356 | 708 |
杂色 | 255 | 255 |
桔皮 | 242 | 246 |
漆泡 | 228 | 664 |
漏底 | 376 | 452 |
脏点 | 364 | 628 |
角位漏底 | 241 | 241 |
起坑 | 284 | 284 |
合计 | 2859 | 4131 |
3.2 实验条件
实验是在windows10操作系统下进行的,使用的显卡为:NVIDIA GeForce RTX 3080,处理器为:英特尔Core i9-10900@2.80GHz。网络输入尺寸为256×256,训练时采用的是带预热的余弦退火算法,基础学习率和预热学习率均设置为0.0001,最终学习率为0.000001,训练的总轮次epoch设置为200,预热轮次epoch为40。
3.3 评价指标为了评价算法的性能,引入了三个指标,分别是精确率(
精确率表示算法预测的准确性,召回率能衡量算法的查全情况,是否漏检。计算分别如式(8)、(9)所示。
$ {\text{precision}} = \frac{{{\text{TP}}}}{{{\text{TP}} + {\text{FP}}}} $ | (8) |
$ {\text{recall}} = \frac{{{\text{TP}}}}{{{\text{TP}} + {\text{FN}}}} $ | (9) |
式中:
平均精确率均值(
$ {\text{AP}} = \int_0^1 {P\left( R \right)} {\rm d}R $ | (10) |
$ {\text{mAP}} = \frac{{\displaystyle \sum\limits_{i = 1}^{{N}} {{\text{A}}{{\text{P}}_i}} }}{{{N}}} $ | (11) |
式中:
为了衡量改进前后算法的检测性能,在测试集上进行了评估。表2为改进前后算法mAP的对比,从表中可以看出,改进后的YOLOv4算法在平均检测精度(mAP)上有了明显的提升。特别的,改进后的算法对喷流、擦花、漆泡等缺陷的检测精度提升明显。不足的是,虽然缺陷检测精度有所提高,但对于擦花、漆泡、脏点等缺陷的检测精度仍然处于较低水平。究其根源,擦花缺陷容易被铝材背景所掩盖,而且缺陷中间存在断续,影响了正常检测,而漆泡和脏点目标较小,即使算法进行了优化,仍然存在局限性,与背景相似时,检测难度更是倍增。
指标 | 算法 | ||
YOLOv4 | Improved YOLOv4 | ||
AP/% | 不导电 | 83.77 | 83.74 |
喷流 | 59.80 | 73.11 | |
擦花 | 37.99 | 54.09 | |
杂色 | 100.00 | 98.18 | |
桔皮 | 96.82 | 98.74 | |
漆泡 | 32.90 | 40.23 | |
漏底 | 92.23 | 93.85 | |
脏点 | 49.14 | 50.76 | |
角位漏底 | 100.00 | 100.00 | |
起坑 | 99.94 | 100.00 | |
mAP/% | 75.26 | 79.27 |
部分缺陷样例的检测示例效果如图8所示,分别用YOLOv4和本文算法进行检测。图中给出4类典型缺陷(易漏检),可以看出,本文算法检测出了更多的缺陷,检测效果更好,在漏检问题上有很大的优化。
为了进一步验证本文提出的改进方法对YOLOv4算法的影响,进行了消融实验,对每个实验进行编号,编号为1~4,实验设置和结果分别见表3、表4。实验1中使用的是原始YOLOv4算法,未进行改进。实验2在CSPResblock残差结构中引入了注意力机制SE模块,同时在各个特征层的输出卷积部分采取了Mish函数,与SE相搭配,有利于各个通道权重的训练,提高网络对重要信息的关注,对比实验1,可以发现,对于D3(擦花)和D6(漆泡)的检测精度AP提升明显,mAP提高了1.7个百分点。实验3对算法中的SPP模块进行了改进,分别采取1×3和3×1的池化尺寸进行最大池化,然后进行拼接,可以适应数据中存在的大量长条形缺陷,和实验2比较,可以发现,除了D6(漆泡)和D8(脏点)外,其余缺陷的AP值基本都获得了提高,这主要是由于这些缺陷宽高比例大,获得改善后,mAP提高了0.76个百分点。实验4对算法中的PANet结构进行了改进,在输出中融合了更多输入的信息,一定程度上改善了对小目标的检测能力,网络的特征提取能力也获得增强,对比实验3,可以发现,D2(喷流)、D6(漆泡)以及D8(脏点)的AP提高明显,主要是因为喷流、漆泡和脏点属于小尺寸的缺陷,得到改善后,mAP提高了1.55个百分点。由此可见,本文提出的改进方法确实有效地提高了算法的精度。
编号 | AP/% | mAP/% | FPS/(帧·s-1) | |||||||||
D1 | D2 | D3 | D4 | D5 | D6 | D7 | D8 | D9 | D10 | |||
1 | 83.77 | 59.80 | 37.99 | 100.00 | 96.82 | 32.90 | 92.23 | 49.14 | 100.00 | 99.94 | 75.26 | 34.40 |
2 | 82.19 | 59.59 | 50.69 | 98.18 | 98.57 | 37.56 | 92.10 | 50.76 | 100.00 | 100.00 | 76.96 | 26.73 |
3 | 84.87 | 61.03 | 56.75 | 99.97 | 98.83 | 35.98 | 93.08 | 46.73 | 100.00 | 100.00 | 77.72 | 26.94 |
4 | 83.74 | 73.11 | 54.09 | 98.18 | 98.74 | 40.23 | 93.85 | 50.76 | 100.00 | 100.00 | 79.27 | 27.24 |
为了检测改进后算法的效果,将其与其他目标检测算法进行比较,对比结果见表5。从表中可知,改进后的YOLOv4算法在精度上优于其他算法,mAP达到了79.27%,FPS也达到了27.24,能够满足检测的需求。
算法 | mAP/% | FPS/(帧·s-1) |
SSD300 | 72.46 | 88.55 |
Retinanet | 57.52 | 50.57 |
Centernet | 67.60 | 76.28 |
YOLOv3 | 71.71 | 54.13 |
YOLOv4 | 75.26 | 34.40 |
Improved YOLOv4 | 79.27 | 27.24 |
4 结束语
本文提出了一种基于改进YOLOv4算法的铝材表面缺陷检测方法。对铝材数据集进行了数据增强,防止过拟合,有利于模型训练。引入注意力机制SE模块,使得网络关注关键特征,提高特征提取能力。改进SPP模块,分别使用1×3和3×1的尺寸进行最大池化,然后拼接,提高网络对于大宽高比缺陷的检测能力。最后,对PANet结构进行改进,融合更多浅层的信息,提高对小目标的检测能力。与YOLOv4相比,改进后的算法具有更高的精度,mAP达到了79.27%。但本文算法也存在着不足之处,在对擦花、漆泡、脏点的检测上,精度仍处于较低水平,还需进一步研究。
[1] |
DALAL N, TRIGGS B. Histograms of oriented gradients for human detection[C]//Proceedings of IEEE Conference on Computer Vision and Pattern Recognition, 2005: 886-893.
|
[2] |
LOWE D G. Distinctive image features from scale invariant key points[J].
International Journal of Computer Vision, 2004, 60(2): 581-588.
|
[3] |
VAPNIK V N. The nature of statistical learning theory[J].
Technometrics, 1997, 8(6): 1564.
|
[4] |
SUVDAA B, AHN J, KO J. Steel surface defects detection and classification using SIFT and voting strategy[J].
International Journal of Software Engineering and Its Applications, 2012, 6(2): 161-166.
|
[5] |
郭慧, 徐威, 刘亚菲. 基于支持向量机的钢板表面缺陷检测[J].
东华大学学报(自然科学版), 2018, 44(4): 635-639.
GUO H, XU W, LIU Y F. Steel plate surface defect detection based on support vector machine[J].
Journal of Donghua University(Natural Science), 2018, 44(4): 635-639.
|
[6] |
殷鹰, 谢罗峰, 黄泰博. 基于深度学习的磁瓦内部缺陷声振检测方法[J].
中国测试, 2020, 46(3): 32-38.
YIN Y, XIE L F, HUANG T B. A deep learning method for magnetic tile internal defect inspection based on acoustic vibration[J].
China Measurement & Test, 2020, 46(3): 32-38.
DOI:10.11857/j.issn.1674-5124.2019050035 |
[7] |
伊欣同, 单亚峰. 基于改进Faster R-CNN的光伏电池内部缺陷检测[J].
电子测量与仪器学报, 2021, 35(1): 40-47.
YI X T, DAN Y F. Internal defect detection of photovoltaic cells based on improved Faster R-CNN[J].
Journal of Electronic Measurement and Instrument, 2021, 35(1): 40-47.
|
[8] |
彭伟康, 陈爱军, 吴东明, 等. 基于改进Faster R-CNN的水准泡缺陷检测方法[J].
中国测试, 2021, 47(7): 6-12.
PENG W K, CHEN A J, WU D M, et al. Defect detection method of level bubble based on improved Faster R-CNN[J].
China Measurement & Test, 2021, 47(7): 6-12.
DOI:10.11857/j.issn.1674-5124.2020090072 |
[9] |
程婧怡, 段先华, 朱伟. 改进YOLOv3的金属表面缺陷检测研究[J].
计算机工程与应用, 2021, 57(19): 252-258.
CHENG J Y, DUAN X H, ZHU W. Research on improving metal surface defect detection of YOLOv3[J].
Computer Engineering and Applications, 2021, 57(19): 252-258.
DOI:10.3778/j.issn.1002-8331.2104-0324 |
[10] |
吴越, 杨延竹, 苏雪龙, 等. 基于Faster R-CNN的钢板表面缺陷检测方法[J].
东华大学学报(自然科学版), 2021, 47(3): 84-89.
WU Y, YANG Y Z, SU X L, et al. Surface defect detection method for steel plates based on Faster R-CNN[J].
Journal of Donghua University(Natural Science), 2021, 47(3): 84-89.
|
[11] |
李庆党, 李铁林. 基于改进YOLOv3算法的钢板缺陷检测[J].
电子测量技术, 2021, 44(2): 104-108.
LI Q D, LI T L. Steel plate defect detection based on improved YOLOv3 algorithm[J].
Electronic Measurement Technology, 2021, 44(2): 104-108.
|
[12] |
REN S Q, HE K M, GIRSHICK R, et al. Faster R-CNN: Towards real-time object detection with region proposal networks[J].
IEEE transactions on pattern analysis and machine intelligence, 2016, 39(6): 1137-1149.
|
[13] |
BOCHKOVSKIY A, WANG C Y, LIAO H Y M. Yolov4: Optimal speed and accuracy of object detection[C]//IEEE conference on Computer Vision and Pattern Recognition, 2020.
|
[14] |
REDMON J, FARHADI A. Yolov3: An incremental improvement[C]//Proceedings of 2018 IEEE Conference on Computer Vision and Pattern Recognition, 2018: 1-6.
|
[15] |
HU J, SHEN L, SUN G. Squeeze-and-excitation networks[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2018: 7132-7141.
|