申请了测评开发板,还在报名阶段,并没有拿到板子。好在入门教程已经发布了,先搭建一个环境,试试仿真的流程能不能走通。
主要流程参考:R329教程一|周易 AIPU 部署及仿真教程 http://bbs.eeworld.com.cn/thread-1173906-1-1.html
系统环境:Ubuntu 20.04 LTS
安装docker
矽速科技提供docker环境用于开发测试,因此需要先在Ubuntu里安装docker。
这部分内容可以参考网上的docker教程。例如https://developer.aliyun.com/article/763005
导入docker软件源
sudo apt update
sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add –
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
安装docker
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io
下载开发环境
sudo docker pull zepan/zhouyi
需要下载的镜像比较大(接近3GB),如果由于众所周知的原因,网络连接性不稳,也可以用官方给出的百度云链接下载镜像文件。
百度云下载镜像文件(压缩包约2.9GB,解压后约5.3GB)
# 链接:https://pan.baidu.com/s/1yaKBPDxR_oakdTnqgyn5fg
# 提取码:f8dr
gunzip zhouyi_docker.tar.gz
sudo docker load --input zhouyi_docker.tar
启动并测试开发环境
官方给出的启动镜像命令:
sudo docker run -i -t zepan/zhouyi /bin/bash
先别急着运行。为了方便数据交换,可以开一个共享目录,这里主机里的/home/vm/shared目录共享到容器里的/share,启动命令修改为:
sudo docker run -v /home/vm/shared:/share -i -t zepan/zhouyi /bin/bash
./run_sim.sh
模拟通过,最后一行会提示0 errors,0 warnings。
python3 quant_predict.py
量化后前5个label发生了一些变化。
原图:
result.jpeg
生成模型文件
在主机上安装tensorflow
为了方便开发,在主机上安装python和tensorflow 1.15
Python通过anaconda安装,可参考https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/。
这里使用最新版本安装包:Anaconda3-2021.05-Linux-x86_64.sh
安装完anaconda后,先创建一个python3.6的虚拟环境(tensorflow 1.15不支持高版本的python)
conda create -n tf python=3.6
进入tf虚拟环境:
conda activate tf
安装tensorflow 1.15
pip install tensorflow==1.15.3
确认版本都装对了:
下载并转换预训练模型
模型来源:https://github.com/tensorflow/models/tree/master/research/slim#pre-trained-models
将master分支下载到本地,进入research/slim子目录,安装slim模块
cd ~/models-master/research/slim
python setup.py install
根据教程,导出图:
python3 export_inference_graph.py \
--alsologtostderr \
--model_name=resnet_v1_50 \
--image_size=224 \
--labels_offset=1 \
--output_file=/home/vm/model_dump/resnet_v1_50_inf.pb
使用预训练权重冻结
其中ckpt文件在前面提到的github页面上有下载地址,解压后放到model_dump目录下。
python3 /home/vm/anaconda3/envs/tf/lib/python3.6/site-packages/tensorflow_core/python/tools/freeze_graph.py \
--input_graph=/home/vm/model_dump/resnet_v1_50_inf.pb \
--input_checkpoint=/home/vm/model_dump/resnet_v1_50.ckpt \
--input_binary=true --output_graph=/home/vm/model_dump/resnet_v1_50_frozen.pb \
--output_node_names=resnet_v1_50/predictions/Reshape_1
将冻结的pb文件复制到共享目录下。
cp ~/model_dump/resnet_v1_50_frozen.pb ~/shared/
仿真运行模型
量化数据集用/demos/pb/dataset里自带的数据。
cd /demos/pb/config
复制一份配置文件,修改为前面冻结的模型:
cp resnet_50_run.cfg resnet_50_run2.cfg
修改参数
vim resnet_50_run2.cfg
运行:
aipubuild config/resnet_50_run2.cfg
查看predict结果
编写一个view_result.py程序,和官方demo的结果对比:
mport numpy as np
outputfile = './output_resnet_50.bin'
npyoutput = np.fromfile(outputfile, dtype=np.int8)
outputclass = npyoutput.argmax()
print("1 Predict Class is %d"%outputclass)
outputfile = './output_resnet_50_2.bin'
npyoutput = np.fromfile(outputfile, dtype=np.int8)
outputclass = npyoutput.argmax()
print("2 Predict Class is %d"%outputclass)
可见predict结果一致,上述流程是正确的。
附录
查看pb文件网络结构的方法
import tensorflow as tf
#model = 'resnet_v1_50_frozen.pb'
model = '/home/vm/shared/frozen_orig.pb'
graph = tf.get_default_graph()
graph_def = graph.as_graph_def()
graph_def.ParseFromString(tf.gfile.FastGFile(model, 'rb').read())
tf.import_graph_def(graph_def, name='graph')
summaryWriter = tf.summary.FileWriter('log/', graph)
#run tensorboard --logdir=log/ --port=6006
本帖最后由 x1816 于 2021-8-1 01:16 编辑