Connecteur de détection d'objets ML - AWS IoT Greengrass

AWS IoT Greengrass Version 1 est entré dans la phase de durée de vie prolongée le 30 juin 2023. Pour plus d'informations, consultez la politique de AWS IoT Greengrass V1 maintenance. Après cette date, AWS IoT Greengrass V1 ne publiera pas de mises à jour fournissant des fonctionnalités, des améliorations, des corrections de bogues ou des correctifs de sécurité. Les appareils qui fonctionnent AWS IoT Greengrass V1 sous tension ne seront pas perturbés et continueront à fonctionner et à se connecter au cloud. Nous vous recommandons vivement de migrer vers AWS IoT Greengrass Version 2, qui ajoute de nouvelles fonctionnalités importantes et prend en charge des plateformes supplémentaires.

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.

Connecteur de détection d'objets ML

Avertissement

Ce connecteur a été déplacé dans lePhase de vie prolongée, etAWS IoT Greengrassne publiera pas de mises à jour fournissant des fonctionnalités, des améliorations aux fonctionnalités existantes, des correctifs de sécurité ou des corrections de bugs. Pour plus d'informations, consultez AWS IoT Greengrass Version 1politique de maintenance.

Détection d'objets MLconnecteursfournit un service d'inférence de Machine Learning (ML) qui s'exécute surAWS IoT GreengrassCore. Ce service d'inférence local effectue la détection d'objets à l'aide d'un modèle de détection d'objets compilé par le SageMaker Compilateur Neo deep learning. Deux types de modèles de détection d'objets sont pris en charge : Détecteur Multibox Detector (SSD) et You Only Look Only Look Once (YOLO) v3. Pour plus d'informations, consultez Exigences du modèle de détection d'objets.

Les fonctions Lambda définies par l'utilisateur utilisent leAWS IoT GreengrassMachine Learning SDK pour soumettre des demandes d'inférence au service d'inférence local. Le service effectue l'inférence locale sur une image d'entrée et renvoie une liste de prédictions pour chaque objet détecté dans l'image. Chaque prédiction contient une catégorie d'objet, un score de fiabilité de prédiction et des coordonnées en pixels qui spécifient un cadre de délimitation autour de l'objet prédit.

AWS IoT Greengrassfournit des connecteurs ML Object Detection pour plusieurs plateformes :

Connecteur

Description et ARN

Détection d'objets ML Aarch64 JTX2

Service d'inférence de détection d'objets pour NVIDIA Jetson TX2. Prend en charge l'accélération GPU.

ARN : arn:aws:greengrass:region::/connectors/ObjectDetectionAarch64JTX2/versions/1

Détection d'objets ML x86_64

Service d'inférence de détection d'objets pour les plateformes x86_64.

ARN : arn:aws:greengrass:region::/connectors/ObjectDetectionx86-64/versions/1

Détection d'objets ML ARMv7

Service d'inférence de détection d'objets pour les plateformes ARMv7.

ARN : arn:aws:greengrass:region::/connectors/ObjectDetectionARMv7/versions/1

Prérequis

Ces connecteurs possèdent les exigences suivantes :

  • AWS IoT GreengrassCore Software 1.9.3 ou version ultérieure.

  • Pythonversion 3.7 ou 3.8 installée sur l'appareil principal et ajoutée à la variable d'environnement PATH.

    Note

    Pour utiliser Python 3.8, exécutez la commande suivante pour créer un lien symbolique à partir du dossier d'installation Python 3.7 par défaut vers les binaires Python 3.8 installés.

    sudo ln -s path-to-python-3.8/python3.8 /usr/bin/python3.7

    Ceci configure votre appareil de sorte qu'il réponde aux exigence de Python pour AWS IoT Greengrass.

  • Dépendances pour le SageMaker Neo Deep Learning Runtime installé sur l'appareil principal (noyau). Pour plus d'informations, consultez Installation de dépendances d'exécution Neo Deep Learning sur le noyau AWS IoT Greengrass.

  • Une ressource d'apprentissage machine du groupe Greengrass. La ressource d'apprentissage-machine doit faire référence à un compartiment Amazon S3 qui contient un modèle de détection d'objets. Pour de plus amples informations, veuillez consulterSources du modèle Amazon S3.

    Note

    Le modèle doit être un détecteur Multibox unique ou un type de modèle de détection d'objet You Look Once v3. Il doit être compilé à l'aide du SageMaker Compilateur Neo deep learning. Pour plus d'informations, consultez Exigences du modèle de détection d'objets.

  • LeConnecteur ML Feedbackajouté au groupe Greengrass et configuré. Cette opération est obligatoire uniquement si vous souhaitez utiliser le connecteur pour charger les données d'entrée de modèle et publier les prédictions dans une rubrique MQTT.

  • AWS IoT GreengrassKit SDK de Machine Learningv1.1.0 est nécessaire pour interagir avec ce connecteur.

Exigences du modèle de détection d'objets

Les connecteurs ML Object Detection prennent en charge les types de modèles de détection d'objet Single Shot Multibox Detector (SSD) et You Only Look Once (YOLO) v3. Vous pouvez utiliser les composants de détection d'objets fournis par GluonCV pour former le modèle avec votre propre ensemble de données. Vous pouvez également utiliser des modèles préformés depuis GluonCV Model Zoo :

Votre modèle de détection d'objets doit être formé avec 512 x 512 images d'entrée. Les modèles préformés du GluonCV Model Zoo répondent déjà à cette exigence.

Les modèles de détection d'objets formés doivent être compilés avec le kit SageMaker Compilateur Neo deep learning. Lors de la compilation, assurez-vous que le matériel cible correspond au matériel de votre appareil Greengrass principal. Pour de plus amples informations, veuillez consulter SageMaker Neodans leAmazon SageMaker Manuel du développeur.

Le modèle compilé doit être ajouté en tant que ressource d'apprentissage-machine (Source du modèle Amazon S3) au même groupe Greengrass que le connecteur.

Paramètres du connecteur

Ces connecteurs fournissent les paramètres suivants.

MLModelDestinationPath

Chemin d'accès absolu au compartiment Amazon S3 qui contient le modèle d'apprentissage-machine compatible Neo. Il s'agit du chemin de destination spécifié pour la ressource de modèle ML.

Nom d'affichage dans leAWS IoTConsole  : Chemin de destination du modèle

Obligatoiretrue

Type: string

Modèle valide :.+

MLModelResourceId

ID de la ressource de ML qui référence le modèle de source.

Nom d'affichage dans leAWS IoTConsole  : Ressources ML du groupe Greengrass

Obligatoiretrue

Type: S3MachineLearningModelResource

Modèle valide :^[a-zA-Z0-9:_-]+$

LocalInferenceServiceName

Nom du service d'inférence local. Les fonctions Lambda définies par l'utilisateur appellent le service en transmettant le nom auinvoke_inference_serviceFonction duAWS IoT GreengrassKit SDK de Machine Learning. Pour voir un exemple, consultez Exemple d'utilisation.

Nom d'affichage dans leAWS IoTConsole  : Nom du service d'inférence local

Obligatoiretrue

Type: string

Modèle valide :^[a-zA-Z0-9][a-zA-Z0-9-]{1,62}$

LocalInferenceServiceTimeoutSeconds

Durée (en secondes) avant laquelle la demande d'inférence est interrompue. La valeur minimale est de 1. La valeur par défaut est 10.

Nom d'affichage dans leAWS IoTConsole  : Délai (secondes)

Obligatoiretrue

Type: string

Modèle valide :^[1-9][0-9]*$

LocalInferenceServiceMemoryLimitKB

Quantité de mémoire (en Ko) à laquelle le service a accès. La valeur minimale est de 1.

Nom d'affichage dans leAWS IoTConsole  : Limite de mémoire

Obligatoiretrue

Type: string

Modèle valide :^[1-9][0-9]*$

GPUAcceleration

Contexte de calcul de l'UC ou du GPU (accéléré). Cette propriété s'applique au connecteur ML Image Classification Aarch64 JTX2 uniquement.

Nom d'affichage dans leAWS IoTConsole  : Accélération GPU

Obligatoiretrue

Type: string

Valeurs valides : CPU ou GPU

MLFeedbackConnectorConfigId

ID de la configuration de commentaire à utiliser pour charger les données d'entrée du modèle. Cela doit correspondre à l'ID d'une configuration de commentaire définie pour le connecteur ML Feedback.

Cetteest obligatoire uniquement si vous souhaitez utiliser le connecteur ML Feedback pour charger les données d'entrée du modèle et publier des prédictions dans une rubrique MQTT.

Nom d'affichage dans leAWS IoTConsole  : ID de configuration du connecteur ML Feedback

Obligatoirefalse

Type: string

Modèle valide :^$|^[a-zA-Z0-9][a-zA-Z0-9-]{1,62}$

Exemple de création de connecteur (AWS CLI)

La commande CLI suivante permet de créer unConnectorDefinitionavec une version initiale qui contient un connecteur ML Object Detection. Cet exemple crée une instance du connecteur ML Object Detection ARMv7l.

aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{ "Connectors": [ { "Id": "MyObjectDetectionConnector", "ConnectorArn": "arn:aws:greengrass:region::/connectors/ObjectDetectionARMv7/versions/1", "Parameters": { "MLModelDestinationPath": "/path-to-model", "MLModelResourceId": "my-ml-resource", "LocalInferenceServiceName": "objectDetection", "LocalInferenceServiceTimeoutSeconds": "10", "LocalInferenceServiceMemoryLimitKB": "500000", "MLFeedbackConnectorConfigId" : "object-detector-random-sampling" } } ] }'
Note

La fonction Lambda de ces connecteurs dispose d'unlongue duréeCycle de vie.

DansAWS IoT Greengrass, vous pouvez ajouter un connecteur à partir duConnecteurs. Pour plus d'informations, consultez Mise en route avec les connecteurs Greengrass (console).

Données d'entrée

Ces connecteurs acceptent un fichier image comme entrée. Les fichiers image d'entrée doivent être au format jpeg ou png. Pour plus d'informations, consultez Exemple d'utilisation.

Ces connecteurs n'acceptent pas les messages MQTT comme données d'entrée.

Données de sortie

Ces connecteurs renvoient une liste formatée des résultats de prédiction pour les objets identifiés dans l'image d'entrée :

{ "prediction": [ [ 14, 0.9384938478469849, 0.37763649225234985, 0.5110225081443787, 0.6697432398796082, 0.8544386029243469 ], [ 14, 0.8859519958496094, 0, 0.43536216020584106, 0.3314110040664673, 0.9538808465003967 ], [ 12, 0.04128098487854004, 0.5976729989051819, 0.5747185945510864, 0.704264223575592, 0.857937216758728 ], ... ] }

Chaque prédiction de la liste est contenue entre crochets et contient six valeurs :

  • La première valeur représente la catégorie d'objets prédite pour l'objet identifié. Les catégories d'objets et leurs valeurs correspondantes sont déterminées lors de la formation de votre modèle d'apprentissage automatique de détection d'objets dans le compilateur Neo Deep Learning.

  • La deuxième valeur est le score de confiance pour la prédiction de catégorie d'objet. Cela représente la probabilité que la prédiction soit correcte.

  • Les quatre dernières valeurs correspondent aux dimensions en pixels qui représentent un cadre de délimitation autour de l'objet prédit dans l'image.

Ces connecteurs ne publient pas de messages MQTT en tant que données de sortie.

Exemple d'utilisation

L'exemple de fonction Lambda suivant utilise leAWS IoT GreengrassKit SDK de Machine Learningpour interagir avec un connecteur de détection d'objets ML.

Note

Vous pouvez télécharger le kit SDK à partir duAWS IoT GreengrassKit SDK de Machine LearningPage des téléchargements.

L'exemple initialise un client de kit de développement logiciel et appelle de façon synchrone la fonction invoke_inference_service du SDK pour appeler le service d'inférence local. Il transmet le type d'algorithme, le nom de service, le type d'image et le contenu de l'image. Ensuite, l'exemple analyse la réponse du service pour obtenir les résultats probables (prédictions).

import logging from threading import Timer import numpy as np import greengrass_machine_learning_sdk as ml # We assume the inference input image is provided as a local file # to this inference client Lambda function. with open('/test_img/test.jpg', 'rb') as f: content = bytearray(f.read()) client = ml.client('inference') def infer(): logging.info('invoking Greengrass ML Inference service') try: resp = client.invoke_inference_service( AlgoType='object-detection', ServiceName='objectDetection', ContentType='image/jpeg', Body=content ) except ml.GreengrassInferenceException as e: logging.info('inference exception {}("{}")'.format(e.__class__.__name__, e)) return except ml.GreengrassDependencyException as e: logging.info('dependency exception {}("{}")'.format(e.__class__.__name__, e)) return logging.info('resp: {}'.format(resp)) predictions = resp['Body'].read().decode("utf-8") logging.info('predictions: {}'.format(predictions)) predictions = eval(predictions) # Perform business logic that relies on the predictions. # Schedule the infer() function to run again in ten second. Timer(10, infer).start() return infer() def function_handler(event, context): return

Leinvoke_inference_servicedans la fonctionAWS IoT GreengrassLe kit de développement logiciel Machine Learning accepte les arguments suivants.

Argument

Description

AlgoType

Nom du type d'algorithme à utiliser pour l'inférence. Actuellement, seul object-detection est pris en charge.

Obligatoiretrue

Type: string

Valeurs valides : object-detection

ServiceName

Nom du service d'inférence local. Utilisez le nom que vous avez spécifié pour le paramètre LocalInferenceServiceName lorsque vous avez configuré le connecteur.

Obligatoiretrue

Type: string

ContentType

Nom du type mime de l'image d'entrée.

Obligatoiretrue

Type: string

Valeurs valides : image/jpeg, image/png

Body

Contenu du type mime de l'image d'entrée.

Obligatoiretrue

Type: binary

Installation de dépendances d'exécution Neo Deep Learning sur le noyau AWS IoT Greengrass

Les connecteurs ML Object Detection sont regroupés avec le kit SageMaker Exécution Neo deep learning (DLR). Les connecteurs utilisent le runtime pour servir le modèle d'apprentissage-machine. Pour utiliser ces connecteurs, vous devez installer les dépendances pour le DLR sur votre appareil principal.

Avant d'installer les dépendances MXNet, assurez-vous que les bibliothèques système requises (avec les versions minimales spécifiées) sont présentes sur l'appareil.

NVIDIA Jetson TX2
  1. Installer CUDA Toolkit 9.0 et cuDNN 7.0. Vous pouvez suivre les instructions de Configuration d'autres appareils dans le didacticiel Démarrez.

  2. Activez les référentiels univers de sorte que le connecteur peut installer les logiciels open source maintenus par la communauté. Pour plus d'informations, consultez Repositories/Ubuntu dans la documentation Ubuntu.

    1. Ouvrez le fichier /etc/apt/sources.list.

    2. Vérifiez que les lignes suivantes ne sont pas commentées :

      deb http://ports.ubuntu.com/ubuntu-ports/ xenial universe deb-src http://ports.ubuntu.com/ubuntu-ports/ xenial universe deb http://ports.ubuntu.com/ubuntu-ports/ xenial-updates universe deb-src http://ports.ubuntu.com/ubuntu-ports/ xenial-updates universe
  3. Enregistrez une copie du script d'installation suivant dans un fichier nommé nvidiajtx2.sh sur l'appareil principal.

    #!/bin/bash set -e echo "Installing dependencies on the system..." echo 'Assuming that universe repos are enabled and checking dependencies...' apt-get -y update apt-get -y dist-upgrade apt-get install -y liblapack3 libopenblas-dev liblapack-dev libatlas-base-dev apt-get install -y python3.7 python3.7-dev python3.7 -m pip install --upgrade pip python3.7 -m pip install numpy==1.15.0 python3.7 -m pip install opencv-python || echo 'Error: Unable to install OpenCV with pip on this platform. Try building the latest OpenCV from source (https://github.com/opencv/opencv).' echo 'Dependency installation/upgrade complete.'
    Note

    Si OpenCV ne s'installe pas correctement à l'aide de ce script, vous pouvez essayer de générer à partir de la source. Pour plus d'informations, consultez Installation sous Linux dans la documentation OpenCV ou consultez d'autres ressources en ligne pour votre plateforme.

  4. Dans le répertoire où vous avez enregistré le fichier, exécutez la commande suivante :

    sudo nvidiajtx2.sh
x86_64 (Ubuntu or Amazon Linux)
  1. Enregistrez une copie du script d'installation suivant dans un fichier nommé x86_64.sh sur l'appareil principal.

    #!/bin/bash set -e echo "Installing dependencies on the system..." release=$(awk -F= '/^NAME/{print $2}' /etc/os-release) if [ "$release" == '"Ubuntu"' ]; then # Ubuntu. Supports EC2 and DeepLens. DeepLens has all the dependencies installed, so # this is mostly to prepare dependencies on Ubuntu EC2 instance. apt-get -y update apt-get -y dist-upgrade apt-get install -y libgfortran3 libsm6 libxext6 libxrender1 apt-get install -y python3.7 python3.7-dev elif [ "$release" == '"Amazon Linux"' ]; then # Amazon Linux. Expect python to be installed already yum -y update yum -y upgrade yum install -y compat-gcc-48-libgfortran libSM libXrender libXext else echo "OS Release not supported: $release" exit 1 fi python3.7 -m pip install --upgrade pip python3.7 -m pip install numpy==1.15.0 python3.7 -m pip install opencv-python || echo 'Error: Unable to install OpenCV with pip on this platform. Try building the latest OpenCV from source (https://github.com/opencv/opencv).' echo 'Dependency installation/upgrade complete.'
    Note

    Si OpenCV ne s'installe pas correctement à l'aide de ce script, vous pouvez essayer de générer à partir de la source. Pour plus d'informations, consultez Installation sous Linux dans la documentation OpenCV ou consultez d'autres ressources en ligne pour votre plateforme.

  2. Dans le répertoire où vous avez enregistré le fichier, exécutez la commande suivante :

    sudo x86_64.sh
ARMv7 (Raspberry Pi)
  1. Enregistrez une copie du script d'installation suivant dans un fichier nommé armv7l.sh sur l'appareil principal.

    #!/bin/bash set -e echo "Installing dependencies on the system..." apt-get update apt-get -y upgrade apt-get install -y liblapack3 libopenblas-dev liblapack-dev apt-get install -y python3.7 python3.7-dev python3.7 -m pip install --upgrade pip python3.7 -m pip install numpy==1.15.0 python3.7 -m pip install opencv-python || echo 'Error: Unable to install OpenCV with pip on this platform. Try building the latest OpenCV from source (https://github.com/opencv/opencv).' echo 'Dependency installation/upgrade complete.'
    Note

    Si OpenCV ne s'installe pas correctement à l'aide de ce script, vous pouvez essayer de générer à partir de la source. Pour plus d'informations, consultez Installation sous Linux dans la documentation OpenCV ou consultez d'autres ressources en ligne pour votre plateforme.

  2. Dans le répertoire où vous avez enregistré le fichier, exécutez la commande suivante :

    sudo bash armv7l.sh
    Note

    Sur un Raspberry Pi, l'utilisation de pip pour installer des dépendances d'apprentissage automatique est une opération gourmande en mémoire qui peut entraîner un dépassement de la capacité mémoire de l'appareil et une absence de réponse. Pour contourner ce problème, vous pouvez augmenter temporairement l'espace d'échange. Dans /etc/dphys-swapfile, augmentez la valeur de la variable CONF_SWAPSIZE, puis exécutez la commande suivante pour redémarrer dphys-swapfile.

    /etc/init.d/dphys-swapfile restart

Journalisation et dépannage

En fonction des paramètres de votre groupe, les journaux d'événements et d'erreurs sont écrits dans CloudWatch Journaux, le système de fichiers local ou les deux. Les journaux de ce connecteur utilisent le préfixe LocalInferenceServiceName. Si le connecteur se comporte de manière inattendue, vérifiez les journaux du connecteur. Ces derniers contiennent généralement des informations de débogage utiles, telles que les dépendances de bibliothèque ML manquantes ou la cause d'une panne de démarrage d'un connecteur.

Si l'icôneAWS IoT Greengrassgroupe est configuré pour écrire des journaux locaux, le connecteur écrit les fichiers journaux dansgreengrass-root/ggc/var/log/user/region/aws/. Pour plus d'informations sur la journalisation Greengrass, consultezSurveillance avec les journaux AWS IoT Greengrass.

Utilisez les informations suivantes pour résoudre les problèmes liés aux connecteurs ML Object Detection.

Bibliothèques système requises

Les onglets suivants répertorient les bibliothèques système requises pour chaque connecteur ML Object Detection.

ML Object Detection Aarch64 JTX2
d'outils Version minimale
ld-linux-aarch64.so.1 GLIBC_2.17
libc.so.6 GLIBC_2.17
libcublas.so.9.0 ne s'applique pas
libcudart.so.9.0 ne s'applique pas
libcudnn.so.7 ne s'applique pas
libcufft.so.9.0 ne s'applique pas
libcurand.so.9.0 ne s'applique pas
libcusolver.so.9.0 ne s'applique pas
libgcc_s.so.1 GCC_4.2.0
libgomp.so.1 GOMP_4.0, OMP_1.0
libm.so.6 GLIBC_2.23
libnvinfer.so.4 ne s'applique pas
libnvrm_gpu.so ne s'applique pas
libnvrm.so ne s'applique pas
libnvidia-fatbinaryloader.so.28.2.1 ne s'applique pas
libnvos.so ne s'applique pas
libpthread.so.0 GLIBC_2.17
librt.so.1 GLIBC_2.17
libstdc++.so.6 GLIBCXX_3.4.21, CXXABI_1.3.8
ML Object Detection x86_64
d'outils Version minimale
ld-linux-x86-64.so.2 GCC_4.0.0
libc.so.6 GLIBC_2.4
libgfortran.so.3 GFORTRAN_1.0
libm.so.6 GLIBC_2.23
libpthread.so.0 GLIBC_2.2.5
librt.so.1 GLIBC_2.2.5
libstdc++.so.6 CXXABI_1.3.8, GLIBCXX_3.4.21
ML Object Detection ARMv7
d'outils Version minimale
ld-linux-armhf.so.3 GLIBC_2.4
libc.so.6 GLIBC_2.7
libgcc_s.so.1 GCC_4.0.0
libgfortran.so.3 GFORTRAN_1.0
libm.so.6 GLIBC_2.4
libpthread.so.0 GLIBC_2.4
librt.so.1 GLIBC_2.4
libstdc++.so.6 CXXABI_1.3.8, CXXABI_ARM_1.3.3, GLIBCXX_3.4.20

Problèmes

Symptôme Solution

Sur un appareil Raspberry Pi, le message d'erreur suivant est consigné, et vous n'utilisez pas la caméra : Failed to initialize libdc1394

Exécutez la commande suivante pour désactiver le pilote :

sudo ln /dev/null /dev/raw1394

Cette opération est éphémère. Le lien symbolique disparaît après le redémarrage. Consultez le manuel de distribution de votre système d'exploitation pour savoir comment créer automatiquement le lien au redémarrage.

Licences

Les connecteurs ML Object Detection incluent les logiciels et licences tiers suivants :

Ce connecteur est libéré sous leContrat de licence du logiciel Greengrass Core.

Consulter aussi