J'ai un réseau de segmentation d'image conçu pour classer les routes et les obstacles. Je veux figer le modèle et le servir comme API. J'ai donc utilisé l'outil TensorFlow par défaut pour geler le modèle. Après le gel, la sortie donnée par le réseau est complètement éteinte et imprécise.Freezing Model drops Exactitude de sortie
Voici un exemple.
L'image d'entrée
Sortie lors des tests en utilisant les fichiers Checkpoint
Sortie après congélation du modèle
J'ai essayé de geler en utilisant différentes versions de tensorflow, mais cela n'a pas aidé. Étant donné que le réseau fonctionne comme excepté lorsqu'il est testé par rapport au point de contrôle, le problème, je pense, est dans le script Freeze Models. Le réseau utilise Batch_normalisation. Cela pourrait-il être la raison de cette baisse parce que j'ai vu quelques problèmes liés à celui de nature similaire? Comment puis-je éviter cela?
Here's le réseau complet
prédiction en utilisant Checkpoint fichiers
with tf.Graph().as_default() as graph:
images_tensor = tf.train.string_input_producer(images_list, shuffle=False)
reader = tf.WholeFileReader()
key, image_tensor = reader.read(images_tensor)
image = tf.image.decode_png(image_tensor, channels=3)
image = preprocess(image)
images = tf.train.batch([image], batch_size = 1, allow_smaller_final_batch=True)
#Create the model inference
with slim.arg_scope(ENet_arg_scope()):
logits, probabilities = ENet(images,
num_classes=4,
batch_size=1,
is_training=True,
reuse=None,
num_initial_blocks=num_initial_blocks,
stage_two_repeat=stage_two_repeat,
skip_connections=skip_connections)
variables_to_restore = slim.get_variables_to_restore()
saver = tf.train.Saver(variables_to_restore)
def restore_fn(sess):
return saver.restore(sess, checkpoint)
predictions = tf.argmax(probabilities, -1)
predictions = tf.cast(predictions, tf.float32)
sv = tf.train.Supervisor(logdir=None, init_fn=restore_fn)
with sv.managed_session() as sess:
for i in xrange(int(len(images_list)/1 + 1)):
segmentations = sess.run(predictions)
for j in xrange(segmentations.shape[0]):
converted_image = grayscale_to_colour(segmentations[j],i,j)
imsave(photo_dir + "/imagelabel_%05d_edges.png" %(i*1 + j), converted_image)
Prévision de PB fichier
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)
Vous devez ajouter du code lié à ce problème. –
@IshantMrinal Voulez-vous dire le NN Graph? Parce que j'ai utilisé l'outil de modèle de gel par défaut dans tensorflow par 'python -m tensorflow.python.tools.freeze_graph --input_graph graph.pb --input_checkpoint test_model --output_graph graph_frozen.pb --output_node_names = y' –
le fichier de définition du modèle (où vous avez défini les couches de tensorflow etc) et les deux codes de prédictions –