netrans/examples/tensorflow
xujiao 19e41d9e83 Update docs 2025-04-09 14:13:31 +08:00
..
lenet add tensorflow example 2025-04-09 09:33:16 +08:00
README.md Update docs 2025-04-09 14:13:31 +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

创建 conda 环境 .

conda create -n netrans python=3.8 -y
conda activate netrans

下载 Netrans .

mkdir -p ~/app
cd ~/app
git clone https://gitlink.org.cn/nudt_dsp/netrans.git

安装 Netrans。

cd ~/app/netrans
./setup.sh

数据准备

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

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

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

cd netrans/
cd examples/tensorflow

此时目录如下:

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

使用 nertans_cli 命令行工具

模型导入

import.sh lenet

该命令会在工程目录下生成包含模型信息的 .json 和 .data 数据文件。 此时 lenet 的目录结构如下:

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

配置文件生成

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

config.sh lenet

此时 lenet 的目录结构如下:

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

模型量化

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格式并生成应用程序工程。

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

python3 example.py lenet -q uint8