netrans/examples/caffe/README.md

169 lines
4.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Caffe模型转换示例
本文档以 lenet_caffe 为例,介绍如何使用 Netrans 对 Caffe 模型进行转换。
Netrans 支持所有的 Caffe 模型。
## 安装Netrans
1. 先确定您的 Netrans 下载目录,使用以下命令将 Netrans 加入系统配置文件。记得使用您真实的 Netrans下载目录 替换下行命令中的文字。
```bash
export NETRANS_PATH=Netrans下载目录/bin
```
2. 安装 netrans_py
```bash
cd netrans_py
pip3 install -e .
```
## 数据准备
转换 Caffe 模型时,模型工程目录应包含以下文件:
- 以 .prototxt 结尾的模型结构定义文件
- 以 .caffemode 结尾的模型权重文件
- dataset.txt 包含数据路径的文本文件支持图像和NPY格式
我们的示例 已经完成数据准备,可以使用下面命令进入目录执行。
```bash
cd netrans/
cd examples/caffe
```
此时目录如下:
```bash
lenet_caffe/
├── 0.jpg # 校准数据
├── dataset.txt # 指定数据地址的文件
├── lenet_caffe.caffemodel # caffe 模型权重
└── lenet_caffe.prototxt # caffe 模型结构
```
## 使用 nertans_cli 命令行工具
使用 netrans_cli 之前,请先使用以下命令将 命令行脚本 拷贝至当前目录。
```bash
cp ../../netrans_cli/*sh ./
```
此时目录如下:
```bash
caffe/
├── example.py
├── export.sh
├── gen_inputmeta.sh
├── import_model.sh
├── infer.sh
├── lenet_caffe
│ ├── 0.jpg
│ ├── dataset.txt
│ ├── lenet_caffe.caffemodel
│ └── lenet_caffe.prototxt
└── quantize.sh
```
### 模型导入
```bash
./import_model.sh lenet_caffe
```
该步骤会生成 .json 结尾的网络结构文件和 .data 结尾的权重数据文件。
此时 lenet_caffe 的目录结构如下:
```bash
lenet_caffe/
├── 0.jpg
├── dataset.txt
├── lenet_caffe.caffemodel
├── lenet_caffe.data
├── lenet_caffe.json
└── lenet_caffe.prototxt
```
### 配置文件生成
数据在推理前一般会经过预处理,为了确保模型可以正确的输入数据,需要生产对应的配置文件。
```bash
./gen_inputmeta.sh lenet_caffe
```
此时 lenet_caffe 的目录结构如下:
```bash
lenet_caffe/
├── 0.jpg
├── dataset.txt
├── lenet_caffe.caffemodel
├── lenet_caffe.data
├── lenet_caffe_inputmeta.yml
├── lenet_caffe.json
└── lenet_caffe.prototxt
```
### 模型量化
为了优化模型的推理效率,加快模型的推理速度,我们使用下行命令对模型进行量化处理。
量化模型需要两个参数目录模型名字和量化类型。量化类型包括float,int16, int8 和 uint8。
```bash
./quantize.sh lenet_caffe uint8
```
此时 lenet_caffe 的目录结构如下:
```bash
lenet_caffe/
├── 0.jpg
├── dataset.txt
├── lenet_caffe_asymmetric_affine.quantize
├── lenet_caffe.caffemodel
├── lenet_caffe.data
├── lenet_caffe_inputmeta.yml
├── lenet_caffe.json
└── lenet_caffe.prototxt
```
### 模型导出
最后我们使用 export.sh 将模型导出到nbg格式并生成应用程序工程。量化模型需要两个参数目录模型名字和量化类型。量化类型包括float,int16, int8 和 uint8。量化类型应于 quantize.sh 使用的一致。
```bash
./export.sh lenet_caffe uint8
```
此时 lenet_caffe 的目录结构如下:
```bash
lenet_caffe/
├── 0.jpg
├── dataset.txt
├── lenet_caffe_asymmetric_affine.quantize
├── lenet_caffe.caffemodel
├── lenet_caffe.data
├── lenet_caffe_inputmeta.yml
├── lenet_caffe.json
├── lenet_caffe.prototxt
└── wksp
└── asymmetric_affine
├── BUILD
├── dump_core_graph.json
├── graph.json
├── lenetcaffeasymmetricaffine.2012.vcxproj
├── lenet_caffe_asymmetric_affine.export.data
├── lenetcaffeasymmetricaffine.vcxproj
├── main.c
├── makefile.linux
├── network_binary.nb
├── vnn_global.h
├── vnn_lenetcaffeasymmetricaffine.c
├── vnn_lenetcaffeasymmetricaffine.h
├── vnn_post_process.c
├── vnn_post_process.h
├── vnn_pre_process.c
└── vnn_pre_process.h
```
## 使用 netrans_py python api
本文档提供基于 python api 实现的python脚本请先使用以下命令将 api脚本 拷贝至当前目录。
### 准备示例脚本
```bash
cp ../../netrans_py/example.py ./
```
### 运行示例脚本
```bash
python3 example.py lenet_caffe -q uint8
```