Benutzerdefiniertes Modell für den Bildklassifikator erstellen

1. Hinweis

Im vorherigen Codelab haben Sie eine App für Android und iOS mit einem grundlegenden Bild-Labeling-Modell erstellt, das mehrere hundert Bildklassen erkennt. Es erkannte ganz allgemein das Bild einer Blume – Blütenblätter, Blüten, Pflanze und Himmel.

Wenn Sie die App aktualisieren möchten, damit sie beispielsweise bestimmte Blumen, Gänseblümchen oder Rosen erkennt, benötigen Sie ein benutzerdefiniertes Modell, das mit vielen Beispielen für jede Blumenart trainiert wurde, die Sie erkennen möchten.

Vorbereitung

  • Das vorherige Codelab in diesem Lernpfad.

Aufgaben in diesem Kurs

  • Hier erfahren Sie, wie Sie ein benutzerdefiniertes Bildklassifikatormodell mit TensorFlow Lite Model Maker trainieren.

Voraussetzungen

  • Es wird keine spezielle Hardware benötigt – alles kann mit Google Colab im Browser erledigt werden.

2. Jetzt starten

Der gesamte Code, dem Sie folgen, wurde für Sie vorbereitet und kann mit Google Colab ausgeführt werden. Wenn Sie keinen Zugriff auf Google Colab haben, können Sie das Repository klonen und das Notebook namens CustomImageClassifierModel.ipynb im Verzeichnis ImageClassificationMobile->colab verwenden.

Wenn Sie viele Beispiele für bestimmte Blumen haben, ist es relativ einfach, ein Modell mit dem TensorFlow Lite Model Maker zu trainieren, um sie zu erkennen.

Am einfachsten geht das, indem Sie eine ZIP- oder TGZ-Datei erstellen, die die Images in Verzeichnissen enthält. Wenn Sie beispielsweise Bilder von Gänseblümchen, Löwenzahn, Rosen, Sonnenblume und Tulpen verwenden, können Sie sie in Verzeichnissen wie dieses sortieren:

4ee12554e75b103f.png

Wenn Sie es komprimieren und auf einem Server hosten, können Sie damit Modelle trainieren. Sie verwenden eine, die für den Rest dieses Labs für Sie vorbereitet wurde.

In diesem Lab wird davon ausgegangen, dass Sie zum Trainieren des Modells Google Colab verwenden. Sie finden colab unter colab.research.google.com. Wenn Sie eine andere Umgebung verwenden, müssen Sie möglicherweise viele Abhängigkeiten installieren, nicht nur TensorFlow.

3. Abhängigkeiten installieren und importieren

  1. Installieren Sie TensorFlow Lite Model Maker. Dazu können Sie „pip install“ verwenden. Das &> /dev/null am Ende unterdrückt nur die Ausgabe. Model Maker gibt viele Dinge aus, die nicht unmittelbar relevant sind. Sie wurde unterdrückt, damit Sie sich auf die aktuelle Aufgabe konzentrieren können.
# Install Model maker
!pip install -q tflite-model-maker &> /dev/null
  1. Als Nächstes müssen Sie die benötigten Bibliotheken importieren und sicherstellen, dass Sie TensorFlow 2.x verwenden:
# Imports and check that we are using TF2.x
import numpy as np
import os

from tflite_model_maker import configs
from tflite_model_maker import ExportFormat
from tflite_model_maker import model_spec
from tflite_model_maker import image_classifier
from tflite_model_maker.image_classifier import DataLoader

import tensorflow as tf
assert tf.__version__.startswith('2')
tf.get_logger().setLevel('ERROR')

Jetzt, da die Umgebung bereit ist, können Sie mit der Erstellung Ihres Modells beginnen.

4. Daten herunterladen und vorbereiten

Wenn Ihre Bilder in Ordnern organisiert sind und diese Ordner komprimiert wurden, werden Ihre Bilder beim Herunterladen und Dekomprimieren automatisch entsprechend dem Ordner, in dem sie sich befinden, beschriftet. Auf dieses Verzeichnis wird als data_path verwiesen.

data_path = tf.keras.utils.get_file(
      'flower_photos',
      'https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz',
      untar=True)

Dieser Datenpfad kann dann zum Trainieren mit der ImageClassifierDataLoader-Klasse des TensorFlow Lite Model Maker in ein neuronales Netzwerkmodell geladen werden. Zeigen Sie einfach auf den Ordner und das war's.

Ein wichtiges Element beim Trainieren von Modellen mit maschinellem Lernen ist, nicht alle Daten für das Training zu verwenden. Nehmen Sie sich etwas Zeit, um das Modell mit Daten zu testen, die es zuvor noch nicht kannte. Mit der Aufteilungsmethode des Datasets, das von ImageClassifierDataLoader zurückgegeben wird, ist dies einfach. Wenn Sie „0, 9“ übergeben, erhalten Sie 90% davon als Trainingsdaten und 10% als Testdaten:

data = DataLoader.from_folder(data_path)
train_data, test_data = data.split(0.9)

Jetzt, da Ihre Daten vorbereitet sind, können Sie damit ein Modell erstellen.

5. Bildklassifikatormodell erstellen

Model Maker abstrahiert viele der Besonderheiten des neuronalen Netzwerks, sodass Sie sich nicht mit Netzwerkdesign und Dingen wie Faltungen, dichse, Relu, Flatten, Verlustfunktionen und Optimierern befassen müssen. Für ein Standardmodell können Sie einfach eine einzige Codezeile verwenden, um ein Modell zu erstellen, indem Sie ein neuronales Netzwerk mit den bereitgestellten Daten trainieren:

model = image_classifier.create(train_data)

Wenn Sie diesen Befehl ausführen, sieht die Ausgabe etwa so aus:

Model: "sequential_2"
_________________________________________________________________
Layer (type)                 Output Shape              Param #
=================================================================
hub_keras_layer_v1v2_2 (HubK (None, 1280)              3413024
_________________________________________________________________
dropout_2 (Dropout)          (None, 1280)              0
_________________________________________________________________
dense_2 (Dense)              (None, 5)                 6405
=================================================================
Total params: 3,419,429
Trainable params: 6,405
Non-trainable params: 3,413,024
_________________________________________________________________
None
Epoch 1/5
103/103 [===] - 15s 129ms/step - loss: 1.1169 - accuracy: 0.6181

Epoch 2/5
103/103 [===] - 13s 126ms/step - loss: 0.6595 - accuracy: 0.8911

Epoch 3/5
103/103 [===] - 13s 127ms/step - loss: 0.6239 - accuracy: 0.9133

Epoch 4/5
103/103 [===] - 13s 128ms/step - loss: 0.5994 - accuracy: 0.9287

Epoch 5/5
103/103 [===] - 13s 126ms/step - loss: 0.5836 - accuracy: 0.9385

Der erste Teil zeigt Ihre Modellarchitektur. Im Hintergrund von Model Maker wird Lerntransfer verwendet. Dabei dient ein vorhandenes vortrainiertes Modell als Ausgangspunkt. Dabei werden die Dinge,die dieses Modell über die Erstellung von Bildern gelernt hat, auf diese fünf Blüten angewendet. Sie sehen dies in der ersten Zeile, die lautet:

hub_keras_layer_v1v2_2 (HubK (None, 1280)              3413024

Der Schlüssel ist das Wort „Hub“ und gibt an, dass dieses Modell von TensorFlow Hub stammt. Standardmäßig verwendet TensorFlow Lite Model Maker das Modell „MobileNet“. das darauf ausgelegt ist, 1.000 Bildtypen zu erkennen. Die Logik hier ist, dass die Methodik, die es verwendet, durch das Erlernen von zur Unterscheidung zwischen 1.000 Klassen, können wiederverwendet werden. Dieselben „Funktionen“ können unseren fünf Blumenklassen zugeordnet werden, sodass sie nicht von Grund auf neu erlernt werden müssen.

Das Modell durchläuft fünf Epochen – eine Epoche ist dabei ein vollständiger Trainingszyklus, in dem das neuronale Netzwerk versucht, die Bilder ihren Labels zuzuordnen. Nach fünf Epochen waren die Trainingsdaten in etwa einer Minute zu 93,85% genau. Da es fünf Klassen gibt, wäre eine zufällige Vermutung zu 20% genau. Das ist ein Fortschritt! (Es meldet auch eine Verlustzahl, die Sie vorerst ignorieren können.)

Zuvor haben Sie die Daten in Trainings- und Testdaten aufgeteilt. So erhalten Sie einen Überblick über die Leistung des Netzwerks mit Daten, die es zuvor noch nicht gesehen hat. Ein besserer Indikator dafür, wie es in der Praxis aussehen könnte, wenn Sie model.evaluate für die Testdaten verwenden:

loss, accuracy = model.evaluate(test_data)

Die Ausgabe sieht in etwa so aus:

12/12 [===] - 5s 115ms/step - loss: 0.6622 - accuracy: 0.8801

Beachten Sie die hier angegebene Genauigkeit. Sie beträgt 88,01%, sodass bei Verwendung des Standardmodells in der realen Welt diese Genauigkeit zu erwarten ist. Das ist nicht schlecht für das Standardmodell, das Sie in etwa einer Minute trainiert haben. Natürlich könntet ihr viele Optimierungen vornehmen, um das Modell zu verbessern. Und das allein ist eine Wissenschaft für sich!

6. Modell exportieren

Nachdem das Modell nun trainiert ist, besteht der nächste Schritt darin, es in das .tflite-Format zu exportieren, das von einer mobilen Anwendung verwendet werden kann. Model Maker bietet eine einfache Exportmethode, die Sie verwenden können. Geben Sie einfach das Verzeichnis für die Ausgabe an.

Hier ist der Code:

model.export(export_dir='/mm_flowers')

Wenn Sie dies in Google Colab ausführen, können Sie das Modell anzeigen, indem Sie links auf dem Bildschirm auf das Ordnersymbol klicken:

cc5b9988775633b4.png

Hier wird eine Liste des aktuellen Verzeichnisses angezeigt. Verwenden Sie die angegebene Schaltfläche, um nach oben zu wechseln ein Verzeichnis:

51e6ac47c992142a.png

In dem Code, den Sie in das Verzeichnis mm_flowers exportiert haben, Wenn Sie das Fenster öffnen, sehen Sie eine Datei namens „model.tflite“. Dies ist Ihr trainiertes Modell.

57bad87f294fd189.png

Wählen Sie die Datei aus. Rechts werden drei Punkte angezeigt. Klicken Sie darauf, um ein Kontextmenü aufzurufen, über das Sie das Modell von dort herunterladen können.

aee14ad10c4a8a1a.png

Nach kurzer Zeit wird Ihr Modell in Ihren Downloads-Ordner heruntergeladen.

7. Glückwunsch

Jetzt können Sie sie in Ihre mobile App integrieren. Das tun Sie im nächsten Lab.