使用计算机视觉算法检测钢板中的焊接缺陷

OpenCV学堂 2022-01-27 17:15

点击上方↑↑↑OpenCV学堂”关注我

来源:公众号 小白学视觉 授权



目录


  1. 介绍

  2. 先决条件

  3. 图像分割

  4. 图像矩

  5. 了解数据

  6. 使用的方法和算法

  7. 结果

  8. 参考


1. 介绍


焊接缺陷可以定义为焊接零件中出现的焊接表面不规则、不连续、缺陷或不一致。焊接接头的缺陷可能导致零件和组件的报废、昂贵的维修费用、工作条件下的性能显著降低,以及在极端情况下,还会导致财产和生命损失的灾难性故障。


此外,由于焊接技术的固有缺陷和金属的特性,在焊接过程中总会存在一定的缺陷。


由于固有的冶金几何缺陷、机械性能的不均匀性和残余应力的存在,焊接接头通常是裂纹萌生的位置,因此评估焊接质量非常重要。


在实践中,几乎不可能获得完美的焊接,并且在大多数情况下,没有必要提供所需的足够的维修功能。然而,早发现和隔离措施总是比事故更可取的。


使用我们的算法,我们可以通过图像轻松检测焊接故障,并精确测量每个故障的严重程度,这将进一步有助于加快图像识别速度并避免出现不利情况。


研究发现,使用卷积神经网络算法和 U-Net 架构使该过程更加高效,工作结束时准确率为 98.3%。


2. 先决条件


  1. 对机器学习的基本理解

  2. 卷积神经网络的基本思想

  3. 了解卷积、最大池化和上采样操作

  4. U-Net架构思路

  5. 对残差块中的跳过连接的基本理解(可选)

  6. 使用 Python、TensorFlow 和 Keras 库的 ConvNets 的工作知识(可选)


3. 图像分割


分割将图像划分为包含具有相似属性的像素的不同区域。为了对图像分析和解释有意义且有用,区域应与所描绘的对象或感兴趣的特征密切相关。


图像分析的成功取决于分割的可靠性,但图像的准确分割通常是一个非常具有挑战性的问题。

心脏(红色)、肺(绿色)和锁骨(蓝色)的胸部 X 光片被分割。

4. 图像矩


图像矩是图像像素强度的某个特定加权平均值,图像矩对于描述分割后的对象很有用。


通过图像矩发现的图像的简单属性包括:

  • 面积(或总强度)

  • 质心

  • 有关其方向的信息。


5. 了解数据


该数据集包含两个目录,原始图像存储在“images”目录中,分割图像存储在“labels”目录中。


让我们将数据可视化:

来自“images”的原始图像

上面的这些原始图像是 RGB 图像,必须用于训练模型和测试模型。这些图片的尺寸各不相同。直观地说,较暗的部分是焊接缺陷,模型需要对这些图像进行图像分割。

来自“labels”的二进制图像

'labels' 目录中的这些图像是二进制图像或地面真实标签。这是我们的模型必须为给定的原始图像预测的内容。在二值图像中,像素具有“高”值或“低”值,白色区域或“高”值表示缺陷区域,黑色区域或“低”值表示无缺陷。


6. 使用的方法和算法


我们将 U-Net 架构解决这个问题。我们将通过三个主要步骤检测故障并测量这些焊接图像的严重程度:


  • 图像分割

  • 使用颜色表示严重性

  • 使用图像矩测量严重性


训练模型

以下是我们用于模型的 U-Net 架构:

使用的 U-Net 架构

注意事项:


  • 每个蓝色框对应一个多通道特征图

  • 通道的数量显示在框的顶部。

  • (x,y) 尺寸位于框的左下边缘。

  • 箭头表示不同的操作。

  • 图层的名称在图层下方提供。

  • C1、C2、…… C7是卷积运算后的输出层

  • P1、P2、P3是最大池化操作的输出层

  • U1、U2、U3是上采样操作的输出层

  • A1、A2、A3 是跳跃式连接。

  • 左侧是收缩路径,其中应用了常规卷积和最大池化操作

  • 图像的大小逐渐减小,而深度逐渐增加。

  • 右侧是扩展路径,其中应用了 (上采样) 转置卷积和常规卷积操作

  • 在扩展路径中,图像尺寸逐渐增大,深度逐渐减小

  • 为了获得更精确的位置,在扩展的每个步骤中,我们通过将转置卷积层的输出与来自编码器的特征图在同一级别连接来使用跳过连接:
    A1 = U1 + C3
    A2 = U2 + C2
    A3 = U3 + C1
    每次连接后,我们再次应用常规卷积,以便模型可以学习组装更精确的输出。

import numpy as npimport cv2import osimport randomimport tensorflow as tf
h,w = 512,512
def create_model():
inputs = tf.keras.layers.Input(shape=(h,w,3))
conv1 = tf.keras.layers.Conv2D(16,(3,3),activation='relu',padding='same')(inputs) pool1 = tf.keras.layers.MaxPool2D()(conv1)
conv2 = tf.keras.layers.Conv2D(32,(3,3),activation='relu',padding='same')(pool1) pool2 = tf.keras.layers.MaxPool2D()(conv2)
conv3 = tf.keras.layers.Conv2D(64,(3,3),activation='relu',padding='same')(pool2) pool3 = tf.keras.layers.MaxPool2D()(conv3)
conv4 = tf.keras.layers.Conv2D(64,(3,3),activation='relu',padding='same')(pool3)
upsm5 = tf.keras.layers.UpSampling2D()(conv4) upad5 = tf.keras.layers.Add()([conv3,upsm5]) conv5 = tf.keras.layers.Conv2D(32,(3,3),activation='relu',padding='same')(upad5)
upsm6 = tf.keras.layers.UpSampling2D()(conv5) upad6 = tf.keras.layers.Add()([conv2,upsm6]) conv6 = tf.keras.layers.Conv2D(16,(3,3),activation='relu',padding='same')(upad6)
upsm7 = tf.keras.layers.UpSampling2D()(conv6) upad7 = tf.keras.layers.Add()([conv1,upsm7]) conv7 = tf.keras.layers.Conv2D(1,(3,3),activation='relu',padding='same')(upad7)
model = tf.keras.models.Model(inputs=inputs, outputs=conv7)
return model
images = []labels = []
files = os.listdir('./dataset/images/')random.shuffle(files)
for f in files: img = cv2.imread('./dataset/images/' + f) parts = f.split('_') label_name = './dataset/labels/' + 'W0002_' + parts[1] label = cv2.imread(label_name,2)
img = cv2.resize(img,(w,h)) label = cv2.resize(label,(w,h))
images.append(img) labels.append(label)
images = np.array(images)labels = np.array(labels)labels = np.reshape(labels, (labels.shape[0],labels.shape[1],labels.shape[2],1))
print(images.shape)print(labels.shape)
images = images/255labels = labels/255
model = tf.keras.models.load_model('my_model')
#model = create_model() # uncomment this to create a new modelprint(model.summary())
model.compile(optimizer='adam', loss='binary_crossentropy',metrics=['accuracy'])model.fit(images,labels,epochs=100,batch_size=10)model.evaluate(images,labels)
model.save('my_model')

模型是用 Adam 优化器编译的,我们使用二进制交叉熵损失函数,因为只有两个类(缺陷和无缺陷)。


我们使用批量处理大小为 10 的 100 个 epoch(模型在所有输入上运行的次数)。


测试模型


由于模型的输入尺寸为 512x512x3 ,因此我们已将输入大小调整为该尺寸。接下来,我们通过将图像除以 255 来规范化图像以加快计算速度。


图像已被输入模型,用于预测二进制输出。为了放大像素的强度,二进制输出乘以 1000。


然后将图像转换为 16 位整数以便于图像处理。之后,算法会检测缺陷并通过颜色分级以及根据缺陷的严重程度为具有缺陷的像素分配权重,来直观地标记缺陷的严重程度。然后,考虑加权像素在该图像上计算图像矩。


图像最终转换回 8 位整数,输出图像显示颜色分级及其严重性值。

import numpy as npimport cv2from google.colab.patches import cv2_imshowimport osimport randomimport tensorflow as tf

h,w = 512,512num_cases = 10
images = []labels = []
files = os.listdir('./dataset/images/')random.shuffle(files)
model = tf.keras.models.load_model('my_model')
lowSevere = 1midSevere = 2highSevere = 4
for f in files[0:num_cases]: test_img = cv2.imread('./dataset/images/' + f) resized_img = cv2.resize(test_img,(w,h)) resized_img = resized_img/255 cropped_img = np.reshape(resized_img, (1,resized_img.shape[0],resized_img.shape[1],resized_img.shape[2]))
test_out = model.predict(cropped_img)
test_out = test_out[0,:,:,0]*1000 test_out = np.clip(test_out,0,255)
resized_test_out = cv2.resize(test_out,(test_img.shape[1],test_img.shape[0])) resized_test_out = resized_test_out.astype(np.uint16)
test_img = test_img.astype(np.uint16)
grey = cv2.cvtColor(test_img, cv2.COLOR_BGR2GRAY)
for i in range(test_img.shape[0]): for j in range(test_img.shape[1]): if(grey[i,j]>150 & resized_test_out[i,j]>40): test_img[i,j,1]=test_img[i,j,1] + resized_test_out[i,j] resized_test_out[i,j] = lowSevere elif(grey[i,j]<100 & resized_test_out[i,j]>40): test_img[i,j,2]=test_img[i,j,2] + resized_test_out[i,j] resized_test_out[i,j] = highSevere elif(resized_test_out[i,j]>40): test_img[i,j,0]=test_img[i,j,0] + resized_test_out[i,j] resized_test_out[i,j] = midSevere else: resized_test_out[i,j] = 0
M = cv2.moments(resized_test_out) maxMomentArea = resized_test_out.shape[1]*resized_test_out.shape[0]*highSevere print("0th Moment = " , (M["m00"]*100/maxMomentArea), "%")
test_img = np.clip(test_img,0,255)
test_img = test_img.astype(np.uint8)
cv2_imshow(test_img)
cv2.waitKey(0)


7. 结果


我们用于严重性检测的视觉指标是颜色,在图像中,颜色为:


  • 绿色表示存在严重缺陷的区域。

  • 蓝色表示缺陷更严重的区域。

  • 红色表示最严重的缺陷区域。


第0个时刻以百分比的形式显示在输出图像旁边,作为严重性的经验度量。以下是三个随机样本,显示了原始输入、真实情况和模型生成的输出。


示例 1:


原始图像

二进制图像(真实情况)

具有严重性的预测输出


示例 2:


原始图像

二进制图像(真实情况)

具有严重性的预测输出

示例 3:


原始图像

二进制图像(真实情况)

有严重性的预测输出


8. 参考


https://domingomery.ing.puc.cl/material/gdxray/


https://www.cs.auckland.ac.nz/courses/compsci773s1c/lectures/ImageProcessing-html/topic3.htm#adaptive


https://medium.com/r/?

url=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FImage_moment


https://medium.com/r/?url=https%3A%2F%2Ftowardsdatascience.com%2Funderstanding-semantic-segmentation-with-unet-6be4f42d4b47


https://www.sciencedirect.com/topics/materials-science/welding-defect



Github代码连接:

https://github.com/malakar-soham/cnn-in-welding


OpenCV学堂 专注计算机视觉开发技术分享,技术框架使用,包括OpenCV,Tensorflow,Pytorch教程与案例,相关算法详解,最新CV方向论文,硬核代码干货与代码案例详解!作者在CV工程化方面深度耕耘15年,感谢您的关注!
评论
  • 根据Global Info Research项目团队最新调研,预计2030年全球封闭式电机产值达到1425百万美元,2024-2030年期间年复合增长率CAGR为3.4%。 封闭式电机是一种电动机,其外壳设计为密闭结构,通常用于要求较高的防护等级的应用场合。封闭式电机可以有效防止外部灰尘、水分和其他污染物进入内部,从而保护电机的内部组件,延长其使用寿命。 环洋市场咨询机构出版的调研分析报告【全球封闭式电机行业总体规模、主要厂商及IPO上市调研报告,2025-2031】研究全球封闭式电机总体规
    GIRtina 2025-01-06 11:10 104浏览
  • 根据环洋市场咨询(Global Info Research)项目团队最新调研,预计2030年全球无人机锂电池产值达到2457百万美元,2024-2030年期间年复合增长率CAGR为9.6%。 无人机锂电池是无人机动力系统中存储并释放能量的部分。无人机使用的动力电池,大多数是锂聚合物电池,相较其他电池,锂聚合物电池具有较高的能量密度,较长寿命,同时也具有良好的放电特性和安全性。 全球无人机锂电池核心厂商有宁德新能源科技、欣旺达、鹏辉能源、深圳格瑞普和EaglePicher等,前五大厂商占有全球
    GIRtina 2025-01-07 11:02 68浏览
  • 随着市场需求不断的变化,各行各业对CPU的要求越来越高,特别是近几年流行的 AIOT,为了有更好的用户体验,CPU的算力就要求更高了。今天为大家推荐由米尔基于瑞芯微RK3576处理器推出的MYC-LR3576核心板及开发板。关于RK3576处理器国产CPU,是这些年的骄傲,华为手机全国产化,国人一片呼声,再也不用卡脖子了。RK3576处理器,就是一款由国产是厂商瑞芯微,今年第二季推出的全新通用型的高性能SOC芯片,这款CPU到底有多么的高性能,下面看看它的几个特性:8核心6 TOPS超强算力双千
    米尔电子嵌入式 2025-01-03 17:04 55浏览
  • 大模型的赋能是指利用大型机器学习模型(如深度学习模型)来增强或改进各种应用和服务。这种技术在许多领域都显示出了巨大的潜力,包括但不限于以下几个方面: 1. 企业服务:大模型可以用于构建智能客服系统、知识库问答系统等,提升企业的服务质量和运营效率。 2. 教育服务:在教育领域,大模型被应用于个性化学习、智能辅导、作业批改等,帮助教师减轻工作负担,提高教学质量。 3. 工业智能化:大模型有助于解决工业领域的复杂性和不确定性问题,尽管在认知能力方面尚未完全具备专家级的复杂决策能力。 4. 消费
    丙丁先生 2025-01-07 09:25 80浏览
  • 本文介绍Linux系统更换开机logo方法教程,通用RK3566、RK3568、RK3588、RK3576等开发板,触觉智能RK3562开发板演示,搭载4核A53处理器,主频高达2.0GHz;内置独立1Tops算力NPU,可应用于物联网网关、平板电脑、智能家居、教育电子、工业显示与控制等行业。制作图片开机logo图片制作注意事项(1)图片必须为bmp格式;(2)图片大小不能大于4MB;(3)BMP位深最大是32,建议设置为8;(4)图片名称为logo.bmp和logo_kernel.bmp;开机
    Industio_触觉智能 2025-01-06 10:43 87浏览
  • By Toradex 秦海1). 简介嵌入式平台设备基于Yocto Linux 在开发后期量产前期,为了安全以及提高启动速度等考虑,希望将 ARM 处理器平台的 Debug Console 输出关闭,本文就基于 NXP i.MX8MP ARM 处理器平台来演示相关流程。 本文所示例的平台来自于 Toradex Verdin i.MX8MP 嵌入式平台。  2. 准备a). Verdin i.MX8MP ARM核心版配合Dahlia载板并
    hai.qin_651820742 2025-01-07 14:52 45浏览
  • PLC组态方式主要有三种,每种都有其独特的特点和适用场景。下面来简单说说: 1. 硬件组态   定义:硬件组态指的是选择适合的PLC型号、I/O模块、通信模块等硬件组件,并按照实际需求进行连接和配置。    灵活性:这种方式允许用户根据项目需求自由搭配硬件组件,具有较高的灵活性。    成本:可能需要额外的硬件购买成本,适用于对系统性能和扩展性有较高要求的场合。 2. 软件组态   定义:软件组态主要是通过PLC
    丙丁先生 2025-01-06 09:23 85浏览
  • 在智能家居领域中,Wi-Fi、蓝牙、Zigbee、Thread与Z-Wave等无线通信协议是构建短距物联局域网的关键手段,它们常在实际应用中交叉运用,以满足智能家居生态系统多样化的功能需求。然而,这些协议之间并未遵循统一的互通标准,缺乏直接的互操作性,在进行组网时需要引入额外的网关作为“翻译桥梁”,极大地增加了系统的复杂性。 同时,Apple HomeKit、SamSung SmartThings、Amazon Alexa、Google Home等主流智能家居平台为了提升市占率与消费者
    华普微HOPERF 2025-01-06 17:23 145浏览
  • 这篇内容主要讨论三个基本问题,硅电容是什么,为什么要使用硅电容,如何正确使用硅电容?1.  硅电容是什么首先我们需要了解电容是什么?物理学上电容的概念指的是给定电位差下自由电荷的储藏量,记为C,单位是F,指的是容纳电荷的能力,C=εS/d=ε0εrS/4πkd(真空)=Q/U。百度百科上电容器的概念指的是两个相互靠近的导体,中间夹一层不导电的绝缘介质。通过观察电容本身的定义公式中可以看到,在各个变量中比较能够改变的就是εr,S和d,也就是介质的介电常数,金属板有效相对面积以及距离。当前
    知白 2025-01-06 12:04 173浏览
  •     为控制片内设备并且查询其工作状态,MCU内部总是有一组特殊功能寄存器(SFR,Special Function Register)。    使用Eclipse环境调试MCU程序时,可以利用 Peripheral Registers Viewer来查看SFR。这个小工具是怎样知道某个型号的MCU有怎样的寄存器定义呢?它使用一种描述性的文本文件——SVD文件。这个文件存储在下面红色字体的路径下。    例:南京沁恒  &n
    电子知识打边炉 2025-01-04 20:04 100浏览
  • 村田是目前全球量产硅电容的领先企业,其在2016年收购了法国IPDiA头部硅电容器公司,并于2023年6月宣布投资约100亿日元将硅电容产能提升两倍。以下内容主要来自村田官网信息整理,村田高密度硅电容器采用半导体MOS工艺开发,并使用3D结构来大幅增加电极表面,因此在给定的占位面积内增加了静电容量。村田的硅技术以嵌入非结晶基板的单片结构为基础(单层MIM和多层MIM—MIM是指金属 / 绝缘体/ 金属) 村田硅电容采用先进3D拓扑结构在100um内,使开发的有效静电容量面积相当于80个
    知白 2025-01-07 15:02 75浏览
  • 每日可见的315MHz和433MHz遥控模块,你能分清楚吗?众所周知,一套遥控设备主要由发射部分和接收部分组成,发射器可以将控制者的控制按键经过编码,调制到射频信号上面,然后经天线发射出无线信号。而接收器是将天线接收到的无线信号进行解码,从而得到与控制按键相对应的信号,然后再去控制相应的设备工作。当前,常见的遥控设备主要分为红外遥控与无线电遥控两大类,其主要区别为所采用的载波频率及其应用场景不一致。红外遥控设备所采用的射频信号频率一般为38kHz,通常应用在电视、投影仪等设备中;而无线电遥控设备
    华普微HOPERF 2025-01-06 15:29 127浏览
  • 彼得·德鲁克被誉为“现代管理学之父”,他的管理思想影响了无数企业和管理者。然而,关于他的书籍分类,一种流行的说法令人感到困惑:德鲁克一生写了39本书,其中15本是关于管理的,而其中“专门写工商企业或为企业管理者写的”只有两本——《为成果而管理》和《创新与企业家精神》。这样的表述广为流传,但深入探讨后却发现并不完全准确。让我们一起重新审视这一说法,解析其中的矛盾与根源,进而重新认识德鲁克的管理思想及其著作的真正价值。从《创新与企业家精神》看德鲁克的视角《创新与企业家精神》通常被认为是一本专为企业管
    优思学院 2025-01-06 12:03 119浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦