Tutoriel : Effectuer une inférence de classification d'images d'échantillons à l'aide TensorFlow de Lite - AWS IoT Greengrass

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Tutoriel : Effectuer une inférence de classification d'images d'échantillons à l'aide TensorFlow de Lite

Ce didacticiel explique comment utiliser le composant d'inférence de classification d'images TensorFlow Lite pour effectuer une inférence de classification d'images par exemple sur un appareil Greengrass Core. Ce composant inclut les dépendances suivantes :

  • TensorFlow Composant de magasin de modèles de classification d'images Lite

  • TensorFlow Composant d'exécution Lite

Lorsque vous déployez ce composant, il télécharge un modèle MobileNet v1 préentraîné et installe le runtime TensorFlow Lite et ses dépendances. Ce composant publie les résultats d'inférence sur le ml/tflite/image-classification sujet. Pour consulter ces résultats d'inférence, utilisez le client AWS IoT MQTT de la AWS IoT console pour vous abonner à cette rubrique.

Dans ce didacticiel, vous déployez le composant d'inférence d'échantillons pour effectuer une classification d'image sur l'exemple d'image fourni parAWS IoT Greengrass. Après avoir terminé ce didacticiel, vous pouvez le terminerTutoriel : effectuer une inférence de classification d'images d'échantillons sur des images provenant d'un appareil photo à l'aide TensorFlow de Lite, qui vous montre comment modifier le composant d'inférence d'échantillons pour effectuer une classification d'images sur des images provenant d'une caméra localement sur un périphérique principal Greengrass.

Pour plus d'informations sur l'apprentissage automatique sur les appareils Greengrass, consultez. Exécuter l'inférence de Machine Learning

Prérequis

Pour suivre ce didacticiel, vous aurez besoin des éléments suivants :

  • Un appareil principal de Linux Greengrass. Si vous n'en avez pas, veuillez consulter Didacticiel : Commencer avec AWS IoT Greengrass V2. Le périphérique principal doit répondre aux exigences suivantes :

    • Sur les appareils principaux de Greengrass exécutant Amazon Linux 2 ou Ubuntu 18.04, la version 2.27 ou ultérieure de la bibliothèque GNU C (glibc) est installée sur l'appareil.

    • Sur les appareils ARMv7L, tels que le Raspberry Pi, les dépendances pour OpenCV-Python sont installées sur l'appareil. Exécutez la commande suivante pour installer les dépendances.

      sudo apt-get install libopenjp2-7 libilmbase23 libopenexr-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libgtk-3-0 libwebp-dev
    • Les appareils Raspberry Pi qui exécutent le système d'exploitation Raspberry Pi Bullseye doivent répondre aux exigences suivantes :

      • NumPy 1.22.4 ou version ultérieure installée sur l'appareil. Raspberry Pi OS Bullseye inclut une version antérieure de NumPy. Vous pouvez donc exécuter la commande suivante pour effectuer la mise à niveau NumPy sur l'appareil.

        pip3 install --upgrade numpy
      • L'ancienne pile de caméras activée sur l'appareil. Raspberry Pi OS Bullseye inclut une nouvelle pile de caméras qui est activée par défaut et qui n'est pas compatible. Vous devez donc activer la pile de caméras existante.

        Pour activer l'ancienne pile de caméras
        1. Exécutez la commande suivante pour ouvrir l'outil de configuration du Raspberry Pi.

          sudo raspi-config
        2. Sélectionnez Options d'interface.

        3. Sélectionnez Legacy camera pour activer l'ancienne pile de caméras.

        4. Redémarrez l'appareil Raspberry Pi.

Étape 1 : Abonnez-vous à la rubrique de notifications par défaut

Au cours de cette étape, vous configurez le client AWS IoT MQTT dans la AWS IoT console pour qu'il regarde les messages MQTT publiés par le composant de classification d'images TensorFlow Lite. Par défaut, le composant publie les résultats d'inférence sur le ml/tflite/image-classification sujet. Abonnez-vous à cette rubrique avant de déployer le composant sur votre appareil principal Greengrass pour voir les résultats de l'inférence lorsque le composant s'exécute pour la première fois.

Pour vous abonner à la rubrique de notifications par défaut
  1. Dans le menu de navigation de la AWS IoTconsole, choisissez Test, client de test MQTT.

  2. Sous S'abonner à un sujet, dans le champ Nom du sujet, entrezml/tflite/image-classification.

  3. Choisissez Souscrire.

Étape 2 : Déploiement du composant de classification d'images TensorFlow Lite

Au cours de cette étape, vous déployez le composant de classification d'images TensorFlow Lite sur votre appareil principal :

  1. Dans le menu de navigation de la AWS IoT Greengrassconsole, sélectionnez Composants.

  2. Sur la page Components (Composants), sous l'onglet Public components (Composants publics), choisissez aws.greengrass.TensorFlowLiteImageClassification.

  3. Sur la page aws.greengrass.TensorFlowLiteImageClassification, choisissez Deploy (Déployer).

  4. Dans Ajouter au déploiement, sélectionnez l'une des options suivantes :

    1. Pour fusionner ce composant avec un déploiement existant sur votre dispositif cible, choisissez Add to existing deployment (Ajouter à un déploiement existant), puis sélectionnez le déploiement à réviser.

    2. Pour créer un nouveau déploiement sur votre dispositif cible, choisissez Create new deployment (Créer un déploiement). S'il existe un déploiement sur votre dispositif et que vous choisissez cette étape, le déploiement existant sera remplacé.

  5. Sur la page Specify target (Spécifier une cible), procédez comme suit :

    1. Sous Deployment information (Informations sur le déploiement), saisissez ou modifiez le nom convivial de votre déploiement.

    2. Sous Deployment targets (Cibles de déploiement), sélectionnez une cible pour votre déploiement, puis choisissez Next (Suivant). Vous ne pouvez pas modifier la cible de déploiement si vous révisez un déploiement existant.

  6. Sur la page Sélectionner les composants, sous Composants publics, vérifiez que le aws.greengrass.TensorFlowLiteImageClassification composant est sélectionné, puis choisissez Next.

  7. Sur la page Configurer les composants, conservez les paramètres de configuration par défaut et choisissez Next.

  8. Sur la page Configure advanced settings (Configurer les paramètres avancés), conservez les paramètres de configuration par défaut et choisissez Next (Suivant).

  9. Sur la page de révision, choisissez Déployer

  1. Créez un deployment.json fichier pour définir la configuration de déploiement du composant de classification d'images TensorFlow Lite. Ce fichier doit ressembler à ce qui suit :

    { "targetArn":"targetArn", "components": { "aws.greengrass.TensorFlowLiteImageClassification": { "componentVersion": 2.1.0, "configurationUpdate": { } } } }
    • Dans le champ targetArn, remplacez targetArn par l'Amazon Resource Name (ARN) de l'objet ou du groupe d'objets à cibler pour le déploiement, au format suivant :

      • Objet : arn:aws:iot:region:account-id:thing/thingName

      • Groupe d'objets : arn:aws:iot:region:account-id:thinggroup/thingGroupName

    • Ce didacticiel utilise la version 2.1.0 du composant. Dans l'objet aws.greengrass.TensorFlowLiteObjectDetection composant, remplacez 2.1.0 pour utiliser une version différente du composant de détection d'objets TensorFlow Lite.

  2. Exécutez la commande suivante pour déployer le composant de classification d'images TensorFlow Lite sur le périphérique :

    aws greengrassv2 create-deployment \ --cli-input-json file://path/to/deployment.json

L'exécution du déploiement peut prendre plusieurs minutes. À l'étape suivante, vérifiez le journal des composants pour vous assurer que le déploiement s'est terminé avec succès et afficher les résultats des inférences.

Étape 3 : Afficher les résultats de l'inférence

Après avoir déployé le composant, vous pouvez consulter les résultats de l'inférence dans le journal du composant sur votre périphérique principal Greengrass et dans AWS IoT le client MQTT de la console. AWS IoT Pour vous abonner à la rubrique sur laquelle le composant publie les résultats d'inférence, consultezÉtape 1 : Abonnez-vous à la rubrique de notifications par défaut.

  • AWS IoTClient MQTT : pour afficher les résultats publiés par le composant d'inférence dans la rubrique des notifications par défaut, procédez comme suit :

    1. Dans le menu de navigation de la AWS IoTconsole, choisissez Test, client de test MQTT.

    2. Sous Abonnements, sélectionnezml/tflite/image-classification.

      Vous devriez voir des messages similaires à ceux de l'exemple suivant.

      { "timestamp": "2021-01-01 00:00:00.000000", "inference-type": "image-classification", "inference-description": "Top 5 predictions with score 0.3 or above ", "inference-results": [ { "Label": "cougar, puma, catamount, mountain lion, painter, panther, Felis concolor", "Score": "0.5882352941176471" }, { "Label": "Persian cat", "Score": "0.5882352941176471" }, { "Label": "tiger cat", "Score": "0.5882352941176471" }, { "Label": "dalmatian, coach dog, carriage dog", "Score": "0.5607843137254902" }, { "Label": "malamute, malemute, Alaskan malamute", "Score": "0.5450980392156862" } ] }
  • Journal des composants : pour afficher les résultats de l'inférence dans le journal des composants, exécutez la commande suivante sur votre appareil principal Greengrass.

    sudo tail -f /greengrass/v2/logs/aws.greengrass.TensorFlowLiteImageClassification.log

    Vous devriez obtenir des résultats similaires à ceux de l'exemple suivant.

    2021-01-01 00:00:00.000000 [INFO] (Copier) aws.greengrass.TensorFlowLiteImageClassification: stdout. Publishing results to the IoT core.... {scriptName=services.aws.greengrass.TensorFlowLiteImageClassification.lifecycle.Run.script, serviceName=aws.greengrass.TensorFlowLiteImageClassification, currentState=RUNNING} 2021-01-01 00:00:00.000000 [INFO] (Copier) aws.greengrass.TensorFlowLiteImageClassification: stdout. {"timestamp": "2021-01-01 00:00:00.000000", "inference-type": "image-classification", "inference-description": "Top 5 predictions with score 0.3 or above ", "inference-results": [{"Label": "cougar, puma, catamount, mountain lion, painter, panther, Felis concolor", "Score": "0.5882352941176471"}, {"Label": "Persian cat", "Score": "0.5882352941176471"}, {"Label": "tiger cat", "Score": "0.5882352941176471"}, {"Label": "dalmatian, coach dog, carriage dog", "Score": "0.5607843137254902"}, {"Label": "malamute, malemute, Alaskan malamute", "Score": "0.5450980392156862"}]}. {scriptName=services.aws.greengrass.TensorFlowLiteImageClassification.lifecycle.Run.script, serviceName=aws.greengrass.TensorFlowLiteImageClassification, currentState=RUNNING}

Si vous ne pouvez pas voir les résultats d'inférence dans le journal des composants ou dans le client MQTT, cela signifie que le déploiement a échoué ou n'a pas atteint le périphérique principal. Cela peut se produire si votre appareil principal n'est pas connecté à Internet ou ne dispose pas des autorisations nécessaires pour exécuter le composant. Exécutez la commande suivante sur votre appareil principal pour afficher le fichier journal du logiciel AWS IoT Greengrass Core. Ce fichier inclut les journaux du service de déploiement de l'appareil principal Greengrass.

sudo tail -f /greengrass/v2/logs/greengrass.log

Pour plus d’informations, consultez Résolution des problèmes liés à l'inférence par apprentissage automatique.

Étapes suivantes

Si vous disposez d'un périphérique principal Greengrass doté d'une interface de caméra compatible, vous pouvez terminerTutoriel : effectuer une inférence de classification d'images d'échantillons sur des images provenant d'un appareil photo à l'aide TensorFlow de Lite, qui vous montre comment modifier le composant d'inférence d'échantillons pour effectuer une classification d'images sur des images provenant d'une caméra.

Pour explorer plus en détail la configuration de l'exemple de composant d'inférence de classification d'images TensorFlow Lite, essayez ce qui suit :

  • Modifiez le paramètre InferenceInterval de configuration pour modifier la fréquence d'exécution du code d'inférence.

  • Modifiez les paramètres ImageDirectory de configuration ImageName et dans la configuration du composant d'inférence pour spécifier une image personnalisée à utiliser pour l'inférence.

Pour plus d'informations sur la personnalisation de la configuration des composants publics ou la création de composants d'apprentissage automatique personnalisés, consultezPersonnalisez vos composants d'apprentissage automatique.