Ich verwende Tensorflow imageNet trained model, um die Features der letzten Pooling-Layer als Darstellungsvektoren für einen neuen Datensatz von Bildern zu extrahieren.überwunden Graphdef kann nicht größer als 2 GB in Tensorflow sein
Das Modell wie prognostiziert auf ein neues Bild wie folgt:
python classify_image.py --image_file new_image.jpeg
ich die Hauptfunktion bearbeitet, so dass ich einen Ordner mit Bildern zu nehmen und die Vorhersage auf allen Bildern auf einmal zurückzukehren und die Funktion schreiben Vektoren in einer CSV-Datei. Hier ist, wie ich tat, dass:
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)
Es ist für ganz gut arbeitete rund 21 Bilder, aber dann stürzte mit dem folgenden Fehler:
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.
Ich dachte, nach dem Aufruf der Methode run_inference_on_image(images_folder+"/"+image)
die vorherigen Bilddaten würden überschrieben, um nur die neuen Bilddaten zu berücksichtigen, was nicht der Fall zu sein scheint. Wie behebe ich dieses Problem?
Ich ging mit der zweiten Option und es ist schneller. Danke für die Idee! – MedAli
eine Frage obwohl, gibt es eine Möglichkeit, ein Array von Bildern statt nur einer im Vorhersageteil der sess.run '' 'Vorhersagen = sess.run (pool_3_tensor, {'DecodeJpeg/Inhalt: 0': image_data }) '' ' – MedAli
Ich denke, dass bestimmte Feed-Punkt nur auf ein einzelnes Bild funktioniert. Es wäre möglich, das Diagramm so zu ändern, dass es einen Stapel von Bildern benötigt, aber dies würde das Erstellen eines Vorabruf-Threads erfordern (unter Verwendung von beispielsweise "tf.train.batch()"), um die Bilder zu einem Stapel zu kombinieren (was nötig wäre) alle haben die gleiche Größe) und fließen dann in einen etwas späteren Punkt im Netzwerk ein. Sie müssten das Argument 'input_map' für' tf.import_graph_def() 'verwenden, um den Tensor zu ändern, der als Eingabe verwendet wird. Da die Struktur dieses Graphen undokumentiert ist, könnte es schwierig sein ... – mrry