1. AidLux简介及其优势
AidLux是成都阿加犀智能科技有限公司自主研发的融合架构操作系统,支持Android/鸿蒙和Linux系统的生态融合。其核心优势包括操作系统多样性、广泛芯片适配、以及AI模型转换和计算单元调度的高效性。
2. AidLux平台安装和环境配置
2. AidLux平台安装和环境配置
在安装和配置AidLux环境时,要遵循一系列详细的步骤,以确保平台能够顺利运行和充分发挥其功能。
首先,需要从官方网站或应用市场下载AidLux应用。在下载完成后,进行标准的安装流程,包括接受相关的使用条款和条件。
安装后,用户需要对AidLux进行初步配置。这包括为应用授予权限,例如访问文件系统、网络和摄像头等。这些权限对于AidLux的正常运行至关重要,特别是在进行图像处理和分析时。
接下来,重启设备并登录AidLux系统。在这一步骤中,可能需要输入用户凭证或进行其他安全验证,以保证系统的安全性和稳定性。
最后,用户需要更新AidLux系统并安装所需的工具包。这可能包括AI模型转换工具、图像处理库、以及其他开发和调试所需的软件。确保所有工具包都是最新版本,可以有效提高AidLux平台的性能和兼容性。
通过遵循这些步骤,用户可以在不同的设备上成功安装和配置AidLux平台,为接下来的工业视觉缺陷检测任务打下坚实的基础。
3. Vscode平台与AidLux连接
连接Vscode平台与AidLux是一个关键步骤,它不仅使得代码开发和调试更加高效,还能充分利用AidLux平台的AI推理加速能力。
首先,用户需要在其工作站上安装Vscode。这可以通过访问Vscode官方网站并下载适用于其操作系统的版本来实现。安装过程简单直接,遵循标准的软件安装步骤即可。
安装完成后,配置Vscode以连接到AidLux平台。这通常涉及设置远程开发环境,确保Vscode可以通过网络与AidLux平台进行通信。用户需要在Vscode中配置适当的网络设置,包括指定AidLux设备的IP地址和端口号。
远程连接设置完成后,用户可以开始使用Vscode进行远程代码编写和调试。这一过程中,Vscode将利用其强大的编辑和调试工具,帮助用户更有效地开发和优化代码。同时,AidLux平台的AI推理加速能力在这一过程中发挥着重要作用,尤其是在处理复杂的图像分析和机器学习任务时。
4. 基于AidLux的语义分割模型转换
进行语义分割模型转换是一个复杂但至关重要的过程,它直接关系到工业视觉缺陷检测的效果和准确性。
首先,模型转换流程的启动涉及到AIMO平台的使用。AIMO作为一个强大的AI模型优化工具,提供了一系列用户友好的界面和功能,以帮助用户轻松地进行模型转换和优化。
模型转换的类型多种多样,包括但不限于常见的卷积神经网络(CNN)模型。用户需要根据实际需求和AidLux平台的兼容性选择合适的模型类型。
在模型转换过程中,输出应用的设置也非常重要。这涉及到模型的输出格式和维度,以确保转换后的模型能够与AidLux平台上的其他系统和工具无缝集成。
参数设置是另一个关键环节。用户需要细致地调整模型转换过程中的各种参数,如学习率、批处理大小等,以获得最佳的转换效果和性能。
最后,进行转换结果的对比分析是验证转换效果的重要步骤。用户需要比较转换前后模型的性能,包括准确度、运行速度等,以确保转换后的模型符合预期效果。
5. 基于AidLux的模型部署
在AidLux平台上部署语义分割模型是一个关键步骤,它涉及多个重要环节,确保模型能够在实际环境中高效运行。
首先,数据上传是部署过程的初步步骤。这包括将训练好的模型和必要的测试数据上传到AidLux平台。上传过程需要确保数据的完整性和格式的正确性,以便于后续的处理和分析。
接下来,核心代码的编写是部署过程的核心。这需要开发者编写适配AidLux平台的代码,以确保模型能够在该平台上顺利运行。这通常包括设置模型的输入输出参数、调用相应的处理函数等。
部署演示是对整个部署过程的综合展示。在这一步骤中,开发者需要展示模型在AidLux平台上的实际运行情况,包括模型的加载、执行和输出结果的展示。这不仅是对模型性能的验证,也是对整个部署过程的检验。
部署过程还可能包括性能优化和错误调试等环节。性能优化旨在提高模型的运行效率和准确度,而错误调试则确保模型在不同条件下都能稳定运行。
6.实战训练营大作业代码性能优化
代码语言:javascript复制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类并创建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: 传入模型输入数据
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: 执行推理
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代码是一个脚本,用于使用"aidlite_gpu"库对一组输入图像进行推断,使用TensorFlow Lite(TFLite)模型。以下是代码的逐步解释:
- 导入必要的库:
- 代码导入了必要的库,包括"aidlite_gpu"、OpenCV(cv2)、os、time、numpy(作为np)、以及用于图像处理的PIL(Pillow)库。
- 定义函数"mask_to_image":
- 该函数将一个掩码(numpy数组)转换为PIL图像。如果掩码有2维(通常表示分割掩码),则将其转换为8位灰度图像。如果掩码有3维,它会假定这是一个多类别分割掩码,并通过在第一个轴上取argmax来将其转换为灰度图像。
- 定义"aidlux_tflite_infer"函数:
- 该函数使用TFLite模型对输入图像进行推断。
- 它从"aidlite_gpu"库中初始化一个"aidlite"对象,并加载由"model_path"指定的TFLite模型。
- 它将输入图像调整大小为256x256像素,并将其归一化为0到1之间的值。
- 它将预处理后的图像传递给模型并执行推断,同时测量推断时间。
- 它从模型中获取输出张量,如果需要,重新调整其形状,并使用"mask_to_image"函数将其转换为图像。
- 最后,它将生成的掩码图像保存到指定的"save_path"。
- 在"if name == 'main':"块中:
- 设置TFLite模型、输入图像目录和输出目录的路径。
- 如果输出目录不存在,它会创建该目录。
- 它遍历输入目录中所有以".PNG"扩展名结尾的文件,并为每个图像调用"aidlux_tflite_infer"函数。
这段代码读取图片并进行处理的逻辑进行了优化:
- 模块化和可维护性: 代码使用了函数来组织不同的任务,例如加载模型、图像预处理、推理、后处理和结果保存。这种模块化的结构使得代码更易于理解和维护。
- 可配置性: 代码中的输入和输出路径以及其他参数都是可配置的,这使得可以轻松更改输入图像和输出路径,以适应不同的应用场景。
- 兼容性: 代码使用了通用的Python库,如OpenCV和Pillow,这些库对图像处理非常强大,同时也很常见。这增加了代码的兼容性,因为这些库支持多种图像格式。
- 效率: 代码中对图像进行了适当的预处理,将其调整为256x256像素并进行归一化。这可以提高模型的推理速度,因为它减小了输入图像的大小,并将像素值缩放到0到1之间,以更好地匹配模型的预期输入。
- 结果可视化: 代码将推断的结果以图像的形式保存,这使得结果易于查看和验证。这对于视觉任务的调试和分析非常有帮助。
- 错误处理: 代码包含一些错误处理,例如检查输入目录是否存在并在需要时创建输出目录。这有助于确保代码在不同情况下能够正常运行。
7. 实战训练营大作业视频效果
[]: https://www.bilibili.com/video/BV17w411b7Ac/?vd_source=65321ae9f27855396a24095af71e9903