项目简介
本案例的核心思路简明清晰:借助DPU-PYNQ平台实现经典手势识别——石头剪刀布。旨在帮助开发者理解如何利用DPU完成深度学习应用的完整工作流。整个流程分为三个关键环节:首先在PC端使用TensorFlow训练神经网络模型,接着通过Vitis AI工具链对模型进行量化和编译,最后在Ultra96开发板上完成部署与推理调用。虽然只有三步,但每一步都涉及重要的技术细节。
在PC上训练神经网络模型
数据集准备
本教程采用谷歌发布的开源石头剪刀布数据集,可直接从TensorFlow Datasets中获取。推荐在配备GPU的机器上进行训练,所需Python环境依赖包括:Python 3.7、TensorFlow 2.0、NumPy、OpenCV、Matplotlib以及scikit-learn。环境配置完成后,在Spyder或终端中执行以下命令即可开始训练:
python train.py
训练过程中会输出两类信息:一是展示部分数据集图片(用于检查图片数据是否存在异常),同时列出各类别标签的样本数量;二是显示训练过程中的精度曲线变化。请重点关注模型是否收敛,这对最终模型质量至关重要。

在Vitis AI环境中编译神经网络模型
训练完成的模型不能直接部署到Ultra96上运行,必须先经过Vitis AI编译流程。具体操作步骤如下:
1. 将训练好的模型文件复制到工程目录下的vitisAI文件夹中,并将vitisAI/dataset_valid内的验证集替换为您自己的数据——至少需要50张图片,样本太少会严重影响量化效果。
2. 启动Vitis AI的Docker容器,并将刚才的vitisAI目录挂载至容器中:./docker_run.sh xilinx/vitis-ai
3. 在Docker内激活TensorFlow环境:conda activate vitis-ai-tensorflow
4. 依次执行权值固化、量化和编译等脚本。正常执行后,终端将输出类似下图的提示信息:

编译完成后的模型文件存储于./vitisAI/compile_results目录下,其中的.elf文件即为后续部署所需。
在Ultra96上部署并调用神经网络模型
最后一步是将编译好的模型部署到Ultra96开发板上,整个流程较为顺畅:
1. 将整个仓库复制到Ultra96的jupyter_notebook目录下。如需使用自定义模型,请将.elf文件替换为之前编译生成的文件。
2. 在Ultra96终端中执行sudo ./1.compile.sh,将.elf模型编译为共享库。
3. 查询Ultra96的IP地址:sudo ifconfig
4. 在您的PC浏览器中输入该IP地址,即可进入Jupyter Notebook界面。
5. 根据Notebook中的指引逐步执行代码,很快就能看到手势识别效果。
6. 如需进行实时识别,将USB摄像头连接至Ultra96,并运行对应的实时识别脚本即可。
