1 问题背景
1.1 问题背景
钢板的表面质量是钢板最为重要的质量因素之一,表面质量的优劣直接影响其最终产品的性能与质量。然而在加工过程中,由于原材料、轧制设备和工艺等原因,导致钢板表面出现结疤、裂纹、锟印、刮伤、针眼、磷皮、麻点等不同类型的缺陷[1]。这些缺陷不仅影响产品的外观,而且降低了产品的抗腐蚀性、耐磨性和疲劳强度等性能。
在钢板轧制过程中,钢板表面缺陷的检测是一种简单的重复性、快速、高度集中的工作,给测试人员带来很大的压力,在目视检测过程中,必须降低钢板的移动速度,降低相应的钢板轧制速度,不可避免地降低生产效率,测试人员不可避免地会受到疲劳、情绪、感觉和技术水平的影响,难以达到精确和定量。此外,对缺陷的记忆存储和分析也比较困难。
如何在生产过程中在线检测钢板的表面缺陷,从而控制和提高钢板产品的表面质量,一直是钢铁加工企业非常关注的问题。
1.2 技术简介
钢板表面缺陷检测技术主要分为两类:传统无损检测技术和基于机器视觉的检测技术。
1.2.1 传统无损检测技术

1.2.2 机器视觉检测技术
机器视觉技术的检测机理是表面缺陷的光学特性间存在着明显的差异。

1.3 技术要求
事实上,传统的无损检测方法由于其检测原理的局限性,可检出的缺陷种类和缺陷定量描述参数极为有限,无法综合评估产品的表面质量状况。激光扫描检测技术灵敏度较高,但其光学系统结构复杂,噪声对检测信号影响很大[4]。CCD检测法同其他方法相比具有很大的优势,但是分辨率和灵敏度有待进一步提高。随着科学技术进一步发展,基于机器视觉的钢板表面缺陷检测技术将是未来研究的主要方向。
基于机器视觉的钢板表面缺陷检测技术的难点是通过图片来识别。
近年来,CCD技术快速发展,线阵相机已经应用于表面检测领域,若将线阵相机部署到生产线上,便可将实时采集的图像发送到监视器,工人仅通过监视器就能观察金属表面状况。如今,许多钢材企业还在采用此方法监控钢材表面质量。但其缺点是依然耗费人力,检测结果不稳定,人工劳作强度大。
近年来深度学习飞速发展,并在多个领域中取得了非常好的研究成果,在图像分类与检测任务中,较为常用的是卷积神经网络,它摒弃了传统机器学习中的手工设计特征提取算法的部分,转而采用网络自学习特征的模式,在与样本数据的交互中进行训练,并采用反向传播算法更新网络架构参数,实现自动特征提取。这样一来能够极大提升算法的普适性,省略手工设计特征提取算法的步骤。
在钢板表面缺陷检测任务中,引入了基于深度学习的算法框架来实现精度与效率更高的在线检测。
2 技术理论
由于我找到了钢板表面缺陷图片的数据集,因此我想使用深度学习的方法来完成钢板表面缺陷识别,在多方权衡后,我使用了Resnet18卷积神经网络,效果较好。
2.1 原理
2.1.1 Resnet背景
在深度学习中,随着网络的加深,能获取的信息越多,而且特征也越丰富。但是事实上随着网络的加深,优化效果反而越差,测试数据和训练数据的准确率反而降低了。这是由于网络的加深会造成梯度爆炸和梯度消失的问题。
针对这种现象已有的解决方法是对输入数据和中间层的数据进行归一化操作,这种方法可以保证网络在反向传播中采用随机梯度下降(SGD),从而让网络达到收敛。但是,这个方法仅对几十层的网络有用,当网络再加深时,这种方法就效果不是很好了。而Resnet网络的出现可以让更深的网络也可以得到更好的训练效果。
2.1.2 Resnet原理
在这个框架中,就我的理解,其中主要的创新点在于残差的引入和跳跃连接的思想。

如上图,在不断加深网络的过程中,对于一般的卷积网络,他会像左边的图一样,在训练过程中,它的性能在提升(即覆盖面积更大),但是复杂模型往往可能会学偏,产生模型偏差,导致模型的效果反而更差了。
而Resnet网络简单来说就是可以使每次新的更复杂的模型都会包含上一个模型,这样就可以保证模型不会更差,简单来说,就像是“套娃”,距离最优解会越来越近。
它的具体实现比较简单,是引入了残差块的概念,实际上这个网络就是残差块的堆叠,就像是搭积木一样。

在串联模块的过程中,我们希望大模型可以在继承小模型的基础上再学到一些新的东西。所以在这里采用的方法就是在原有的基础上加上一个快速通道(如上图B所示),得到一种类似f(x)=x+g(x)的结构。
事实上,在实现过程中,往往要在快速通道上添加一个1x1的卷积层(如上图D所示),其目的是为了保证维度的相同,便于模型的可加。
残差块的实现往往是不同的,写法是多种多样的,但其中的核心思想是不变的。
其实Resnet的网络架构类似于VGG和GoogleNet,只是替换了残差块而已。
2.2 应用技术
2.2.1 技术路线

2.2.2 技术介绍
利用机器视觉检测技术的钢板表面缺陷检测系统是在不锈钢研磨线上对钢板上下表面利用机器视觉检测技术进行实时检测,通过图像采集卡在特殊光源的配合下获取钢板表面的图像,自动从图像中准确定位并识别缺陷。机器视觉检测技术与传统的人工目视检测相比,具有快速、可靠和准确的优点,目前已被钢铁企业广泛应用[5]。
钢板表面缺陷检测系统架构主要由工业CCD摄像机、LED照明系统、图像采集及处理计算机系统、数据统计与管理系统等组成。
LED光源以一定方向照射到钢板表面上,CCD像机在钢板上扫描成像,扫描所得的图像信号经过图像采集卡输入计算机,通过图像预处理得到钢板表面缺陷的二值图像,提取二值图像中的几何特征参数,然后再进行图像识别,判断出是否存在缺陷。若有,则保存图像;若没有,则放弃图像。
考虑到钢板生产加工速度快,同时检测对分辨率及速度要求较高,且设备安装空间有限,适用于2D线扫描方案,为减弱钢板振动影响,建议附加检测辊。
考虑到钢板表面三维缺陷同样对其质量产生重要影响,因此深度信息对钢板表面质量的判定同样重要。可以采用3D线激光方案(为了避免镜面反射等问题,可调整线激光入射角度实现激光图像获取),通过线激光、面阵相机及钢板形成完整的轮廓检测系统实现表面检测。考虑到线阵系统对传送振动较为敏感,也可以采用2D面阵相机实现条纹图像采集,利用傅里叶变换轮廓术或相位偏折术等技术实现相位提取,可以更好地解决钢板在传送过程中振动、二维缺陷灰度信息干扰及照明环境不稳定等问题,提高缺陷检出率[6]。
钢板表面缺陷检测系统,利用机器视觉检测技术的基本原理,在钢板的最后一道工序代替人工检测,钢板表面缺陷检测系统不仅可以实时对钢板表面缺陷检测,还能提供数据库管理缺陷以及钢板其他信息,为管理人员提供方便的数据统计及报表打印功能,辅助进行钢板质量管理工作。机器视觉检测技术在不锈钢表面检测与研磨领域得到广泛运用。
2.3 设计方案
2.3.1 编程工具
Visual Studio Code 1.73.1
2.3.2 编程环境
Anaconda、Python3.9
2.3.3 设计方案
(1)数据预处理:
图像灰度处理:改善画质,使图像的显示效果更加清晰;简化矩阵,提高运算速度。
对输入图像进行大小调整:保证所有图片的大小一致,便于神经网络的训练。
数据增强:随机将30%图片水平翻转、垂直翻转、不规则拉伸(拉伸力度0.3),图片随机旋转(0-180度)。扩充数据集,提高模型的泛化能力。
数据归一化:把需要处理的数据限制在一定范围内。为了后面数据处理的方便,并保证程序运行时收敛加快。
(2)特征提取:
利用Resnet卷积神经网络获取特征:使用卷积核来提取图片的特征向量,多层卷积可以提取多层特征,获取其中的隐含特征。
(3)图像分类:
利用CNN卷积+全连接堆叠的神经网络:使用类别编号作为标签,使用CNN卷积+多个全连接层作为分类器的实现。
(4)模型的调优:
使用Adam(自适应矩估计)优化器与CrossEntropyLoss(交叉熵)损失函数来进行模型的调优。
2.3.4 网络结构

2.3.5 代码实现
import glob
import torch
from torch.utils import data
from PIL import Image
import numpy as np
from torchvision import transforms
import matplotlib.pyplot as plt
import torch.nn as nn
import torch.optim as optim
from tqdm import tqdm
import sys
#通过创建data.Dataset子类Mydataset来创建输入
class Mydataset(data.Dataset):
# 类初始化
def __init__(self, root):
self.imgs_path = root
# 进行切片
def __getitem__(self, index):
img_path = self.imgs_path[index]
return img_path
# 返回长度
def __len__(self):
return len(self.imgs_path)
#使用glob方法来获取数据图片的所有路径
all_imgs_path = glob.glob(r'dataset\*\*.bmp')#数据文件夹路径
# #循环遍历输出列表中的每个元素,显示出每个图片的路径
# for var in all_imgs_path:
# print(var)
#利用自定义类Mydataset创建对象error_dataset
error_dataset = Mydataset(all_imgs_path)
print(len(error_dataset)) #返回文件夹中图片总个数
error_datalodaer = torch.utils.data.DataLoader(error_dataset, batch_size=5) #每次迭代时返回五个数据
species = ['Cr','In','Pa','PS','RS','Sc']
species_to_id = dict((c, i) for i, c in enumerate(species))
print(species_to_id)
id_to_species = dict((v, k) for k, v in species_to_id.items())
print(id_to_species)
all_labels = []
#对所有图片路径进行迭代
for img in all_imgs_path:
# 区分出每个img,应该属于什么类别
for i, c in enumerate(species):
if c in img:
all_labels.append(i)
print(all_labels) #得到所有标签
# 对数据进行转换处理
transform = transforms.Compose([
transforms.Grayscale(1),
transforms.RandomHorizontalFlip(p=0.3), # 将三成图片水平翻转
transforms.RandomVerticalFlip(p=0.3), # 将三成图片垂直翻转
transforms.RandomPerspective(distortion_scale=0.3, p=0.3), # 将三成图片不规则拉伸,拉伸力度0.3
transforms.RandomRotation(degrees=(0, 180)), # 图片随机旋转,0-180度
transforms.ToTensor

文章介绍了钢板表面缺陷对产品质量的影响,传统检测方法的局限性,以及机器视觉和深度学习(Resnet18)在检测中的应用。通过数据预处理、特征提取和图像分类,利用Resnet网络提高检测精度和效率。文章强调了深度学习在自动化和质量控制中的潜力和优势。

2万+

被折叠的 条评论
为什么被折叠?



