前言
本文主要针对caffe1.0框架的神经网络,叙述如何在ULTRA96V2板子上部署神经网络,同时本篇文章主要针对DPU2.0版本。
以下是本篇文章正文内容,主要参考以下文档 DNNDK环境部署文档,提取码QQDZ 神经网络编译
一、DNNDK环境部署
首先从XILINX官网下载DNNDK包,链接如下: DNNDK包下载链接 下载好后传到Ubuntu16.04系统中,我使用的是虚拟机,虚拟机安装Ubuntu16.04教程很多,这里不再赘述,运行如下指令安装依赖库:
apt-get install -y --force-yes build-essential autoconf libtool libopenblasdev libgflags-dev libgoogle-glog-dev libopencv-dev protobuf-compiler libleveldbdev liblmdb-dev libhdf5-dev libsnappy-dev libboost-all-dev libssl-dev
再将下载后的压缩包解压,文件结构如下:
解压图片中框选的压缩包,然后进入到host_x86文件夹下,运行如下指令:
./install.sh <board_name>
其中<board_name> 根据开发板可以是Ultra96, ZCU104或是ZCU102,运行该指令后环境便搭建好了。
二、量化神经网络
下载该训练集到$dnndk_pkg/host_x86/models/caffe/resnet50路径并解压,并在该目录下下找到dnnc.sh,根据自己的dpu以及神经网络情况修改dnnc.sh,之后先运行decent.sh进行剪枝、量化,再运行dnnc.sh进行编译,若显示如下界面则说明编译成功: 之后即可在dnnc_output文件夹中获得elf文件。需要注意的是resnet50与inceptionv1下载dnndk解压后都有例子,其他网络若需要编译则要自己找到该网络的浮点模型,然后修改对应的dnnc.sh与prototxt,其余步骤如上所示。
三、编译神经网络
在windows环境下的命令行中运行如下指令启动Xilinx SDK GUI:
xsdk
当XSDK GUI打开后新建一个空白workspace,再点击选项卡File然后选择New Application Project,输入对应的信息,以resnet50网络为例,其余网络只需修改project name即可: 点击选项卡中的File然后Import -> General -> Filesystem将main.cc与之前dnnc_output文件夹内的elf文件导入,main.cc下载链接如下(针对resnet50网络,其余网络需要适当修改): main.cc下载链接,提取码为QQDZ 再更新Application Build Settings,首先在resnet50 application点击鼠标右键,然后选择C/C++ Build Settings,在 C/C++ Build -> Environment, 加入SYSROOT变量以及指向sysroot的位置,获取sysroot地址首先需要下载下述压缩包并解压: SYSROOT,提取码QQDZ 下载后地址如下,以我的为例:
D:\srtp\our_work\sdk\sysroots\aarch64-xilinx-linux
再将compiler和linker指向SYSROOT
Miscellaneous -> Linker Flags : --sysroot=${SYSROOT}
Miscellaneous -> Other Flags:在原来内容基础上加上 --sysroot=${SYSROOT} 再在 g++ linker libraries tab, 加入以下 libraries: n2cube、dputils、pthread、opencv_core、opencv_imgcodecs、opencv_highgui 再在 g++ linker -> Miscellaneous, 加入 model .elfs 到 Other Objects,再从resnet50/src directory加入 dpu_resnet50_0.elf,这一步可以点击Workspace以浏览所需对象: 点击OK,最后在 resnet50 application鼠标右键,然后选择 Build Project,最终可以在debug文件夹下获取最终能在板子上跑的神经网络。
|