工业视觉少样本缺陷检测实战应用:AidLux平台的创新实践

2023-12-10 18:04:53 浏览数 (3)

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)模型。以下是代码的逐步解释:

  1. 导入必要的库:
    • 代码导入了必要的库,包括"aidlite_gpu"、OpenCV(cv2)、os、time、numpy(作为np)、以及用于图像处理的PIL(Pillow)库。
  2. 定义函数"mask_to_image":
    • 该函数将一个掩码(numpy数组)转换为PIL图像。如果掩码有2维(通常表示分割掩码),则将其转换为8位灰度图像。如果掩码有3维,它会假定这是一个多类别分割掩码,并通过在第一个轴上取argmax来将其转换为灰度图像。
  3. 定义"aidlux_tflite_infer"函数:
    • 该函数使用TFLite模型对输入图像进行推断。
    • 它从"aidlite_gpu"库中初始化一个"aidlite"对象,并加载由"model_path"指定的TFLite模型。
    • 它将输入图像调整大小为256x256像素,并将其归一化为0到1之间的值。
    • 它将预处理后的图像传递给模型并执行推断,同时测量推断时间。
    • 它从模型中获取输出张量,如果需要,重新调整其形状,并使用"mask_to_image"函数将其转换为图像。
    • 最后,它将生成的掩码图像保存到指定的"save_path"。
  4. 在"if name == 'main':"块中:
    • 设置TFLite模型、输入图像目录和输出目录的路径。
    • 如果输出目录不存在,它会创建该目录。
    • 它遍历输入目录中所有以".PNG"扩展名结尾的文件,并为每个图像调用"aidlux_tflite_infer"函数。

这段代码读取图片并进行处理的逻辑进行了优化:

  1. 模块化和可维护性: 代码使用了函数来组织不同的任务,例如加载模型、图像预处理、推理、后处理和结果保存。这种模块化的结构使得代码更易于理解和维护。
  2. 可配置性: 代码中的输入和输出路径以及其他参数都是可配置的,这使得可以轻松更改输入图像和输出路径,以适应不同的应用场景。
  3. 兼容性: 代码使用了通用的Python库,如OpenCV和Pillow,这些库对图像处理非常强大,同时也很常见。这增加了代码的兼容性,因为这些库支持多种图像格式。
  4. 效率: 代码中对图像进行了适当的预处理,将其调整为256x256像素并进行归一化。这可以提高模型的推理速度,因为它减小了输入图像的大小,并将像素值缩放到0到1之间,以更好地匹配模型的预期输入。
  5. 结果可视化: 代码将推断的结果以图像的形式保存,这使得结果易于查看和验证。这对于视觉任务的调试和分析非常有帮助。
  6. 错误处理: 代码包含一些错误处理,例如检查输入目录是否存在并在需要时创建输出目录。这有助于确保代码在不同情况下能够正常运行。
7. 实战训练营大作业视频效果

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

0 人点赞