1. Hinweis
Im vorherigen Codelab haben Sie eine App für Android und iOS erstellt, die ein einfaches Bildlabeling-Modell verwendet, das mehrere Hundert Bildklassen erkennt. Auf einem Bild einer Blume wurden nur sehr allgemeine Dinge erkannt: Blütenblätter, Blume, Pflanze und Himmel.
Wenn die App bestimmte Blumen wie Gänseblümchen oder Rosen erkennen soll, benötigen Sie ein benutzerdefiniertes Modell, das mit vielen Beispielen für jede der Blumenarten trainiert wurde, die Sie erkennen möchten.
Vorbereitung
- Das vorherige Codelab in diesem Lernpfad.
Was Sie erstellen und lernen
- So trainieren Sie ein benutzerdefiniertes Modell für die Bildklassifizierung mit TensorFlow Lite Model Maker.
Voraussetzungen
- Es ist keine spezielle Hardware erforderlich. Alles kann mit Google Colab im Browser erledigt werden.
2. Jetzt starten
Der gesamte Code, den Sie benötigen, wurde für Sie vorbereitet und kann hier mit Google Colab ausgeführt werden. Wenn Sie keinen Zugriff auf Google Colab haben, können Sie das Repository klonen und das Notebook mit dem Namen CustomImageClassifierModel.ipynb verwenden, das sich im Verzeichnis ImageClassificationMobile->colab befindet.
Wenn Sie viele Beispiele für bestimmte Blumen haben, ist es relativ einfach, ein Modell mit TensorFlow Lite Model Maker zu trainieren, damit es diese erkennt.
Am einfachsten ist es, eine ZIP- oder TGZ-Datei mit den Bildern zu erstellen, die in Verzeichnisse sortiert sind. Wenn Sie beispielsweise Bilder von Gänseblümchen, Löwenzahn, Rosen, Sonnenblumen und Tulpen verwenden, können Sie sie so in Verzeichnisse einteilen:

Wenn Sie die Datei zippen und auf einem Server hosten, können Sie Modelle damit trainieren. Im weiteren Verlauf dieses Labs verwenden Sie ein entsprechendes Konto.
In diesem Lab wird davon ausgegangen, dass Sie Google Colab zum Trainieren des Modells 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 zuletzt TensorFlow.
3. Abhängigkeiten installieren und importieren
- Installieren Sie TensorFlow Lite Model Maker. Das ist mit einer Pip-Installation möglich. Das &> /dev/null am Ende unterdrückt die Ausgabe. Model Maker gibt viele Dinge aus, die nicht sofort 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
- Als Nächstes müssen Sie die Bibliotheken importieren, die Sie verwenden möchten, und darauf achten, 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')
Nachdem die Umgebung eingerichtet ist, können Sie mit dem Erstellen Ihres Modells beginnen.
4. Daten herunterladen und vorbereiten
Wenn Ihre Bilder in Ordnern organisiert sind und diese Ordner gezippt sind, werden Ihre Bilder automatisch anhand des Ordners, in dem sie sich befinden, gekennzeichnet, wenn Sie die ZIP-Datei herunterladen und dekomprimieren. Dieses Verzeichnis wird als data_path bezeichnet.
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 mit der Klasse ImageClassifierDataLoader von TensorFlow Lite Model Maker in ein neuronales Netzwerkmodell geladen werden, um es zu trainieren. Richte die Kamera einfach auf den Ordner und schon kann es losgehen.
Ein wichtiger Aspekt beim Trainieren von Modellen mit maschinellem Lernen ist, dass Sie nicht alle Ihre Daten zum Trainieren verwenden. Halten Sie etwas zurück, um das Modell mit Daten zu testen, die es noch nicht kennt. Das ist ganz einfach mit der Split-Methode des Datasets möglich, das von ImageClassifierDataLoader zurückgegeben wird. Wenn Sie 0, 9 übergeben, erhalten Sie 90% der Daten als Trainingsdaten und 10% als Testdaten:
data = DataLoader.from_folder(data_path)
train_data, test_data = data.split(0.9)
Nachdem Ihre Daten vorbereitet sind, können Sie damit ein Modell erstellen.
5. Bildklassifikatormodell erstellen
Model Maker abstrahiert viele Besonderheiten des Designs des neuronalen Netzwerks, sodass Sie sich nicht mit dem Netzwerkdesign und Dingen wie Faltungen, dichten Schichten, ReLU, Flatten, Verlustfunktionen und Optimierern befassen müssen. Für ein Standardmodell können Sie einfach eine einzelne 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 Code ausführen, sehen Sie eine Ausgabe, die in etwa so aussieht:
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
Im ersten Teil wird die Architektur Ihres Modells dargestellt. Was Model Maker im Hintergrund macht, wird als Transfer Learning bezeichnet. Dabei wird ein vorhandenes vortrainiertes Modell als Ausgangspunkt verwendet und es werden nur die Dinge, die dieses Modell über die Struktur von Bildern gelernt hat, auf das Verständnis dieser fünf Blumen angewendet. Das sehen Sie in der ersten Zeile:
hub_keras_layer_v1v2_2 (HubK (None, 1280) 3413024
Der Schlüssel ist das Wort „Hub“, das darauf hinweist, dass dieses Modell aus TensorFlow Hub stammt. Standardmäßig verwendet TensorFlow Lite Model Maker ein Modell namens „MobileNet“, das für die Erkennung von 1.000 Bildtypen entwickelt wurde. Die Logik besteht darin, dass die verwendete Methode, bei der „Merkmale“ gelernt werden, um zwischen 1.000 Klassen zu unterscheiden, wiederverwendet werden kann. Dieselben „Merkmale“ können unseren fünf Blumenklassen zugeordnet werden, sodass sie nicht von Grund auf neu gelernt werden müssen.
Das Modell wurde in 5 Epochen trainiert. Eine Epoche ist ein vollständiger Trainingszyklus, in dem das neuronale Netzwerk versucht, die Bilder ihren Labels zuzuordnen. Nach 5 Epochen, also nach etwa einer Minute, lag die Genauigkeit bei den Trainingsdaten bei 93,85 %. Da es fünf Klassen gibt, wäre eine zufällige Schätzung zu 20% genau. Das ist also ein Fortschritt. (Es wird auch eine „Verlust“-Zahl gemeldet, die Sie vorerst ignorieren können.)
Zuvor haben Sie die Daten in Trainings- und Testdaten aufgeteilt, damit Sie eine Vorstellung davon bekommen, wie das Netzwerk mit Daten umgeht, die es noch nicht gesehen hat. Das ist ein besserer Indikator dafür, wie es in der realen Welt funktionieren könnte. Verwenden Sie dazu model.evaluate für die Testdaten:
loss, accuracy = model.evaluate(test_data)
Die Ausgabe sieht in etwa so aus:
12/12 [===] - 5s 115ms/step - loss: 0.6622 - accuracy: 0.8801
Achten Sie hier auf die Genauigkeit. Sie liegt bei 88,01 %. Wenn Sie das Standardmodell in der Praxis verwenden, sollten Sie also mit dieser Genauigkeit rechnen. Das ist nicht schlecht für das Standardmodell, das Sie in etwa einer Minute trainiert haben. Natürlich könnten Sie das Modell wahrscheinlich noch viel besser abstimmen. Das ist eine Wissenschaft für sich.
6. Modell exportieren
Nachdem das Modell trainiert wurde, besteht der nächste Schritt darin, es in das Format „.tflite“ 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 Ausgabeverzeichnis an.
Hier ist der Code:
model.export(export_dir='/mm_flowers')
Wenn Sie das in Google Colab ausführen, können Sie das Modell sehen, indem Sie links auf dem Bildschirm auf das Ordnersymbol klicken:

Hier wird das aktuelle Verzeichnis angezeigt. Verwenden Sie die angegebene Schaltfläche, um ein Verzeichnis „nach oben“ zu verschieben:

In Ihrem Code haben Sie angegeben, dass die Dateien in das Verzeichnis mm_flowers exportiert werden sollen. Öffnen Sie den Ordner. Dort sehen Sie eine Datei mit dem Namen „model.tflite“. Das ist Ihr trainiertes Modell.

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

Nach kurzer Zeit wird das Modell in den Downloadordner heruntergeladen.
7. Glückwunsch
Jetzt können Sie es in Ihre mobile App einbinden. Das machen Sie im nächsten Lab.