如果模型拆分为多个子计算图,那么您无法再以 API_0、API_1 和 API_2 来自动运行该模型。您必须按逐个子计算图来部署模型。Graph runner 是用于部署此类模型的全新 API。它可将模型转换为单个计算图,以简化具有多个子计算图的模型的部署。它支持 C++ 和 Python。
注释: 建议采用 Graph Runner API 来执行自定义运算符部署。
- 从 https://github.com/Xilinx/Vitis-AI 使用 git clone 来克隆对应 Vitis AI Library。
- 在主机侧安装交叉编译系统。请参阅 安装 以获取指示信息。
- 检查模型,查看其中是否具有多个子计算图。如有,则可检查在受支持的模型作用域内是否存在 DPU 不支持的运算。您可在 Vitis-AI/src/vai_library/cpu_task/ops 中找到 Vitis AI Library 支持的运算。注释: 如果运算不包含在 cpu_task 的支持列表中,则无法直接使用 graph_runner。编译模型时可能遇到错误。您必须首先解决错误,然后才能在 cpu_task 下添加运算。您还可参阅 VCK190 自定义 Lambda 运算符教程,了解如何利用 Graph_runner API 寄存自定义运算符和部署模型。
- 创建 model_test.cpp 源文件。主流程如下图所示。请参阅 Vitis-AI/examples/vai_library/samples/graph_runner/platenum_graph_runner/platenum_graph_runner.cpp 文件,获取完整的代码示例。
- 如下所示创建 build.sh 文件,或者从 Vitis AI Library 演示复制该文件并对其进行修改。
result=0 && pkg-config --list-all | grep opencv4 && result=1 if [ $result -eq 1 ]; then OPENCV_FLAGS=$(pkg-config --cflags --libs-only-L opencv4) else OPENCV_FLAGS=$(pkg-config --cflags --libs-only-L opencv) fi CXX=${CXX:-g++} $CXX -std=c++17 -O2 -I. \ -o platenum_graph_runner \ platenum_graph_runner.cpp \ -lglog \ -lxir \ -lvart-runner \ -lvitis_ai_library-graph_runner \ ${OPENCV_FLAGS} \ -lopencv_core \ -lopencv_imgcodecs \ -lopencv_imgproc
- 对程序进行交叉编译。
sh -x build.sh
- 使用
scp
命令将可执行程序复制到目标开发板。scp test_model root@IP_OF_BOARD:~/
- 安装最新 VART。如需了解更多信息,请参阅 步骤 3:安装 AI Library 程序包。
- 在目标开发板上执行程序。运行该程序前,请确保目标开发板上已安装 Vitis AI Library,并准备好您要测试的图像。
./model_test <model> <image>