1.认识浮点模型转换工具链
2.caffe模型转换
3.onnx模型转换
4.上板测试以及模拟器测试
5. 测试mobilenetV2推理速度
Netron工具可以可视化Caffe, Onnx模型, https://github.com/lutzroeder/Netron
注意检查模型输入输出等是否符合预期
一,认识浮点模型转换工具链.
详情请阅读X3芯片工具链文档


加载镜像 :
启动Docker :
将主机目录: /home/x3 映射 到 Docker中的 /data
需要更具自己下载的镜像版本 和 解压路径做调整
tar -xvf x3-toolchain-1.0.post10.tar.gz
二, caffe 转 定点模型.
以lenet_gray 为例
进入目录: cd /data/horizon_x3_tc_1.0.post10/samples/miscellaneous/lenet_gray
env.conf: 配置caffe模型地址, 测试图片,模型类型

mapper: 用于将浮点模型转化
会打印出每一层运行在CPU或者BPU


详情请参照文档: 5.1. 模型转换功能介绍. 运行的中间结果以及Log在 model_output/
模拟器以及芯片运行的bin文件: lenet_gray_hybrid_horizonrt.bin




三.onnx 转 定点模型.
或者直接下载 PytorchTensorflowMnist.ipynb: https://pan.horizon.ai/index.php/s/ESHHfL4EZk97CxL
其他框架如 mxnet, tensorflow, cntk, pytorch等,请参考开源工程: https://github.com/onnx/tutorials/tree/master/tutorials

会遇到不支持的Op情况,
model_type="onnx"


04_inference.sh : 不做修改

四.定点模型上板测试.
01_build.sh: 编译infer程序, 打包相关依赖库.
源码为: samples\02_rt_sample_src\01_hr_example\src\infer.cc

将测试图片../lenet_data/0.jpg,runtime_arm 文件夹,以及../mapper/model_output/lenet_gray_hybrid_horizonrt.bin
拷贝到开发板的/userdata/
修改dev_board_infer.sh

运行结果:

01_build.sh :

02_infer.sh

五, 测试mobilenetV2推理速度
路径: cd samples/03_classification/01_mobilenet
env.conf: 配置示例名称 sample_name=mobilenetv2
mapper: 将浮点模型转换为定点模型
runtime_arm: 上板测试
runtime_sim: 模拟器测试
5.2 mapper编译模型
检查模型: sh 01_check.sh
放入原始图片到: ../../../01_common/data/imagenet/calibration_data
校准数据预处理: sh 02_preprocess.sh
复制yaml: cp mobilenet_config.yaml mobilenetv2_config.yaml
修改mobilenetv2_config.yaml
修改 03_build.sh: config_file="./mobilenetv2_config.yaml"
编译模型: sh 03_build.sh
编译成功后,runtime使用模型为: model_output/mobilenetv2_hybrid_horizonrt.bin
修改04_inference.sh : model_file="./model_output/mobilenetv2_quantized_model.onnx"
运行单图测试: sh 04_inference.sh
登陆开发板: ssh root@192.168.168.10 .
固定CPU和BPU频率:
进入文件夹: cd runtime_arm
编译源码: sh 01_build.sh
数据预处理: sh 02_preprocess.sh
将数据和脚本发送到开发板上的/userdata/samples/:
sh 03_scp_to_board.sh 192.168.168.10
跑帧率:
sh 05_perf.sh 192.168.168.10
运行结果:
===REPORT-START{RUNTIME-ARM-PERF}===
Whole process statistics:count:100, duration:298.028ms, min:2.765ms, max:4.475ms, average:2.96722ms, fps:335.539/s
, Infer stage statistics:count:100, duration:296.515ms, min:2.751ms, max:4.456ms, average:2.95212ms, fps:337.251/s
, Post process stage statistics:count:100, duration:1.376ms, min:0.012ms, max:0.056ms, average:0.0133469ms, fps:72674.4/s
===REPORT-END{RUNTIME-ARM-PERF}===
测试结果解读:
Whole process: 模型推理耗时+后处理耗时,
Infer stage: 模型推理耗时统计
Post process stage: 后处理耗时统计
5.4 运行【双核双帧】测试
登陆开发板: ssh root@192.168.168.10 .
固定CPU和BPU频率:
修改配置: mobilenetv2_config.yaml
input_type_rt: 'nv12'
编译模型: sh 03_build.sh
进入双帧双核测试目录:
cd samples/05_miscellaneous/06_dual_frame_dual_core/shell
编译测试源码:
注释掉: #export LINARO_GCC_ROOT=
sh build.sh
拷贝定点模型到shell目录:
cp ../../../03_classification/01_mobilenet/mapper/model_output/mobilenetv2_hybrid_horizonrt.bin ./
将shell文件夹拷贝到开发板/userdata/samples:
开始测试, 开发板上执行:
sh start_mobileNetV2.sh
运行一段时间,终止程序, 查看Log:
method name:PostProcessMethod time:0.146
frame_rate: 672.438
测试结果解读:
PostProcessMethod: 后处理耗时,0.146ms
以上测试结果仅供参考,以实际测试为准



