netrans/examples/tensorflow
xujiao b39abda2fa netrans model conversion examples 2025-04-07 11:31:19 +08:00
..
lenet netrans model conversion examples 2025-04-07 11:31:19 +08:00
README.md netrans model conversion examples 2025-04-07 11:31:19 +08:00
export.sh netrans model conversion examples 2025-04-07 11:31:19 +08:00
gen_inputmeta.sh netrans model conversion examples 2025-04-07 11:31:19 +08:00
import_model.sh netrans model conversion examples 2025-04-07 11:31:19 +08:00
infer.sh netrans model conversion examples 2025-04-07 11:31:19 +08:00
quantize.sh netrans model conversion examples 2025-04-07 11:31:19 +08:00

README.md

TensorFlow模型转换示例

本文档以 lenet 为例,介绍如何使用 Netrans 对 Tensorflow 模型进行转换。

Netrans 支持 TensorFlow 版本1.4.x, 2.0.x, 2.3.x, 2.6.x, 2.8.x, 2.10.x, 2.12.x 以tf.io.write_graph()保存的模型。

安装Netrans

  1. 先确定您的 Netrans 下载目录,使用以下命令将 Netrans 加入系统配置文件。记得使用您真实的 Netrans下载目录 替换下行命令中的文字。
export NETRANS_PATH=Netrans下载目录/bin
  1. 安装 netrans_py
cd netrans_py
pip3 install -e .

数据准备

转换 TensorFlow 模型时,模型工程目录应包含以下文件:

  • .pb 文件:冻结图模型文件
  • inputs_outputs.txt输入输出节点定义文件
  • dataset.txt数据路径配置文件

我们的示例 已经完成数据准备,可以使用下面命令进入目录执行。

cd netrans/
cd examples/tensorflow

此时目录如下:

lenet/
├── 0.jpg                # 校准数据
├── dataset.txt          # 指定数据地址的文件 
├── inputs_outputs.txt   # 输入输出节点定义文件
└── lenet.pb             # 冻结图模型文件

使用 nertans_cli 命令行工具

使用 netrans_cli 之前,请先使用以下命令将 命令行脚本 拷贝至当前目录。

cp ../../netrans_cli/*sh ./

此时目录如下:

tensorflow/
├── export.sh
├── gen_inputmeta.sh
├── import_model.sh
├── infer.sh
├── lenet
│   ├── 0.jpg
│   ├── dataset.txt
│   ├── inputs_outputs.txt
│   └── lenet.pb
└── quantize.sh

模型导入

./import_model.sh lenet

该步骤会生成 .json 结尾的网络结构文件和 .data 结尾的权重数据文件。

此时 lenet 的目录结构如下:

lenet/
├── 0.jpg
├── dataset.txt
├── inputs_outputs.txt
├── lenet.data
├── lenet.json
└── lenet.pb

配置文件生成

数据在推理前一般会经过预处理,为了确保模型可以正确的输入数据,需要生产对应的配置文件。

./gen_inputmeta.sh lenet

此时 lenet 的目录结构如下:

lenet/
├── 0.jpg
├── dataset.txt
├── inputs_outputs.txt
├── lenet.data
├── lenet_inputmeta.yml
├── lenet.json
└── lenet.pb

模型量化

为了优化模型的推理效率,加快模型的推理速度,我们使用下行命令对模型进行量化处理。 量化模型需要两个参数目录模型名字和量化类型。量化类型包括float,int16, int8 和 uint8。

./quantize.sh lenet uint8

此时 lenet 的目录结构如下:

lenet/
├── 0.jpg
├── dataset.txt
├── inputs_outputs.txt
├── lenet_asymmetric_affine.quantize
├── lenet.data
├── lenet_inputmeta.yml
├── lenet.json
└── lenet.pb

模型导出

最后我们使用 export.sh 将模型导出到nbg格式并生成应用程序工程。量化模型需要两个参数目录模型名字和量化类型。量化类型包括float,int16, int8 和 uint8。量化类型应于 quantize.sh 使用的一致。

./export.sh lenet uint8

此时 lenet 的目录结构如下:

lenet/
├── 0.jpg
├── dataset.txt
├── inputs_outputs.txt
├── lenet_asymmetric_affine.quantize
├── lenet.data
├── lenet_inputmeta.yml
├── lenet.json
├── lenet.pb
└── wksp
    └── asymmetric_affine
        ├── BUILD
        ├── dump_core_graph.json
        ├── graph.json
        ├── lenetasymmetricaffine.2012.vcxproj
        ├── lenet_asymmetric_affine.export.data
        ├── lenetasymmetricaffine.vcxproj
        ├── main.c
        ├── makefile.linux
        ├── network_binary.nb
        ├── vnn_global.h
        ├── vnn_lenetasymmetricaffine.c
        ├── vnn_lenetasymmetricaffine.h
        ├── vnn_post_process.c
        ├── vnn_post_process.h
        ├── vnn_pre_process.c
        └── vnn_pre_process.h

使用 netrans_py python api

3.2.1 安装netrans_py

cd netrans_py
pip3 install -e .

准备示例脚本

cd ../example/tensorflow
cp ../../netrans_py/example.py ./

运行示例脚本

python3 example.py lenet -q uint8