编译TFLite模型
本章以 resnet50_int8.tflite 模型为例, 介绍如何编译迁移一个TFLite模型至BM1684X TPU平台运行。
本章需要如下文件(其中xxxx对应实际的版本信息):
tpu-mlir_xxxx.tar.gz (tpu-mlir的发布包)
加载tpu-mlir
以下操作需要在Docker容器中。关于Docker的使用, 请参考
启动Docker Container 。
$ tar zxf tpu-mlir_xxxx.tar.gz
$ source tpu-mlir_xxxx/envsetup.sh
envsetup.sh 会添加以下环境变量:
环境变量
变量名 | 值 | 说明 |
---|
TPUC_ROOT | tpu-mlir_xxx | 解压后SDK包的位置 |
MODEL_ZOO_PATH | ${TPUC_ROOT}/../model-zoo | model-zoo文件夹位置, 与SDK在同一级目录 |
envsetup.sh 对环境变量的修改内容为:
export PATH=${TPUC_ROOT}/bin:$PATH
export PATH=${TPUC_ROOT}/python/tools:$PATH
export PATH=${TPUC_ROOT}/python/utils:$PATH
export PATH=${TPUC_ROOT}/python/test:$PATH
export PATH=${TPUC_ROOT}/python/samples:$PATH
export LD_LIBRARY_PATH=$TPUC_ROOT/lib:$LD_LIBRARY_PATH
export PYTHONPATH=${TPUC_ROOT}/python:$PYTHONPATH
export MODEL_ZOO_PATH=${TPUC_ROOT}/../model-zoo
准备工作目录
建立 model_resnet50_tf 目录, 注意是与tpu-mlir同级目录; 并把测试图片文件放入
model_resnet50_tf 目录中。
操作如下:
$ mkdir model_resnet50_tf && cd model_resnet50_tf
$ cp $TPUC_ROOT/regression/model/resnet50_int8.tflite .
$ cp -rf $TPUC_ROOT/regression/image .
$ mkdir workspace && cd workspace
这里的 $TPUC_ROOT 是环境变量, 对应tpu-mlir_xxxx目录。
TFLite转MLIR
本例中的模型是bgr输入, mean为 103.939,116.779,123.68, scale为 1.0,1.0,1.0
模型转换命令如下:
$ model_transform.py \
--model_name resnet50_tf \
--model_def ../resnet50_int8.tflite \
--input_shapes [[1,3,224,224]] \
--mean 103.939,116.779,123.68 \
--scale 1.0,1.0,1.0 \
--pixel_format bgr \
--test_input ../image/cat.jpg \
--test_result resnet50_tf_top_outputs.npz \
--mlir resnet50_tf.mlir
转成mlir文件后, 会生成一个 resnet50_tf_in_f32.npz 文件, 该文件是模型的输入文件。
MLIR转模型
该模型是tflite非对称量化模型, 可以按如下参数转成模型:
$ model_deploy.py \
--mlir resnet50_tf.mlir \
--quantize INT8 \
--asymmetric \
--chip bm1684x \
--test_input resnet50_tf_in_f32.npz \
--test_reference resnet50_tf_top_outputs.npz \
--model resnet50_tf_1684x.bmodel
编译完成后, 会生成名为 resnet50_tf_1684x.bmodel 的文件。