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