【DigiKey好物畅享】BeagleBoard BeagleY-AI 部署yolo11n

一、简介:

本贴分享的是如何在BeagleY-AI部署自己的yolo模型。由于使用的是TI的Edge AI SDK,我们需要把训练完的pt格式的模型转为onnx格式再使用tidl-tool转为bin格式才能运行。

二、在PC上部署TIDL环境:

我这里选择在电脑上的Ubuntu 22.04部署。

TIDL的下载网站:

https://github.com/TexasInstruments/edgeai-tidl-tools/blob/master/README.md

1. 安装系统依赖:

sudo apt-get update
sudo apt-get install libyaml-cpp-dev libglib2.0-dev

2.git下载:

cd ~
git clone https://github.com/TexasInstruments/edgeai-tidl-tools.git
cd edgeai-tidl-tools
git checkout 11_00_06_00

3.设置环境变量:

export SOC=am67a
source ./setup.sh
source ./setup_env.sh am67a

如果报错:

ERROR: Failed to build ‘git+https://github.com/NVIDIA/TensorRT@release/8.5#subdirectory=tools/onnx-graphsurgeon’ when getting requirements to build wheel

直接忽略,graphsurgeon是用于修改节点的工具,一般用不到。

三、模型转换:

1.我们需要在电脑上部署yolo训练环境和下载yolo11n.pt模型

2.转为ONNX格式:

from ultralytics import YOLO
if __name__ == "__main__":

    model = YOLO(r"F:\deeplearning\yolo11n.pt")

    model.export(format='onnx',simplify=True,imgsz=640,opset=11,dynamic=False)

3.将ONNX格式转为bin格式:

修改文件:

“/home/user/edgeai-tidl-tools/examples/osrt_python/model_configs.py”

在字典models_configs最后写入自己模型的配置

修改完到这个目录下:

/edgeai-tidl-tools/examples/osrt_python/ort

运行:

python3 onnxrt_ep.py  -c -m my-yolo11n-custom

最后会在/edgeai-tidl-tools/model-artifacts/my-yolo11n-custom/目录下生成

编译转换后的bin文件。

再把/my-yolo11n-custom/artifacts/tempDir/下的文件都mv到artifacts/文件夹下。这是为了让他和板子里的/model_zoo中模型的文件格式一样。

最后将整个my-yolo11n-custom文件复制到板子上的model_zoo下。

四、运行模型

我们先使用CPU进行推理,看看模型转换是否成功

1.创建一个使用CPU推理的脚本:

(左为模型配置,右为推理脚本)

填入你自己的模型和图片路径,运行脚本

结果如下:

纯CPU推理太慢了,花了要900ms;接下来我们尝试自己加入DSP加速,看看能否成功。

2.尝试加入DSP加速:

创建py脚本:

运行后发现报错:

VX_ZONE_ERROR: [ownNodeKernelInit:704] Target kernel, TIVX_CMD_NODE_CREATE failed for node node_86

VX_ZONE_ERROR: [ TIDL subgraph /model.4/cv2/act/Mul_output_0 ] Graph verify failed

onnxruntime.capi.onnxruntime_pybind11_state.Fail: [ONNXRuntimeError] : 1 : FAIL : Create state function failed. Return value:-1

总结可能有以下几个原因:

1.EdgeAI-TIDL-Tools的版本与开发板的SDK版本不匹配,导致板子无法识别bin文件

2.EdgeAI-TIDL-Tools不支持yolo11n的部分算子,比如SiLU和MUL算子

关于版本匹配问题:通过官网查询TIDL-Tools与SDK的兼容表,开发板的SDK是基于Processor SDK RTOS 11.00.00.06修改的,是可以兼容我们TIDL-Tools的版本(11_00_06_00)。

关于算子支持问题:通过官网查询到TIDL-Tools的更新记录,从11_01_06_00开始支持SiLU算子,但是BeagleBoard最新的SDK还停留在11.00.00.06,所以需要等待BB官方更新才能解决。

   除此之外,我也尝试使用app_edgeai.py或者在GUI界面尝试运行yolo11,也是无功而返。还尝试过yolov8等模型,也是无功而返。所以目前只支持官方提供的优化后的模型,只能等待官方更新了。

   综上所述,本贴成功将yolo11n部署到BeagleY-AI开发板上运行(使用CPU推理),并且进行了目标检测。尝试加入DSP对推理进行加速,但是失败了。后续我会继续跟进和研究。

五、心得体会:

在下载TIDL的时候如果遇到依赖、组件下载失败,请换源或者代理。同时要保证你的硬盘够大,TIDL有10g多。本次遇到最大的问题就是无法打开DSP对推理进行加速,我在网络上也找不到相关的资料。同时我还发现TI的GitHub仓库里已经转换好后的模型,也不能在板子上运行,也是因为版本不兼容的问题 真让人头大。。

大家有出现这种情况吗?有什么方案吗?