Anleitung: Edge für iOS (Core ML) bereitstellen

Umfang

In dieser Anleitung werden Sie ein exportiertes benutzerdefiniertes Core ML-Modell herunterladen (.mlmodel). Anschließend führen Sie eine vorab entwickelte iOS-App aus, die anhand des Modells Bilder von Blumen identifiziert.

Bild der geänderten App

Ziele

In dieser umfassenden Schritt-für-Schritt-Anleitung für den Einstieg verwenden Sie Code für die folgende Aufgabe:

  • Vortrainiertes Core ML-Modell in einer iOS-App ausführen.

Überblick

Mit dem Framework Core ML können Sie ein trainiertes Modell für maschinelles Lernen verwenden, um Eingabedaten zu klassifizieren. Das Vision-Framework arbeitet mit Core ML, um Klassifikationsmodelle auf Bilder anzuwenden und diese Bilder vorzuverarbeiten. Das Ziel ist dabei, dass das ML seine Aufgaben einfacher und zuverlässiger ausführen kann.

Hinweis

Allgemeines Edge-Modell herunterladen

  1. Laden Sie einen Ordner herunter, der ein vortrainiertes Core ML-Modell enthält. Sie werden dieses Modell in dieser Anleitung verwenden.

  2. Entpacken Sie die heruntergeladene ZIP-Datei.

  3. Bevor Sie mit der Anleitung beginnen, wechseln Sie zum Stammverzeichnis des Projekts:

    cd ClassifyingImagesWithVisionAndCoreML
    Aus diesem Verzeichnis führen Sie alle folgenden Codebeispiele aus.

Benutzerdefiniertes Edge-Modell trainieren und exportieren

Bevor Sie fortfahren, schließen Sie die Kurzanleitung für Edge-Gerätemodelle mit den folgenden Änderungen ab:

  • Wählen Sie im Schritt Modell trainieren die Option Modell für Core ML formatieren aus.
  • Folgen Sie im Schritt Edge-Modell exportieren und bereitstellen den Anleitungen für den Export eines Core ML-Modells.
  • Verwenden Sie das bereitgestellte Blumen-Dataset oder Ihr eigenes Dataset.

Sie verwenden die resultierende Core ML-Blumendatei model.mlmodel, um eine angepasste Version der bestehenden iOS-App auszuführen.

iOS-App einrichten

Für die Demo-iOS-App sind mehrere zusätzliche Tools erforderlich:

  1. Xcode
  2. Xcode-Befehlszeilentools

Xcode herunterladen

Verwenden Sie diesen Link, um Xcode auf Ihrem Computer herunterzuladen.

Xcode-Befehlszeilentools installieren

Installieren Sie die Xcode-Befehlszeilentools mit dem folgenden Befehl in der Befehlszeile:

xcode-select --install

Projekt öffnen

Öffnen Sie das Projekt mit Xcode. Sie können das Projekt entweder über die Befehlszeile oder über die Benutzeroberfläche öffnen. Führen Sie den folgenden Befehl aus, um das Projekt über die Befehlszeile zu öffnen:

open ./Vision+ML\ Example.xcodeproj

Ursprüngliche App ausführen

Führen Sie die folgenden Schritte aus, um die App im Simulator zu starten und Bildanmerkungen zu erhalten:

  1. Klicken Sie in der linken oberen Ecke des Xcode-Fensters auf die Schaltfläche Play Xcode-Wiedergabesymbol, um die App zu starten.
  2. Stellen Sie der App ein Vorhersagebild bereit. Hierfür haben Sie zwei Möglichkeiten:
    • Machen Sie ein Bild mit der Kamera des Geräts oder
    • fügen Sie Fotos zur Fotogalerie des Geräts hinzu. Dazu ziehen Sie die Fotos per Drag-and-drop in das Simulator-Fenster.

In der App werden die beiden wichtigsten Klassifizierungskategorien in der Reihenfolge des Konfidenzwerts angezeigt, der vom Modell jeweils zugewiesen wird.

Das Ergebnis sollte Anmerkungen wie auf den folgenden Bildern enthalten:

Klassifizierungen mit der generischen ursprünglichen App: Möbel, Obst, Pflanzen

Angepasste App ausführen

Die ursprüngliche App verwendet ein Core ML-Modell, mit dem Bilder in eine der 1.000 generischen ImageNet-Klassen eingeteilt werden (Tier, Obst, Möbel, Pflanze usw.).

Ändern Sie die App so, dass sie das neu trainierte Modell mit den folgenden benutzerdefinierten Bildkategorien für Blumen verwendet:

  • Gänseblümchen
  • Löwenzahn
  • Rosen
  • Sonnenblumen
  • Tulpen

Modelldateien zum Projekt hinzufügen

  1. Laden Sie Ihr benutzerdefiniertes Blumenmodell herunter (exportierte Core ML-Datei model.mlmodel), das Sie nach Abschluss der Kurzanleitung für Edge-Gerätemodelle erhalten. Die Dateien model.mlmodel und dict.txt aus dem Core ML-Modellexport befinden sich an dem von Ihnen angegebenen Google Cloud Storage-Speicherort.

  2. Benennen Sie Ihr benutzerdefiniertes Modell in AutoML.mlmodel um.

  3. Löschen Sie das vorhandene Modell aus dem Projekt (MobileNet.mlmodel).

  4. Fügen Sie das benutzerdefinierte Modell dem Projekt im Ordner Vision+ML Example hinzu.

    Benutzerdefiniertes Modell in das Xcode-Bild ziehen

  5. Ändern Sie Zeile 30 in ImageClassificationViewController. Entfernen Sie folgende Zeile:

    let model = try VNCoreMLModel(for: MobileNet().model)

    Ersetzen Sie diese Zeile durch:

    let model = try VNCoreMLModel(for: AutoML().model)

Benutzerdefinierte Modell-App ausführen

Wählen Sie für einen Neustart der App im Simulator links oben im Xcode-Fenster die Schaltfläche Play Xcode-Wiedergabesymbol aus.

Fügen Sie zum Testen der Änderungen die Bilddateien aus dem Verzeichnis flower_photos/ hinzu und rufen Sie Vorhersagen ab.

Die Ergebnisse sollten in etwa so aussehen:

Bild der geänderten App

Beachten Sie, dass die Standardbilder keine Blumen zeigen.

Fügen Sie zum Testen des Modells die zuvor heruntergeladenen Trainingsdatenbilder hinzu oder laden Sie Bilder aus einer Google-Suche herunter, um Vorhersagen zu treffen.

Funktionsweise

Nachdem Sie die App ausgeführt haben, können Sie sich den spezifischen Code von Core ML und Vision Framework ansehen.

Vision mit einem Core ML-Modell einrichten

Core ML generiert automatisch eine Swift-Klasse, die einfachen Zugriff auf Ihr ML-Modell ermöglicht.

In diesem Beispiel generiert Core ML automatisch die MobileNet-Klasse aus dem MobileNetmodel.

  • Rufen Sie die Modellinstanz mit dem folgenden Code ab:

    let model = try VNCoreMLModel(for: MobileNet().model)
  • Erstellen Sie die Vision-Anfrage mit dem obigen Modell und dem Abschluss-Handler. Der Abschluss-Handler verarbeitet die Vorhersageantwort des Modells.

  • Die Benutzeroberfläche sollte im Hauptthread aktualisiert werden:

    let request = VNCoreMLRequest(model: model, completionHandler: { [weak self] request, error in
    DispatchQueue.main.async {
    guard let results = request.results else {
    self.classificationLabel.text = "Unable to classify image.\n\(error!.localizedDescription)"
    return
    }
    

results ist immer in VNClassificationObservation, wie durch das Core ML-Modell in diesem Projekt festgelegt.

let classifications = results as! [VNClassificationObservation]
})

Der Abschluss-Handler der Vision-Anfrage gibt an, ob die Anfrage erfolgreich war oder zu einem Fehler geführt hat. Wenn sie erfolgreich war, enthält das results-Attribut VNClassificationObservation-Objekte, die mögliche durch das ML-Modell identifizierte Klassifizierungen beschreiben.

  1. Ein ML-Modell verarbeitet Eingabebilder in einem festen Seitenverhältnis. Eingabebilder können jedoch ein beliebiges Seitenverhältnis haben, weshalb das Bild von Vision skaliert oder zugeschnitten werden muss. Die besten Ergebnisse erzielen Sie, wenn Sie das Attribut imageCropAndScaleOption der Anfrage an das Bildlayout anpassen, mit dem das Modell trainiert wurde.

    request.imageCropAndScaleOption = .centerCrop
  2. Erstellen Sie mithilfe des folgenden Codes den VisionRequestHandler mit dem Eingabebild:

    let handler = VNImageRequestHandler(ciImage: ciImage, orientation: orientation)
  3. Rufen Sie die perform-Funktion des Handlers auf, indem Sie das Anfrageobjekt übergeben.

    do {
    try handler.perform([self.classificationRequest])
    } catch {

    Mit diesem Handler werden allgemeine Bildverarbeitungsfehler abgefangen. Mit dem Abschluss-Handler classificationRequest der processClassifications(_:error:) werden Fehler abgefangen, die für die Verarbeitung dieser Anfrage spezifisch sind.

    print("Failed to perform classification.\n\(error.localizedDescription)")
    }

Weitere Informationen

Sie haben nun die Anleitung für eine iOS-App zur Klassifizierung von Blumen mit einem aus AutoML Vision Edge exportierten Core ML-Modell durchgearbeitet. Sie haben mithilfe eines trainiertes Core ML-Modells eine allgemeine App zur Bildklassifizierung getestet, bevor Sie daran Änderungen vorgenommen und benutzerdefinierte Beispielannotationen von Blumen erhalten haben. Anschließend haben Sie Core ML-spezifischen Code untersucht, um die zugrunde liegenden Funktionen zu verstehen.

Die folgenden Ressourcen helfen Ihnen, sich weiter mit Core ML-Modellen und AutoML Vision Edge vertraut zu machen:

  • Weitere Informationen zu Core ML erhalten Sie in der offiziellen Dokumentation und im Code-Repository.
  • Testen Sie die Kameraversion dieser Demo-App, die eine quantisierte Version des Modells verwendet. Dies bietet die gleiche Leistung in einem kleineren, effizienteren Paket.
  • Testen Sie andere TFLite-fähige Modelle, einschließlich eines Hot-Word-Detektors für die Sprachausgabe und einer Version für intelligente Antworten auf dem Gerät.