NXP MCU 技术论坛
直播中

youyoulan

13年用户 1206经验值
私信 关注
[问答]

请问如何在imx8mplus上部署和运行YOLOv5训练的模型?

我正在从事 imx8mplus yocto 项目。我已经在自定义数据集上的 YOLOv5 上训练了对象检测模型。它在 ubuntu 电脑上运行良好。现在我想在我的 imx8mplus 板上运行该模型。我在 yo tflite 中转换模型并尝试在 tensorflow 脚本上运行模型,但它不起作用。
如何在 imx8mplus 上运行 YOLOv5 模型?
在 imx8mplus 上运行任何其他对象检测模型的方法是否支持更快的帧速率和易于接口?此外,我还需要在我的自定义数据集上训练该模型。

回帖(1)

陈秀珍

2025-3-27 18:11:49

在i.MX8M Plus上部署YOLOv5模型需要结合NXP的硬件加速能力(特别是NPU)和软件优化。以下是分步解决方案和替代方案建议:




一、YOLOv5部署核心步骤


1. 验证i.MX8M Plus环境配置



  • 确认yocto镜像已集成NPU驱动(imx-npu)和TensorFlow Lite运行时。

  • 检查是否启用了Vulkan/VX Delegate:
     # 查看NPU驱动状态
    dmesg | grep galcore
    # 确认TFLite库路径
    ls /usr/lib/libvx_delegate.so


2. 模型转换优化



  • 推荐转换路径
     YOLOv5 PyTorch → ONNX → TensorFlow Lite(含量化)


  • 关键转换参数


     # PyTorch转ONNX(YOLOv5官方方法)
    torch.onnx.export(model, im, "yolov5s.onnx", opset=12,
                      input_names=['images'], output_names=['output'])

    # ONNX转TFLite(使用tf-nightly)
    import tensorflow as tf
    converter = tf.lite.TFLiteConverter.from_onnx_model("yolov5s.onnx")
    converter.optimizations = [tf.lite.Optimize.DEFAULT]
    converter.target_spec.supported_types = [tf.float16]  # NPU友好格式
    tflite_model = converter.convert()



3. NPU加速关键配置




  • 在C++代码中显式启用VX Delegate:


     #include "tensorflow/lite/delegates/hexagon/hexagon_delegate.h"

    TfLiteDelegate* CreateNpuDelegate() {
       TfLiteHexagonDelegateOptions options = {0};
       options.enable_dynamic_batch_size = true;
       return TfLiteHexagonDelegateCreate(&options);
    }

    // 加载模型时插入Delegate
    model = tflite::FlatBufferModel::BuildFromFile("yolov5s.tflite");
    tflite::ops::builtin::BuiltinOpResolver resolver;
    tflite::InterpreterBuilder builder(*model, resolver);
    builder.AddDelegate(CreateNpuDelegate());



4. 输入输出适配



  • 输入预处理(必须匹配训练时的归一化方式):
     // 典型YOLOv5输入:RGB 640x640,归一化到0-1范围
    for (int i = 0; i < 640*640*3; ++i) {
       input_tensor[i] = (pixel[i] / 255.0f);
    }

  • 后处理优化

    • 使用NMS的硬件加速实现(如OpenCV DNN模块)

    • 避免在CPU上处理大量候选框





二、替代高帧率方案


1. 官方优化模型



  • NXP eIQ预训练模型
     # 从NXP GitHub获取优化模型
    git clone https://github.com/nxp-imx/eiq-models


    • 推荐模型:ssd_mobilenet_v2_quantized(FPS >30 on NPU)



2. 模型架构替代方案



































模型 输入尺寸 量化支持 NPU FPS(预估) 训练难度
EfficientDet-Lite0 320x320 INT8 45-55 ★★☆☆☆
YOLOv5n (nano) 416x416 FP16 25-35 ★★★☆☆
MobileNetV3-SSD 300x300 INT8 60-70 ★★★★☆

3. TensorRT加速方案


   # 转换到ONNX后使用TensorRT加速(需CUDA兼容)
   trt_engine = tensorrt.Builder(...)
   with open("yolov5s.onnx", "rb") as f:
       parser.parse(f.read())



三、关键调试技巧


1. 性能分析工具


   # 使用NXP性能分析器
   /usr/bin/tensorflow-lite-2.8.0/examples/benchmark_model
     --graph=yolov5s.tflite --use_hexagon=true

2. OP兼容性检查


   # 检查模型是否包含NPU不支持的OP
   from tensorflow.lite.python import schema_py_generated as schema_fb
   model = schema_fb.Model.GetRootAsModel(open("yolov5s.tflite", "rb").read(), 0)
   for i in range(model.OperatorCodesLength()):
       print(model.OperatorCodes(i).BuiltinCode())

3. 内存优化



  • meta-imx/meta-ml/recipes-fsl/tensorflowlite中修改yocto编译选项:
     EXTRA_OECONF += "--enable_hexagon 
                     --with-ruy=disabled
                     --with-xnnpack=disabled"




四、推荐开发路径



  1. 优先验证NXP官方Demo模型是否能正常运行

  2. 使用imx-dpu-gst实现硬件加速的视频流处理

  3. 在PC端用ais_bench工具模拟NPU执行:
    ./ais_bench --model yolov5s.tflite --device npu


如果仍遇到具体错误(如TfLiteGpuDelegate Invoke: GpuDelegate Init failure),建议提供完整的错误日志,可进一步分析NPU内存分配或OP兼容性问题。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分