具体参见:https://github.com/PaddlePaddle/X2Paddle/tree/master/tensorflow2fluid
步骤如下
建议安装在
虚拟环境 如果存在错误,请卸载重装
pip install tensorflow==1.12.0
pip install paddlepaddle==1.3
pip install protobuf --upgrade
pip install --upgrade keras
pip list
Package Version
-------------------- -------
absl-py 0.7.1
astor 0.8.0
gast 0.2.2
google-pasta 0.1.7
grpcio 1.22.0
h5py 2.9.0
Keras-Applications 1.0.8
Keras-Preprocessing 1.1.0
Markdown 3.1.1
mock 3.0.5
numpy 1.16.4
paddlepaddle 1.3.0
pip 19.1.1
protobuf 3.9.0
setuptools 41.0.1
six 1.12.0
tensorboard 1.12.2
tensorflow 1.12.0
tensorflow-estimator 1.14.0
tensorflow-gpu 1.12.2
termcolor 1.1.0
Werkzeug 0.15.4
wheel 0.33.4
wrapt 1.11.2
git clone https://github.com/PaddlePaddle/X2Paddle.git
cd X2Paddle/tensorflow2fluid/tf2fluid
wget http://download.tensorflow.org/models/vgg_16_2016_08_28.tar.gz
tar -zxvf vgg_16_2016_08_28.tar.gz
ps:这里本人用了cpu,没用gpu,gpu版本出现cuda版本问题(囿于本人无root权限,所以用cpu了)
mkdir checkpoint
#!/usr/bin/env python
# coding=utf-8
import tensorflow.contrib.slim as slim
from tensorflow.contrib.slim.nets import vgg
import tensorflow as tf
import numpy
import os
os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"
os.environ["CUDA_VISIBLE_DEVICES"] = "-1"
with tf.Session() as sess:
inputs = tf.placeholder(dtype=tf.float32, shape=[None, 224, 224, 3], name="inputs")
logits, endpoint = vgg.vgg_16(inputs, num_classes=1000, is_training=False)
load_model = slim.assign_from_checkpoint_fn("./vgg_16.ckpt", slim.get_model_variables("vgg_16"))
load_model(sess)
numpy.random.seed(13)
data = numpy.random.rand(5, 224, 224, 3)
input_tensor = sess.graph.get_tensor_by_name("inputs:0")
output_tensor = sess.graph.get_tensor_by_name("vgg_16/fc8/squeezed:0")
result = sess.run([output_tensor], {input_tensor: data})
numpy.save("tensorflow.npy", numpy.array(result))
saver = tf.train.Saver()
saver.save(sess, "./checkpoint/model")
import convert as convert
import argparse
parser = convert._get_parser()
parser.meta_file = "checkpoint/model.meta"
parser.ckpt_dir = "checkpoint"
parser.in_nodes = ["inputs"]
parser.input_shape = ["None,224,224,3"]
parser.output_nodes = ["vgg_16/fc8/squeezed"]
parser.use_cuda = "True"
parser.input_format = "NHWC"
parser.save_dir = "paddle_model"
convert.run(parser)
如果报错,请尝试在ipython下运行代码
import numpy
import model_loader as ml
model = ml.ModelLoader("paddle_model", use_cuda=False)
numpy.random.seed(13)
data = numpy.random.rand(5, 224, 224, 3).astype("float32")
# NHWC -> NCHW
data = numpy.transpose(data, (0, 3, 1, 2))
results = model.inference(feed_dict={model.inputs[0]:data})
numpy.save("paddle.npy", numpy.array(results))
import numpy
paddle_result = numpy.load("paddle.npy")
tensorflow_result = numpy.load("tensorflow.npy")
diff = numpy.fabs(paddle_result - tensorflow_result)
print(numpy.max(diff))
1.1920929e-06