1

Ich weiß, dass diese Frage schon einmal gestellt wurde, aber ich konnte noch keine Antwort finden, mit der ich noch arbeiten kann. Ich bin neu in Python und Tensorflow, habe es aber mit dem MNIST-Bildset geschafft, meine Genauigkeit auf + -99.3% zu bringen. Jetzt würde ich gerne versuchen, meine eigenen Bilder zu verwenden, aber das erwies sich als schwieriger für mich als erwartet.Wie verwende ich meine eigenen Bilder in TensorFlow?

Ich habe die Tutorial-Seite auf der Tensorflow-Website hunderte Male gelesen, aber es macht einfach keinen Sinn für mich und was auch immer ich versuche, es endet mit Warnungen. Jetzt möchte ich es selbst herausfinden, aber hat irgendjemand eine Idee, welcher Weg am einfachsten ist, mit meinen eigenen Bildern zu arbeiten? Oder irgendwelche Beispiele? Ich habe online nach ihnen gesucht, aber es fühlt sich an, als würde ich 1000 von ihnen finden, aber keiner von ihnen wird auf eine Weise erklärt, die ich verstehen kann.

Vielen Dank für Ihre Hilfe im Voraus.

+0

Um zu helfen, dies zu beantworten - was sind Ihre Bilder? Wie viele? Sind sie beschriftet? Welche Größe? Welche Klassen/wie viele Klassen? Möchten Sie eine Klassifizierung vornehmen oder etwas anspruchsvoller? – dga

+0

Ich habe 42 Token mit jeweils einem anderen Symbol. Die Symbole sind wirklich stilisiert, so dass die Bildgröße sehr niedrig sein kann. Mein Ziel ist es zu erkennen, von welchem ​​Token ich ein Bild gemacht habe. Das bedeutet 42 Tokens mit jeweils einem anderen Label. –

+0

Physische Token, mit denen Sie im Voraus ein Bild erstellen, um ein markiertes Dataset zu erstellen? Wie viele Bilder möchten Sie unter verschiedenen Bedingungen (Hintergrund, Beleuchtung, Orientierung usw.) aufnehmen? :) – dga

Antwort

1

OK, also setzt man dies zusammen, hat man 42 Klassen und erwartet etwa 10 Bilder.

Damit stehen Sie ziemlich genau in der Notwendigkeit von zwei Dingen:

Sie haben bereits den wahrscheinlichen Bedarf an Daten Augmentation in den Kommentaren angesprochen, und Sie Genau richtig: Um Ihre 10 Bilder pro Klasse optimal zu nutzen, sollten Sie eine ganze Reihe von Transformationen darauf anwenden. Wahrscheinlich viel mehr als 10/20 Anzahl Bilder:

  • Beschneiden
  • Scaling
  • Rausch
  • Kontrast/Farbe/Helligkeit
  • Rotation

Ein gutes Beispiel für Daten Augmentation Zur Bildklassifizierung gehört die official resnet example model

Die zweite ist Transferlernen. Wenn Sie versuchen, ein Modell von 42 Klassen aus relativ kleinen Daten zu lernen, werden Sie wahrscheinlich bessere Ergebnisse erzielen können, wenn Sie mit einem Modell beginnen, das mit anderen Daten trainiert wurde, und dann die letzten (wenigen) Schichten mit Ihrem neuen Datensatz neu trainieren. Der Grund dafür ist, dass der viel größere Beispielraum des anfänglichen Trainings Ihrem Klassifizierer hilft, eine Vielzahl von gebräuchlichen Bildmerkmalen zu lernen, die Ihr Transfer-gelernter Klassifikator verwenden kann, um eine höhere Erkennung schneller zu erreichen.

Eine Alternative, natürlich, könnten Sie eine Form des aktiven Lernens tun - trainieren Sie einen Klassifikator und zeigen Sie ihm dann Bilder Ihrer Tokens (vielleicht per Webcam, Klassifizieren jedes Frame), und wenn es falsch ist, Speichern Sie das als Beispiel für die nächste Trainingsrunde. Das erfordert mehr Arbeit, und Sie müssten dafür eine Infrastruktur aufbauen, also würde ich mit dem Transferlernen beginnen.

Sie haben dann die Frage, mit welcher Architektur Sie beim Transferlernen beginnen sollen. Inception ist wahrscheinlich zu viel für das, was Sie tun, aber das Lager MNIST-Modell ist wahrscheinlich einfacher als Sie wollen. Sie müssen etwas experimentieren - ein modifizierter Klassifizierer im LeNet-Stil, wie die üblichen MNIST-Beispiele, kann ziemlich gut funktionieren (fügen Sie eine weitere Faltungsschicht hinzu, fügen Sie batchnorm und vielleicht ein bisschen Dropout hinzu). Alternativ könnten Sie mit einem vortrainierten Mobilenet Netzwerk beginnen und von diesem lernen lernen.Ich wäre versucht, mit letzterem zu beginnen, es sei denn, Sie haben einige strenge Berechnungsgrenzen für die Inferenzgeschwindigkeit.

Für Ihre Bilder würde ich zunächst ein Verzeichnis von JPEG-Bildern erstellen. Die "offizielle" Art, mit ihnen umzugehen, wäre der Prozess in this answer.

+0

Diese Antwort ist erstaunlich, vielen Dank! Ich dachte schon, dass das grundlegende MNIST-Modell nicht ganz so gut funktionieren würde, also war mein Plan, sicherzustellen, dass ich meine Bilder in meinen Code importieren und dann eine ganze Menge Tests mit der Dokumentation machen kann, um ein Gefühl für die verschiedenen Optionen zu bekommen. Nicht der effizienteste Weg, es zu tun, aber ich versuche es zu lernen, also werde ich viele Dinge ausprobieren und mich durch Versuch und Irrtum zurechtfinden. Ich habe bereits in das Mobranet-Netzwerk geschaut, das mein Interesse bereits geweckt hat. Ich werde versuchen, das Transfer-Lernen zu nutzen, um es für die Tokens zu verwenden. –

Verwandte Themen