<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          實(shí)操教程|使用計(jì)算機(jī)視覺(jué)算法檢測(cè)鋼板中的焊接缺陷

          共 7269字,需瀏覽 15分鐘

           ·

          2022-02-22 03:44

          ↑ 點(diǎn)擊藍(lán)字?關(guān)注極市平臺(tái)

          來(lái)源丨機(jī)器學(xué)習(xí)算法那些事
          編輯丨極市平臺(tái)

          極市導(dǎo)讀

          ?

          使用CV算法,我們可以通過(guò)圖像輕松檢測(cè)焊接故障,并精確測(cè)量每個(gè)故障的嚴(yán)重程度,這將進(jìn)一步有助于加快圖像識(shí)別速度并避免出現(xiàn)不利情況。本文詳解了該缺陷檢測(cè)的流程并附有相關(guān)代碼。?>>加入極市CV技術(shù)交流群,走在計(jì)算機(jī)視覺(jué)的最前沿

          10個(gè)開(kāi)源工業(yè)檢測(cè)數(shù)據(jù)集匯總

          Github代碼連接:https://github.com/malakar-soham/cnn-in-welding

          目錄

          1. 介紹
          2. 先決條件
          3. 圖像分割
          4. 圖像矩
          5. 了解數(shù)據(jù)
          6. 使用的方法和算法
          7. 結(jié)果
          8. 參考

          1. 介紹

          焊接缺陷可以定義為焊接零件中出現(xiàn)的焊接表面不規(guī)則、不連續(xù)、缺陷或不一致。焊接接頭的缺陷可能導(dǎo)致零件和組件的報(bào)廢、昂貴的維修費(fèi)用、工作條件下的性能顯著降低,以及在極端情況下,還會(huì)導(dǎo)致財(cái)產(chǎn)和生命損失的災(zāi)難性故障。

          此外,由于焊接技術(shù)的固有缺陷和金屬的特性,在焊接過(guò)程中總會(huì)存在一定的缺陷。

          由于固有的冶金幾何缺陷、機(jī)械性能的不均勻性和殘余應(yīng)力的存在,焊接接頭通常是裂紋萌生的位置,因此評(píng)估焊接質(zhì)量非常重要。

          在實(shí)踐中,幾乎不可能獲得完美的焊接,并且在大多數(shù)情況下,沒(méi)有必要提供所需的足夠的維修功能。然而,早發(fā)現(xiàn)和隔離措施總是比事故更可取的。

          使用我們的算法,我們可以通過(guò)圖像輕松檢測(cè)焊接故障,并精確測(cè)量每個(gè)故障的嚴(yán)重程度,這將進(jìn)一步有助于加快圖像識(shí)別速度并避免出現(xiàn)不利情況。

          研究發(fā)現(xiàn),使用卷積神經(jīng)網(wǎng)絡(luò)算法和 U-Net 架構(gòu)使該過(guò)程更加高效,工作結(jié)束時(shí)準(zhǔn)確率為 98.3%。

          2. 先決條件

          1. 對(duì)機(jī)器學(xué)習(xí)的基本理解

          2. 卷積神經(jīng)網(wǎng)絡(luò)的基本思想

          3. 了解卷積、最大池化和上采樣操作

          4. U-Net架構(gòu)思路

          5. 對(duì)殘差塊中的跳過(guò)連接的基本理解(可選)

          6. 使用 Python、TensorFlow 和 Keras 庫(kù)的 ConvNets 的工作知識(shí)(可選)

          3. 圖像分割

          分割將圖像劃分為包含具有相似屬性的像素的不同區(qū)域。為了對(duì)圖像分析和解釋有意義且有用,區(qū)域應(yīng)與所描繪的對(duì)象或感興趣的特征密切相關(guān)。

          圖像分析的成功取決于分割的可靠性,但圖像的準(zhǔn)確分割通常是一個(gè)非常具有挑戰(zhàn)性的問(wèn)題。

          心臟(紅色)、肺(綠色)和鎖骨(藍(lán)色)的胸部 X 光片被分割。

          4. 圖像矩

          圖像矩是圖像像素強(qiáng)度的某個(gè)特定加權(quán)平均值,圖像矩對(duì)于描述分割后的對(duì)象很有用。

          通過(guò)圖像矩發(fā)現(xiàn)的圖像的簡(jiǎn)單屬性包括:

          • 面積(或總強(qiáng)度)

          • 質(zhì)心

          • 有關(guān)其方向的信息。

          5. 了解數(shù)據(jù)

          該數(shù)據(jù)集包含兩個(gè)目錄,原始圖像存儲(chǔ)在“images”目錄中,分割圖像存儲(chǔ)在“l(fā)abels”目錄中。

          讓我們將數(shù)據(jù)可視化:

          來(lái)自“images”的原始圖像

          上面的這些原始圖像是 RGB 圖像,必須用于訓(xùn)練模型和測(cè)試模型。這些圖片的尺寸各不相同。直觀地說(shuō),較暗的部分是焊接缺陷,模型需要對(duì)這些圖像進(jìn)行圖像分割。

          來(lái)自“l(fā)abels”的二進(jìn)制圖像

          'labels' 目錄中的這些圖像是二進(jìn)制圖像或地面真實(shí)標(biāo)簽。這是我們的模型必須為給定的原始圖像預(yù)測(cè)的內(nèi)容。在二值圖像中,像素具有“高”值或“低”值,白色區(qū)域或“高”值表示缺陷區(qū)域,黑色區(qū)域或“低”值表示無(wú)缺陷。

          6. 使用的方法和算法

          我們將 U-Net 架構(gòu)解決這個(gè)問(wèn)題。我們將通過(guò)三個(gè)主要步驟檢測(cè)故障并測(cè)量這些焊接圖像的嚴(yán)重程度:

          • 圖像分割

          • 使用顏色表示嚴(yán)重性

          • 使用圖像矩測(cè)量嚴(yán)重性

          訓(xùn)練模型

          以下是我們用于模型的 U-Net 架構(gòu):

          使用的 U-Net 架構(gòu)

          注意事項(xiàng):

          • 每個(gè)藍(lán)色框?qū)?yīng)一個(gè)多通道特征圖

          • 通道的數(shù)量顯示在框的頂部。

          • (x,y) 尺寸位于框的左下邊緣。

          • 箭頭表示不同的操作。

          • 圖層的名稱在圖層下方提供。

          • C1、C2、…… C7是卷積運(yùn)算后的輸出層

          • P1、P2、P3是最大池化操作的輸出層

          • U1、U2、U3是上采樣操作的輸出層

          • A1、A2、A3 是跳躍式連接。

          • 左側(cè)是收縮路徑,其中應(yīng)用了常規(guī)卷積和最大池化操作

          • 圖像的大小逐漸減小,而深度逐漸增加。

          • 右側(cè)是擴(kuò)展路徑,其中應(yīng)用了 (上采樣) 轉(zhuǎn)置卷積和常規(guī)卷積操作

          • 在擴(kuò)展路徑中,圖像尺寸逐漸增大,深度逐漸減小

          • 為了獲得更精確的位置,在擴(kuò)展的每個(gè)步驟中,我們通過(guò)將轉(zhuǎn)置卷積層的輸出與來(lái)自編碼器的特征圖在同一級(jí)別連接來(lái)使用跳過(guò)連接:
            A1 = U1 + C3
            A2 = U2 + C2
            A3 = U3 + C1
            每次連接后,我們?cè)俅螒?yīng)用常規(guī)卷積,以便模型可以學(xué)習(xí)組裝更精確的輸出。

          import numpy as np
          import cv2
          import os
          import random
          import 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/255
          labels = labels/255

          model = tf.keras.models.load_model('my_model')

          #model = create_model() # uncomment this to create a new model
          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 優(yōu)化器編譯的,我們使用二進(jìn)制交叉熵?fù)p失函數(shù),因?yàn)橹挥袃蓚€(gè)類(缺陷和無(wú)缺陷)。
          我們使用批量處理大小為 10 的 100 個(gè) epoch(模型在所有輸入上運(yùn)行的次數(shù))。

          測(cè)試模型

          由于模型的輸入尺寸為 512x512x3 ,因此我們已將輸入大小調(diào)整為該尺寸。接下來(lái),我們通過(guò)將圖像除以 255 來(lái)規(guī)范化圖像以加快計(jì)算速度。

          圖像已被輸入模型,用于預(yù)測(cè)二進(jìn)制輸出。為了放大像素的強(qiáng)度,二進(jìn)制輸出乘以 1000。

          然后將圖像轉(zhuǎn)換為 16 位整數(shù)以便于圖像處理。之后,算法會(huì)檢測(cè)缺陷并通過(guò)顏色分級(jí)以及根據(jù)缺陷的嚴(yán)重程度為具有缺陷的像素分配權(quán)重,來(lái)直觀地標(biāo)記缺陷的嚴(yán)重程度。然后,考慮加權(quán)像素在該圖像上計(jì)算圖像矩。

          圖像最終轉(zhuǎn)換回 8 位整數(shù),輸出圖像顯示顏色分級(jí)及其嚴(yán)重性值。

          import numpy as np
          import cv2
          from google.colab.patches import cv2_imshow
          import os
          import random
          import tensorflow as tf


          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

          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. 結(jié)果

          我們用于嚴(yán)重性檢測(cè)的視覺(jué)指標(biāo)是顏色,在圖像中,顏色為:

          • 綠色表示存在嚴(yán)重缺陷的區(qū)域。

          • 藍(lán)色表示缺陷更嚴(yán)重的區(qū)域。

          • 紅色表示最嚴(yán)重的缺陷區(qū)域。

          第0個(gè)時(shí)刻以百分比的形式顯示在輸出圖像旁邊,作為嚴(yán)重性的經(jīng)驗(yàn)度量。以下是三個(gè)隨機(jī)樣本,顯示了原始輸入、真實(shí)情況和模型生成的輸出。

          示例 1:

          具有嚴(yán)重性的預(yù)測(cè)輸出

          示例 2:

          原始圖像
          二進(jìn)制圖像(真實(shí)情況)
          具有嚴(yán)重性的預(yù)測(cè)輸出

          示例 3:

          原始圖像
          二進(jìn)制圖像(真實(shí)情況)
          具有嚴(yán)重性的預(yù)測(cè)輸出

          參考

          • 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

          公眾號(hào)后臺(tái)回復(fù)“數(shù)據(jù)集”獲取30+深度學(xué)習(xí)數(shù)據(jù)集下載~

          △點(diǎn)擊卡片關(guān)注極市平臺(tái),獲取最新CV干貨
          極市干貨
          數(shù)據(jù)集資源匯總:10個(gè)開(kāi)源工業(yè)檢測(cè)數(shù)據(jù)集匯總21個(gè)深度學(xué)習(xí)開(kāi)源數(shù)據(jù)集分類匯總
          算法trick目標(biāo)檢測(cè)比賽中的tricks集錦從39個(gè)kaggle競(jìng)賽中總結(jié)出來(lái)的圖像分割的Tips和Tricks
          技術(shù)綜述:一文弄懂各種loss function工業(yè)圖像異常檢測(cè)最新研究總結(jié)(2019-2020)


          #?CV技術(shù)社群邀請(qǐng)函?#

          △長(zhǎng)按添加極市小助手
          添加極市小助手微信(ID : cvmart4)

          備注:姓名-學(xué)校/公司-研究方向-城市(如:小極-北大-目標(biāo)檢測(cè)-深圳)


          即可申請(qǐng)加入極市目標(biāo)檢測(cè)/圖像分割/工業(yè)檢測(cè)/人臉/醫(yī)學(xué)影像/3D/SLAM/自動(dòng)駕駛/超分辨率/姿態(tài)估計(jì)/ReID/GAN/圖像增強(qiáng)/OCR/視頻理解等技術(shù)交流群


          每月大咖直播分享、真實(shí)項(xiàng)目需求對(duì)接、求職內(nèi)推、算法競(jìng)賽、干貨資訊匯總、與?10000+來(lái)自港科大、北大、清華、中科院、CMU、騰訊、百度等名校名企視覺(jué)開(kāi)發(fā)者互動(dòng)交流~


          覺(jué)得有用麻煩給個(gè)在看啦~??
          瀏覽 62
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  91麻豆精品久91 | 久久久久久黄色视频 | 色老太HD老太色HD盘 | 欧美一区二区视频在线77777 | 99青娱乐在线视频观看 |