此文档介绍如何使用 CIX P1 NPU SDK 将 yolov8l_seg 转换为 CIX SOC NPU 上可以运行的模型。
整体来讲有四个步骤:
:::tip
步骤1~3 在 x86 主机 Linux 环境下执行
:::
请参考 安装 NPU SDK 进行 NPU SDK 和 NOE Compiler 的安装.
在 CIX AI Model Hub 中包含了 yolov8l_seg 的所需文件, 请用户按照 CIX AI Model Hub 下载
cd ai_model_hub/models/ComputeVision/Semantic_Segmentation/onnx_yolov8_segmentation
请确认目录结构是否同下图所示。
├── cfg # quantization config file
│ └── yolov8l_segbuild.cfg
├── datasets # calibration dataset and input datas
│ ├── calibration_data.npy
│ └── input0.bin
├── test_data # test data
├── model # model which quantize
│ └── yolov8l_seg.onnx
├── inference_npu.py # inference on npu
├── inference_onnx.py # inference on onnxruntime
└── ReadMe.md
:::tip
用户可无需从头编译模型,radxa 提供预编译好的 yolov8l_seg.cix 模型(可用下面步骤下载),如果使用预编译好的模型,可以跳过“编译模型” 这一步
wget https://modelscope.cn/models/cix/ai_model_hub_24_Q4/resolve/master/models/ComputeVision/Semantic_Segmentation/onnx_yolov8_segmentation/yolov8l_seg.cix
:::
将使用 NOE Compiler 编译好的 .cix 格式的模型复制到 Orion O6 开发板上进行模型验证
python3 inference_npu.py --image_path test_data --model_path yolov8l_seg.cix
(.venv) radxa@orion-o6:~/ai_model_hub/models/ComputeVision/Semantic_Segmentation/onnx_yolov8_segmentation$ time python3 inference_npu.py --image_path test_data --model_path yolov8l_seg.cix
npu: noe_init_context success
npu: noe_load_graph success
Input tensor count is 1.
Output tensor count is 2.
npu: noe_create_job success
segmentation finish
segmentation finish
npu: noe_clean_job success
npu: noe_unload_graph success
npu: noe_deinit_context success
real 0m5.505s
user 0m5.403s
sys 0m0.484s
结果保存在 output
文件夹中
使用 CPU 对 onnx 模型进行推理验证正确性,可在 X86 主机上或 Orion O6 上运行
python inference_onnx.py --image_path test_data --onnx_path model/yolov8l_seg.onnx
(.venv) radxa@orion-o6:~/ai_model_hub/models/ComputeVision/Semantic_Segmentation/onnx_yolov8_segmentation$ time python inference_onnx.py --image_path test_data --onnx_path model/yolov8l_seg.onnx
segmentation finish
segmentation finish
real 0m7.908s
user 0m47.173s
sys 0m0.699s
结果保存在 output
文件夹中
可以看到 NPU 和 CPU 上推理的结果一致,但运行速度大幅缩短