1. 引言
钢铁是汽车制造、航空航天设备制造等基础设施项目的重要原材料。它对现代社会的经济发展和技术进步作出了重大贡献。然而,在这些原材料的生产和运输过程中,设备故障、操作失误、运输损坏等问题会产生多重表面缺陷和缺陷。例如,钢材表面会产生裂纹、划痕、斑块、冲孔、压痕等缺陷,这些缺陷会严重影响工业制造的安全性和可靠性。因此,如何快速准确地检测钢材表面缺陷是保证钢材质量的重要操作。
随着人工智能的发展,基于深度学习的目标检测算法[1] [2]因强大的表征能力得到了广泛应用。该算法分为两类:一类是二阶段的目标检测算法[3],其检测问题分为两步,首先在被检测图像上生成候选区域,之后对这个区域分类,其主要代表有fast r-cnn [4]、mask r-cnn [5]等。另一类是一阶段目标检测算法,主要代表有yolo、retinane、ssdt等,这些算法通过简单操作就可以得到检测结果,一阶段算法可以在检测精度和速度上取得较好的平衡。
sharif razavian a等人[6]的研究结果表明,从卷积网络的深度学习中获得的特征是大多数视觉识别任务的主要候选。ren等人[7]提出了faster r-cnn算法,用区域建议网络替换之前的选择性搜索算法,实现端到端的训练,大大减少了训练时间,同时也有效地提高了检测精度和速度。ni j等人[8]提出了一种改进的目标检测方法,该方法采用了多盒检测器ssd的框架,并且用改进的双阈值非最大抑制算法dt-nms来缓解室内场景中的遮挡问题。wang y等人[9]提出了一种深度学习模型retanet对象检测器来解决由于多分辨率成像方式及船舶形状的多样性的问题。文献[10]-[12]介绍了yolo算法的发展过程,总结了目标识别和特征选择的方法,对目标检测文献做出很大的贡献。yolo算法自面世以来,就受到业界学者的广泛关注。其中mi z等人[13]为了提高铁路缺陷检测的准确性,提出了一种基于yolov4模型的算法对铁路缺陷进行检测。为了获得较强的分类能力,li m等人[14]提出了一种基于改进yolov4的钢表面缺陷检测方法,将注意力机制引入主干网络中,再将路径聚合网络修改为感受野结构。zhang y等人[15]提出了一种基于改进的yolov5网络的不同交通场景下的车辆检测方法,该方法采用翻转镶嵌算法增强对小目标的感知能力,但实验结果达不到最好的标准。wu w等人[16]将局部fcn (fully convolution neural network)和yolo-v5联合应用于遥感图像中的小目标检测,使检测提取图像目标特征的能力更强,但是实验使用的样本数据集比较单一,并不具有代表性。shen l j等人[17]对热轧带钢表面缺陷的定位进行了研究,提出了一种基于yolov7的改进算法检测,将bi-sppfcspc结构纳入特征金字塔,carafe采样算子用于上采样使网络模型训练加快收敛,但其计算量较大不利于工业使用。jiang等人[18]提出了一种改进的关注机制算法cbam-yolov7,在yolov7骨干网中增加了3个cbam模块,提高了网络的特征提取能力,促进智能可靠自动数麻鸭群的发展。
用于缺陷检测的算法多种多样,但大多数算法难以平衡检测精度和检测速度。由于缺陷在类型、尺寸、形式和纹理质量方面不规则分布的复杂性,导致精确识别表面缺陷很困难。另外还受真实场景下光照强度、复杂背景、目标遮挡等因素的干扰,这些干扰因素加剧了检测难度。
基于上述研究和分析存在的局限性,本文以yolov8为基线提出一种轻量化的带钢表面缺陷检测模型yolov8-vcra,该网络旨在解决这些挑战,提高带钢表面缺陷检测的准确度和快速性。本文的主要创新和贡献如下:
1) 真实场景下细粒度分类较困难,会消耗更多的计算资源。使用轻量级的vanillanet网络替换原yolov8骨干网络,以简化主干网络结构,提高计算资源效率,实现主干网络模型的轻量化,有助于提高钢材检测实时性。
2) 小目标的分辨率低、信息有限,在下采样过程中容易丢失关键特征,导致漏检、误检现象严重。设计残差反馈块(receptive field block, rfb)与注意力模块(convolutional block attention module, cbam)相结合,构成新模块cbam-rfb。这个新模块旨在增大感受野,增强对模糊钢材特征提取的感知场,有利于增强小目标的特征信息,提高小目标检测精度。
3) 为了更好地进行特征融合,增强网络的特征处理能力,借鉴了渐近特征金字塔网络(aggregated feature pyramid network, afpn)的思想,对yolov8的特征融合结构进行自适应空间特征融合的优化,使待检测特征图包含更多信息,尤其是低级空间信息。有助于网络更好地关注到目标所在区域,提高召回率。
2. 相关工作
2.1. 基线yolov8
近年来,yolo算法不断更新,ultralytics团队在23年提出了yolov8算法,其在满足实时性的同时,还具备着较高的检测精度和轻量化的优点,适合应用于对钢材缺陷的检测进行针对性设计。
本文采用一阶段检测算法yolov8作为基线模型,yolov8是由其原作者开发的yolov5的改进版本。yolov8的特点在于融合了许多实时目标检测中优异的技术,仍然采用了yolov5中的csp(跨阶段局部网络)思想、特征融合方法(pan-fpn)和sppf模块。如图1所示该网络主要由骨干特征提取网络(backbone)、特征融合网络(neck)以及检测头(head)组成。在骨干网络中,与yolov5相比,yolov8采用更轻量的c2f模块,第一层卷积由原本的6 × 6卷积改为3 × 3卷积,深度由c3模块的3、6、9、3改为c2f的3、6、6、3;在特征融合网络中,yolov8移除了1 × 1卷积的降采样层,同时将c3模块换成了c2f模块;在检测头中,yolov8使用的是解耦头,对分类和回归任务解耦,又把anchor-based换成anchor-free。此外,yolov8使用bce loss作为分类损失、dfl loss ciou loss作为回归损失。yolov8在准确性和检测速度方面都比yolov5有了各种改进。然而,它在有效检测小目标方面有明显的局限性,特别是由于sppf结构中的连续池化操作可能导致丢失与小目标相关的细微特征。并且其中c2f模块堆加了很多的bottleneck结构,使不同尺度的特征能得到更好的表现,但这样也导致了通道信息的过度冗余以及更大的计算量。
figure 1. yolov8 structure diagram
图1. yolov8结构图
2.2. yolov8-vcra模型
figure 2. yolov8-vcra structure diagram
图2. yolov8-vcra结构图
为了提高缺陷检测模型的性能、效率以及泛化能力,基于yolov8模型进行改进,优化主干网络和颈部网络,基于yolov8框架使用简单而强大的轻量级神经网络vanillanet [19]作为骨干特征提取网络,减少不必要的分支结构降低模型的复杂度。同时,利用注意力机制对融合前的特征图进行更新,避免忽略一些次要信息,将残差反馈块rfb [20]纳入通道维度与注意力模块cbam [21]模块相结合,从而更关注待检测目标的关键特征。在模型的颈部网络部分,提出将渐近特征金字塔网络afpn [22]采用渐近方式进行特征融合和自适应空间融合运算,使在特征金字塔顶部的深层特征与底部的浅层特征在融合之前的传播和交互过程中,有效降低深层特征的语义信息丢失或退化的可能性,模型结构如图2所示。
2.2.1. vanillanet模块
由于带钢表面缺陷检测的终端设备计算能力有限,导致在部署计算量庞大的缺陷检测模型时受到限制。在以往的缺陷检测模型中,通常对颈部网络进行轻量化操作。然而,这种轻量化操作并未显著减少计算资源,难以达最优轻量化效果。因此本文在基线模型yolov8的骨干网络中引入了vanillanet模块,vanillanet只包含基本的卷积层和池化层,没有复杂的连接或跳跃连接,从而减少了模型的计算量和参数量,解决了固有的复杂性问题,非常适合资源有限的环境。
vanillanet的网络结构很简单,由steam、body、fully connected三部分构成,其网络结构如图3所示,我们以6层为例,展示vanillanet的架构。首先,我们使用步长为4的4 × 4 × 3 × c卷积层,将具有3通道的图像映射。然后在第1、2和3阶段,使用步幅为2的max pooling层来减小大小和特征映射,通道数增加2。在阶段4中不增加通道的数量,遵循平均池化层。最后一层是输出分类结果的全连接层。为了保留特征映射信息,必须使用最小的每层计算代价。为了简化网络的训练过程,在每一层之后还加入了批归一化。
figure 3. vanillanet network structure diagram
图3. vanillanet网络结构
vanillanet没有快捷方式使得架构非常容易实现,因为没有分支和额外的块。对于vanillanet的架构简单,其较弱的非线性可能对性能造成了限制,因此,深度训练策略非常完美的解决了这个问题。
深度训练策略的核心思想是在训练初期训练两个卷积层和一个激活函数。随着训练的进行,激活函数逐渐演变成一个恒等映射。在训练结束时,通过结构重参数化,可以将两个卷积层合并为一个,从而减少推理时间。对于一个激活函数a(x) (例如常见的relu和tanh),我们将它和一个恒等映射结合起来,如式(1):
(1)
其中λ是一个超参数,以平衡非线性的修改激活函数a'(x)。将当前epoch和深度训练epoch的个数分别表示为e和e。设λ是e与e的比值。因此,在训练开始时(e = 0),a'(x) = a(x),说明网络具有较强的非线性。当训练收敛时,我们得到a'(x) = x,这意味着两个卷积层中间没有激活函数。它是由一个传统非线性激活函数(如relu等)和恒等映射加权得到。在网络训练的初始阶段,非线性激活函数会占主导地位,使得网络在开始训练时具有较高的非线性,在网络训练的过程中,恒等映射的权值会逐渐提升,此时该激活函数会逐渐变为线性的恒等映射,通过公式(2)简单推导:
(2)
所以不具有非线性激活的两个卷积层就可以被融合为一层,从而使得极简网络也具有了高精度。
2.2.2. 注意力机制
注意力机制[23]可以帮助网络模型学习输入信息重要度。它的操作主要是通过对输入数据的不同部分赋予不同的权重来模拟人类注意力的技术,有助于避免过拟合的情况发生,所以引入注意力机制能提升网络的特征处理能力。yolov8在检测小目标方面有明显的局限性,尤其是小目标细微特征的丢失,为了解决这个缺点,将cbam模块与另一种注意力算法rfb相结合,设计了一个称为cbam-rfb的新模块。如图4所示,这个新模块旨在增强对模糊钢材特征提取的感知场,提升小目标表征能力。
figure 4. cbam-rfb structure diagram
图4. cbam-rfb 结构图
随着网络结构的不断加深,用于检测的目标特征也越来越抽象,这就使得浅层特征没有得到很好的利用,往往使得目标定位不够准确。特别是图像中的小目标,其本身所占像素就很少,在训练过程中的池化操作会使获得的特征更加不明显,不利于检测。恰好rfb是一种采纳了多种目标检测算法优点的模块,一方面是它的改进能力,不增加模型复杂性属于轻量级网络,它通过对多个扩张率不同的卷积核组成的分支进行特征融合,再通过1 × 1卷积更改通道数,能够加强模型对深度特征的学习能力,提升检测效率和精度。另一方面是在特征图尺寸不变的情况下,可以通过小卷积核获得大卷积核替代上下采样操作,既获得了多尺度信息,又避免了上下采样过程中导致的信息损失,从而提升模型感知能力。
在rfb结构中用rate表示卷积层dilated的参数。模型最后会对其进行concat,以达到融合不同特征的目的。以下是rfb结构示意图5。
cbam是一个轻量级的模块,如图6所示,它可以无缝地插入到任何cnn架构中,是一种简单高效的前馈卷积神经网络注意模块。本文加入cbam模块,增强了网络的抗干扰能力,从通道和空间两个维度强化目标的重要特征,有助于提升网络对小目标的关注度。使用cbam的原因如下:
1) 强大的表征能力:cbam注意力模块可以自适应地选择和调整特征图的通道权重和空间权重,从而更好地捕获到重要特征。
2) 与其他模块相比效率高:其他一些注意力模块相比,cbam注意力模块的计算量相对较小。
3) 对不同任务具有较好的适应性:cbam注意力模块可以应用于许多不同的视觉任务。
figure 5. rfb network structure diagram
图5. rfb网络结构图
figure 6. cbam network structure diagram
图6. cbam网络结构图
cbam模块包含两个独立的子模块,分别是通道注意力模块(channel attention module, cam)和空间注意力模块(spatial attention module, sam),在通道与空间上分别进行attention。这样不只能够节约参数和计算量,还保证了其能成为即插即用的模块。
cam的结构如图7所示。它在空间维度上对特征映射进行压缩,对得到的向量进行关联。
figure 7. cam network structure diagram
图7. cam网络结构图
sam结构如图8所示,它在通道维度中利用平均池化和最大池化,将输出的特征映射作为该模块的输入特征映射。
figure 8. sam network structure diagram
图8. sam网络结构图
2.2.3. 特征金字塔网络
一种支持非相邻层次直接交互的渐近特征金字塔网络afpn。其采用渐近方式进行特征融合和自适应空间融合运算,能充分融合深层特征图中的高级语义特征与浅层特征图中的细粒度特征,增强不同网络层之间的信息传递,丰富了小目标的特征信息。afpn的架构如图9所示,其中在分配空间权重作自适应特征融合过程中,利用asff为不同level的特征分配不同的空间权重,增强了关键level的重要性,并减轻了来自不同目标的矛盾信息的影响。
figure 9. afpn network structure diagram
图9. afpn网络结构图
3. 实验结果与分析
3.1. 数据集与预处理
本课题的研究需要从数据的获取到最终缺陷检测模型进行整体的设计,首先数据集使用东北大学提供的公开数据集neu-det进行训练与评估,该数据集由1800张灰度图像组成,共包含六种常见的钢表面缺陷,如图10所示:即开裂(cr),内含物(in),斑块(pa),点蚀表面(ps),轧制氧化皮(rs)和划痕(sc)。每种缺陷各包含300张灰度样本图像。该数据集中总共包含近4200个缺陷,随机筛掉180张图片,其余剩下的1620图片中1134张图像用于测试,剩余的486张图像用于训练和验证,使用该数据集进行测试,能确保模型适应不同类别的缺陷,还具有较高的泛化能力。
figure 10. classification of surface defects on strip steel in the neu-det dataset
图10. neu-det数据集中带钢表面缺陷类别
由于neu-det数据集使用xml文件标注标签信息,而支持yolo算法训练的数据集标签格式为yolo格式,即打标注的图片标签文件格式为txt。因此,需要将xml格式的数据集标签文件转化为txt格式。具体来说,需要在xml文件中提取每个item中的类别信息以及四个坐标点信息,并将它们保存在对应的txt文件中,这样就可以支持yolo算法的训练。
3.2. 其它数据集
数据集图片来源于2018广东工业智造大数据创新大赛–智能算法赛《铝型材表面瑕疵识别》的初赛开源数据集。
3.3. 实验设定
本文的实验环境包括linux、nvidia geforce rtx 3080ti显卡(nvidia corporation, santa clara, ca, usa)和pytorch 1.8.1框架。网络的超参数设置会影响检测结果。所以要多次重复实验和比较,选择出一组最优的训练参数。模型具体参数设置如表1所示:
table 1. the specific parameter setting of model
表1. 模型训练的具体参数设置
参数名称 |
参数值 |
batchsize |
16 |
学习率 |
0.01 |
优化器 |
sgd |
训练轮数 |
300 |
权重衰减 |
0.005 |
评估标准
为了测试我们提出的改进模型的检测性能,我们使用了深度学习中经常用于目标识别的几种评估指标:单个类别的平均精度(ap)、总体平均精度值平均精度(map)、参数(parameters)和计算量(gflops),模型计算量和模型参数量分别是评估模型计算效率和模型容量的关键指标。
3.4. 消融实验
为了验证不同模块对模型性能的影响,本文在公开数据集上设计了消融实验,实验结果如表2所示:
table 2. result of ablation experiment
表2. 消融试验结果
group |
yolov8n |
vanillanet |
afpn |
cbam-rfb |
map (%) |
params (m) |
flops (g) |
1 |
√ |
|
|
|
74.6 |
3.01 |
8.2 |
2 |
√ |
√ |
|
|
74.3 |
2.09 |
6.3 |
3 |
√ |
√ |
√ |
|
75.5 |
2.18 |
6.4 |
4 |
√ |
√ |
√ |
√ |
75.8 |
2.06 |
5.1 |
在表中,g1组使用yolov8进行实验,结果为基线网络的map达到74.6%,模型参数量为3.01m,模型计算量为8.2g。通过实验结果可知,与现有的钢表面缺陷检测方法相比,该算法在精度和速度方面都表现出优势,但其效果仍然不够理想。所以g2组在yolov8的主干网络中引入vanillanet模块,此时map达到了74.3%,模型参数量为2.09m,模型计算量为6.3g。相比原yolov8进行缺陷检测时,模型参数量和模型计算量减少了0.92m和1.9g,这证明用vanillanet替代主干网络方法的有效性。g3组实验在g2的基础上,在颈部引入afpn特征融合网络,此时模型的参数量为2.18m,map值为75.5%,模型计算量为6.4g。相比原yolov8网络模型,map值提升了0.9%,且模型计算量减少了1.8g。g4组实验是三个改进点的组合,其中引入cbam-rfb结构,模型的参数量为2.06m,模型计算量为5.1g,map为75.8%。相比原yolov8网络的map提升了1.2%,模型的参数量降低了0.95m,并且模型计算量降低了3.1g。由此看出,模型的精度稍有增加,但模型的参数量和计算量大大降低。因此,改进后的网络模型具有较好的检测精度和很好的检测速度。
3.5. 定性分析
图11分别是由yolov8算法及本文算法检测结果图。图中每个框代表检测到的缺陷区域,其上方标注了缺陷类别和缺陷的置信度。通过结果图可以看出,本文算法对钢表面缺陷的检测效果非常好,对漏检和误检情况有了很大的改善。
figure 11. schematic diagram of defect detection effect
图11. 缺陷检测效果示意图
3.6. 其他数据集对比实验结果
为了进一步验证本文提出的模型效果,本文又在公开数据集apspc上对yolov8以及本文改进算法进行对比实验,结果见表3所示。
table 3. comparison experiment with different data sets
表3. 不同数据集对比实验
methods |
map (%) |
params (m) |
flops (g) |
1 |
67.4 |
3.01 |
8.2 |
4 |
67.6 |
1.89 |
6.3 |
本文提出的改进算法相对于yolov8检测效果均有提升,且保持高检测精度的同时,模型参数量和模型计算量均达到了最优,可以看出本文提出的改进算法不仅在neu-det上结果提升,在其他公开数据集上同样也有明显地提升,说明改进模型具有较高的鲁棒性。
3.7. 与当前先进算法对比实验结果
table 4. comparative experiments of different models
表4. 不同模型对比试验
methods |
map (%) |
params (m) |
flops (g) |
cr |
in |
pa |
ps |
rs |
sc |
ssd300 |
71.4 |
13.1 |
60.9 |
0.411 |
0.796 |
0.839 |
0.839 |
0.621 |
0.836 |
yolov7-tiny |
73.2 |
6.02 |
13.1 |
0.364 |
0.771 |
0.903 |
0.804 |
0.478 |
0.848 |
yolov5s |
74.3 |
7.0 |
15.8 |
0.413 |
0.789 |
0.943 |
0.798 |
0.626 |
0.892 |
yolov5s-cam |
74.5 |
7.18 |
30.0 |
0.338 |
0.777 |
0.925 |
0.750 |
0.633 |
0.867 |
yolov8n |
74.6 |
3.01 |
8.2 |
0.433 |
0.805 |
0.938 |
0.744 |
0.649 |
0.909 |
ours |
75.8 |
2.06 |
5.2 |
0.472 |
0.785 |
0.933 |
0.778 |
0.626 |
0.895 |
如表4所示,上述试验结果表明ssd300、yolov7-tiny、yolov5s、yolov5s-cam检测模型的参数量或者计算量较大,不利于算力资源有限的设备部署使用。ssd算法精度为71.4%,模型参数量和模型计算量很大,没办法有效识别小目标的多个缺陷类别,yolov7-tiny相对于ssd算法而言map提升了1.8%,检测精度有了较大的提升。而yolov5s算法则相对于ssd算法提升2.9%,参数量和计算量也减少了6.1m和45.1g。改进后的yolov5s算法,相对原yolov5s提升了0.2%,但参数量和计算量也均增加了。所以yolov8-vcra的map、参数量、计算量均优于对比的其他检测算法。
4. 总结和未来工作
本文针对钢材表面缺陷检测精度低、易错检、漏掉等问题,提出了一种基于yolov8改进的钢表面缺陷检测算法,算法在网络中引入vanillanet模块、cbam-rfb和afpn模块来提升yolov8模型的检测能力,实验结果表明,改进后的算法能够快速准确地识别判断钢表面的缺陷。本文的思路还是存在许多的不足,未来的研究可以对数据集进行优化,来解决数据集样本较少和图像质量的挑战。同时,可以采用蒸馏、模型剪枝等操作对模型进行精度提升,为了模型未来用于更小目标的数据集上得到验证。