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:
生成的.pb模型文件
4、量化用的校准数据集
校准数据集我是直接使用的给定的5张图片(实验室的网速太慢了),在实际部署的时候,最好要覆盖全部可能出现的场景,这样才能得到有代表性的激活分布,从而得到最佳的量化因子 ,使用preprocess\_dataset\_wlk.py 文件生成dataset\_wlk.npy和label\_wlk.npy文件待用。
注意:preprocess\_dataset\_wlk.py这个地方的预处理变了。
可以看到,inception系列和resnet系列的预处理方式是不一样的。
5. 生成输入.bin文件
1.第一张用原来的 input.bin来对比FP32和量化后推理的结果
2.自己使用gen\_inputbin.py生成snake.bin图片,看看别的图片的效果
原图是这样:
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
7. simulator执行的输入输出结果
执行aipubuild进行模型的量化和仿真测试。
aipubuild config/inception_v3.cfg
在output目录下已经得到了output\_inception\_v3.bin文件。
8、执行 python quant\_predict.py 得到结果
python quant_predict.py
第一张狗狗图片的输出结果,可以看见FP32的结果和量化后的结果是一样的。
第二张蛇的图片得到如下的输出:可以看出来,结果也都 蛇 相关的类别,还是挺准确的。