【X2Paddle】tensorflow2fluid转换VGG_16模型

具体参见:https://github.com/PaddlePaddle/X2Paddle/tree/master/tensorflow2fluid

步骤如下

0 配置环境(cpu)建议安装在 虚拟环境 如果存在错误,请卸载重装

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 
1 获取官网转换的代码

git clone https://github.com/PaddlePaddle/X2Paddle.git
cd X2Paddle/tensorflow2fluid/tf2fluid

2 获取的模型文件

wget http://download.tensorflow.org/models/vgg_16_2016_08_28.tar.gz
tar -zxvf vgg_16_2016_08_28.tar.gz

3 保存模型为checkpoint格式

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")
4 将TensorFlow模型转paddle
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)
5 预测 如果报错,请尝试在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))
6 对比转换前后模型之前的预测结果diff
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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值