On-Device-Bildklassifizierungsmodell mit AutoML Vision im ML Kit trainieren und bereitstellen

1. Einführung

Dank der jüngsten Fortschritte im Bereich des maschinellen Lernens ist es für Computer relativ einfach, Objekte in Bildern zu erkennen. In diesem Codelab erfahren Sie, wie Sie ein Bildklassifizierungsmodell erstellen, das verschiedene Arten von Objekten erkennen kann, und das Modell dann in einer Android- und einer iOS-App bereitstellen. Mit ML Kit und AutoML können Sie das Modell ohne Fachkenntnisse im Bereich maschinelles Lernen erstellen und bereitstellen.

Was ist ML Kit?

ML Kit ist ein mobiles SDK, mit dem Sie die Technologie für das maschinelle Lernen von Google in einem leistungsstarken und dennoch benutzerfreundlichen Paket einfach auf Android- und iOS-Apps anwenden können. Ganz gleich, ob Sie neu im Bereich des maschinellen Lernens sind oder bereits Erfahrung haben – Sie können die benötigten Funktionen ganz einfach mit nur wenigen Codezeilen implementieren. Es gibt mehrere APIs, die Text, Gesichter usw. erkennen können und die Sie sofort verwenden können. Wenn Sie jedoch Objekte erkennen müssen, die von den APIs nicht unterstützt werden, z. B. verschiedene Arten von Blumen auf einem Bild, müssen Sie Ihr eigenes Modell trainieren. Hier kann AutoML helfen.

Was ist AutoML?

Cloud AutoML ist eine Suite von Produkten für maschinelles Lernen, mit der auch Entwickler mit geringen Kenntnissen über maschinelles Lernen qualitativ hochwertige Modelle trainieren können, die auf ihre jeweiligen Anforderungen zugeschnitten sind. Dazu kommen Googles hochmoderne Technologien für Lerntransfer und Neural Architecture Search zum Einsatz.

In diesem Codelab verwenden wir AutoML Vision Edge im ML Kit, um ein Modell zur Klassifizierung von Blumen zu trainieren. Das Modell wird in der Cloud trainiert, dann aber von der App gebündelt oder heruntergeladen, um Inferenzen vollständig auf dem Gerät auszuführen.

93f21fd287496e4e.png

Lerninhalte

  • Trainieren eines Bildklassifizierungsmodells mit AutoML Vision Edge in ML Kit
  • Wie Sie es in einer Android- oder iOS-Beispiel-App mit dem ML Kit SDK ausführen.

Voraussetzungen

Für die Android-App

  • Eine aktuelle Version von Android Studio (Version 3.4 oder höher)
  • Android Studio-Emulator mit Play Store oder ein physisches Android-Gerät (Version 5.0 oder höher)
  • Grundkenntnisse der Android-Entwicklung in Kotlin

Für die iOS-App

  • Eine aktuelle Version von Xcode (v10.2+)
  • iOS-Simulator oder physisches iOS-Gerät (Version 9.0 oder höher)
  • CocoaPods
  • Grundkenntnisse der iOS-Entwicklung in Swift

2. Einrichtung

Code und Trainings-Dataset herunterladen

Laden Sie ein ZIP-Archiv mit dem Quellcode für dieses Codelab und einem Trainings-Dataset herunter. Extrahieren Sie das Archiv auf Ihrem lokalen Computer.

Firebase Console-Projekt erstellen

  1. Rufen Sie die Firebase Console auf.
  2. Wählen Sie Create New Project (Neues Projekt erstellen) aus und geben Sie dem Projekt den Namen „ML Kit Codelab“.

Android-App einrichten

  1. Fügen Sie dem Firebase-Projekt unsere Android-App hinzu. Android-Paketname: com.google.firebase.codelab.mlkit.automl
  2. Laden Sie die Konfigurationsdatei google-services.json herunter und legen Sie sie in der Android-App unter android/mlkit-automl/app/google-services.json ab.

iOS-App einrichten

  1. Fügen Sie dem Firebase-Projekt unsere iOS-App hinzu. iOS-Bundle-ID: com.google.firebase.codelab.mlkit.automl
  2. Laden Sie die Konfigurationsdatei GoogleService-Info.plist herunter und folgen Sie der Anleitung, um sie in der iOS-App unter ios/mlkit-automl/GoogleService-Info.plist zu platzieren.

3. Trainings-Dataset vorbereiten

Wenn Sie ein Modell trainieren möchten, damit es verschiedene Arten von Objekten erkennt, müssen Sie eine Reihe von Bildern vorbereiten und jedes Bild mit einem Label versehen. Wir haben ein Archiv mit Creative Commons-lizenzierten Blumenfotos erstellt, die Sie in diesem Codelab verwenden können.

Das Dataset ist in einer ZIP-Datei mit dem Namen flower_photos.zip enthalten, die im ZIP-Archiv enthalten ist, das Sie im vorherigen Schritt heruntergeladen haben.

Dataset ansehen

Wenn Sie die Datei flower_photos.zip extrahieren, sehen Sie, dass das Dataset Bilder von fünf Blumenarten enthält: Löwenzahn, Gänseblümchen, Tulpen, Sonnenblumen und Rosen. Die Bilder sind in Ordnern organisiert, die nach den Blumen benannt sind. So können Sie ganz einfach ein Trainings-Dataset erstellen, das Sie in AutoML verwenden und damit ein Bildklassifizierungsmodell trainieren können.

Dieses Trainings-Dataset enthält 200 Bilder für jede Blumenart. Sie benötigen nur mindestens 10 Bilder pro Klasse, um ein Modell zu trainieren. Mehr Trainingsbilder führen jedoch in der Regel zu besseren Modellen.

e5772b6527a6048d.png 6c4443d31cd5653e.png

4. Modell trainieren

Trainings-Dataset hochladen

  1. Öffnen Sie in der Firebase Console das Projekt, das Sie gerade erstellt haben.
  2. Wählen Sie ML Kit > AutoML aus.
  3. Möglicherweise werden einige Begrüßungsbildschirme angezeigt. Wählen Sie gegebenenfalls Jetzt starten aus.
  1. Wenn die Einrichtung abgeschlossen ist, wählen Sie Dataset hinzufügen aus und geben Sie „Blumen“ als Namen ein.
  2. Wählen Sie unter Modellziel die Option Klassifizierung mit einem einzigen Label aus, da die Trainingsdaten nur ein Label pro Bild enthalten.
  3. Wählen Sie Erstellen aus.
  4. Laden Sie die Datei flower_photos.zip hoch, die Sie im vorherigen Schritt heruntergeladen haben, um das Trainings-Dataset für Blumen zu importieren.
  5. Warten Sie einige Minuten, bis der Importvorgang abgeschlossen ist.
  6. Jetzt können Sie prüfen, ob das Dataset korrekt importiert wurde.
  7. Da alle Bilder im Trainings-Dataset mit Labels versehen wurden, können Sie mit dem Training eines Modells fortfahren.

cdb18b61f890934f.png

Klassifizierungsmodell für Bilder trainieren

Da unser Modell auf einem Mobilgerät mit begrenzter Rechenleistung und begrenztem Speicherplatz ausgeführt wird, müssen wir nicht nur auf die Genauigkeit des Modells, sondern auch auf seine Größe und Geschwindigkeit achten. Es gibt immer einen Zielkonflikt zwischen Modellgenauigkeit, Latenz (d. h. wie lange es dauert, ein Bild zu klassifizieren) und Modellgröße. Im Allgemeinen ist ein Modell mit höherer Genauigkeit auch größer und benötigt mehr Zeit, um ein Bild zu klassifizieren.

AutoML bietet Ihnen mehrere Optionen: Sie können die Genauigkeit, die Latenz und die Modellgröße optimieren oder einen Kompromiss zwischen diesen beiden Aspekten eingehen. Sie können auch festlegen, wie lange das Modell trainiert werden soll. Größere Datasets müssen länger trainiert werden.

dd6b7eaa2dd5a9de.png

So trainieren Sie das Modell selbst:

  1. Wählen Sie Modell trainieren aus.
  2. Wählen Sie die Option Für allgemeine Zwecke und eine Trainingszeit von 1 Compute-Stunde aus.
  3. Warten Sie einige Zeit (wahrscheinlich mehrere Stunden), bis der Trainingsvorgang abgeschlossen ist.
  4. Nach Abschluss des Trainings sehen Sie die Bewertungsmesswerte für die Leistung des trainierten Modells.

73f98fbed5ae5ee5.png

5. Modell in mobilen Apps verwenden

Vorbereitung

  • Dieses Codelab enthält sowohl eine Android- als auch eine iOS-Beispiel-App, die zeigt, wie das zuvor trainierte Bildklassifizierungsmodell in einer mobilen App verwendet werden kann. Die beiden Apps haben ähnliche Funktionen. Sie können die Plattform auswählen, mit der Sie besser vertraut sind.
  • Bevor Sie fortfahren, müssen Sie die Beispiel-Apps heruntergeladen und in Schritt 2 konfiguriert haben.
  • Achten Sie außerdem darauf, dass Ihre lokale Umgebung so eingerichtet ist, dass Sie Apps für die von Ihnen ausgewählte Plattform (Android/iOS) erstellen können.

Bildklassifizierungsmodell herunterladen

  • Wenn Sie im vorherigen Schritt ein Modell trainiert haben, wählen Sie Herunterladen aus, um das Modell zu erhalten.
  • Wenn Sie kein Modell trainiert haben oder Ihr Trainingslauf noch nicht abgeschlossen ist, können Sie das Modell verwenden, das in den Beispiel-Apps enthalten ist.

Modell der Beispielanwendung hinzufügen

Sie müssen das Modell nur den Beispiel-Apps hinzufügen und sie funktionieren sofort. Eine vollständige Anleitung zur Integration von ML Kit AutoML in Ihre App finden Sie in unserer Dokumentation ( Android, iOS). Code, der mit dem ML Kit SDK interagiert, befindet sich in der Datei ImageClassifier.kt bzw. ImageClassifier.swift. Sie können also von dort aus untersuchen, wie die Apps funktionieren.

Es gibt zwei Möglichkeiten, das Modell bereitzustellen: lokal und remote.

  • Das lokale Modell wird hauptsächlich verwendet, um das Bildklassifizierungsmodell in Ihrem App-Binärprogramm zu bündeln. Es kann aber auch ein im lokalen Speicher gespeichertes Modell bereitgestellt werden. Durch das Bündeln ist das Modell sofort für Ihre Nutzer verfügbar, nachdem sie Ihre App aus dem App Store oder Play Store heruntergeladen haben. Es funktioniert auch ohne Internetverbindung.
  • Bei einem Remote-Modell wird das Modell auf Firebase gehostet und erst dann auf das Gerät des Nutzers heruntergeladen, wenn es zum ersten Mal benötigt wird. Danach funktioniert das Modell auch offline.

2e71ed2c7cb8757c.png

Android-App

  1. Öffnen Sie Android Studio.
  2. Importieren Sie die Android-App unter android/mlkit-automl/.
  3. Optional: Extrahieren Sie das heruntergeladene Modell und kopieren Sie den Inhalt in das Modell, das in der Beispiel-App enthalten ist. 10cf6b1e0f34de29.png
  4. Klicken Sie nun in der Android Studio-Symbolleiste auf „Ausführen“ (c8b8a080b7ead886.png) und prüfen Sie, ob verschiedene Arten von Blumen erkannt werden.

2e71ed2c7cb8757c.png

iOS-App

  1. Öffnen Sie das Terminal und wechseln Sie zum Ordner ios/mlkit-automl/.
  2. Führen Sie pod install aus, um Abhängigkeiten über Cocoapods herunterzuladen.
  3. Führen Sie open MLVisionExample.xcworkspace/ aus, um den Projektarbeitsbereich in Xcode zu öffnen.
  4. Optional: Extrahieren Sie das heruntergeladene Modell und kopieren Sie den Inhalt in das Modell, das in der Beispiel-App unter ios/ml-automl/Resources/automl/cd291fe04bcdc6ee.png enthalten ist.
  5. Klicken Sie nun in der Xcode-Symbolleiste auf „Ausführen“ (16629f86bbeb4208.png) und prüfen Sie, ob verschiedene Arten von Blumen erkannt werden können.

65172c3f35336d4e.png

6. Optional: Remote-Modell verwenden

Mit dem Remote-Modell von ML Kit können Sie Tensorflow Lite-Modelle nicht in Ihr App-Binärprogramm einbinden, sondern bei Bedarf aus Firebase herunterladen. Remote-Modelle haben gegenüber lokalen Modellen mehrere Vorteile:

  • Kleineres App-Binärprogramm
  • Modelle können aktualisiert werden, ohne dass die App aktualisiert werden muss.
  • A/B-Tests mit mehreren Versionen eines Modells

In diesem Schritt veröffentlichen wir ein Remote-Modell und verwenden es in den Beispiel-Apps. Achten Sie darauf, dass Sie das Training Ihres Modells in Schritt 4 dieses Codelabs abgeschlossen haben.

Modell veröffentlichen

  1. Rufen Sie die Firebase Console auf.
  2. Wählen Sie das Projekt „ML Kit AutoML Codelab“ aus, das Sie zuvor erstellt haben.
  3. Wählen Sie ML Kit > AutoML aus.
  4. Wählen Sie das Dataset „Flowers“ aus, das Sie zuvor erstellt haben.
  5. Prüfen Sie, ob die Trainingsaufgabe abgeschlossen ist, und wählen Sie dann das Modell aus.
  6. Wählen Sie Veröffentlichen aus und geben Sie den Namen „mlkit_flowers“ ein. b63a58b83e814acd.png

Blumen mit dem Remote-Modell erkennen

Die Beispiel-Apps sind so konfiguriert, dass sie das Remote-Modell verwenden, sofern es verfügbar ist. Nachdem Sie das Remote-Modell veröffentlicht haben, müssen Sie die Apps nur noch einmal ausführen, um den Modell-Download auszulösen. Sie können prüfen, ob die App das Remote-Modell verwendet, indem Sie sich den Wert „Quelle“ in der Fußzeile des App-Bildschirms ansehen. Wenn es nicht funktioniert, lesen Sie den Abschnitt „Fehlerbehebung“ unten.

7c8292293fd858ad.png de359886ccecef2.png

Fehlerbehebung

Wenn in der Beispiel-App immer noch das lokale Modell verwendet wird, prüfen Sie, ob der Name des Remote-Modells im Code richtig festgelegt ist.

Android-App

  1. Rufen Sie ImageClassifier.kt auf und suchen Sie nach diesem Block.
val remoteModel = FirebaseRemoteModel.Builder(REMOTE_MODEL_NAME).build()
  1. Prüfen Sie, ob der im Code festgelegte Modellname mit dem Modellnamen übereinstimmt, den Sie zuvor über die Firebase Console veröffentlicht haben.
  2. Klicken Sie nun in der Android Studio-Symbolleiste auf „Ausführen“ (c8b8a080b7ead886.png), um die App noch einmal auszuführen.

iOS-App

  1. Rufen Sie ImageClassifier.swift auf und suchen Sie diesen Block:
return RemoteModel(
  name: Constant.remoteAutoMLModelName,
  allowsModelUpdates: true,
  initialConditions: initialConditions,
  updateConditions: updateConditions
)
  1. Prüfen Sie, ob der im Code festgelegte Modellname mit dem Modellnamen übereinstimmt, den Sie zuvor über die Firebase Console veröffentlicht haben.
  2. Klicken Sie nun in der Xcode-Symbolleiste auf „Ausführen“ (16629f86bbeb4208.png), um die App noch einmal auszuführen.

7. Glückwunsch!

Sie haben ein Bildklassifizierungsmodell mit Ihren eigenen Trainingsdaten mit AutoML trainiert und das Modell dann in einer mobilen App mit ML Kit verwendet.

In unserer Dokumentation erfahren Sie, wie Sie AutoML Vision Edge in ML Kit in Ihre eigene App einbinden.

Sie können auch unsere ML Kit-Beispiel-Apps ausprobieren, um sich andere Funktionen von Firebase ML Kit anzusehen.

Android-Beispiele

iOS-Beispiele