Machine learning 冻结模型降低了输出精度

Machine learning 冻结模型降低了输出精度,machine-learning,tensorflow,tensorflow-serving,tensorflow-gpu,Machine Learning,Tensorflow,Tensorflow Serving,Tensorflow Gpu,我有一个图像分割网络,用于对道路和障碍物进行分类。我想冻结模型并将其作为API使用。所以我使用默认的TensorFlow工具来冻结模型。冻结后,网络给出的输出完全关闭且不准确 这是一个样本 输入图像 使用检查点文件测试时的输出 冻结模型后的输出 我曾尝试使用不同版本的tensorflow来冻结,但这没有帮助。由于在针对检查点进行测试时,网络的性能是异常的,所以我认为问题出在冻结模型脚本中。网络使用批处理归一化。这可能是下降的原因吗?因为我看到了一些与类似性质相关的问题?我怎样才能避免呢 完整

我有一个图像分割网络,用于对道路和障碍物进行分类。我想冻结模型并将其作为API使用。所以我使用默认的TensorFlow工具来冻结模型。冻结后,网络给出的输出完全关闭且不准确

这是一个样本

输入图像

使用检查点文件测试时的输出

冻结模型后的输出

我曾尝试使用不同版本的tensorflow来冻结,但这没有帮助。由于在针对检查点进行测试时,网络的性能是异常的,所以我认为问题出在冻结模型脚本中。网络使用批处理归一化。这可能是下降的原因吗?因为我看到了一些与类似性质相关的问题?我怎样才能避免呢

完整网络

使用检查点文件进行预测

基于PB文件的预测


这里的问题与is_训练有关,因为您使用的是退出和批处理_范数,在预测时间内,is_训练应该设置为False。然后你可以期待同样的结果

logits, probabilities = ENet(images,
                                 num_classes=4,
                                 batch_size=1,
                                 is_training=False,
                                 reuse=None,
                                 num_initial_blocks=num_initial_blocks,
                                 stage_two_repeat=stage_two_repeat,
                                 skip_connections=skip_connections)

您需要添加与此问题相关的代码。@IshantMrinal您是指NN图吗?因为我使用了python提供的tensorflow中的默认冻结模型工具-m tensorflow.python.tools.freeze\u graph-input\u graph.pb-input\u checkpoint test\u model-output\u graph\u freezed.pb-output\u node\u names=yth您定义了tensorflow层等的模型定义文件和两个预测codes@IshantMrinal我更新了帖子。谢谢
def predict():
    start = time.time()
    y_out = persistent_sess.run(y, feed_dict={x: x_in})
    end = time.time()
    print(end-start)
    return y_out

with tf.Session() as sess:
    model_filename = "frozen_model_tf_version.pb"
    with gfile.FastGFile(model_filename, 'rb') as f:
        graph_def = tf.GraphDef()
        graph_def.ParseFromString(f.read())
        tf.import_graph_def(graph_def)
        g_in = tf.get_default_graph()

x = g_in.get_tensor_by_name('import/batch:0')
y = g_in.get_tensor_by_name('import/ENet/output:0')

persistent_sess = tf.Session(graph=g_in)
x_in_unaltered=cv2.imread(img)
x_in_unaltered = cv2.resize(x_in_unaltered,(480,360),interpolation=cv2.INTER_CUBIC)
x_in = np.expand_dims(x_in_unaltered.flatten(),axis=0)
predictions=predict()
print(np.unique(predictions,return_counts=True))
out = np.array(predictions[0],dtype=np.float32)
out = np.reshape(out, [360,480])
converted_image = grayscale_to_colour(out,x_in_unaltered)
cv2.imwrite("out.png",converted_image)
logits, probabilities = ENet(images,
                                 num_classes=4,
                                 batch_size=1,
                                 is_training=False,
                                 reuse=None,
                                 num_initial_blocks=num_initial_blocks,
                                 stage_two_repeat=stage_two_repeat,
                                 skip_connections=skip_connections)