Erstellen Sie ML unter iOS



Künstliche Intelligenz rückt jedes Jahr näher, erst gestern war sie nur einer begrenzten Anzahl von Menschen zugänglich. Heute können wir selbst Modelle für maschinelles Lernen erstellen und diese in unseren Projekten verwenden. In diesem Artikel werden wir die Tools zum Erstellen von ML vorstellen und versuchen, das Modell für die Klassifizierung von Bildern zu trainieren.

Aber bevor Sie beginnen, ein wenig Geschichte und Erklärung. Auf der jährlichen Konferenz für Entwickler WWDC2018 stellte Apple die Tools für die Arbeit mit maschinellem Lernen vor. Create ML. Das in Create ML trainierte Modell ist das Ergebnis der Anwendung eines Algorithmus für maschinelles Lernen auf einen Satz von Trainingsdaten. Modelle nehmen nicht viel Platz ein (ca. 3 MB), sodass sie im Projekt gespeichert werden können. Ursprünglich wurde vorgeschlagen, Modelle mit Spielplätzen in Xcode 10 zu trainieren und die Arbeit mit Bildern, Text und Tabellen zu unterstützen. Beim Starten der Spielplätze des Projekts musste die CreateML-Bibliothek importiert und MLImageClassifierBuilder ausgeführt werden (falls wir das Modell für die Klassifizierung von Bildern trainiert haben).

import CreateMLUI

let builder = MLImageClassifierBuilder()
builder.showInLineView()

Im Jahr 2019 führte Apple ein völlig neues Tool für die Arbeit mit Modellen für maschinelles Lernen ein, das von den Spielplätzen getrennt wurde. Es wurde möglich, Modelle ohne eine einzige Codezeile zu trainieren. Die Liste der Datentypen wurde mit Sounds und Aktivitäten ergänzt. Insgesamt werden 5 Datentypen und 9 Modellvorlagen vorgestellt. Schauen wir uns jeden Datentyp an und welche Modelle wir als Ergebnis erhalten können.

Bilder


Bild

Beim Training mit Bildern stehen zwei Vorlagen zur Verfügung - Bildklassifizierer (Bildklassifizierer) und Objektdetektor (Objektdetektor).

Der Bildklassifizierer wird verwendet, um Bilder anhand ihres Inhalts zu klassifizieren. Nachdem wir das Modell trainiert haben, können wir ein Objekt im Bild identifizieren und es einem Typ zuordnen. Zum Beispiel, um Tiere in Bildern zu identifizieren und sogar zu unterscheiden, welche Blume auf dem Foto abgebildet ist. In Create ML verwendet die Image Classifier-Vorlage das Übertragungstraining . Transfer-Training ist die Fähigkeit, ein vorab trainiertes Modell mit Benutzerdaten zu kombinieren, wodurch Sie Modelle auf einer kleinen Anzahl von Bildern trainieren können.

Object Detector ist ein Deep-Learning-Modell. Ermöglicht die Identifizierung mehrerer Objekte im Bild, z. B. Personen, Gebäude und Autos. Und das alles auf einem Bild. Es sollte auch hinzugefügt werden, dass beim Trainieren von Object Detector-Modellen die Computer-GPU verwendet wird.

Geräusche


Bild

Bei der Arbeit mit Sounds steht nur eine Vorlage zum Erstellen eines Modells zur Verfügung - Sound Classifier (Sound Classifier). Sound Classifier ist eine neue Vorlage, mit der Sie den dominantesten Sound im Audiostream bestimmen können. Sie können beispielsweise bestimmen, welches Instrument in Audio klingt. Sound Classifier verwendet wie Image Classifier ein Übertragungstraining.

Aktivität


Bild
Aktivität wird nur durch eine Vorlage dargestellt - Aktivitätsklassifizierer. Der Aktivitätsklassifizierer ist eine neue Vorlage in Create ML und wird zum Klassifizieren von Bewegungsdaten von einem Beschleunigungsmesser und einem Gyroskop verwendet.

Solche Modelle sind Deep-Learning-Modelle und werden mit der GPU eines Computers trainiert.

Text


Bild

Der Text wird durch zwei Vorlagen dargestellt: Text Classifier (Text Classifier) ​​und Word Tagger (Word Marker).

Text Classifier wird verwendet, um Sätze, Absätze und sogar ganze Artikel anhand ihres Inhalts zu identifizieren. Word Tagger wird zum Markieren von Wörtern oder zum Erkennen von Namen im Text verwendet.

Tabellen


Bild

Tabellen werden durch drei Vorlagen dargestellt: Tabellarischer Regressor (Tabellenregressor), Tabellarischer Klassifizierer (Tabellenklassifizierer) und Empfehlungsgeber (Empfehlungsgeber).

Tabular Regressor ist ein Modell, das basierend auf einigen Daten einen numerischen Wert vorhersagen kann. Sie können beispielsweise ein Modell trainieren, das das Wetter vorhersagt.

Der tabellarische Klassifikator klassifiziert Objekte anhand ihrer Merkmale. Sie können beispielsweise ein Modell trainieren, um die Größe der Kleidung in einem Online-Shop anhand verschiedener Benutzerparameter zu bestimmen. Ein Modell arbeitet mit Typen wie Integer, Double, String und Long, wenn das Ziel ein diskreter Wert ist.

Mit Recommender können Sie Inhalte basierend auf dem Benutzerverhalten empfehlen, und alle Berechnungen werden direkt auf dem Gerät ausgeführt.

Nachdem wir uns mit allen verfügbaren Vorlagen vertraut gemacht haben, können wir mit der Erstellung unseres ersten Modells für maschinelles Lernen beginnen. Beginnen wir mit Image Classifier.

Bildklassifikator


Haben Sie die HBO Silicon Valley-Serie gesehen? In einer der Serien der vierten Staffel zeigten sie eine Anwendung, die "Hot Dogs" und "Nicht Hot Dogs" in den Bildern erkennt. Mit dem Bildklassifizierer können Sie ein Analogon dieser Anwendung erstellen. Aber zuerst müssen Sie die Daten für das Training des Modells vorbereiten. Archiv mit Bildern hier .

Einige Voraussetzungen für das Training des Image Classifier-Modells. Bilder sollten nicht kleiner als 299 x 299 Pixel sein. Trainingskits müssen mindestens 10 Bilder enthalten, aber je mehr desto besser. Jetzt wissen wir, dass beim Training von Image Classifier ein Übertragungstraining verwendet wird, mit dem Sie Modelle auf einer kleinen Anzahl von Bildern trainieren können. Die Anzahl der Bilder für jeden Satz muss gleich sein, da sonst eine Verschiebung in Richtung einer der Kategorien erfolgt. Ungefähr 80% der Bilder werden zum Trainieren des Modells und die restlichen 20% zum Testen verwendet. Außerdem sollten Bilder nicht wiederholt werden, dh in dem Ordner mit Bildern für das Training sollten keine Bilder vorhanden sein, die zum Testen weiter verwendet werden. Die Namen der Ordner für das Training werden als Bezeichner für die jeweiligen Klassen verwendet.bei der Verwendung von Modellen. In meinem Beispiel werden die Namen HotDog oder NotHotDog verwendet. Die Namen der Bilder selbst spielen keine Rolle, sie können nach Belieben aufgerufen werden. Ich habe sie mit Seriennummern versehen.

Nachdem unsere Daten fertig sind, können wir mit dem Training des Modells beginnen. Um mit Create ML arbeiten zu können, benötigen wir Xcode 11 oder höher. Ich werde Xcode 11.3.1 verwenden. Um das Tool "ML erstellen" auszuführen, müssen Sie zu Xcode -> Entwickler-Tool öffnen -> ML erstellen gehen. Es erscheint ein Fenster, in dem Sie ein vorhandenes auswählen oder ein neues Projekt erstellen können. Wählen Sie Neues Dokument. Als nächstes müssen Sie eine Vorlage auswählen. In unserem Fall verwenden wir den Image Classifier. Geben Sie unserem Projekt einen Namen, klicken Sie auf Weiter und wählen Sie den Ort aus, an dem das Projekt gespeichert werden soll. Für die Arbeit mit dem Modell wird eine Arbeitsumgebung geöffnet.

Bild

Wie wir sehen können, ist dies ein völlig separates Projekt, in dem Sie mehrere Modelle erstellen und trainieren können. Der Name des Projekts (Projekt) wird links im Inspektor angezeigt. Wenn Sie darauf klicken, werden Informationen zum Projekt angezeigt und Sie können es bearbeiten. Weiter unten enthält Model Sources alle in unserem Projekt verwendeten Modelle. Schauen wir uns nun den Abschnitt Dateneingaben im Hauptwerkzeugfenster an.

Trainingsdaten - hier müssen Sie Bilder für Trainingsmodelle hinzufügen. Validierungsdaten - Hier können Sie eine Reihe von Bildern hinzufügen, um das Modelltraining zu testen (in meinem Fall habe ich Auto verlassen). Testen von Daten - Hier müssen Sie Bilder zum Testen des Modells hinzufügen, die nicht am Training des Modells beteiligt waren.

Im Abschnitt Parameter können Sie die maximale Anzahl von Iterationen angeben, die während des Modelltrainings an einem einzelnen Bild ausgeführt werden. Im Abschnitt "Erweiterungen" können Sie die Effekte auswählen, die die Bilder überlappen.

Nachdem wir Create ML kennengelernt haben, können wir mit dem Training unseres ersten Modells beginnen. Wir ziehen einfach den Ordner Trainingsdaten (der Name kann ein beliebiger sein) auf die Registerkarte Trainingsdaten. Klicken Sie nun auf Zug. Der Lernprozess beginnt.

Bild

Ich habe also ungefähr 27 Sekunden gebraucht, um zu trainieren, und das Modell ist fast fertig. Nach dem Training können Sie bewerten, wie gut das Modell Bilder aus dem Trainingsdatensatz klassifiziert. Da das Modell in diesen Bildern trainiert ist, klassifiziert es sie gut. In meinem Fall identifizierte das Modell alle Bilder aus dem Trainingssatz und 97% der Bilder aus dem Testsatz. Die Testzeit ist gekommen.

Bild

Gehen Sie zur Registerkarte Testen. Wie bei den Daten zum Trainieren des Modells ziehen Sie einfach den Ordner Testdaten in das Fenster Testdaten. Tatsächlich könnten wir vor Beginn des Trainings einen Ordner mit Bildern zum Testen einrichten. Aber für die Linearität des Prozesses werden wir es anders machen. Klicken Sie auf Modell testen. Nach den Testergebnissen kam das Modell zu 98% zurecht.

Bild

Wenn Sie zu Ausgabe gehen, können Sie die Leistung des Modells überprüfen, ohne es Ihrem Projekt hinzuzufügen. Fügen Sie dazu Bilder eines Hotdogs und nicht eines Hotdogs hinzu und überprüfen Sie das Ergebnis. Ich habe ein Bild von einem Salat und einem Hot Dog hinzugefügt, und in beiden Fällen hat das Modell gut funktioniert. Natürlich erfordern ernsthafte Projekte möglicherweise mehr Daten für Schulungen, mehr Iterationen usw. Für ein Testprojekt reicht dies jedoch aus. Um das Modell zu speichern, übertragen Sie es einfach von der Ausgabe in den gewünschten Ordner.

Bild

Jetzt schlage ich vor, das Modell in ein Testprojekt zu integrieren, das hier verfügbar ist. Dem Projekt wurde bereits ein Modell hinzugefügt, Sie können jedoch jeden anderen Klassifikator verwenden. Dadurch wird die Anwendung nicht beschädigt, da die Modelle austauschbar sind und Sie mehrere Modelle im Projekt verwenden können. Übertragen Sie einfach das fertige Modell in das Projekt.

Bild

Im Abschnitt Modell des maschinellen Lernens finden Sie Informationen zum Modell. Diese Informationen können im Werkzeugprojekt ML erstellen angegeben werden. Bitte beachten Sie, dass das von uns trainierte Modell nur 17 KB benötigt. Weiter im Abschnitt Modellklasse werden wir gewarnt, dass eine Swift-Klasse mit dem Namen MyImageClassifier erstellt wird. Ich empfehle dringend, dort nichts zu berühren, da dies die Anwendung beeinträchtigen kann. Der Abschnitt Vorhersage beschreibt die Eingabeparameter und was wir als Ergebnis erhalten. Wenn Sie ein Modell verwenden, das Sie nicht unterrichtet haben, können Sie im Abschnitt "Experimentieren" das Modell überprüfen. Übertragen Sie einfach das Bild.

Bild

Wechseln Sie zur ImageClassifierService-Klasse. Hier können Sie sehen, wie das Modell initialisiert wird.

private func makeImageClassifierModel() -> VNCoreMLModel? {
  return try? VNCoreMLModel(for: MyImageClassifier().model)
}

Einfach genug, oder? Als Nächstes müssen Sie eine Klassifizierungsanforderung erstellen, verarbeiten und ausführen.

private func makeClassifierRequest(for model: VNCoreMLModel, ciImage: CIImage) {
    let request = VNCoreMLRequest(model: model) { [weak self] request, error in
      self?.handleClassifierResults(request.results)
    }
    
    let handler = VNImageRequestHandler(ciImage: ciImage)
    DispatchQueue.global(qos: .userInteractive).async {
      do {
        try handler.perform([request])
      } catch {
        self.onDidUpdateState?(.requestFailed)
      }
    }
  }

Es bleibt nur das Ergebnis zu verarbeiten.

  private func handleClassifierResults(_ results: [Any]?) {
    guard let results = results as? [VNClassificationObservation],
      let firstResult = results.first else {
      onDidUpdateState?(.requestFailed)
      return
    }
    
    DispatchQueue.main.async { [weak self] in
      let confidence = (firstResult.confidence * 100).rounded()
      let resultModel = ClassifierResultModel(identifier: firstResult.identifier, confidence: Int(confidence))
      self?.onDidUpdateState?(.receiveResult(resultModel: resultModel))
    }
  }

Jetzt können wir die Anwendung ausführen und die Genauigkeit des Modells überprüfen.

Bild

Wie wir sehen können, läuft das Modell gut. Versuchen wir nun, unserem Modell ein Bild von keinem Hot Dog zu zeigen und zu sehen, wie sie damit umgeht.

Bild

Wie wir sehen können, definiert das Modell das Burger-Image als „kein Hot Dog“. Ich schlage vor, das Modell ein wenig zu verwirren und ein Bild eines Hundes in einem Hot-Dog-Kostüm hinzuzufügen.

Bild

Und hier leistet unser geschultes Modell hervorragende Arbeit.

Fazit


In diesem kurzen Artikel haben wir das Tool "ML erstellen" vorgestellt. Erfahren Sie, mit welchen Typen es funktioniert und welche Muster das Tool verwendet. Sie versuchten auch, ihr Modell zu trainieren. Der schwierigste Teil bei der Erstellung eines maschinellen Lernmodells besteht darin, Daten für das Lernen zu finden und vorzubereiten. Sie können keine Modelle trainieren, sondern bereits trainierte verwenden. Beispielsweise gibt es bereits vorgefertigte Modelle, die mit Bildern und Text arbeiten. Es gibt viele benutzerdefinierte Modelle auf Github.
Bilder für Trainingsmodelle sind auch leicht zu finden, beispielsweise Archive von Google . Wenn Sie jedoch ein Modell für eng zielgerichtete Aufgaben trainieren müssen, müssen Sie Bilder sammeln und Ihre Archive erstellen.

All Articles