利用 Vitis AI API_3 (Graph Runner) 开发 - 2.5 简体中文

Vitis AI Library 用户指南 (UG1354)

Document ID
UG1354
Release Date
2022-06-15
Version
2.5 简体中文
如果模型拆分为多个子图,那么您无法再以 API_0、API_1 和 API_2 来自动运行该模型。您必须按逐个子图来部署模型。Graph runner 是用于部署此类模型的全新 API。它可将模型转换为单个 graph,以简化具有多个子图的模型的部署。它支持 C++ 和 Python。
注释: 建议采用 Graph Runner API 来执行自定义运算符部署。
  1. https://github.com/Xilinx/Vitis-AI 使用 git clone 来克隆对应 Vitis AI Library。
  2. 在主机侧安装交叉编译系统。请参阅 安装 以获取指示信息。
  3. 检查模型,查看其中是否具有多个子图。如有,则可检查在受支持的模型作用域内是否存在 DPU 不支持的运算。您可在 Vitis-AI/src/Vitis-AI-Library/cpu_task/ops 中找到 Vitis AI Library 支持的运算。
    注释: 如果运算不包含在 cpu_task 的支持列表中,则无法直接使用 graph_runner。编译模型时可能遇到错误。您必须首先解决错误,然后才能在 cpu_task 下添加运算。您还可参阅 VCK190 自定义 Lambda 运算符教程,了解如何利用 Graph_runner API 寄存自定义运算符和部署模型。
  4. 创建 model_test.cpp 源文件。主流程如下图所示。请参阅 Vitis-AI/examples/Vitis-AI-Library/samples/graph_runner/platenum_graph_runner/platenum_graph_runner.cpp 文件,获取完整的代码示例。

  5. 如下所示创建 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
  6. 对程序进行交叉编译。
    sh -x build.sh
  7. 使用 scp 命令将可执行程序复制到目标开发板。
    scp test_model root@IP_OF_BOARD:~/
  8. 安装最新 VART。如需了解更多信息,请参阅 步骤 3:安装 AI Library 程序包
  9. 在目标开发板上执行程序。运行该程序前,请确保目标开发板上已安装 Vitis AI Library,并准备好您要测试的图像。
    ./model_test <model> <image>