Tensorflow Rückkehr ähnlichen Bildern
Möchte ich verwenden Google Tensorflow zurückkehren ähnliche Bilder, um ein input-Bild.
Habe ich installiert Tensorflow von http://www.tensorflow.org (mit PIP-installation - pip und python 2.7) auf Ubuntu14.04 auf eine virtuelle Maschine CPU.
Heruntergeladen habe ich das trainierte Modell Inception-V3 (inception-2015-12-05.tgz) von http://download.tensorflow.org/models/image/imagenet/inception-2015-12-05.tgz trainiert wird auf ImageNet Groß Visuelle Anerkennung Herausforderung mit den Daten aus 2012, aber ich denke, es hat sowohl dem Neuronalen Netz und der Sichter im inneren (wie die Aufgabe es wurde, um vorherzusagen, Kategorie). Ich habe auch die Datei heruntergeladen classify_image.py das klassifiziert Sie ein Bild in 1 von 1000 Klassen in das Modell.
Also ich hab ein random Bild image.jpg dass ich einen Betrieb zum testen des Modells. wenn ich den Befehl ausführen:
python /home/amit/classify_image.py --image_file=/home/amit/image.jpg
Ich bekomme die folgende Ausgabe: (Klassifikation erfolgt mithilfe der softmax)
I tensorflow/core/common_runtime/local_device.cc:40] Local device intra op parallelism threads: 3
I tensorflow/core/common_runtime/direct_session.cc:58] Direct session inter op parallelism threads: 3
trench coat (score = 0.62218)
overskirt (score = 0.18911)
cloak (score = 0.07508)
velvet (score = 0.02383)
hoopskirt, crinoline (score = 0.01286)
Nun, die Aufgabe bei der hand ist, um Bilder zu finden, sind ähnlich wie die input-image (image.jpg) aus einer Datenbank mit 60.000 Bilder (jpg-format, und werden in einen Ordner bei /home/amit/Bilder). Ich glaube, dass dies getan werden kann, durch entfernen der endgültigen Einstufung Schicht von den Anfängen-v3-Modell, und mit dem feature-set des eingangsbildes zu finden Cosinus-Abstand von der feature-set alle 60.000 Bilder, und wir können wieder die Bilder mit weniger Abstand (cos 0 = 1)
Bitte schlagen Sie mich der Weg nach vorne für dieses problem und wie mache ich das mit Python API.
- Ich habe ein paar Lösungen im Kopf, aber ich würde gerne verstehen, die problem mehr. Ich gehe davon aus, dass Sie versuchen, Sie alle zu finden "trench-coats" in der 60.000 Bilder. Wenn das der Fall ist, können Sie einfach starten alle 60.000 Bilder über Beginn, extrahieren Sie die Bilder, wo "trench coat" wird als top 5 (fügen Sie eine threshold-Wert ein, wenn Sie möchten), und Sie sind fertig. Tut dies beantworten?
- Vielen Dank für die Hilfe. Aber die Sache ist die image-Datei image.jpg oben ist eigentlich ein Sari, und ich möchte nicht begrenzt werden, um nur die 1000 Klassen in das Modell. Auch, wenn ich einen Weg finden, um neue Klassen hinzufügen, es wird ein sehr breites Klassifizierer sowie die Kennzeichnung der Bilder wird eine mühsame Aufgabe sein. So, ich dachte, das entfernen der Klassifikation der Schicht aus trainierte Modell, und dann mit der feature-Vektor zu berechnen, die nächsten Bilder.
- Recht. Also die Aufgabenstellung ist: "Angesichts von 60.000 Bilder, wie kann ich cluster alle sarees zusammen mit einer modifizierten version von Inception?".
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, dass ich eine Antwort gefunden auf meine Frage:
In der Datei classify_image.py das klassifiziert die Bild mit der pre trainierte Modell (NN + classifier), die ich aus dem unten genannten änderungen (Aussagen mit #HINZUGEFÜGT, geschrieben neben Sie):
Lief ich die pool_3:0-tensor durch die Fütterung in der image_data zu. Bitte lassen Sie mich wissen, wenn ich mache einen Fehler. Wenn dies korrekt ist, ich glaube, wir können mit diesem tensor für weitere Berechnungen.
feature set
Daten für alle50K images
? Haben Sielucene
? Oder hast du etwas anderes?Tensorflow jetzt hat ein nettes tutorial, wie man den Aktivierungen vor dem abschließenden Schicht und Umschulung eine neue Klassifikation Schicht mit verschiedenen Kategorien:
https://www.tensorflow.org/versions/master/how_tos/image_retraining/
Den Beispiel-code:
https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/image_retraining/retrain.py
In deinem Fall ja, kannst du die Aktivierungen von pool_3 die Ebene unter die softmax-Schicht (oder die so genannte Engpässe) und senden Sie diese mit anderen Operationen als input:
Schließlich über die Suche nach ähnlichen Bildern, ich glaube nicht, dass imagenet ' s Engpass-Aktivierungen sind sehr treffende Darstellung für das Bild suchen. Sie könnte in Erwägung ziehen, die Verwendung einer autoencoder Netzwerk mit direkten Bild-Eingänge.
(Quelle: deeplearning4j.org)
Dein problem klingt so ähnlich wie dieses visual search-Projekt