Tutoriel de déploiement d'Edge sur iOS (Core ML)

Objectifs du tutoriel

Dans ce tutoriel, vous allez télécharger un modèle Core ML personnalisé et exporté .mlmodel. Vous exécuterez ensuite une application iOS préconfigurée permettant d'identifier des images de fleurs à l'aide de ce modèle.

image d'application modifiée

Objectifs

Dans ce tutoriel de présentation détaillé, vous allez utiliser du code pour effectuer les opérations suivantes :

  • Exécuter un modèle Core ML pré-entraîné dans une application iOS

Présentation

Le framework Core ML vous permet d'utiliser un modèle de machine learning entraîné pour classer des données d'entrée. Le framework Vision utilise Core ML pour appliquer des modèles de classification à des images et pour prétraiter celles-ci afin de rendre les tâches de machine learning plus simples et plus faibles.

Avant de commencer

Télécharger un modèle Edge général

  1. Téléchargez un dossier contenant un modèle Core ML pré-entraîné. Vous utiliserez ce modèle dans ce tutoriel.

  2. Décompressez le fichier ZIP téléchargé.

  3. Avant de commencer le tutoriel, accédez au répertoire racine du projet :

    cd ClassifyingImagesWithVisionAndCoreML
    Vous exécuterez tous les exemples de code suivants à partir de ce répertoire.

Entraîner et exporter un modèle Edge personnalisé

Avant de continuer, suivez le guide de démarrage rapide des modèles des appareils Edge en appliquant les modifications suivantes :

  • Utilisez l'ensemble de données Flowers fourni ou votre propre ensemble de données.
  • À l'étape Entraîner le modèle, cochez la case d'option Edge.
  • À l'étape Exporter le modèle, suivez les instructions permettant d'exporter un modèle Core ML.

Vous utiliserez le fichier de fleurs Core ML model.mlmodel obtenu pour exécuter une version personnalisée de l'application iOS existante.

Configurer l'application iOS

L'application de démonstration iOS nécessite plusieurs outils supplémentaires :

  1. Xcode
  2. Outils de ligne de commande Xcode

Télécharger Xcode

Utilisez ce lien pour télécharger Xcode sur votre ordinateur.

Installer les outils de ligne de commande Xcode

Exécutez la commande suivante dans la ligne de commande pour installer les outils de ligne de commande Xcode :

xcode-select --install

Ouvrir le projet

Ouvrez le projet avec Xcode. Vous pouvez ouvrir le projet via la ligne de commande ou à l'aide de la console Google Cloud Platform. Pour ouvrir le projet en utilisant la ligne de commande, exécutez la commande suivante :

open ./Vision+ML\ Example.xcodeproj

Exécuter l'application d'origine

Pour lancer l'application dans le simulateur et obtenir des annotations d'image, procédez comme suit :

  1. Pour lancer l'application, sélectionnez le bouton de lecture icône de lecture Xcode dans l'angle supérieur gauche de la fenêtre Xcode.
  2. Fournissez une image de prédiction à l'application. Vous pouvez fournir une image de deux façons :
    • Prendre une photo avec l'appareil photo de l'appareil
    • Ajouter des photos à la photothèque de l'appareil en faisant un glisser-déposer dans la fenêtre du simulateur

L'application affiche les deux premières catégories de classification en fonction du score de confiance attribué par le modèle à chacune d'entre elles.

Le résultat doit afficher des annotations semblables à ce qui suit :

Classifications utilisant l'application générique d'origine : meubles, fruits, plantes

Exécuter l'application personnalisée

L'application d'origine utilise un modèle Core ML qui classe des images dans l'une des 1 000 classes ImageNet génériques (animaux, fruits, meubles, plantes, etc.) à l'aide de la version standard de MobileNet.

Modifiez l'application de sorte qu'elle utilise votre modèle réentraîné avec les catégories d'image de fleurs personnalisées suivantes :

  • Marguerites
  • Pissenlits
  • Roses
  • Tournesols
  • Tulipes

Ajouter les fichiers de modèle au projet

  1. Téléchargez le modèle de fleurs personnalisé (model.mlmodel Core ML exporté) que vous obtenez en suivant le guide de démarrage rapide des modèles des appareils Edge. Les fichiers model.mlmodel et dict.txt issus de l'exportation du modèle Core ML se trouvent dans l'emplacement Google Cloud Storage que vous avez spécifié.

  2. Remplacez le nom du modèle personnalisé par AutoML.mlmodel.

  3. Supprimez le modèle existant du projet (MobileNet.mlmodel).

  4. Ajoutez le modèle personnalisé au projet dans le dossier Vision+ML Example.

    image représentant le glisser-déposer du modèle personnalisé dans Xcode

  5. Modifiez la ligne 30 dans ImageClassificationViewController. Supprimez ce qui suit :

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

    Remplacez cette ligne par :

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

Exécuter votre application de modèle personnalisé

Pour relancer l'application dans le simulateur, sélectionnez le bouton de lecture icône de lecture Xcode dans l'angle supérieur gauche de la fenêtre Xcode.

Pour tester les modifications, ajoutez des fichiers image à partir du répertoire flower_photos/ et obtenez des prédictions.

Les résultats doivent ressembler à ce qui suit :

image d'application modifiée

Pour tester le modèle, vous pouvez ajouter les images des données d'entraînement que vous avez téléchargées précédemment ou effectuer une recherche Google et télécharger les images obtenues afin de les utiliser pour la prédiction.

Fonctionnement

Maintenant que l'application est en cours d'exécution, examinez le code propre à Core ML et au framework Vision.

Configurer Vision avec un modèle Core ML

Core ML génère automatiquement une classe Swift qui permet d'accéder facilement à votre modèle de ML.

Dans cet exemple, Core ML génère automatiquement la classe MobileNet à partir de MobileNetmodel.

  • Obtenez l'instance de modèle avec le code suivant :

    let model = try VNCoreMLModel(for: MobileNet().model)
  • Créez la requête Vision avec le modèle et le gestionnaire d'achèvement ci-dessus. Le gestionnaire d'achèvement traite la réponse de prédiction du modèle.

  • La console Google Cloud Platform doit être mise à jour dans le thread principal :

    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
    }
    

La valeur results sera toujours définie sur VNClassificationObservation, comme spécifié par le modèle Core ML de ce projet.

let classifications = results as! [VNClassificationObservation]
})

Le gestionnaire d'achèvement de la requête Vision indique si celle-ci a réussi ou si elle a généré une erreur. En cas de réussite, sa propriété "results" contient des objets VNClassificationObservation décrivant les classifications possibles identifiées par le modèle de ML.

  1. Un modèle de ML traite les images d'entrée dans un format fixe, mais celles-ci peuvent avoir un format arbitraire. Vision doit donc adapter ou recadrer les images en conséquence. Pour de meilleurs résultats, définissez la propriété imageCropAndScaleOption de la requête de sorte qu'elle corresponde aux options d'image ayant servi pour l'entraînement du modèle.

    request.imageCropAndScaleOption = .centerCrop
  2. Créez le VisionRequestHandler avec l'image d'entrée à l'aide du code suivant :

    let handler = VNImageRequestHandler(ciImage: ciImage, orientation: orientation)
  3. Appelez la fonction "perform" du gestionnaire en transmettant l'objet de la requête.

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

    Ce gestionnaire détecte les erreurs générales de traitement d'image. Le gestionnaire d'achèvement processClassifications(_:error:) de classificationRequest détecte les erreurs propres au traitement de cette requête.

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

Étapes suivantes

Vous avez à présent terminé cette procédure d'utilisation d'un modèle Core ML exporté depuis AutoML Vision Edge pour une application iOS de classification de fleurs. Vous avez utilisé un modèle Core ML entraîné pour tester une application de classification d'images, vous avez modifié cette application, puis vous avez obtenu des exemples d'annotations de fleurs personnalisées. Vous avez ensuite examiné le code propre à Core ML afin d'en comprendre les fonctionnalités sous-jacentes.

Pour continuer à découvrir les modèles Core ML et AutoML Vision Edge, consultez les ressources suivantes :