# UltraNet-by-DPU **Repository Path**: LinuxTomLiu/UltraNet-by-DPU ## Basic Information - **Project Name**: UltraNet-by-DPU - **Description**: 2020年新工科联盟-Xilinx暑期学校(Summer School)项目 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: origin - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-07-27 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # UltraNet-by-DPU #### 介绍 2020年新工科联盟-Xilinx暑期学校(Summer School)项目 本项目尝试使用DPU重新实现UltraNet网络,并部署在ZCU104上。目前完整流程已走通,但尚存在iou过低的问题亟待解决。 #### 软件架构 本仓库分为三个分支,从上到下分别为origin,Vitis_AI,deploy。用以训练,量化和部署。 https://gitee.com/LinuxTomLiu/UltraNet-by-DPU 1. origin:训练 - 切换到train文件夹下,根据readme提示,输入 `python train.py --multi-scale --img-size 320 --multi-scale --batch-size 32`, 然而你会发现缺了很多依赖。 - 再次根据readme的提示,到yolov3原始的library仓库里去,根据提示安装依赖。一次性安装貌似会出问题,可以缺啥安装啥,直至成功。 - 然后还是会错,如果是 CUDA out of memory的问题,那是GPU被占用了。使用`export CUDA_VISIBLE_DEVICES=4,5,6`之类的来指定GPU。可以先用 nvidia-smi来查看当前GPU的使用情况。 - 在train文件夹下新建一个weights文件夹,否则运行时找不到保存位置而报错。 - 训练数据集与测试数据集路径设置好~ - 然后输入训练命令,等着它跑就好了。。 - 训练完画图部分会出错,问题不大,忽略就好了。 - 训练过程中最好的结果会存在 weihts 文件夹中。找到那个结果最好的参数。 2. Vitis_AI - 首先需要清楚,原网络只有基于pytorch的,故首先需要清楚 Vitis_AI/transModel.py 是根据原网络(float)版,使用 keras 重新搭建了一个一模一样的网络。【由于vitis docker中没有同时包含 tensorflow 和 pytorch的版本,故第一步建议自己建一个python环境或者conda环境,装好pytorch和 tensorflow。如果只是走流程可以跳过第一步。】 - 然后基于 Vitis_AI/pytorch_to_keras.py 将原网络下训练好的参数(*.pt), 部署到新的 keras网络中。这样,我们可以得到一个带权重参数的keras网络模型,(\*.h5) - keras 网络就比较容易转换到 tensorflow网络了,也就是执行 1_vitisAI_keras2frozon.sh。得到 tensorflow frozon model, 也就是 .pd 文件。 - 之所以转换模型这么麻烦,主要还是因为 VitisAI 目前对pytorch的支持还不够成熟。而tensorflow这种固定的网络则硬件更友好。也支持的比较早。而一步一步从pytorch转 keras再转tensorflow,则是我们对神经网络不熟,无法一步从pytorch转tensorflow. - 接下来才是 VitisAI的表演时间,运行 2_vitisAI_tf_quantize.sh,让VitisAI自己做量化。 - 量化结果存在 /quantize_results下,依旧是个 .pb 文件。 - 注意这一步跟前面网络的训练一样,需要训练数据集和测试集。 - 最后一步就是编译了。编译这边需要设置量化后的模型pb,加速的板子,输出结果和网络名称。结果会生成 .elf文件。 至此,万事具备,有了 .elf 就可以考虑将其部署到相应的板子上去了。我们这里使用的是 ZCU104. 3. 最后一步就是deploy了,此时需要将第三个分支,也就是deploy克隆到相应的板子上。这里是 zcu104。这一步是在板子上执行的。