本文转载自: PYNQ开源社区微信公众号
感兴趣者可与 pynq_china@xilinx.com 联系,共同合作拓展项目。
简介
本案例主要基于DPU-PYNQ来实现一个常见的手势识别--石头剪刀布,目的是让大家了解如何使用DPU开发深度学习应用的整个流程。本案例分为三个部分:分别是PC模型训练、VitisAI模型编译、Edge模型部署三个部分。PC模型训练是通过tensorflow对数据集进行分析训练,得到需要的tf模型;VitisAI模型编译是通过vitis ai工具链,对tf模型进行量化、编译,转换成dpu可以运行的模型;Edge模型部署是在U96上调度使用编译好的模型。
Git仓库:https://github.com/linxiaobo110/rps_u96.git
在PC上训练NN模型
数据集
数据集使用的是谷歌发布的开源数据集:
https://www.tensorflow.org/datasets/catalog/rock_paper_scissors
训练环境说明
议在有显卡的环境下训练,本教程使用的python环境所需的库如下所示:
python 3.7
tensorflow 2.0
numpy
opencv
matplotlib
sklearn
在安装好的python环境下,使用spyder或者命令行运行train.py:
python train.py
正常运行时会有以下输出:
1、打印部分数据集图片(注意观察图片是否正常),以及各种标签的样本数量:
2、打印训练过程以及训练精度的变化
在Vitis AI里编译NN模型
把训练好的模型通过vitis AI编译后才可以在U96上运行。
1、把训练好的模型拷贝到DpuCarU96的vitisAI目录,同时需要把vitisAI/dataset_valid下的验证集换成用户自己的数据,至少50张图片。
2、启动vitis AI的docker,并把工程里的vitisAI目录拷贝到docker虚拟机里。
./docker_run.sh xilinx/vitis-ai
3、在vitisAI的dockder里,激活tensorflow的环境:
conda activate vitis-ai-tensorflow
4、在vitisAI的dockder里,运行权值固化、权值量化、模型编译等脚本可以得到以下输出:
编译完完的模型在./vitisAI/compile_results目录下,里面的.elf文件是下一阶段的教程所需要的。
在Utral96上调用NN模型
1、把仓库拷贝到U96的jupyter_notebook目录下,如果要使用用户的模型,请把里面的.elf文件换成vitisAI教程里生成的elf文件。
2、在U96的终端上,把elf模型编译程序共享库:
sudo ./1.compile.sh
3、在U96的终端上,查看IP地址:
sudo ifconfig
4、在用户PC上,打开浏览器,输入IP地址,即可进入jupyter Notebook。
5、在用户PC上,按照jupyterNotebook的提示逐步地运行程序,即可看到效果。
6、在用户PC上,使用USB摄像头的实时识别实验。USB摄像头需要连接在Ultral96上。
点击:https://github.com/linxiaobo110/rps_u96 ,直达本文案例Github!