Wie man Tensorflow versteht und nicht stirbt, aber einem Auto sogar etwas beibringt

Hi, Habrazhiteli. In dem heutigen Beitrag geht es darum, wie man sich nicht in der Wildnis der vielfältigen Möglichkeiten der Verwendung von TensorFlow für maschinelles Lernen verirrt und sein Ziel erreicht. Der Artikel soll sicherstellen, dass der Leser die Grundlagen der Prinzipien des maschinellen Lernens kennt, aber noch nicht versucht hat, dies mit eigenen Händen zu tun. Als Ergebnis erhalten wir eine funktionierende Demo unter Android, die etwas mit ziemlich hoher Genauigkeit erkennt. Aber zuerst die ersten Dinge.



Nachdem man sich die neuesten Materialien angesehen hatte, entschied man sich für Tensorflow , das jetzt immer mehr an Bedeutung gewinnt, und es scheint, dass es genügend Artikel in Englisch und Russisch gibt, um nicht all das herauszufinden und herauszufinden, was was ist.


Nach zwei Wochen studierte er Artikel und zahlreiche ekzamply im Büro. Website erkannte ich, dass ich nicht verstand. ZU viele Informationen und Optionen, wie Tensorflow verwendet werden kann. Mein Kopf ist schon prall darauf, wie sehr sie unterschiedliche Lösungen anbieten und was mit ihnen in Bezug auf meine Aufgabe zu tun ist.



Dann entschied ich mich, alles auszuprobieren, von den einfachsten und fast vorgefertigten Optionen (bei denen ich eine Abhängigkeit im Gradle registrieren und ein paar Codezeilen hinzufügen musste) bis hin zu komplexeren (bei denen ich selbst Graphenmodelle erstellen und trainieren und lernen musste, wie man sie mobil verwendet Anwendung).


Am Ende musste ich eine komplizierte Version verwenden, die im Folgenden näher beschrieben wird. In der Zwischenzeit habe ich für Sie eine Liste mit einfacheren Optionen zusammengestellt, die nicht weniger effektiv sind, nur jeder ist für ihren Zweck geeignet.


1. ML KIT



Die einfachste Lösung ist die Verwendung einiger Codezeilen:


  • Texterkennung (Text, lateinische Zeichen)
  • Gesichtserkennung (Gesichter, Emotionen)
  • Barcode-Scanning (Barcode, QR-Code)
  • Bildbeschriftung (begrenzte Anzahl von Objekttypen im Bild)
  • Wahrzeichen Anerkennung

Mit dieser Lösung ist es auch etwas schwieriger, Ihr eigenes TensorFlow Lite-Modell zu verwenden, aber das Konvertieren in dieses Format bereitete Schwierigkeiten, so dass dieses Element nicht versucht wurde.


Während die Autoren dieser Kreation schreiben, ist es möglich, die meisten Probleme mit diesen Entwicklungen zu lösen. Wenn dies nicht auf Ihre Aufgabe zutrifft, müssen Sie benutzerdefinierte Modelle verwenden.


2. Kundenspezifische Vision



Sehr praktisches Werkzeug zum Erstellen und Trainieren von benutzerdefinierten Modellen mithilfe von Bildern.
Von den Profis gibt es eine kostenlose Version, mit der Sie ein Projekt behalten können.
Minuspunkte - Die kostenlose Version begrenzt die Anzahl der "eingehenden" Bilder in 3000 Stück. Um zu versuchen, ein durchschnittliches Netzwerk mit Genauigkeit zu erstellen - genug. Für genauere Aufgaben benötigen Sie mehr.
Der Benutzer muss lediglich Bilder mit einer Markierung hinzufügen (z. B. image1 ist "Waschbär", image2 - "sun"), trainieren und den Graph zur weiteren Verwendung exportieren.



Pflege Microsoft bietet sogar ein eigenes Muster an , mit dem Sie Ihre resultierende Grafik ausprobieren können.
Für diejenigen, die bereits "in der Betreffzeile" sind - der Graph wird bereits im eingefrorenen Zustand generiert, d. H. Sie brauchen nichts weiter zu tun.
Diese Lösung ist gut, wenn Sie eine große Auswahl haben und (VIELE Aufmerksamkeit) VIELE Klassen beim Lernen haben. Weil Andernfalls wird es in der Praxis viele falsche Definitionen geben. Sie haben zum Beispiel an Waschbären und Sonnen trainiert, und wenn sich eine Person am Eingang befindet, kann sie mit gleicher Wahrscheinlichkeit von einem solchen System als dieses oder jenes definiert werden. Obwohl in der Tat - sonst nichts.


3. Manuelles Erstellen eines Modells



Wenn Sie das Modell für die Bilderkennung selbst feinabstimmen müssen, werden komplexere Manipulationen mit dem eingegebenen Bildmuster möglich.
Zum Beispiel möchten wir keine Einschränkungen hinsichtlich der Größe der Eingabestichprobe haben (wie im vorhergehenden Absatz), oder wir möchten das Modell genauer trainieren, indem wir die Anzahl der Epochen und andere Lernparameter selbst anpassen.
Bei diesem Ansatz gibt es mehrere Beispiele von Tensorflow, die die Reihenfolge der Aktionen und das Endergebnis beschreiben.
Hier einige Beispiele:




Es enthält ein Beispiel für das Erstellen eines Kategorieters für Farbtypen auf der Grundlage einer geöffneten ImageNet-Bilddatenbank - Vorbereiten von Bildern und Trainieren des Modells. Ein wenig erwähnt wird auch, wie Sie mit einem ziemlich interessanten Werkzeug arbeiten können - TensorBoard. Von den einfachsten Funktionen zeigt es auf vielfältige Weise die Struktur Ihres fertigen Modells sowie den Lernprozess auf anschauliche Weise.


  • Kodlab Tensorflow for Poets 2 - Fortsetzung der Arbeit mit dem Farbklassifikator. Zeigt an, wie, wenn Diagrammdateien und deren Beschriftungen (die im vorherigen Kodlab erhalten wurden) vorhanden sind, die Anwendung auf Android ausgeführt werden kann. Einer der Punkte des Kodlab ist die Konvertierung vom "üblichen" Diagrammformat ".pb" in das Tensorflow-Lite-Format (das einige Dateioptimierungen vorsieht, um die Gesamtgröße der Diagrammdatei zu reduzieren, da mobile Geräte dies erfordern).


  • Erkennung handschriftlicher Zeichen MNIST .




Die Rübe enthält das ursprüngliche Modell (das für diese Aufgabe bereits vorbereitet ist), Anweisungen zum Trainieren, Konvertieren und Starten des Projekts für Android am Ende, um zu überprüfen, wie alles funktioniert.


Anhand dieser Beispiele können Sie herausfinden, wie Sie mit benutzerdefinierten Modellen in Tensorflow arbeiten und versuchen, Ihre eigenen Modelle zu erstellen, oder eines der bereits trainierten Modelle verwenden, die auf einer Githaba montiert sind:
Modelle von Tensorflow


Apropos vorgebildete Modelle. Interessante Nuancen bei der Verwendung dieser:


  • Ihre Struktur ist bereits für eine bestimmte Aufgabe vorbereitet.
  • Sie sind bereits auf große Stichprobengrößen trainiert.
    Wenn Ihre Stichprobe nicht ausreichend gefüllt ist, können Sie ein bereits trainiertes Modell verwenden, das Ihrer Aufgabe nahe kommt. Wenn Sie ein solches Modell verwenden und Ihre eigenen Lernregeln hinzufügen, erhalten Sie ein besseres Ergebnis, als wenn Sie versuchen würden, ein Modell von Grund auf zu trainieren.

4. Objekterkennungs-API + Modellerstellung manuell


Alle vorherigen Punkte ergaben jedoch nicht das gewünschte Ergebnis. Es war von Anfang an schwierig zu verstehen, was mit welcher Vorgehensweise getan werden muss. Dann wurde ein cooler Artikel über die Objekterkennungs-API gefunden , in dem beschrieben wird, wie Sie mehrere Kategorien in einem Bild sowie mehrere Instanzen einer Kategorie finden können. Bei der Arbeit an diesem Beispiel erwiesen sich die Originalartikel und Video-Tutorials zum Erkennen von benutzerdefinierten Objekten als bequemer (Verknüpfungen werden am Ende angezeigt).


Ohne einen Artikel über die Anerkennung von Pikachu hätte die Arbeit jedoch nicht abgeschlossen werden können, weil dort eine sehr wichtige Nuance angedeutet wurde, die aus irgendeinem Grund in keinem einzigen Leitfaden oder Beispiel erwähnt wird. Ohne das wäre die ganze Arbeit vergeblich gewesen.


Also nun endlich, was noch zu tun war und was am Ausgang passiert ist.


  1. Zuerst - Mehlinstallation Tensorflow. Wer wird nicht in der Lage sein, es zu installieren oder die Standard-Erstellungsskripts zu verwenden, ist eine Modellschulung. Fast jedes Problem wurde bereits in Probleme mit einem githheb oder stackoverflow geschrieben.

Gemäß den Anweisungen zur Objekterkennung müssen wir vor dem Training des Modells eine Eingabemuster erstellen. In diesen Artikeln wird ausführlich beschrieben, wie dies mithilfe eines nützlichen Tools - labelImg. Die einzige Schwierigkeit besteht hier darin, sehr lange und gewissenhaft zu arbeiten, um die Grenzen der Objekte herauszufinden, die wir brauchen. In diesem Fall Stempel auf die Bilder von Dokumenten.


Der nächste Schritt besteht darin, die Daten mit Hilfe von vorgefertigten Skripten von Schritt 2 zuerst in CSV-Dateien und dann in TFRecords - dem Eingabedatenformat Tensorflow - zu exportieren. Es sollte keine Schwierigkeiten geben.
Auswahl eines bereits trainierten Modells, auf dessen Basis wir den Graphen sowie das Training selbst trainieren. Hier können die meisten unbekannten Fehler auftreten, deren Ursache nicht spezifizierte (oder falsch gesetzte) Pakete sind, die für die Arbeit notwendig sind. Aber du wirst Erfolg haben, nicht verzweifeln, das Ergebnis ist es wert.


Export nach dem Lernen der Datei im Format 'pb'. Wählen Sie einfach die letzte 'ckpt'-Datei aus und exportieren Sie sie.
Führen Sie ein Beispiel für die Arbeit mit Android aus.
Laden Sie das offizielle Objekterkennungsbeispiel aus dem Tensorflow - TF Detect- Github herunter . Wir haben dort unser Modell und die Feile mit den Etiketten eingefügt. Aber Nichts wird funktionieren.



Es war hier, dass das größte Plug-In in der gesamten Arbeit entstand, seltsamerweise - nun, Tensorflow-Samples wollten überhaupt nicht funktionieren. Alles ist gefallen. Nur der mächtige Pikachu mit seinem Artikel hat geholfen, alles zum Laufen zu bringen.
In der Datei labels.txt muss die erste Zeile die Aufschrift "???" sein, weil Standardmäßig beginnen in der Objekterkennungs-API die Objekt-ID-Nummern nicht wie üblich mit 0, sondern mit 1. Aufgrund der Tatsache, dass die Zero-Klasse reserviert ist, müssen Sie magische Fragen angeben. Ie Ihre Tag-Datei sieht ungefähr so ​​aus:


???
stamp

Und dann - lassen Sie die Probe laufen und sehen Sie, wie Objekte erkannt werden und wie vertrauenswürdig sie ist.



Das Ergebnis war also eine einfache Anwendung, die, wenn Sie die Kamera mit der Maus bewegen, die Ränder des Stempels auf dem Dokument erkennt und diese zusammen mit der Erkennungsgenauigkeit anzeigt.
Und wenn wir die Zeit ausschließen, die für die Suche nach dem richtigen Ansatz und den Versuch, ihn zu starten, im Allgemeinen ausgegeben wurde, erwies sich die Arbeit als ziemlich schnell und nicht wirklich schwierig. Sie müssen nur die Nuancen kennen, bevor Sie mit der Arbeit beginnen.


Bereits als zusätzlicher Abschnitt (hier können Sie den Artikel bereits schließen, wenn Sie die Informationen satt haben), möchte ich ein paar Life-Hacks schreiben, die bei der Arbeit mit all dem geholfen haben.


  • Häufig funktionierten Tensorflow-Skripts nicht, da sie aus den falschen Verzeichnissen ausgeführt wurden. Und auf verschiedenen PCs war es anders: jemand musste vom " tensroflowmodels/models/research" "Verzeichnis aus laufen , und jemand - bis zu einer Ebene tiefer - von" tensroflowmodels/models/research/object-detection".


  • Denken Sie daran, dass Sie für jedes offene Terminal den Pfad mit dem Befehl erneut exportieren müssen


    export PYTHONPATH=/ваш локальный путь/tensroflowmodels/models/research/slim:$PYTHONPATH

  • Wenn Sie Ihr Diagramm nicht verwenden und Informationen darüber herausfinden möchten (z. B. " input_node_name", was später in der Arbeit erforderlich ist), führen Sie zwei Befehle aus dem Stammordner aus:


    bazel build tensorflow/tools/graph_transforms:summarize_graph    
    bazel-bin/tensorflow/tools/graph_transforms/summarize_graph --in_graph="/ваш локальный путь/frozen_inference_graph.pb"

    Dabei ist " /ваш локальный путь/frozen_inference_graph.pb" der Pfad zu der Spalte, über die Sie Informationen erhalten möchten


  • Um Informationen über das Diagramm anzuzeigen, können Sie Tensorboard verwenden


    python import_pb_to_tensorboard.py --model_dir=output/frozen_inference_graph.pb --log_dir=training 

    Hier müssen Sie den Pfad zum Diagramm ( model_dir) und den Pfad zu den Dateien angeben , die im Lernprozess abgerufen wurden ( log_dir). Dann öffnen Sie einfach localhost im Browser und schauen, was Sie interessiert.



Und der neueste Teil - beim Arbeiten mit Python-Skripts in den Anweisungen für die Objekterkennungs-API - haben Sie unten einen kleinen Spickzettel mit Befehlen und Hinweisen vorbereitet.


Spickzettel

Export von labelimg nach csv (aus dem object_detection-Verzeichnis)


python xml_to_csv.py

Darüber hinaus müssen alle unten aufgeführten Schritte in demselben Tensorflow-Ordner (" tensroflowmodels/models/research/object-detection" oder eine Ebene höher - je nachdem, wie Sie arbeiten) ausgeführt werden - dh alle Bilder des Eingabebeispiels, TFRecords und anderer Dateien Der Beginn der Arbeit muss in dieses Verzeichnis kopiert werden.


Export von csv nach tfrecord


python generate_tfrecord.py --csv_input=data/train_labels.csv  --output_path=data/train.record
python generate_tfrecord.py --csv_input=data/test_labels.csv  --output_path=data/test.record

*Не забывайте менять в самом файле (generate_tfrecord.py) строчки ‘train’ и ‘test’ в путях, а также
название распознаваемых классов в функции class_text_to_int (которые должны быть продублированы в pbtxt файле, который вы создадите перед обучением графа).


Обучение


python legacy/train.py —logtostderr --train_dir=training/ --pipeline_config_path=training/ssd_mobilenet_v1_coco.config 

** Перед обучением не забудьте проверить файл "training/object-detection.pbtxt" — там должны быть указаны все распознаваемые классы и файл "training/ssd_mobilenet_v1_coco.config" — там нужно поменять параметр «num_classes» на число ваших классов.


Экспорт модели в pb


python export_inference_graph.py \
--input_type=image_tensor \--pipeline_config_path=training/pipeline.config \--trained_checkpoint_prefix=training/model.ckpt-110 \--output_directory=output

Vielen Dank für Ihr Interesse an diesem Thema!


Links


  1. Originalartikel zur Objekterkennung
  2. Video zum Artikel zur Erkennung von Objekten in englischer Sprache
  3. Eine Reihe von Skripts, die im ursprünglichen Artikel verwendet wurden.

Jetzt auch beliebt: