Créer ML sur iOS



L'intelligence artificielle se rapproche chaque année, hier encore, elle n'était accessible qu'à un nombre limité de personnes. Aujourd'hui, nous pouvons créer nous-mêmes des modèles d'apprentissage automatique et les utiliser dans nos projets. Dans cet article, nous allons présenter les outils Create ML et essayer de former le modèle de classification des images.

Mais avant de commencer, un peu d'histoire et d'explication. Lors de la conférence annuelle des développeurs de la WWDC2018, Apple a présenté les outils permettant de travailler avec l'apprentissage automatique Create ML. Le modèle formé à Create ML est le résultat de l'application d'un algorithme d'apprentissage automatique à un ensemble de données d'apprentissage. Les modèles ne prennent pas beaucoup de place (environ 3 Mo), ils peuvent donc être stockés dans le projet. Initialement, il a été proposé de former des modèles à l'aide de Playgrounds dans Xcode 10 et a pris en charge le travail avec des images, du texte et des tableaux. Lors du lancement des aires de jeux du projet, il était nécessaire d'importer la bibliothèque CreateML et d'exécuter MLImageClassifierBuilder (au cas où nous aurions formé le modèle pour classer les images).

import CreateMLUI

let builder = MLImageClassifierBuilder()
builder.showInLineView()

En 2019, Apple a introduit un tout nouvel outil pour travailler avec des modèles d'apprentissage automatique, le séparant de Playgrounds. Il est devenu possible de former des modèles sans une seule ligne de code. La liste des types de données a été remplie de sons et d'activités. Au total, 5 types de données et 9 modèles de modèles sont présentés. Examinons chaque type de données et les modèles que nous pouvons obtenir en conséquence.

Images


image

Lorsque vous vous entraînez à utiliser des images, deux modèles sont disponibles - Image Classifier (classificateur d'images) et Object Detector (détecteur d'objets).

Le classificateur d'images est utilisé pour classer les images en fonction de leur contenu. Après avoir formé le modèle, nous pouvons identifier un objet dans l'image et l'attribuer à un certain type. Par exemple, pour identifier les animaux dans les images et même distinguer quelle fleur est représentée sur la photo. Dans Create ML, le modèle Image Classifier utilise la formation par transfert . La formation par transfert est la capacité de combiner un modèle pré-formé avec des données utilisateur, ce qui vous permet de former des modèles sur un petit nombre d'images.

Object Detector est un modèle d'apprentissage en profondeur. Vous permet d'identifier plusieurs objets dans l'image, tels que des personnes, des bâtiments, des voitures. Et tout cela en une seule image. Il convient également d'ajouter que lors de la formation des modèles Object Detector, le GPU de l'ordinateur est utilisé.

Des sons


image

Lorsque vous travaillez avec des sons, un seul modèle est disponible pour créer un modèle - Sound Classifier (sound classifier). Sound Classifier est un nouveau modèle et vous permet de déterminer le son le plus dominant dans le flux audio. Par exemple, vous pouvez déterminer quel instrument sonne en audio. Sound Classifier, comme Image Classifier, utilise la formation par transfert.

Activité


image
L'activité est représentée par un seul modèle - Classificateur d'activité. Le classificateur d'activité est un nouveau modèle dans Create ML et est utilisé pour classer les données de mouvement d'un accéléromètre et d'un gyroscope.

Ces modèles sont des modèles d'apprentissage en profondeur et sont formés à l'aide du GPU d'un ordinateur.

Texte


image

Le texte est représenté par deux modèles: Text Classifier (classificateur de texte) et Word Tagger (marqueur de mots).

Le classificateur de texte est utilisé pour identifier des phrases, des paragraphes et même des articles entiers en fonction de leur contenu. Word Tagger est utilisé pour marquer des mots ou reconnaître des noms dans le texte.

les tables


image

Les tableaux sont représentés par trois modèles: Tabular Regressor (table regressor), Tabular Classifier (table classifier) ​​et Recommender (recommender).

Tabular Regressor est un modèle qui peut prédire une valeur numérique basée sur certaines données. Par exemple, vous pouvez former un modèle qui prédira la météo.

Le classificateur tabulaire classe les objets en fonction de leurs caractéristiques. Par exemple, vous pouvez former un modèle pour déterminer la taille des vêtements dans une boutique en ligne en fonction de divers paramètres utilisateur. Un modèle fonctionne avec des types tels que entier, double, chaîne et long si la cible est une valeur discrète.

Recommender vous permet de recommander du contenu en fonction du comportement de l'utilisateur, et tous les calculs sont effectués directement sur l'appareil.

Maintenant que nous nous sommes familiarisés avec tous les modèles disponibles, nous pouvons commencer à créer notre premier modèle d'apprentissage automatique. Commençons par Image Classifier.

Classificateur d'images


Avez-vous regardé la série HBO Silicon Valley? Dans l'une des séries de la quatrième saison, ils ont montré une application qui reconnaît les "hot dogs" et "pas les hot dogs" dans les images. À l'aide du classificateur d'images, vous pouvez créer un analogue de cette application. Mais vous devez d'abord préparer les données pour la formation du modèle. Archive avec des images ici .

Quelques exigences pour la formation du modèle Image Classifier. Les images ne doivent pas être inférieures à 299 x 299 pixels. Les kits de formation doivent contenir au moins 10 images, mais le plus sera le mieux. Nous savons maintenant que lors de la formation Image Classifier, une formation de transfert est utilisée, ce qui vous permet de former des modèles sur un petit nombre d'images. Le nombre d'images pour chaque ensemble doit être égal, sinon il y aura un décalage vers l'une des catégories. Environ 80% des images sont utilisées pour la formation du modèle et les 20% restants pour les tests. De plus, les images ne doivent pas être répétées, c'est-à-dire que dans le dossier contenant les images pour la formation, il ne doit pas y avoir d'images qui seront utilisées ultérieurement pour les tests. Les noms des dossiers de formation seront utilisés comme identifiants pour les classes respectives,lors de l'utilisation de modèles. Mon exemple utilise les noms HotDog ou NotHotDog. Les noms des images elles-mêmes ne jouent aucun rôle, elles peuvent être appelées à votre guise. Je les ai désignés avec des numéros de série.

Maintenant que nos données sont prêtes, nous pouvons commencer à former le modèle. Pour travailler avec Create ML, nous avons besoin de Xcode 11 ou supérieur. J'utiliserai Xcode 11.3.1. Pour exécuter l'outil Create ML, vous devez aller dans Xcode -> Open Developer Tool -> Create ML. Une fenêtre apparaîtra où vous pourrez en sélectionner un existant ou créer un nouveau projet. Sélectionnez Nouveau document. Ensuite, vous devez sélectionner un modèle, dans notre cas, nous utiliserons Image Classifier. Donnez un nom à notre projet, cliquez sur Suivant et sélectionnez l'endroit où le projet sera stocké. Un environnement de travail s'ouvre pour travailler avec le modèle.

image

Comme nous pouvons le voir, il s'agit d'un projet complètement séparé où vous pouvez créer et former plusieurs modèles. Le nom du projet (Projet) est affiché dans l'inspecteur à gauche, en cliquant dessus il affiche des informations sur le projet et vous permet de le modifier. Plus loin, Model Sources contient tous les modèles utilisés dans notre projet. Regardons maintenant la section Entrées de données dans la fenêtre principale de l'outil.

Données d'entraînement - ici, vous devez ajouter des images pour les modèles d'entraînement. Données de validation - ici, vous pouvez ajouter un ensemble d'images pour tester la formation du modèle (dans mon cas, j'ai quitté Auto). Test des données - ici, vous devez ajouter des images pour tester le modèle qui n'ont pas été impliquées dans la formation du modèle.

Dans la section Paramètres, vous pouvez spécifier le nombre maximal d'itérations effectuées sur une seule image pendant l'apprentissage du modèle. Et dans la section Augmentations, vous pouvez sélectionner les effets qui chevauchent les images.

Maintenant que nous nous sommes familiarisés avec Create ML, nous pouvons commencer à former notre premier modèle. Nous glissons simplement le dossier Training Data (le nom peut être n'importe lequel) dans l'onglet Training Data. Maintenant, cliquez sur Train. Le processus d'apprentissage commence.

image

Il m'a donc fallu environ 27 secondes pour m'entraîner et le modèle est presque prêt. Après la formation, vous pouvez évaluer dans quelle mesure le modèle classe les images de l'ensemble de données de formation. Puisque le modèle est formé à ces images, il les classe bien. Dans mon cas, le modèle a identifié toutes les images de l'ensemble d'apprentissage et 97% des images de l'ensemble de test. Le temps des tests est venu.

image

Accédez à l'onglet Test. Comme pour les données d'apprentissage du modèle, faites simplement glisser le dossier Testing Data vers la fenêtre Testing Data. En fait, nous pourrions créer un dossier avec des images pour les tests avant de commencer la formation. Mais pour la linéarité du processus, nous le ferons différemment. Cliquez sur Test Model. Selon les résultats des tests, le modèle a fait face à 98%.

image

En accédant à Sortie, vous pouvez vérifier les performances du modèle sans l'ajouter à votre projet. Pour ce faire, ajoutez des images d'un hot-dog et non d'un hot-dog et vérifiez le résultat. J'ai ajouté une image d'une salade et d'un hot dog et, dans les deux cas, le modèle s'est très bien passé. Bien sûr, les projets sérieux peuvent nécessiter plus de données pour la formation, plus d'itérations, etc. Mais pour un projet de test, cela suffira. Pour enregistrer le modèle, transférez-le simplement de Output vers le dossier souhaité.

image

Maintenant, je suggère d'essayer d'intégrer le modèle dans un projet de test, qui est disponible ici. Un modèle a déjà été ajouté au projet, mais vous pouvez utiliser n'importe quel autre classificateur. Cela ne cassera pas l'application, car les modèles sont interchangeables et vous pouvez utiliser plusieurs modèles dans le projet. Transférez simplement le modèle fini dans le projet.

image

Dans la section Modèle d'apprentissage automatique, vous pouvez trouver des informations sur le modèle. Ces informations peuvent être spécifiées dans le projet d'outil Créer ML. Veuillez noter que le modèle que nous avons formé ne prend que 17 Ko. Plus loin dans la section Model Class, nous sommes avertis qu'une classe Swift sera créée avec le nom MyImageClassifier, je déconseille fortement d'y toucher quoi que ce soit, car cela pourrait affecter l'application. La section Prédiction décrit les paramètres d'entrée et ce que nous obtenons en conséquence. Dans le cas où vous utilisez un modèle que vous n'avez pas enseigné, dans la section Expérimentation, vous pouvez vérifier le modèle, il suffit de transférer l'image.

image

Accédez à la classe ImageClassifierService, ici vous pouvez voir comment le modèle est initialisé.

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

Assez simple, non? Ensuite, vous devez créer, traiter et exécuter une demande de classification.

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)
      }
    }
  }

Il ne reste plus qu'à traiter le résultat.

  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))
    }
  }

Nous pouvons maintenant exécuter l'application et vérifier la précision du modèle.

image

Comme nous pouvons le voir, le modèle se porte bien. Essayons maintenant de montrer à notre modèle une image d'un hot-dog et de voir comment elle s'en sort.

image

Comme nous pouvons le voir, le modèle définit l'image du burger comme «pas un hot-dog». Je propose de confondre un peu le modèle et d'ajouter une image d'un chien en costume de hot dog.

image

Et ici, notre modèle formé fait un excellent travail.

Conclusion


Dans ce court article, nous avons présenté l'outil Create ML. A appris avec quels types il fonctionne et quels modèles l'outil utilise. Ils ont également essayé de former leur modèle. La partie la plus difficile dans la création d'un modèle d'apprentissage automatique consiste à trouver et à préparer des données pour l'apprentissage. Vous ne pouvez pas former de modèles, mais utilisez des modèles déjà formés. Par exemple, il existe déjà des modèles prêts à l'emploi qui fonctionnent avec des images et du texte. Il existe de nombreux modèles personnalisés sur github.
Les images des modèles de formation sont également faciles à trouver, par exemple, les archives de Google . Mais si vous avez besoin de former un modèle pour des tâches étroitement ciblées, vous devez collecter des images et créer vos archives.

All Articles