1.引言
工業(yè)視覺缺陷檢測系統(tǒng)是一種利用計算機視覺技術俯逾,通過分析生產(chǎn)過程中的圖像和視頻數(shù)據(jù),來檢測工業(yè)產(chǎn)品是否存在缺陷或質(zhì)量問題的系統(tǒng)鸿脓。有幸參加Aidlux的11月份的訓練營<<工業(yè)視覺少樣本缺陷檢測實戰(zhàn)>>匾旭,在這個過程中我收獲到了很多之前沒有接觸到的算法和實踐。本次課程利用Unet模型進行目標分割凉馆,并基于AidLux平臺完成本地終端部署推理,以滿足工業(yè)生產(chǎn)中對產(chǎn)品質(zhì)量控制的需求亡资。
2. 項目實戰(zhàn)
在本項目中澜共,AidLux提供了一套完整的模型部署代碼,該代碼包括了多個關鍵步驟锥腻,如模型加載嗦董、圖像預處理、推理過程瘦黑、后處理和結果保存等京革。這些代碼以Python為基礎,并借助相關的第三方庫幸斥,旨在支持各種工業(yè)應用場景中的模型部署需求匹摇。
具體而言,給出的部署代碼具有以下特點:
模型加載: 部署代碼能夠輕松加載TFLite模型甲葬,確保在不同平臺上實現(xiàn)無縫的模型部署廊勃。
圖像預處理: 部署代碼包括圖像預處理步驟,以確保輸入圖像與模型的期望輸入格式一致经窖。這有助于提高模型的準確性和穩(wěn)定性坡垫。
推理過程: 同時我們的代碼實現(xiàn)了高效的推理過程梭灿,能夠在實時性要求下完成缺陷檢測任務。這對于工業(yè)應用中的快速響應至關重要冰悠。
后處理: 模型輸出需要進行后處理堡妒,以解析檢測結果并執(zhí)行進一步的操作。我們的代碼包括了這一關鍵步驟溉卓,以確保輸出結果的準確性皮迟。
結果保存: 最終,我們的代碼能夠?qū)z測結果保存到指定位置的诵,以便后續(xù)分析和記錄万栅。
此外,我們的模型部署系統(tǒng)非常小巧西疤,易于遷移,并具有出色的環(huán)境耐受性休溶。這意味著我們的系統(tǒng)可以適應各種工業(yè)環(huán)境代赁,無論是在車間、生產(chǎn)線還是其他現(xiàn)場場景中兽掰,都能夠可靠運行芭碍。
2.1. 模型轉換
在成功將pt模型文件導出為onnx模型文件后,接下來的關鍵步驟是使用Aidlux平臺自帶的AI Model Optimizer平臺將onnx模型轉換為TFLite(TensorFlow Lite)和DLC(Deep Learning Container)模型孽尽,以便在不同的平臺上進行部署和推理窖壕。
通過這些模型轉換步驟,我們能夠確保我們的模型在不同的部署環(huán)境中都能夠順利運行杉女,并且能夠高效地完成工業(yè)視覺缺陷檢測任務瞻讽。這也為我們提供了更多的靈活性,以適應不同的應用需求熏挎。
AIMO網(wǎng)站: http://aimo.aidlux.com/
試用賬號和密碼: 賬號:AIMOTC001 速勇,密碼:AIMOTC001
2.2. 模型代碼部署
tflite_inference.py
# -*- coding: UTF-8 -*-
import aidlite_gpu
import cv2
import os
import time
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
def mask_to_image(mask: np.ndarray):
if mask.ndim == 2:
return Image.fromarray((mask * 255).astype(np.uint8))
elif mask.ndim == 3:
return Image.fromarray((np.argmax(mask, axis=0) * 255 / mask.shape[0]).astype(np.uint8))
def aidlux_tflite_infer(model_path, img_path, save_path):
# step1: 初始化aidlite類并創(chuàng)建aidlite對象
aidlite = aidlite_gpu.aidlite()
print('model initial success!!')
# step2: 加載模型
inp_shape = [256*256*1*4]
out_shape = [256*256*2*4]
value = aidlite.ANNModel(model_path, inp_shape, out_shape, 4, 0)
# step3: 傳入模型輸入數(shù)據(jù)
img = cv2.imread(img_path, 0)
img = cv2.resize(img, (256, 256))
img = img[np.newaxis, ...]
img = img / 255.0
img = np.expand_dims(img, axis=0)
img = img.astype(dtype=np.float32)
print("image shape is ", img.shape)
aidlite.setInput_Float32(img)
# step4: 執(zhí)行推理
start = time.time()
aidlite.invoke()
end = time.time()
print("infer time(ms):{0}", 1000 * (end - start))
# step5: 獲取輸出
pred = aidlite.getOutput_Float32(0)
# step6: 后處理
pred = np.array(pred)
pred = np.reshape(pred,(2,256,256))
mask_img = mask_to_image(pred)
mask_img.save(save_path)
# mask_img = np.array(mask_img)
# cv2.imshow('mask_img', mask_img)
# cv2.waitKey(0)
# cv2.destroyAllWindows()
if __name__ == '__main__':
model_path = "/home/zhongtai/dataset2aidlux/unetmodel_fp32.tflite"
img_path = "/home/zhongtai/dataset2aidlux/test_imgs/0587.PNG"
save_path = '/home/zhongtai/dataset2aidlux/test_imgs/result_0587.png'
aidlux_tflite_infer(model_path, img_path, save_path)
2.3.實驗和驗證
模型部署在安裝了AidLux應用的Andriod手機上,進行了一系列實驗和驗證坎拐,以驗證系統(tǒng)在實際工業(yè)生產(chǎn)中的性能和準確性烦磁。這些實驗包括模型格式的轉換、VSCode的SSH遠程連接AidLux哼勇、對test文件夾內(nèi)的照片進行預測都伪,并保存預測結果的照片。
https://www.bilibili.com/video/BV1eG411Y7ha/?vd_source=1eedca4ba38e6ff0c1ed9e366feef663