【CV】使用计算机视觉算法检测钢板中的焊接缺陷
目錄
介紹
先決條件
圖像分割
圖像矩
了解數據
使用的方法和算法
結果
參考
1. 介紹
焊接缺陷可以定義為焊接零件中出現的焊接表面不規則、不連續、缺陷或不一致。焊接接頭的缺陷可能導致零件和組件的報廢、昂貴的維修費用、工作條件下的性能顯著降低,以及在極端情況下,還會導致財產和生命損失的災難性故障。
此外,由于焊接技術的固有缺陷和金屬的特性,在焊接過程中總會存在一定的缺陷。
由于固有的冶金幾何缺陷、機械性能的不均勻性和殘余應力的存在,焊接接頭通常是裂紋萌生的位置,因此評估焊接質量非常重要。
在實踐中,幾乎不可能獲得完美的焊接,并且在大多數情況下,沒有必要提供所需的足夠的維修功能。然而,早發現和隔離措施總是比事故更可取的。
使用我們的算法,我們可以通過圖像輕松檢測焊接故障,并精確測量每個故障的嚴重程度,這將進一步有助于加快圖像識別速度并避免出現不利情況。
研究發現,使用卷積神經網絡算法和 U-Net 架構使該過程更加高效,工作結束時準確率為 98.3%。
2.?先決條件
對機器學習的基本理解
卷積神經網絡的基本思想
了解卷積、最大池化和上采樣操作
U-Net架構思路
對殘差塊中的跳過連接的基本理解(可選)
使用 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
每次連接后,我們再次應用常規卷積,以便模型可以學習組裝更精確的輸出。
模型是用 Adam 優化器編譯的,我們使用二進制交叉熵損失函數,因為只有兩個類(缺陷和無缺陷)。
我們使用批量處理大小為 10 的 100 個 epoch(模型在所有輸入上運行的次數)。
測試模型
由于模型的輸入尺寸為?512x512x3 ,因此我們已將輸入大小調整為該尺寸。接下來,我們通過將圖像除以 255 來規范化圖像以加快計算速度。
圖像已被輸入模型,用于預測二進制輸出。為了放大像素的強度,二進制輸出乘以 1000。
然后將圖像轉換為 16 位整數以便于圖像處理。之后,算法會檢測缺陷并通過顏色分級以及根據缺陷的嚴重程度為具有缺陷的像素分配權重,來直觀地標記缺陷的嚴重程度。然后,考慮加權像素在該圖像上計算圖像矩。
圖像最終轉換回 8 位整數,輸出圖像顯示顏色分級及其嚴重性值。
import numpy as np import cv2 from google.colab.patches import cv2_imshow import os import random import tensorflow as tfh,w = 512,512 num_cases = 10images = [] labels = []files = os.listdir('./dataset/images/') random.shuffle(files)model = tf.keras.models.load_model('my_model')lowSevere = 1 midSevere = 2 highSevere = 4for 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/255cropped_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]*1000test_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] = lowSevereelif(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] = highSevereelif(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] = midSevereelse:resized_test_out[i,j] = 0M = cv2.moments(resized_test_out)maxMomentArea = resized_test_out.shape[1]*resized_test_out.shape[0]*highSevereprint("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
往期精彩回顧適合初學者入門人工智能的路線及資料下載中國大學慕課《機器學習》(黃海廣主講)機器學習及深度學習筆記等資料打印機器學習在線手冊深度學習筆記專輯《統計學習方法》的代碼復現專輯 AI基礎下載本站qq群955171419,加入微信群請掃碼:總結
以上是生活随笔為你收集整理的【CV】使用计算机视觉算法检测钢板中的焊接缺陷的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RTSP播放器开发过程中需要考虑哪些关键
- 下一篇: SAP ABAP打印MM采购发票打印开发