可乐跑枸杞 · 2021年07月20日

【周易AIPU 仿真】R329开发板系列一:环境的搭建和PC端仿真

R329开发板第一步:搭建仿真开发环境

上次用的是Resnet50,做这个实验的人太多了,这次将网络换成了inception\_v3

等收到开发板之后,再移植一个人脸检测模型,详细测试一下模型的int8量化精度损失情况和在板子上的加速情况,测试一下官方的量化算法对模型的友好程度。
inception系列要注意的地方:

  • inception系列预处理方式和resnet系列不一样
  • inception\_v4的输入是299 * 299
  • 因为使用softmax的前一层做输出,注意要将predict的数据类型改成 int8,这个可以看aipu的输出的txt文件判断。

官方的SDK中有AIPU的详细介绍,例如 Arm China AI Platform Zhouyi Compass Software,其中还简述了int8量化的基本原理

1、使用矽速科技提供的docker环境进行开发

百度云下载镜像文件(压缩包约2.9GB,解压后约5.3GB), 进入docker

# 链接: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

2、验证docker

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

3、下载模型,转换模型

wget http://download.tensorflow.org/models/inception_v3_2016_08_28.tar.gz
tar -xzvf inception_v3_2016_08_28.tar.gz

安装 slim 模块
cd models-master/research/slim
python setup.py install --user

git clone https://github.com/tensorflow/models.git # dowbload tools

# Get Graph
python3 models/research/slim/export_inference_graph.py --alsologtostderr --model_name=inception_v3 --image_size=224 --labels_offset=0 --output_file=./tmp/inception_v3.pb

# Frozen
python3 tensorflow-r1.5/tensorflow/python/tools/freeze_graph.py --input_graph=/root/demos/tflite/tmp/inception_v3.pb --input_checkpoint=/root/demos/tflite/tmp/inception_v3.ckpt --input_binary=true --output_graph=/root/demos/tflite/tmp/inception_v3_frozen.pb --output_node_names=InceptionV3/Predictions/Reshape

output\_node\_names:
image.png

生成的.pb模型文件
image.png

4、量化用的校准数据集

校准数据集我是直接使用的给定的5张图片(实验室的网速太慢了),在实际部署的时候,最好要覆盖全部可能出现的场景,这样才能得到有代表性的激活分布,从而得到最佳的量化因子 ,使用preprocess\_dataset\_wlk.py 文件生成dataset\_wlk.npy和label\_wlk.npy文件待用。
注意:preprocess\_dataset\_wlk.py这个地方的预处理变了。
image.png
可以看到,inception系列和resnet系列的预处理方式是不一样的。
image.png

5. 生成输入.bin文件

1.第一张用原来的 input.bin来对比FP32和量化后推理的结果
image.png
2.自己使用gen\_inputbin.py生成snake.bin图片,看看别的图片的效果
原图是这样:
image.png

6. NN compiler的cfg文件

拷贝一份config文件里的tflite\_mobilenet\_v2\_run.cfg,更改文件名inception\_v3.cfg,根据模型,数据的位置进行修改,具体的配置如下。

[Common]
mode=run

[Parser]
model_name = inception_v3
detection_postprocess = 
model_domain = image_classification
output = InceptionV3/Predictions/Reshape
input_model = ./model/inception_v3_frozen.pb
input = input
input_shape = [1,224,224,3]
output_dir = ./

[AutoQuantizationTool]
model_name = inception_v3
quantize_method = SYMMETRIC
ops_per_channel = DepthwiseConv
calibration_data = ./dataset/dataset_wlk.npy
calibration_label = ./dataset/label_wlk.npy
preprocess_mode = normalize
quant_precision=int8
reverse_rgb = False
label_id_offset = 0

[GBuilder]
inputs=./model/snake.bin
outputs=./output/output_inception_v3.bin
simulator=aipu_simulator_z1
profile= True
target=Z1_0701

image.png

7. simulator执行的输入输出结果

执行aipubuild进行模型的量化和仿真测试。

aipubuild config/inception_v3.cfg

image.png
在output目录下已经得到了output\_inception\_v3.bin文件。
image.png

8、执行 python quant\_predict.py 得到结果

python quant_predict.py

第一张狗狗图片的输出结果,可以看见FP32的结果和量化后的结果是一样的。
image.png
result.jpeg
第二张蛇的图片得到如下的输出:可以看出来,结果也都 蛇 相关的类别,还是挺准确的。
image.png

result (1).jpeg

本次仿真用到的相关文件,提取码:94tz

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