0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

计算机视觉在工业领域的一个实践

新机器视觉 来源:AI公园 作者:Soham Malakar 2020-08-28 11:40 次阅读

导读计算机视觉工业领域的一个实践,有方案和代码的分享。

1. 介绍

焊接缺陷可以定义为焊缝表面出现的不规则、不连续性、缺陷或不一致性。焊接接头的缺陷可能导致零件和组件的报废、昂贵的维修费用、工作条件下性能的显著降低,在极端情况下,还可能导致导致财产和生命损失的灾难性故障。 此外,由于焊接工艺本身的缺陷和金属本身的特性,在焊接过程中总会存在一定的缺陷。评估焊接质量是很重要的,因为由于固有的冶金几何缺陷、机械性能的不均一性和残余应力的存在,焊接接头经常是裂纹萌生的位置。 在实践中,几乎不可能得到完美的焊接,而且在大多数情况下,也没有必要提供所需的足够的服务功能。然而,及早发现和隔离总是比发生事故更可取。 利用我们的算法,我们可以很容易地检测出焊接故障的图像,并准确地衡量每一个故障的严重程度。这将进一步帮助更快的图像识别和避免不良情况的出现。 结果表明,采用卷积神经网络算法和U-Net结构,可以大大提高处理效率。结果在工作结束时,准确率达到98.3%。

2. 预备知识

机器学习有基本了解

卷积神经网络的基本思想

理解卷积,最大池化和上采样操作

了解U-Net的架构理念

对残差块中skip连接有基本了解(可选)

使用PythonTensorFlow和Keras库操作ConvNets的知识(可选)

3. 图像分割

分割是将图像分割成不同的区域,这些区域包含具有相似属性的像素。为了对图像分析和解释有意义和有用,区域应该与描绘的物体或感兴趣的特征有强烈的关联。 图像分析的成功与否取决于分割的可靠性,但图像的精确分割通常是一个非常具有挑战性的问题。

分割后的胸部x光片,心脏(红色)、肺(绿色)和锁骨(蓝色)

4. 图像矩

图像矩是图像像素强度的某一特定加权平均值。图像矩用于描述分割后的目标。 通*图像矩发现的图像的简单属性包括:

面积(或总强度)

重心

关于方向的信息

5. 理解数据

dataset包含两个目录。原始图像存储在‘images’目录中,分割后的图像存储在‘labels’目录中。 让我们将数据可视化:

来自‘image’的原始图像

来自‘labels’的二值图像 这些来自“labels”目录的图像是二进制图像或ground truth标签。这是我们的模型必须对给定的原始图像做出的预测。在二进制图像中,像素要么有一个“high”值,要么有一个“low”值。白色区域或“high”值表示缺陷区域,黑色区域或“low”值表示没有缺陷。

6. 使用的方法

我们在这个问题上使用的架构是U-Net。我们将通过三个步骤来检测故障并测量这些焊接图像的严重程度:

图像分割

使用颜色表示严重程度

使用图像矩度量严重程度

训练模型

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

使用的U-Net结构要注意的点:

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

通道的数量在盒子的顶部表示

(x,y)维度显示在盒子的左下边缘

箭头表示不同的操作

层的名称在层的下面

C1 C2…C7是卷积操作后的输出层

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

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

A1, A2, A3是跳跃连接

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

图像的尺寸逐渐减小,而深度逐渐增加

右边是展开路径,在这里应用(上采样)转置卷积和常规卷积操作

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

为了得到更精确的位置,在扩展路径的每一步中,我们使用跳跃连接,将转置卷积层的输出与来自编码器的相同级别的特征图连接在一起:A1 = U1 + C3A2 = U2 + C2A3 = U3 + C1 在每次连接之后,我们再次应用常规卷积,以便模型能够学习组装出更精确的输出。

importnumpyasnp importcv2 importos importrandom importtensorflowastf h,w=512,512 defcreate_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) returnmodel images=[] labels=[] files=os.listdir('./dataset/images/') random.shuffle(files) forfinfiles: 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/255 labels=labels/255 model=tf.keras.models.load_model('my_model') #model=create_model()#uncommentthistocreateanewmodel print(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位整数,并显示输出图像的颜色等级和严重性值。

importnumpyasnp importcv2 fromgoogle.colab.patchesimportcv2_imshow importos importrandom importtensorflowastf h,w=512,512 num_cases=10 images=[] labels=[] files=os.listdir('./dataset/images/') random.shuffle(files) model=tf.keras.models.load_model('my_model') lowSevere=1 midSevere=2 highSevere=4 forfinfiles[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) foriinrange(test_img.shape[0]): forjinrange(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("0thMoment=",(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阶矩作为一个百分比显示在输出图像上作为一个经验的严重程度度量。 下面是三个随机样本,分别显示了我们模型生成的原始输入、ground truth和输出。

样本1:

原始图像

二值图像(Ground Truth)

带有严重程度的预测输出

样本2:

原始图像

二值图像(Ground Truth)

带有严重程度的预测输出

样本3:

原始图像

二值图像(Ground Truth)

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 神经网络
    +关注

    关注

    42

    文章

    4572

    浏览量

    98748
  • 代码
    +关注

    关注

    30

    文章

    4555

    浏览量

    66767
  • 计算机视觉
    +关注

    关注

    8

    文章

    1600

    浏览量

    45616

原文标题:钢铁平面焊接缺陷检测,有方案、有代码

文章出处:【微信号:vision263com,微信公众号:新机器视觉】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    机器视觉工业视觉计算机视觉这三者的关系

    机器视觉工业视觉计算机视觉这三者的关系
    的头像 发表于 01-24 10:51 570次阅读
    机器<b class='flag-5'>视觉</b>、<b class='flag-5'>工业</b><b class='flag-5'>视觉</b>和<b class='flag-5'>计算机</b><b class='flag-5'>视觉</b>这三者的关系

    工业视觉计算机视觉的区别

    工业视觉主要解决以往需要人眼进行的工件的定位、测量、检测等重复性劳动;计算机视觉的主要任务是赋予智能机器人视觉,利用测距、物体标定与识别等功
    发表于 01-16 10:06 113次阅读
    <b class='flag-5'>工业</b><b class='flag-5'>视觉</b>与<b class='flag-5'>计算机</b><b class='flag-5'>视觉</b>的区别

    工业计算机与商用计算机的区别

    工业计算机与商用计算机的区别  工业计算机和商用计算机是两种应用于不同领域计算机系统。虽然它们
    的头像 发表于 12-27 10:50 276次阅读

    工业计算机和PLC的区别

    工业计算机和PLC的区别  工业计算机和PLC(可编程逻辑控制器)是工业自动化领域中常用的两种控制设备。虽然它们都有着用于控制和监控工业过程
    的头像 发表于 12-15 10:10 517次阅读

    什么是计算机视觉计算机视觉的三种方法

    计算机视觉是指通过为计算机赋予人类视觉这一技术目标,从而赋能装配线检查到驾驶辅助和机器人等应用。计算机缺乏像人类一样凭直觉产生
    的头像 发表于 11-16 16:38 3127次阅读
    什么是<b class='flag-5'>计算机</b><b class='flag-5'>视觉</b>?<b class='flag-5'>计算机</b><b class='flag-5'>视觉</b>的三种方法

    最适合AI应用的计算机视觉类型是什么?

    计算机视觉是指为计算机赋予人类视觉这一技术目标,从而赋能装配线检查到驾驶辅助和机器人等应用。计算机缺乏像人类一样凭直觉产生
    的头像 发表于 11-15 16:38 236次阅读
    最适合AI应用的<b class='flag-5'>计算机</b><b class='flag-5'>视觉</b>类型是什么?

    工业计算机的应用

    工业计算机半导体设备上的应用,具体在哪方面。比如说图像处理使用什么样的计算机工业控制使用哪
    发表于 09-12 14:19

    人工智能计算机视觉方向是什么

    “看”并作出决策。 计算机视觉是人工智能领域的一大分支,是以计算机和数字图像处理技术为手段,通过对视觉信息的处理和分析来实现人工智能的各类应
    的头像 发表于 08-15 16:06 1193次阅读

    机器视觉计算机视觉的区别

    机器视觉计算机视觉的区别 机器视觉计算机视觉是两个相关但不同的概念。虽然许多人使用这两个术语
    的头像 发表于 08-09 16:51 1136次阅读

    计算机视觉是什么 计算机视觉历史及发展趋势

    正像其它学科一样,一个大量人员研究了多年的学科,却很难给出一个严格的定义,模式识别如此,目前火热的人工智能如此,计算机视觉亦如此。与计算机视觉密切相关的概念有
    发表于 07-20 15:41 0次下载

    计算机视觉的概念和主要任务

    作为人工智能的关键领域之一的计算机视觉近期再次成为了热点,那么你真的了解什么是计算机视觉吗?
    的头像 发表于 07-17 11:20 888次阅读

    使用计算机视觉工业工人进行跌倒检测

    电子发烧友网站提供《使用计算机视觉工业工人进行跌倒检测.zip》资料免费下载
    发表于 06-12 16:00 0次下载
    使用<b class='flag-5'>计算机</b><b class='flag-5'>视觉</b>为<b class='flag-5'>工业</b>工人进行跌倒检测

    浅谈深度学习在计算机视觉领域的三大瓶颈

    深度学习能够实现的前提是大量经过标注的数据,这使得计算机视觉领域的研究人员倾向于在数据资源丰富的领域搞研究,而不是去重要的领域搞研究。
    发表于 06-11 10:22 267次阅读
    浅谈深度学习在<b class='flag-5'>计算机</b><b class='flag-5'>视觉</b><b class='flag-5'>领域</b>的三大瓶颈

    什么是机器视觉?机器视觉计算机有什么关系?

    机器视觉计算机视觉有什么区别
    的头像 发表于 06-05 09:28 863次阅读
    什么是机器<b class='flag-5'>视觉</b>?机器<b class='flag-5'>视觉</b>与<b class='flag-5'>计算机</b>有什么关系?

    计算机视觉相关概念总结

    为了帮助同事和客户了解更多有关计算机视觉和AI的更多信息,我们言简意赅介绍一些计算机视觉和AI术语,希望能帮助到大家。
    的头像 发表于 05-31 10:11 518次阅读