工業(yè)視覺(jué)少樣本缺陷檢測(cè)實(shí)戰(zhàn)應(yīng)用:AidLux平臺(tái)的創(chuàng)新實(shí)踐

1. AidLux簡(jiǎn)介及其優(yōu)勢(shì)

AidLux是成都阿加犀智能科技有限公司自主研發(fā)的融合架構(gòu)操作系統(tǒng),支持Android/鴻蒙和Linux系統(tǒng)的生態(tài)融合计贰。其核心優(yōu)勢(shì)包括操作系統(tǒng)多樣性烤镐、廣泛芯片適配狼荞、以及AI模型轉(zhuǎn)換和計(jì)算單元調(diào)度的高效性胁镐。

2. AidLux平臺(tái)安裝和環(huán)境配置

2. AidLux平臺(tái)安裝和環(huán)境配置

在安裝和配置AidLux環(huán)境時(shí),要遵循一系列詳細(xì)的步驟志群,以確保平臺(tái)能夠順利運(yùn)行和充分發(fā)揮其功能。

首先蛔钙,需要從官方網(wǎng)站或應(yīng)用市場(chǎng)下載AidLux應(yīng)用锌云。在下載完成后,進(jìn)行標(biāo)準(zhǔn)的安裝流程夸楣,包括接受相關(guān)的使用條款和條件宾抓。

安裝后,用戶需要對(duì)AidLux進(jìn)行初步配置豫喧。這包括為應(yīng)用授予權(quán)限石洗,例如訪問(wèn)文件系統(tǒng)、網(wǎng)絡(luò)和攝像頭等紧显。這些權(quán)限對(duì)于AidLux的正常運(yùn)行至關(guān)重要讲衫,特別是在進(jìn)行圖像處理和分析時(shí)。

接下來(lái),重啟設(shè)備并登錄AidLux系統(tǒng)涉兽。在這一步驟中招驴,可能需要輸入用戶憑證或進(jìn)行其他安全驗(yàn)證,以保證系統(tǒng)的安全性和穩(wěn)定性枷畏。

最后别厘,用戶需要更新AidLux系統(tǒng)并安裝所需的工具包。這可能包括AI模型轉(zhuǎn)換工具拥诡、圖像處理庫(kù)触趴、以及其他開(kāi)發(fā)和調(diào)試所需的軟件。確保所有工具包都是最新版本渴肉,可以有效提高AidLux平臺(tái)的性能和兼容性冗懦。

通過(guò)遵循這些步驟,用戶可以在不同的設(shè)備上成功安裝和配置AidLux平臺(tái)仇祭,為接下來(lái)的工業(yè)視覺(jué)缺陷檢測(cè)任務(wù)打下堅(jiān)實(shí)的基礎(chǔ)披蕉。

3. Vscode平臺(tái)與AidLux連接

連接Vscode平臺(tái)與AidLux是一個(gè)關(guān)鍵步驟,它不僅使得代碼開(kāi)發(fā)和調(diào)試更加高效乌奇,還能充分利用AidLux平臺(tái)的AI推理加速能力没讲。

首先,用戶需要在其工作站上安裝Vscode礁苗。這可以通過(guò)訪問(wèn)Vscode官方網(wǎng)站并下載適用于其操作系統(tǒng)的版本來(lái)實(shí)現(xiàn)食零。安裝過(guò)程簡(jiǎn)單直接,遵循標(biāo)準(zhǔn)的軟件安裝步驟即可寂屏。

安裝完成后贰谣,配置Vscode以連接到AidLux平臺(tái)。這通常涉及設(shè)置遠(yuǎn)程開(kāi)發(fā)環(huán)境迁霎,確保Vscode可以通過(guò)網(wǎng)絡(luò)與AidLux平臺(tái)進(jìn)行通信吱抚。用戶需要在Vscode中配置適當(dāng)?shù)木W(wǎng)絡(luò)設(shè)置,包括指定AidLux設(shè)備的IP地址和端口號(hào)考廉。

遠(yuǎn)程連接設(shè)置完成后秘豹,用戶可以開(kāi)始使用Vscode進(jìn)行遠(yuǎn)程代碼編寫(xiě)和調(diào)試。這一過(guò)程中昌粤,Vscode將利用其強(qiáng)大的編輯和調(diào)試工具既绕,幫助用戶更有效地開(kāi)發(fā)和優(yōu)化代碼。同時(shí)涮坐,AidLux平臺(tái)的AI推理加速能力在這一過(guò)程中發(fā)揮著重要作用凄贩,尤其是在處理復(fù)雜的圖像分析和機(jī)器學(xué)習(xí)任務(wù)時(shí)。

4. 基于AidLux的語(yǔ)義分割模型轉(zhuǎn)換

進(jìn)行語(yǔ)義分割模型轉(zhuǎn)換是一個(gè)復(fù)雜但至關(guān)重要的過(guò)程袱讹,它直接關(guān)系到工業(yè)視覺(jué)缺陷檢測(cè)的效果和準(zhǔn)確性疲扎。

首先,模型轉(zhuǎn)換流程的啟動(dòng)涉及到AIMO平臺(tái)的使用。AIMO作為一個(gè)強(qiáng)大的AI模型優(yōu)化工具椒丧,提供了一系列用戶友好的界面和功能壹甥,以幫助用戶輕松地進(jìn)行模型轉(zhuǎn)換和優(yōu)化。

模型轉(zhuǎn)換的類型多種多樣壶熏,包括但不限于常見(jiàn)的卷積神經(jīng)網(wǎng)絡(luò)(CNN)模型句柠。用戶需要根據(jù)實(shí)際需求和AidLux平臺(tái)的兼容性選擇合適的模型類型。

在模型轉(zhuǎn)換過(guò)程中棒假,輸出應(yīng)用的設(shè)置也非常重要俄占。這涉及到模型的輸出格式和維度,以確保轉(zhuǎn)換后的模型能夠與AidLux平臺(tái)上的其他系統(tǒng)和工具無(wú)縫集成淆衷。

參數(shù)設(shè)置是另一個(gè)關(guān)鍵環(huán)節(jié)。用戶需要細(xì)致地調(diào)整模型轉(zhuǎn)換過(guò)程中的各種參數(shù)渤弛,如學(xué)習(xí)率祝拯、批處理大小等,以獲得最佳的轉(zhuǎn)換效果和性能她肯。

最后佳头,進(jìn)行轉(zhuǎn)換結(jié)果的對(duì)比分析是驗(yàn)證轉(zhuǎn)換效果的重要步驟。用戶需要比較轉(zhuǎn)換前后模型的性能晴氨,包括準(zhǔn)確度康嘉、運(yùn)行速度等,以確保轉(zhuǎn)換后的模型符合預(yù)期效果籽前。

5. 基于AidLux的模型部署

在AidLux平臺(tái)上部署語(yǔ)義分割模型是一個(gè)關(guān)鍵步驟亭珍,它涉及多個(gè)重要環(huán)節(jié),確保模型能夠在實(shí)際環(huán)境中高效運(yùn)行枝哄。

首先肄梨,數(shù)據(jù)上傳是部署過(guò)程的初步步驟。這包括將訓(xùn)練好的模型和必要的測(cè)試數(shù)據(jù)上傳到AidLux平臺(tái)挠锥。上傳過(guò)程需要確保數(shù)據(jù)的完整性和格式的正確性众羡,以便于后續(xù)的處理和分析。

接下來(lái)蓖租,核心代碼的編寫(xiě)是部署過(guò)程的核心粱侣。這需要開(kāi)發(fā)者編寫(xiě)適配AidLux平臺(tái)的代碼,以確保模型能夠在該平臺(tái)上順利運(yùn)行蓖宦。這通常包括設(shè)置模型的輸入輸出參數(shù)齐婴、調(diào)用相應(yīng)的處理函數(shù)等。

部署演示是對(duì)整個(gè)部署過(guò)程的綜合展示稠茂。在這一步驟中尔店,開(kāi)發(fā)者需要展示模型在AidLux平臺(tái)上的實(shí)際運(yùn)行情況,包括模型的加載、執(zhí)行和輸出結(jié)果的展示嚣州。這不僅是對(duì)模型性能的驗(yàn)證鲫售,也是對(duì)整個(gè)部署過(guò)程的檢驗(yàn)。

部署過(guò)程還可能包括性能優(yōu)化和錯(cuò)誤調(diào)試等環(huán)節(jié)该肴。性能優(yōu)化旨在提高模型的運(yùn)行效率和準(zhǔn)確度情竹,而錯(cuò)誤調(diào)試則確保模型在不同條件下都能穩(wěn)定運(yùn)行。

6.實(shí)戰(zhàn)訓(xùn)練營(yíng)大作業(yè)代碼性能優(yōu)化

import aidlite_gpu

import cv2

import os

import time

import numpy as np

from PIL import Image

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對(duì)象

?? 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}".format(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)

if __name__ == '__main__':

?? model_path = "/home/dataset2aidlux/unetmodel_fp32.tflite"

?? input_dir = "/home/dataset2aidlux/test_imgs/"

?? output_dir = '/home/dataset2aidlux/test_imgs/results/'

?? # Create the output directory if it doesn't exist

?? os.makedirs(output_dir, exist_ok=True)

?? # Iterate through all image files in the input directory

?? for filename in os.listdir(input_dir):

? ? ?? if filename.endswith(".PNG"):

? ? ? ? ?? img_path = os.path.join(input_dir, filename)

? ? ? ? ?? save_path = os.path.join(output_dir, f"result_{filename}")

? ? ? ? ?? aidlux_tflite_infer(model_path, img_path, save_path)

?? print("Inference and conversion completed for all images.")

這段Python代碼是一個(gè)腳本匀哄,用于使用"aidlite_gpu"庫(kù)對(duì)一組輸入圖像進(jìn)行推斷秦效,使用TensorFlow Lite(TFLite)模型。以下是代碼的逐步解釋:

導(dǎo)入必要的庫(kù):

代碼導(dǎo)入了必要的庫(kù)涎嚼,包括"aidlite_gpu"阱州、OpenCV(cv2)、os法梯、time苔货、numpy(作為np)、以及用于圖像處理的PIL(Pillow)庫(kù)立哑。

定義函數(shù)"mask_to_image":

該函數(shù)將一個(gè)掩碼(numpy數(shù)組)轉(zhuǎn)換為PIL圖像夜惭。如果掩碼有2維(通常表示分割掩碼),則將其轉(zhuǎn)換為8位灰度圖像铛绰。如果掩碼有3維诈茧,它會(huì)假定這是一個(gè)多類別分割掩碼,并通過(guò)在第一個(gè)軸上取argmax來(lái)將其轉(zhuǎn)換為灰度圖像捂掰。

定義"aidlux_tflite_infer"函數(shù):

該函數(shù)使用TFLite模型對(duì)輸入圖像進(jìn)行推斷敢会。

它從"aidlite_gpu"庫(kù)中初始化一個(gè)"aidlite"對(duì)象,并加載由"model_path"指定的TFLite模型这嚣。

它將輸入圖像調(diào)整大小為256x256像素走触,并將其歸一化為0到1之間的值。

它將預(yù)處理后的圖像傳遞給模型并執(zhí)行推斷疤苹,同時(shí)測(cè)量推斷時(shí)間互广。

它從模型中獲取輸出張量,如果需要卧土,重新調(diào)整其形狀惫皱,并使用"mask_to_image"函數(shù)將其轉(zhuǎn)換為圖像。

最后尤莺,它將生成的掩碼圖像保存到指定的"save_path"旅敷。

在"if name == 'main':"塊中:

設(shè)置TFLite模型、輸入圖像目錄和輸出目錄的路徑颤霎。

如果輸出目錄不存在媳谁,它會(huì)創(chuàng)建該目錄涂滴。

它遍歷輸入目錄中所有以".PNG"擴(kuò)展名結(jié)尾的文件,并為每個(gè)圖像調(diào)用"aidlux_tflite_infer"函數(shù)晴音。

這段代碼讀取圖片并進(jìn)行處理的邏輯進(jìn)行了優(yōu)化:

模塊化和可維護(hù)性: 代碼使用了函數(shù)來(lái)組織不同的任務(wù)柔纵,例如加載模型、圖像預(yù)處理锤躁、推理搁料、后處理和結(jié)果保存。這種模塊化的結(jié)構(gòu)使得代碼更易于理解和維護(hù)系羞。

可配置性: 代碼中的輸入和輸出路徑以及其他參數(shù)都是可配置的郭计,這使得可以輕松更改輸入圖像和輸出路徑,以適應(yīng)不同的應(yīng)用場(chǎng)景椒振。

兼容性: 代碼使用了通用的Python庫(kù)昭伸,如OpenCV和Pillow,這些庫(kù)對(duì)圖像處理非常強(qiáng)大澎迎,同時(shí)也很常見(jiàn)庐杨。這增加了代碼的兼容性,因?yàn)檫@些庫(kù)支持多種圖像格式嗡善。

效率: 代碼中對(duì)圖像進(jìn)行了適當(dāng)?shù)念A(yù)處理,將其調(diào)整為256x256像素并進(jìn)行歸一化学歧。這可以提高模型的推理速度罩引,因?yàn)樗鼫p小了輸入圖像的大小,并將像素值縮放到0到1之間枝笨,以更好地匹配模型的預(yù)期輸入袁铐。

結(jié)果可視化: 代碼將推斷的結(jié)果以圖像的形式保存,這使得結(jié)果易于查看和驗(yàn)證横浑。這對(duì)于視覺(jué)任務(wù)的調(diào)試和分析非常有幫助剔桨。

錯(cuò)誤處理: 代碼包含一些錯(cuò)誤處理,例如檢查輸入目錄是否存在并在需要時(shí)創(chuàng)建輸出目錄徙融。這有助于確保代碼在不同情況下能夠正常運(yùn)行洒缀。

7. 實(shí)戰(zhàn)訓(xùn)練營(yíng)大作業(yè)視頻效果

[]: https://www.bilibili.com/video/BV17w411b7Ac/?vd_source=65321ae9f27855396a24095af71e9903

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市欺冀,隨后出現(xiàn)的幾起案子树绩,更是在濱河造成了極大的恐慌,老刑警劉巖隐轩,帶你破解...
    沈念sama閱讀 222,627評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件饺饭,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡职车,警方通過(guò)查閱死者的電腦和手機(jī)瘫俊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門鹊杖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人扛芽,你說(shuō)我怎么就攤上這事骂蓖。” “怎么了胸哥?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,346評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵涯竟,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我空厌,道長(zhǎng)庐船,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,097評(píng)論 1 300
  • 正文 為了忘掉前任嘲更,我火速辦了婚禮筐钟,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘赋朦。我一直安慰自己篓冲,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,100評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布宠哄。 她就那樣靜靜地躺著壹将,像睡著了一般。 火紅的嫁衣襯著肌膚如雪毛嫉。 梳的紋絲不亂的頭發(fā)上诽俯,一...
    開(kāi)封第一講書(shū)人閱讀 52,696評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音承粤,去河邊找鬼暴区。 笑死,一個(gè)胖子當(dāng)著我的面吹牛辛臊,可吹牛的內(nèi)容都是我干的仙粱。 我是一名探鬼主播,決...
    沈念sama閱讀 41,165評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼彻舰,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼伐割!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起刃唤,我...
    開(kāi)封第一講書(shū)人閱讀 40,108評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤口猜,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后透揣,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體济炎,經(jīng)...
    沈念sama閱讀 46,646評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,709評(píng)論 3 342
  • 正文 我和宋清朗相戀三年辐真,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了须尚。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片崖堤。...
    茶點(diǎn)故事閱讀 40,861評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖耐床,靈堂內(nèi)的尸體忽然破棺而出密幔,到底是詐尸還是另有隱情犯犁,我是刑警寧澤根吁,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布患蹂,位于F島的核電站彪薛,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏某宪。R本人自食惡果不足惜明吩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,196評(píng)論 3 336
  • 文/蒙蒙 一缰雇、第九天 我趴在偏房一處隱蔽的房頂上張望皆串。 院中可真熱鬧淹办,春花似錦、人聲如沸恶复。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,698評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)谤牡。三九已至副硅,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間翅萤,已是汗流浹背恐疲。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,804評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留断序,地道東北人流纹。 一個(gè)月前我還...
    沈念sama閱讀 49,287評(píng)論 3 379
  • 正文 我出身青樓糜烹,卻偏偏與公主長(zhǎng)得像违诗,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子疮蹦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,860評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容