tools/converter/tools/test4TF.py (83 lines of code) (raw):

import tensorflow as tf import numpy as np from tensorflow.contrib.keras.api.keras.preprocessing import image class inferenceTF(): def __init__(self, imgPath, frozen_model_filename, imgSizeH, imgSizeW): self.img = imgPath self.model = frozen_model_filename self.height = imgSizeH self.width = imgSizeW self.graph = self.load_graph(self.model) self.input_data = None def ZeroCenter(self, path, sizeH, sizeW, BGRTranspose=False): img = image.load_img(path, target_size=(self.height, self.width)) x = image.img_to_array(img) # Reference: 1) Keras image preprocess: https://github.com/keras-team/keras/blob/master/keras/applications/imagenet_utils.py # 2) tensorflow github issue: https://github.com/tensorflow/models/issues/517 # R-G-B for Imagenet === [123.68, 116.78, 103.94] # x[..., 0] -= 123.68 # x[..., 1] -= 116.779 # x[..., 2] -= 103.939 # x[..., 0] = 50 / 255 # x[..., 1] = 50 / 255 # x[..., 2] = 50 / 255 # x[..., 0] /= 255.0 # x[..., 1] /= 255.0 # x[..., 2] /= 255.0 if BGRTranspose == True: x = x[..., ::-1] return x def load_graph(self, frozen_graph_filename): # parse the graph_def file with tf.gfile.GFile(frozen_graph_filename, "rb") as f: graph_def = tf.GraphDef() graph_def.ParseFromString(f.read()) # load the graph_def in the default graph with tf.Graph().as_default() as graph: tf.import_graph_def( graph_def, input_map=None, return_elements=None, name="", op_dict=None, producer_op_list=None ) return graph def save2file(self, file_name, tensorArr, C, H, W): """ c h w data . . . """ f = open(file_name, 'w') # f.write(str(C) + '\n') # f.write(str(H) + '\n') # f.write(str(W) + '\n') # for c in range(C): # for h in range(H): # for w in range(W): # if len(tensorArr.shape) == 4: # f.write(str(tensorArr[0][h][w][c]) + "\n") # else: # f.write(str(tensorArr[0][c]) + "\n") # for c in range(C): # for h in range(H): # for w in range(W): # if len(tensorArr.shape) == 4: # f.write(str(tensorArr[0][h][w][c]) + "\t") # else: # f.write(str(tensorArr[0][c])) # f.write("\n") # f.close() ### NHWC for h in range(H): for w in range(W): for c in range(C): if len(tensorArr.shape) == 4: f.write(str(tensorArr[0][h][w][c]) + "\t") else: f.write(str(tensorArr[0][c])) f.write("\n") f.close() def saveTensorByName(self, input_node_name, layer_name, file_name): img = self.ZeroCenter(self.img, self.height, self.width) img = np.expand_dims(img, axis=0) init = tf.global_variables_initializer() data_input = self.graph.get_tensor_by_name(input_node_name) for_test = self.graph.get_tensor_by_name(layer_name) with tf.Session(graph = self.graph) as sess: res = sess.run(for_test, feed_dict={data_input: img}) print(">" * 50) print(res.shape) print(res) if len(res.shape) == 4: n, h, w, c = res.shape else: n, c = res.shape h, w = (1, 1) self.save2file(file_name, res, c, h, w) return 0 def generateMNNInput(self, input_node_name, file_name): img = self.ZeroCenter(self.img, self.height, self.width) img = np.expand_dims(img, axis=0) init = tf.global_variables_initializer() data_input = self.graph.get_tensor_by_name(input_node_name) with tf.Session(graph = self.graph) as sess: self.input_data = sess.run(data_input, feed_dict={data_input: img}) f = open(file_name, "w") for c in range(3): for h in range(self.height): for w in range(self.width): f.write(str(self.input_data[0][h][w][c]) + '\n') # for h in range(self.height): # for w in range(self.width): # for c in range(3): # f.write(str(self.input_data[0][h][w][c]) + '\n') f.close() if __name__ == '__main__': img = './test.jpg' frozen_model_filename = 'path/to/model.pb' imgSizeH = 256 imgSizeW = 256 inputTensorName = "inputs:0" outputTensorName = "output:0" test = inferenceTF(img, frozen_model_filename, imgSizeH, imgSizeW) test.generateMNNInput(inputTensorName, "input_0.txt") test.saveTensorByName(inputTensorName, outputTensorName, "TF_Result.txt")