开发板型号: Xilinx ZYNQ MPSoC (ALINX AXU2CG-A)
下载好vitis-ai 后,就可以开始开发拉!
如果在docker 下载或者 docker pull 拉取 Vitis Ai 镜像中遇到问题,欢迎翻看我之前有关docker 的博客。
持续更新中.....
-------------------------------------------------------------------------------------------------------------------------------
1.启动Vitis AI ,激活Anaconda 的 tensorflow 环境
先cd到 dpu-compiler-docker 的路径
cd Vitis_Ai && ./dpu-compiler-docker.sh
激活虚拟环境
conda activate vitis-ai-tensorflow
注意:进入 docker 时,执行 docker 命令时用户所在路径被暂时替换为了/workplace,并且无 法访问原用户路径(home/$USER/)下的内容
2.量化
量化需要测试集数据来进行校准(Calibration),我们已预先准备好了校准用的数据集 Compile_Tools/model/vehicle/JPEGImages 。 此 外 , 运 行 该 脚 本 需 要 同 路 径 下 提 供 的 input_fn.py 文件,它负责指示数据集的路径和图像数据的输入格式处理,用于与量化工具入 口对接。

2.1 进入路径 Compile_Tools/
cd AI-Model-Zoo/all_models_1.2/tensorflow/detection/tf_yolov3_voc_416_416_65.63G_1.2/Compile_Tools
2.2 运行如下命令进行量化操作:
source 1_tf_quantize.sh
出现报错:
100% (32 of 32) |########################| Elapsed Time: 0:02:20 Time: 0:02:20
INFO: Calibration Done.
2024-09-05 09:44:06.542443: W tensorflow/contrib/decent_q/utils/graph_quantizer.cc:1629] [DECENT_WARNING] Shift cut of node conv2d_48/convolution is 20. It exceed range [0, 16], modify quantize pos from 22 to 18
2024-09-05 09:44:06.544886: W tensorflow/contrib/decent_q/utils/graph_quantizer.cc:1629] [DECENT_WARNING] Shift cut of node conv2d_50/convolution is 19. It exceed range [0, 16], modify quantize pos from 22 to 19
2024-09-05 09:44:06.544940: W tensorflow/contrib/decent_q/utils/graph_quantizer.cc:1629] [DECENT_WARNING] Shift cut of node conv2d_52/convolution is 20. It exceed range [0, 16], modify quantize pos from 23 to 19
2024-09-05 09:44:06.551135: W tensorflow/contrib/decent_q/utils/graph_quantizer.cc:1550] [DECENT_WARNING] Shift bias of node conv2d_48/convolution is 17. It exceed range [0, 16], modify quantize pos from 6 to 7
2024-09-05 09:44:06.551194: W tensorflow/contrib/decent_q/utils/graph_quantizer.cc:1550] [DECENT_WARNING] Shift bias of node conv2d_50/convolution is 18. It exceed range [0, 16], modify quantize pos from 6 to 8
2024-09-05 09:44:06.551229: W tensorflow/contrib/decent_q/utils/graph_quantizer.cc:1550] [DECENT_WARNING] Shift bias of node conv2d_52/convolution is 18. It exceed range [0, 16], modify quantize pos from 6 to 8
Killed
增加 虚拟机核数 以及 内存后,重新 source
报错如下:
N/A% (0 of 32) | | Elapsed Time: 0:00:00 ETA: --:--:--2024-09-05 10:22:54.285002: F tensorflow/contrib/decent_q/kernels/fix_neuron_ops.cc:36] Cannot open file: modle/vehicle/vai_q_output/temp/conv2d_68_kernel_biases_wquant for op: conv2d_68/kernel/biases/wquant
Fatal Python error: Aborted
给权限:
(vitis-ai-tensorflow) alinx@ubuntu:/workspace/AI-Model-Zoo/all_models_1.2/tensor
flow/detection/tf_yolov3_voc_416_416_65.63G_1.2/Compile_Tools$ sudo chmod 777 -R .
重新遇到第一种报错
将虚拟机的内存扩到允许范围内的最大值(本机内存为16g,虚拟机设置到了11g)
source 成功 ,量化完成后打印如下信息(大概3分钟左右)
3.编译 DPU Kernel
这一步需要 路径 Compile_Tools/hardware/AXU*器件名*_*DPU 型号*/下对应的.dcf 配置文件和.json 描述文件。
确认json 中 dcf 文件的 路径 准确无误
回到路径 Compile_Tools/下,查看 2_vai_compile.sh,确认.json 的路径无误。(其中 TARGET 为器件名)
3.1 执行指令编译
source 2_vai_compile.sh
完成后生成的路径为 model/vehicle/c_output_*器件名*_*DPU 型号*/ dpu_tf_yolov3_vehicle.elf。同时会打印 DPU kernel(yolov3)的相关信息
3.2 调用DPU Kernel 分析工具
在.elf 生成的文件目录下, 使用 DDump 查看.elf 中 yolov3 Kernel 中包括输入输出接口在内的全部信息。
cd modle/vehicle/vai_c_output_AXU2CGA_DPU_B1152/
ddump -f dpu_tf_yolov3_voc.elf -a
4.生成动态链接库 .so 文件
有了.elf 文件之后,下一步需要交叉编译,用于生成动态链接库.so 文件。它包含了 yolov3 kernel,只需要 python 应用程序的驱动即可在目标板上进行 yolov3 推断。
4.1下载 Xilinx Runtime docker 来使用 64bit ARM GCC 交叉编译工具链
注意,带有符号 runtime-docker:$ 的命令都是在 Runtime Docker 中完成的。
cd Vitis_Ai && ./runtime-docker.sh
pull 完成后,cd 到 Compile_Tools/ 目录
cd AI-Model-Zoo/all_models_1.2/tensorflow/detection/tf_yolov3_voc_416_416_65.63G_1.2/Compile_Tools/
打开 3_lib_compiler_runtime.sh,确认 .elf 文件路径,并注释掉最后一行
运行
runtime-docker:$ source 3_lib_compiler_runtime.sh
执行完毕后,生成 .so 文件
将其拷贝至实验工程目录下的 code/deploy_in_board/Alinx_DNN/ tf_yolov3_vehicle_deploy/
至此,为了在目标板上运行 yolov3 推断,在进行的 host 主机端(PC) 的准备工作已经全部完成。