README.md 3.8 KB
Newer Older
J
jiangjiajun 已提交
1
# tensorflow2fluid
J
Jason 已提交
2
[![License](https://img.shields.io/badge/license-Apache%202-blue.svg)](LICENSE)
J
Jason 已提交
3

J
Jason 已提交
4
## 依赖
J
Jason 已提交
5

J
Jason 已提交
6
> python = 2.7
J
Jason 已提交
7

J
Jason 已提交
8
> tensorflow >= 1.12.0
J
Jason 已提交
9

J
Jason 已提交
10
> 注:tensorflow2fluid的运行不依赖于paddlepaddle
J
Jason 已提交
11

J
Jason 已提交
12
## 介绍
J
Jason 已提交
13

J
Jason 已提交
14
tensorflow2fluid支持将训练好的TensorFlow模型转至PaddlePaddle fluid模型,转换后的保存目录中,文件list如下表所示
J
Jason 已提交
15

J
Jason 已提交
16 17 18 19 20 21
文件|作用
:------------------:|:-----------------------------------------------:
my_model.py|基于PaddlePaddle实现的模型网络结构python代码
ref_name.txt|my_model.py中各tensor与原TensorFlow模型中的tensor对应关系
const_*/params_*|转换后的模型参数文件

J
Jason 已提交
22 23
## 模型转换diff对比

J
Jason 已提交
24
tensflow2fluid在公开的TensorFlow预训练模型上,通过输入随机数据在原模型和转换后的模型上进行预测,得到的平均diff大小如下表所示
J
Jason 已提交
25 26 27 28

Model|Pre-trained Model|Diff
:--------------:|:----------------------------------------------:|:-----------------:
[vgg_16](https://github.com/tensorflow/models/blob/master/research/slim/nets/inception_v3.py)|[inception_v3_2016_08_28.tar.gz](http://download.tensorflow.org/models/inception_v3_2016_08_28.tar.gz)|1e-05
J
Jason 已提交
29 30 31 32
[vgg_19](https://github.com/tensorflow/models/blob/master/research/slim/nets/vgg.py)|[vgg_19_2016_08_28.tar.gz](http://download.tensorflow.org/models/vgg_19_2016_08_28.tar.gz)|1e-05
[resnet_v1_50](https://github.com/tensorflow/models/blob/master/research/slim/nets/resnet_v1.py)|[resnet_v1_50_2016_08_28.tar.gz](http://download.tensorflow.org/models/resnet_v1_50_2016_08_28.tar.gz)|1e-05
[resnet_v1_101](https://github.com/tensorflow/models/blob/master/research/slim/nets/resnet_v1.py)|[resnet_v1_101_2016_08_28.tar.gz](http://download.tensorflow.org/models/resnet_v1_101_2016_08_28.tar.gz)|1e-05
[inception_v3](https://github.com/tensorflow/models/blob/master/research/slim/nets/inception_v3.py)|[inception_v3_2016_08_28.tar.gz](http://download.tensorflow.org/models/inception_v3_2016_08_28.tar.gz)|1e-05
J
Jason 已提交
33

J
Jason 已提交
34
## 用法
J
Jason 已提交
35 36 37 38
使用tensorflow2fluid转换模型时,所需的信息如下

|参数|说明|
|------------------|-----------------------------------------------|
J
Jason 已提交
39
|meta_file|TensorFlow模型序列化后保存的meta文件|
J
Jason 已提交
40
|ckpt_file|TensorFlow模型保存checkpoint目录|
J
Jason 已提交
41
|pb_file|Tensorflow保存的pb格式模型|
J
Jason 已提交
42 43 44 45
|input_nodes|输入tensor名,多个输入时以空格分隔|
|input_shape|输入tensor的shape(batch维度以None表示),shape之间以空格分隔,shape内各维度以逗号分隔,须与input_nodes对应|
|output_shape|输出tensor名,多个输出时以空格分隔|
|save_dir|转换后的模型保存路径|
J
Jason 已提交
46 47

目前TensorFlow保存的模型主要包括ckpt和pb两种类型。其中加载ckpt模型时,同时也需通过meta文件导入网络结构;而pb模型则已将网络结构和参数均序列化至同一个文件。因此,加载ckpt模型时,需指定meta_file和ckpt_file,而加载pb模型,则只需指定pb_file即可。
J
Jason 已提交
48

J
Jason 已提交
49 50
### 例:将inception_v3模型转换至PaddlePaddle

J
Jason 已提交
51
```Bash
J
Jason 已提交
52
# 下载并解压inception_v3预训练模型
J
Jason 已提交
53 54
wget http://download.tensorflow.org/models/inception_v3_2016_08_28.tar.gz
tar xzvf http://download.tensorflow.org/models/inception_v3_2016_08_28.tar.gz
J
Jason 已提交
55

J
Jason 已提交
56
# 将下载的预训练模型转存为check_point
J
Jason 已提交
57
python demo/inception_v3/export_to_checkpoint.py inception_v3.py checkpoint
J
Jason 已提交
58

J
Jason 已提交
59
# 将check_point模型转换为PaddlePaddle可加载运行的模型
J
Jason 已提交
60 61 62 63 64 65 66
python convert.py --meta_file checkpoint/model.meta \
                  --ckpt_dir checkpoint \
                  --in_nodes inputs \
                  --input_shape None,299,299,3 \
                  --output_nodes InceptionV3/Logits/SpatialSqueeze \
                  --save_dir paddle_inception_v3
```
J
Jason 已提交
67 68

### 加载转换后的模型
J
Jason 已提交
69 70 71

## Link
[MMdnn-Tensorflow](https://github.com/Microsoft/MMdnn/tree/master/mmdnn/conversion/tensorflow)