tensorflow 模型前向傳播 保存ckpt tensorbard查看 ckpt轉pb pb 轉snpe dlc 實例


參考:

TensorFlow 自定義模型導出:將 .ckpt 格式轉化為 .pb 格式

TensorFlow 模型保存與恢復

snpe

 

tensorflow 模型前向傳播 保存ckpt  tensorbard查看 ckpt轉pb  pb 轉snpe dlc 實例

 

log文件

 

 

 

 

輸入節點 圖像高度 圖像寬度 圖像通道數

input0 6,6,3

輸出節點

 --out_node add 

snpe-tensorflow-to-dlc --graph ./simple_snpe_log/model200.pb -i input0 6,6,3 --out_node add

 

 

 

#coding:utf-8
#http://blog.csdn.net/zhuiqiuk/article/details/53376283
#http://blog.csdn.net/gan_player/article/details/77586489
from __future__ import absolute_import, unicode_literals
import tensorflow as tf
import shutil
import os.path
from tensorflow.python.framework import graph_util
import mxnet as mx
import numpy as np
import random
import cv2
from time import sleep
from easydict import EasyDict as edict
import logging   
import math
import tensorflow as tf
import numpy as np

def FullyConnected(input, fc_weight, fc_bias, name):
    fc = tf.matmul(input, fc_weight) + fc_bias
    return fc

def inference(body, name_class,outchannel): 
    wkernel = 3
    inchannel = body.get_shape()[3].value
    conv_weight = np.arange(wkernel * wkernel * inchannel * outchannel,dtype=np.float32).reshape((outchannel,inchannel,wkernel,wkernel))
    conv_weight =  conv_weight / (outchannel*inchannel*wkernel*wkernel)
    print("conv_weight ", conv_weight)
    conv_weight = conv_weight.transpose(2,3,1,0)
    conv_weight = tf.Variable(conv_weight, dtype=np.float32, name = "conv_weight")
    body = tf.nn.conv2d(body, conv_weight, strides=[1, 1, 1, 1], padding='SAME', name = "conv0")
    conv = body
    conv_shape = body.get_shape()
    dim = conv_shape[1].value * conv_shape[2].value * conv_shape[3].value 
    body = tf.reshape(body, [1, dim], name = "fc0")
    fc_weight = np.ones((dim, name_class))
    fc_bias = np.zeros((1, name_class))
    fc_weight = tf.Variable(fc_weight, dtype=np.float32, name="fc_weight")
    fc_bias = tf.Variable(fc_bias, dtype=np.float32, name="fc_bias")
    # tf.constant(100,dtype=np.float32, shape=(body.get_shape()[1] * body.get_shape()[2]  * body.get_shape()[3], name_class])
    # fc_bias = tf.constant(10, dtype=np.float32, shape=(1, name_class])
    body = FullyConnected(body, fc_weight, fc_bias, "fc0")
    return conv, body

export_dir = "simple_snpe_log"
def saveckpt():
    height = 6
    width = 6
    inchannel = 3
    outchannel = 3
    graph = tf.get_default_graph()
    with tf.Graph().as_default():
        input_image = tf.placeholder("float", [1, height, width, inchannel], name = "input0")
        conv, logdit = inference(input_image,10,outchannel)
        init = tf.global_variables_initializer()
        with tf.Session() as sess:
            sess.run(init)
            img = np.arange(height * width * inchannel, dtype=np.float32).reshape((1,inchannel,height,width)) \
                  / (1 * inchannel * height * width) * 255.0 - 127.5
            print("img",img)
            img = img.transpose(0,2,3,1)
            import time 
            since = time.time()
            fc = sess.run(logdit,{input_image:img})
            conv = sess.run(conv, {input_image: img})
            time_elapsed = time.time() - since
            print("tf inference time ", str(time_elapsed))
            print("conv", conv.transpose(0, 2, 3, 1))
            print("fc", fc)
            #np.savetxt("tfconv.txt",fc) 
            #print( "fc", fc.transpose(0,3,2,1))
            #np.savetxt("tfrelu.txt",fc.transpose(0,3,2,1)[0][0]) 

            # #save ckpt
            export_dir = "simple_snpe_log"
            saver = tf.train.Saver()
            step = 200
            # if os.path.exists(export_dir):
            #     os.system("rm -rf " + export_dir)
            if not os.path.isdir(export_dir): # Create the log directory if it doesn't exist
                os.makedirs(export_dir)

            checkpoint_file = os.path.join(export_dir, 'model.ckpt')
            saver.save(sess, checkpoint_file, global_step=step)

def LoadModelToTensorBoard():
    graph = tf.get_default_graph()
    checkpoint_file = os.path.join(export_dir, 'model.ckpt-200.meta')
    saver = tf.train.import_meta_graph(checkpoint_file)
    print(saver)
    summary_write = tf.summary.FileWriter(export_dir , graph)
    print(summary_write)

def ckptToPb():
    checkpoint_file = os.path.join(export_dir, 'model.ckpt-200.meta')
    ckpt = tf.train.get_checkpoint_state(export_dir)
    print("model ", ckpt.model_checkpoint_path)
    saver = tf.train.import_meta_graph(ckpt.model_checkpoint_path +'.meta')
    graph = tf.get_default_graph()
    with tf.Session() as sess:
        saver.restore(sess,ckpt.model_checkpoint_path)
        height = 6
        width = 6
        input_image = tf.get_default_graph().get_tensor_by_name("input0:0")
        fc0_output = tf.get_default_graph().get_tensor_by_name("add:0")
        sess.run(tf.global_variables_initializer())
        output_graph_def = tf.graph_util.convert_variables_to_constants(
            sess, graph.as_graph_def(), ['add'])
        model_name = os.path.join(export_dir, 'model200.pb')
        with tf.gfile.GFile(model_name, "wb") as f:  
            f.write(output_graph_def.SerializeToString()) 

def PbTest():
    with tf.Graph().as_default():
        output_graph_def = tf.GraphDef()
        output_graph_path = os.path.join(export_dir,'model200.pb')
        with open(output_graph_path, "rb") as f:
            output_graph_def.ParseFromString(f.read())
            tf.import_graph_def(output_graph_def, name="")

        with tf.Session() as sess:
            tf.initialize_all_variables().run()
            height = 6
            width = 6
            inchannel = 3
            outchannel = 3
            input_image = tf.get_default_graph().get_tensor_by_name("input0:0")
            fc0_output = tf.get_default_graph().get_tensor_by_name("add:0")
            conv = tf.get_default_graph().get_tensor_by_name("conv0:0")

            img = np.arange(height * width * inchannel, dtype=np.float32).reshape((1,inchannel,height,width)) \
                  / (1 * inchannel * height * width) * 255.0 - 127.5
            print("img",img)
            img = img.transpose(0,2,3,1)
            import time 
            since = time.time()
            fc0_output = sess.run(fc0_output,{input_image:img})
            conv = sess.run(conv, {input_image: img})
            time_elapsed = time.time() - since
            print("tf inference time ", str(time_elapsed))
            print("conv", conv.transpose(0, 2, 3, 1))
            print("fc0_output", fc0_output)

if __name__ == '__main__':

    saveckpt() #1
    LoadModelToTensorBoard()#2 
    ckptToPb()#3
    PbTest()#4

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM