surmonter Graphdef ne peut pas être supérieure à 2 Go en tensorflow
Je suis en utilisant tensorflow de imageNet formés modèle pour extraire la dernière mise en commun de la couche de fonctionnalités comme la représentation des vecteurs pour une nouvelle série de données d'images.
Le modèle est prédit sur une nouvelle image comme suit:
python classify_image.py --image_file new_image.jpeg
J'ai édité la fonction principale afin que je puisse prendre un dossier d'images et de retour de la prédiction sur toutes les images à la fois et d'écrire la fonction de vecteurs dans un fichier csv. Voici comment je l'ai fait:
def main(_):
maybe_download_and_extract()
#image = (FLAGS.image_file if FLAGS.image_file else
# os.path.join(FLAGS.model_dir, 'cropped_panda.jpg'))
#edit to take a directory of image files instead of a one file
if FLAGS.data_folder:
images_folder=FLAGS.data_folder
list_of_images = os.listdir(images_folder)
else:
raise ValueError("Please specify image folder")
with open("feature_data.csv", "wb") as f:
feature_writer = csv.writer(f, delimiter='|')
for image in list_of_images:
print(image)
current_features = run_inference_on_image(images_folder+"/"+image)
feature_writer.writerow([image]+current_features)
Il a très bien fonctionné pendant environ 21 images, mais avant de s'écraser avec l'erreur suivante:
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 1912, in as_graph_def
raise ValueError("GraphDef cannot be larger than 2GB.")
ValueError: GraphDef cannot be larger than 2GB.
J'ai pensé en appelant la méthode run_inference_on_image(images_folder+"/"+image)
l'image précédente de données serait écrasé à seulement tenir compte des nouvelles données de l'image, ce qui ne semble pas être le cas. Comment résoudre ce problème?
source d'informationauteur MedAli
Vous devez vous connecter pour publier un commentaire.
Le problème ici est que chaque appel à
run_inference_on_image()
ajoute nœuds sur le même graphique, qui s'est finalement supérieure à la taille maximale. Il y a au moins deux façons de résoudre ce problème:La facile mais lente façon est d'utiliser un autre graphique par défaut pour chaque appel à
run_inference_on_image()
:La plus impliqués, mais plus efficace moyen est de modifier
run_inference_on_image()
pour s'exécuter sur plusieurs images. Déplacez votrefor
boucle d'entourer cesess.run()
appelet vous n'aurez plus à reconstruire l'ensemble du modèle à chaque appel, ce qui devrait rendre le traitement de chaque image beaucoup plus rapide.Vous pouvez déplacer le
create_graph()
à quelque part avant cette bouclefor image in list_of_images:
(qui passe en boucle sur les fichiers).Ce qu'il fait est d'effectuer l'inférence plusieurs fois sur le même graphique.
La façon la plus simple est de mettre
create_graph()
lors de la première de la fonction principale.Ensuite, il suffit de créer le graphique seulement