[PYTHON] Über den kürzesten Weg, um ein Bilderkennungsmodell durch maschinelles Lernen zu erstellen und eine Android-Anwendung zu implementieren

Zweck dieses Artikels

Ausführungsumgebung

--go colaboratory (Laufzeit: GPU) (Tensorflow 2.0) (Google Chrome)

Was in diesem Artikel zu schreiben

So erstellen Sie einen Datensatz für ein Bilderkennungsmodell

Führen Sie die folgenden Schritte aus

  1. Erstellen Sie mehrere Klassen, die Sie erkennen möchten. (Hier Klassen A, B, C)
  2. Sammeln Sie Bilder der Klassen A, B, C.
  3. Teilen Sie die Bilder der Klassen A, B und C für Training und Tests

Sammeln Sie Bilder der Klassen A, B, C.

Überspringen, wenn Sie bereits Bilder gesammelt haben Wenn Sie es noch nicht gesammelt haben, ist google_image_download (Referenz-URL) praktisch. Es lädt Bilder herunter, indem Schlüsselwörter, Erweiterungen, Größen, Anzahl der Blätter usw. angegeben werden.

Teilen Sie die Bilder der Klassen A, B und C für Training und Tests

Teilen Sie die Bilder in gute Gefühle für Training und Tests ein (80% Training: ca. 20% Test?) Erstellen Sie insbesondere einen Ordner mit der folgenden Struktur images ├train │└A │ └a01.jpg │ └aslfdjk.png │ ... │└B │ └ba.jpg │ └dskrup.png │ ... │└C │ └ba.jpg │ └sdddrrd.png │ ... │ ├validation │└A │ └fwwqd.jpg │ └qiita.png │ ... │└B │ └sddd.jpg │ └reag.png │ ... │└C │ └vtet.jpg │ └fhyr.png │ ...

So erstellen Sie ein Bilderkennungsmodell

Erstellen Sie das Modell in den folgenden Schritten

  1. Verwenden Sie das Tensorflow-Tutorial
    1. Ersetzen Sie die Daten, die das Modell trainieren, durch Ihre eigenen
  2. Trainieren Sie das Modell, indem Sie die Form des Modells unter Berücksichtigung der Implementierung in Android Studio leicht ändern
  3. So speichern Sie das trainierte Modell

Verwenden Sie das Lernprogramm zum Tensorflow-Transfer

Der Code, der das von Tensorflow bereitgestellte Tutorial umgeleitet hat, lautet (Referenz-URL) *. Google Colaboratory wird plötzlich geöffnet, wenn Sie auf die URL klicken. 1p-MY8C_H238TWffWrRjC8cc20alZACSD) Informationen zur Verwendung von Google Colaboratory finden Sie unter Offizielle HP.

Ersetzen Sie die Daten, die das Modell trainieren, durch Ihre eigenen

Dieser Teil des Quellcodes

from google.colab import drive
drive.mount('/content/drive')
PATH = '/content/drive/'+'Pfad zu Ihrem Datensatz auf Google Drive'

Wenn Sie dies eingeben, möchten Sie den Zugriff auf Google Drive zulassen? Sie werden gebeten, dies zu bestätigen. Ich persönlich kümmere mich nicht darum, also authentifiziere ich mich, ohne darüber nachzudenken, aber wenn Sie sich darum kümmern, sollten Sie aufhören, Ihren eigenen Datensatz mit Google Colaboraotry zu laden.

Trainieren Sie das Modell mit geringfügigen Änderungen an der Modellform für die Implementierung in Android Studio

Dieser Teil des Quellcodes

Danach können Sie das Modell trainieren, indem Sie die folgenden Codezellen nacheinander ausführen.


history = model.fit_generator(
    train_data_gen,
    steps_per_epoch=total_train // batch_size,
    epochs=epochs,
    validation_data=val_data_gen,
    validation_steps=total_val // batch_size
)

So speichern Sie ein trainiertes Modell

nur das

saved_model_dir = base_dir+'Wo Sie speichern möchten'
tf.saved_model.save(model, saved_model_dir)

Laden und Verschieben des erstellten Bilderkennungsmodells in Android Studio

Führen Sie die folgenden Schritte aus

  1. Konvertieren Sie das gespeicherte Modell in ein TensorFlow Lite-Modell und speichern Sie es
  2. Erstellen Sie ein Android Studio-Projekt
  3. Laden Sie das in Android Studio gespeicherte Modell und führen Sie die App aus

Konvertieren Sie das gespeicherte Modell in ein TensorFlow Lite-Modell und speichern Sie es

nur das

converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir)
tflite_model = converter.convert()

with open(base_dir+'Modellname.tflite', 'wb') as f:
  f.write(tflite_model)

Laden Sie das gespeicherte Modell herunter und speichern Sie es lokal.

Erstellen Sie ein Android Studio-Projekt

Installieren Sie zunächst Android Studio (Referenz-URL). Wie üblich wird der durch Tensorflow bereitgestellte Schnellstart verwendet. Referenz-URL Wenn Sie die Schritte ausführen, wird in der lokalen Umgebung ein Ordner mit dem Namen example erstellt. Öffnen Sie daher das Android-Projekt im folgenden Pfad. \examples\lite\examples\image_classification\android

Laden Sie das in Android Studio gespeicherte Modell und führen Sie die App aus

Folgen Sie den unteren Schritten

  1. Legen Sie die lokal gespeicherte .tflite-Datei im Asset-Ordner ab
  2. Legen Sie die TXT-Datei mit der Klasse im Asset-Ordner ab
  3. Schreiben Sie die .ja-Datei teilweise neu

Legen Sie die lokal gespeicherte .tflite-Datei im Asset-Ordner ab

Legen Sie es in den folgenden Ordner. \examples\lite\examples\image_classification\android\app\src\main\assets Es gibt einige .tflite am selben Ort.

Legen Sie die TXT-Datei mit der Klasse im Asset-Ordner ab

Schreiben Sie in diesem Fall die Klassen A, B und C wie folgt und speichern Sie sie am selben Speicherort wie die .tflite-Datei.

mylabel.text


A
B
C

Schreiben Sie die Java-Datei teilweise neu

Zuerst, \examples\lite\examples\image_classification\android\app\src\main\java\org\tensorflow\lite\examples\classification\tflite\ClassifierFloatMobileNet.java 56. Zeile

return "mobilenet_v1_1.0_224.tflite";

Wird wie folgt umgeschrieben

return "Modellname.tflite";

Nächster, \examples\lite\examples\image_classification\android\app\src\main\java\org\tensorflow\lite\examples\classification\tflite\Classifier.java 110. Zeile

  public static Classifier create(Activity activity, Model model, Device device, int numThreads)
      throws IOException {
    if (model == Model.QUANTIZED) {
      return new ClassifierQuantizedMobileNet(activity, device, numThreads);
    } else {
      return new ClassifierFloatMobileNet(activity, device, numThreads);
    }
  }

Wird wie folgt umgeschrieben

  public static Classifier create(Activity activity, Model model, Device device, int numThreads)
      throws IOException {
    //if (model == Model.QUANTIZED) {
      //return new ClassifierQuantizedMobileNet(activity, device, numThreads);
    //} else {
      return new ClassifierFloatMobileNet(activity, device, numThreads);
    //}
  }

Führen Sie abschließend ein make-Projekt in Android Studio aus. Schließen Sie danach das Smartphone an den PC an und führen Sie Run'app 'aus. Anschließend wird eine Anwendung namens TFL Classify auf dem Smartphone installiert und ausgeführt. Am unteren Bildschirmrand wird das Vertrauen von A, B und C (das angibt, wie wahrscheinlich die Klasse in% ist) angezeigt.

Fehlergeschichte des Schriftstellers

Ich werde einige der fehlgeschlagenen (?) Geschichten teilen, auf die der Autor gestoßen ist und die hilfreich sein können.

Fehler (?) 1

Ich habe versucht, das Pytorch-Modell in das Tensorflow-LITE-Modell umzuwandeln, und war frustriert. Ich habe hauptsächlich auf diese beiden Websites verwiesen, aber URL1, URL2 -keras-models-to-android-with-tensorflow-mobile-a16a1fb83f2) In beiden Fällen habe ich einen unklaren Fehler erhalten und aufgehört. Wenn ich jetzt darüber nachdenke, kann es an der Existenz von Keras und Tf.keras liegen. Sollen wir es das nächste Mal überprüfen?

Dieses Mal wollte ich mein eigenes Modell so schnell wie möglich mit der Android-App verschieben. Daher habe ich mithilfe des Tensorflow-Tutorials ein Modell erstellt und das Keras-Modell wie oben beschrieben in das Tensorflow-LITE-Modell konvertiert.

Wie oben in [URL1] beschrieben (https://qiita.com/lain21/items/9f9f9707ebad4bbc627d)

In der Zwischenzeit sind die klaren Vorteile von TensorFlow gegenüber PyTorch wie folgt.

Kann mit TPU lernen Rich APIs wie TFLite und TensorFlow.js, die die Bereitstellung im Frontend erleichtern

Derzeit scheint Tensorflow mehr Unterstützung zu haben, um die Konvertierung in Apps zu erleichtern.

Fehler (?) 2

Beim Sammeln verschiedener Codes wurden Keras und Tf.keras gemischt. Von der Mitte an habe ich es an tf.keras als einen Mann umgeschrieben, der Keras absolut löscht.

Fehler (?) 3

Ich bemerke nicht, dass die Ausgabe des Modells eine im Standard-Tutorial-Code ist und es in Android Studio nicht genug Ausgabe gibt! Ich habe einen Fehler gemacht. Ich dachte, dass die Ursache des Fehlers darin bestand, mit TFLiteConverter eine .tflite-Datei aus Keras zu erstellen, also verbrachte ich viel Zeit dort ... Schließlich wurde unter dieser URL beim Versuch, mein eigenes Modell zu bewerten, festgestellt, dass "etwas mit der Form der Ausgabe nicht stimmt?" Mir ist aufgefallen, dass die Form von

Fehler (?) 4

Ich habe versucht, das Modell zu quantisieren, aber ich habe aufgegeben, weil es von Android Studio nicht gelesen werden konnte. Immerhin habe ich das Float-Modell verwendet. Ich habe es versucht, weil die Größe des Modells kleiner und die Verarbeitung schneller wäre, wenn es quantisiert würde, aber ich konnte nicht. Die Ursache hierfür ist noch unbekannt.

Fehler (?) 5

Zuerst hatte ich mich nicht entschieden, was ich für die Objekterkennung verwenden sollte, und ich dachte darüber nach, Yolo mit Darknet zu verwenden, aber ich wusste nicht, wie ich mein eigenes Modell verwenden sollte, also gab ich auf, weil ich nicht wusste, wie ich es machen sollte. Von einem Bekannten ist Pytorch einfach! Es führte zum Scheitern 1. Gib nicht auf, sobald du so denkst. .. ..

Fehler (?) 6

Mit google_image_download können Sie ganz einfach Bilder mit [Bilder der Klassen A, B, C sammeln](# Bilder der Klassen A, B, C sammeln) sammeln! Ich habe das geschrieben, aber das ist ziemlich schwierig. Natürlich werden auch unangemessene Bilder heruntergeladen, so dass es schwierig ist, sie wegzuwerfen oder zu trimmen, und dann wartet die Arbeit der Klassifizierung. Ich verstehe, warum Anmerkungen ein Job in der Welt sind, aber ich möchte nicht viel tun, weil echte Abgeordnete wahrscheinlich abnehmen werden. .. .. Es gibt ein aktives Lernen als verwandtes Wort, und es scheint eine Methode zu sein, die automatisch ein Bild auswählt, das die Erkennungsrate erhöht. Es wäre bequem, wenn möglich. Ich wundere mich?

Fehler (?) 7

Nachdem ich mit dem Schreiben dieses Artikels begonnen hatte, stellte ich fest, dass sich der Inhalt des Tensorflow-Tutorials geändert hatte. Eigentlich habe ich das Lernprogramm zum Übertragen verwendet, aber da es schwierig war, meinen Code zu veröffentlichen, hatte ich keine andere Wahl, als das Lernprogramm zur Bildklassifizierung zur Erklärung zu verwenden. Ich denke, Transferlernen, das die Genauigkeit mit einer kleinen Anzahl von Daten verbessern soll, ist bequemer als das Erstellen eines Modells selbst. Das aktuelle Lernprogramm zum Übertragen von Daten dient zum Lesen von Daten aus tf's. Es ist kompliziert, sie zu ändern und zu schreiben. Deshalb habe ich es aufgegeben, sie zur Erklärung zu verwenden. Ich möchte meine Daten für das Transferlernen verwenden! Wenn es eine Anfrage gibt, möchten Sie vielleicht Ihr Bestes geben. .. ..

Recommended Posts

Über den kürzesten Weg, um ein Bilderkennungsmodell durch maschinelles Lernen zu erstellen und eine Android-Anwendung zu implementieren
Erstellen Sie eine Bilderkennungs-App, die mit Android (PyTorch Mobile) die auf dem Bildschirm geschriebenen Zahlen unterscheidet [Android-Implementierung]
Einführung in Deep Learning zum ersten Mal (Chainer) Japanische Zeichenerkennung Kapitel 2 [Modellgenerierung durch maschinelles Lernen]
Maschinelles Lernen: Bilderkennung von MNIST mithilfe von PCA und Gaussian Native Bayes
Ich habe versucht, das Bild zu verarbeiten und zu transformieren und die Daten für maschinelles Lernen zu erweitern
Speichern Sie das von pyqtgraph gezeichnete Diagramm in einem Bild
Künstliche Intelligenz, maschinelles Lernen, tiefes Lernen zu implementieren und zu verstehen
Ich habe versucht, das Bild mithilfe von maschinellem Lernen zu komprimieren
Verfahren zum Generieren und Speichern eines Lernmodells durch maschinelles Lernen, Erstellen eines API-Servers und Kommunizieren mit JSON über einen Browser
Ich habe versucht, die Yin- und Yang-Klassifikation hololiver Mitglieder durch maschinelles Lernen zu überprüfen
Versuchen Sie, die Leistung des Modells für maschinelles Lernen / Regression zu bewerten
Versuchen Sie, die Leistung des Modells für maschinelles Lernen / Klassifizierung zu bewerten
Management von Modellen für maschinelles Lernen, um Streitigkeiten mit der Unternehmensseite zu vermeiden
Der Versuch, Segmentbäume Schritt für Schritt zu implementieren und zu verstehen (Python)
[Maschinelles Lernen] Ich habe versucht, so etwas wie Bilder weiterzugeben
Deep Learning Bilderkennung 2 Modellimplementierung
[Python Kivy] So erhalten Sie den Dateipfad durch Ziehen und Ablegen
Ich habe versucht, das Bild durch Klicken mit der rechten und linken Maustaste in den angegebenen Ordner zu verschieben
[Python] Erstellen Sie einen Linebot, um den Namen und das Alter auf das Bild zu schreiben
Lassen Sie uns ein Bilderkennungsmodell mit Ihren eigenen Daten erstellen und spielen!
Lassen Sie uns die kostenlose "Einführung in Python für maschinelles Lernen" bis zum 27. April online stellen
Erstellen Sie eine KI, die Zuckerbergs Gesicht mit Deep Learning identifiziert (KI-Modellbau)
Ich habe versucht, das Modell mit der Low-Code-Bibliothek für maschinelles Lernen "PyCaret" zu visualisieren.
Erstellen Sie eine App, die Bilder erkennt, indem Sie auf Android (PyTorch Mobile) Zahlen auf den Bildschirm schreiben [CNN-Netzwerkerstellung]