cxy · 2021年07月21日

【周易AIPU 仿真】周易AIPU部署及模型仿真测试实践

一、开发板申请
为了让开发者更快得体验搭载周易AIPU处理器的R329芯片,极术社区联合矽速科技共同推出了R329开发板申请活动。该R329开发板由矽速科技开发,支持智能语音和视频,同时提供周易AIPU SDK下载。申请流程参考:https://aijishu.com/e/1120000...

二、环境搭建及仿真测试
宿主系统:ubuntu14.04
全程测试验证在矽速科技提供的docker环境里面测试完成。

1、下载及搭建环境

docker pull zepan/zhouyi

由于之前宿主系统已经安装过了docker,所以直接pull zhouyi的镜像即可。

docker run -i -t zepan/zhouyi /bin/bash

cd ~/demos/tflite
./run_sim.sh
python3 quant_predict.py

进入到docker容器内部,运行其中的例程测试环境是否正常?一切OK。

2、生成模型文件及仿真测试
目前 NN compiler 支持pb,tflite,caffemodel,onnx格式,用户需要先转换自己的模型格式到对应格式。

预训练模型文件在github上可以下载:
https://github.com/tensorflow...

这次选择的是VGG 16;在容器内部/root/demos/下新建一个目录test,用于存放下载的vgg模型。

cd test
wget http://download.tensorflow.org/models/vgg_16_2016_08_28.tar.gz
tar -xzvf vgg_16_2016_08_28.tar.gz
git clone git://github.com/tensorflow/models.git # download tools 
# Get Graph
python3 ./models/research/slim/export_inference_graph.py \
 --alsologtostderr --model_name=vgg_16 \
 --image_size=224 --labels_offset=1 \
 --output_file=./vgg_16_inf.pb
# Frozen
python3 /usr/local/lib/python3.6/dist-packages/tensorflow_core/python/tools/freeze_graph.py \
 --input_graph=./vgg_16_inf.pb \
 --input_checkpoint=./vgg_16.ckpt \
 --input_binary=true --output_graph=./vgg_16_frozen.pb \
 --output_node_names=vgg_16/fc8/squeezed

docker环境里面不支持git,所以需要先手动安装git,然后才能下载tensorflow model garden;同时由于服务器不支持https,故改成了用git协议下载。

apt-get install git
git clone git://github.com/tensorflow/models.git

docker环境会报错:ModuleNotFoundError: No module named 'tf_slim',需要手动安装(缺啥补啥^_^),如下:

pip3 install tf_slim

下载好预训练的ckpt文件后,转换vgg_16.ckpt到冻结的pb文件, 这里建议使用tf1.13~1.15之间的版本。

注意:如果在docker里面执行到Get Graph时候报urllib.error.URLError系列的网络错误,需要检查下服务器的网络环境,实在不行只能考虑网络翻墙或者转到windows下去生成了。

最终生成的模型文件为:vgg_16_frozen.pb

3、生成矫正集
将图片和label放到/root/demos/tflite/dataset目录下的img路径下,修改label.txt为对应的图片描述,
执行preprocess_dataset.py 生成dataset.npy和label.npy矫正集文件。

PS:需要用docker cp从宿主机将图片拷贝到对应容器内部;或者直接使用自带的几张图片;我这次使用了自带的。

4、生成需要验证的input.bin
进入到/root/demos/tflite/model目录下;拷贝你想要推理的图片到该目录下并改名成1.jpg(因为model下的gen_inputbin.py脚本会读入1.jpg来生成input.bin,你不想改名的话就自行改py文件吧);

cp /root/demos/tflite/dataset/img/ILSVRC2012_val_00000001.JPEG 1.jpg 

python3 gen_inputbin.py 

ILSVRC2012_val_00000001.JPEG可以手动拷贝到宿主机上看是蛇的图片(这是这次准备输入进行推理的图片,你也可以拷贝其他图片去生成input.bin来进行推理验证):
result.jpeg

4、编译及运行

cd /root/demos/tflite/
cp /root/demos/test/vgg_16_frozen.pb ./model

将刚才生成在test下的的vgg_16_frozen.pb拷贝进来。
在/root/demos/tflite/config下自行编写一个config/tf_vgg_16_run.cfg,内容如下:

[Common]
mode = run

[Parser]
#model_type = tflite
model_name=vgg_16 
detection_postprocess= 
model_domain=image_classification
input_model=./model/vgg_16_frozen.pb
input=input
input_shape=[1, 224, 224, 3]
output=vgg_16/fc8/squeezed
output_dir=./

[AutoQuantizationTool]
quantize_method=SYMMETRIC
quant_precision=int8
ops_per_channel=DepthwiseConv
reverse_rgb=False
label_id_offset=0 
dataset_name=
detection_postprocess=
anchor_generator= 
log=False
calibration_data=./dataset/dataset.npy
calibration_label=./dataset/label.npy

[GBuilder]
inputs=./model/input.bin
simulator=aipu_simulator_z1
outputs=./output_vgg_16.bin
profile=True
target=Z1_0701
cd /root/demos/tflite/
aipubuild ./config/tf_vgg_16_run.cfg

5、结果分析
手动改/root/demos/tflite下的quant_predict.py如下图:
1.png
主要是将outputfile参数改成对应生成的output_vgg_16.bin,还有将dtype参数改成np.int8(否则推理出来的结果会不准!!)

python3 ./quant_predict.py

2.png

Detect picture save to result.jpeg
对比预测结果,可以看到较准确地预测了input.bin中图片内容为green mamba(绿曼巴蛇)。

最后,记得保存操作的容器环境,下次直接进入docker还存在之前安装过的软件及测试生成的文件,在宿主系统下操作:

docker commit 容器ID zepan/zhouyi

三、模型实机测试

待申请好R329开发板后,实机评测验证。

四、附件

原始模型文件
矫正集的data.npy和label.npy
NN compiler的cfg文件
simulator执行的输入输出结果,比较运算量化误差

上传到百度云:
链接: https://pan.baidu.com/s/1ttsw...
提取码: a3yb

推荐阅读
关注数
7443
内容数
92
人工智能边缘计算软硬件解决方案,提供高性能、低成本、低功耗、易使用的硬件选型方案.
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息