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 est passé à la phase de durée de vie prolongée et AWS IoT Greengrass ne 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 bogues. Pour de plus amples informations, veuillez consulter AWS IoT Greengrass Version 1 politique de maintenance.
Les connecteurs ML Object Detection fournissent un service d'inférence d'apprentissage automatique (ML) qui s'exécute sur le AWS IoT Greengrass cœur. 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 compilateur d'apprentissage profond SageMaker AI Neo. Deux types de modèles de détection d'objets sont pris en charge : Single Shot Multibox Detector (SSD) et You 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 le SDK Machine AWS IoT Greengrass Learning pour envoyer 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 Greengrass fournit des connecteurs de détection d'objets ML pour plusieurs plateformes :
Connecteur |
Description et ARN |
---|---|
Détection d'objets ML Aarch64 JTX2 |
Service d'inférence par détection d'objets pour NVIDIA TX2 Jetson. Prend en charge l'accélération GPU. ARN : |
Détection d'objets ML x86_64 |
Service d'inférence de détection d'objets pour les plateformes x86_64. ARN : |
Détection d'objets ML ARMv7 |
Service d'inférence pour la détection d'objets pour les ARMv7 plateformes. ARN : |
Prérequis
Ces connecteurs possèdent les exigences suivantes :
-
AWS IoT Greengrass Core Software v1.9.3 ou version ultérieure.
-
Python
version 3.7 ou 3.8 installé sur le périphérique principal et ajouté à la variable d'environnement PATH. Note
Pour utiliser Python 3.8, exécutez la commande suivante pour créer un lien symbolique entre le dossier d'installation par défaut de Python 3.7 et les fichiers binaires Python 3.8 installés.
sudo ln -s
path-to-python-3.8
/python3.8 /usr/bin/python3.7Ceci configure votre appareil de sorte qu'il réponde aux exigence de Python pour AWS IoT Greengrass.
-
Dépendances du moteur d'apprentissage profond SageMaker AI Neo installé sur le périphérique principal. Pour de plus amples informations, veuillez consulter Installation des dépendances du runtime Neo Deep Learning sur le AWS IoT Greengrass noyau.
-
Une ressource d'apprentissage machine du groupe Greengrass. La ressource ML doit faire référence à un compartiment Amazon S3 contenant un modèle de détection d'objets. Pour plus d'informations, consultez les sources 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 compilateur d'apprentissage profond SageMaker AI Neo. Pour plus d'informations, consultez Exigences du modèle de détection d'objets.
-
Le connecteur ML Feedback a été ajouté 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 Greengrass Le SDK Machine Learning v1.1.0 est requis pour interagir avec ce connecteur.
Exigences du modèle de détection d'objets
Les connecteurs ML Object Detection prennent en charge les modèles de détection d'objets 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
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 entraînés doivent être compilés avec le compilateur d'apprentissage profond SageMaker AI Neo. Lors de la compilation, assurez-vous que le matériel cible correspond au matériel de votre appareil Greengrass principal. Pour plus d'informations, consultez SageMaker AI Neo dans le manuel Amazon SageMaker AI Developer Guide.
Le modèle compilé doit être ajouté en tant que ressource ML (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
-
Le chemin absolu vers le compartiment Amazon S3 qui contient le modèle ML compatible avec Neo. Il s'agit du chemin de destination spécifié pour la ressource de modèle ML.
Nom affiché dans la AWS IoT console : chemin de destination du modèle
Nécessaire :
true
Type :
string
Schéma valide :
.+
MLModelResourceId
-
ID de la ressource de ML qui référence le modèle de source.
Nom affiché dans la AWS IoT console : Greengrass group ML resource
Nécessaire :
true
Type :
S3MachineLearningModelResource
Schéma 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 à
invoke_inference_service
la fonction du SDK Machine AWS IoT Greengrass Learning. Pour obtenir un exemple, consultez Exemple d'utilisation.Nom affiché dans la AWS IoT console : nom du service d'inférence local
Nécessaire :
true
Type :
string
Schéma 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 affiché dans la AWS IoT console : Timeout (seconde)
Nécessaire :
true
Type :
string
Schéma 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 affiché dans la AWS IoT console : Limite de mémoire
Nécessaire :
true
Type :
string
Schéma valide :
^[1-9][0-9]*$
GPUAcceleration
-
Contexte de calcul de l'UC ou du GPU (accéléré). Cette propriété s'applique uniquement au JTX2 connecteur ML Image Classification Aarch64.
Nom affiché dans la AWS IoT console : accélération du processeur graphique
Nécessaire :
true
Type :
string
Valeurs valides :
CPU
ouGPU
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.
Ce paramètre est 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 affiché dans la AWS IoT console : ID de configuration du connecteur ML Feedback
Nécessaire :
false
Type :
string
Schéma valide :
^$|^[a-zA-Z0-9][a-zA-Z0-9-]{1,62}$
Exemple de création de connecteur (AWS CLI)
La commande CLI suivante crée un ConnectorDefinition
avec une version initiale contenant un connecteur de détection d'objets ML. Cet exemple crée une instance du ARMv7l connecteur ML Object Detection.
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 a une longue durée de vie.
Dans la AWS IoT Greengrass console, vous pouvez ajouter un connecteur depuis la page Connecteurs du groupe. Pour de plus amples informations, veuillez consulter 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 de plus amples informations, veuillez consulter 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 l'entraînement de votre modèle d'apprentissage automatique par détection d'objets dans le compilateur d'apprentissage profond Neo.
-
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 les messages MQTT sous forme de données de sortie.
Exemple d'utilisation
L'exemple de fonction Lambda suivant utilise le SDK AWS IoT Greengrass Machine Learning pour interagir avec un connecteur ML Object Detection.
Note
Vous pouvez télécharger le SDK depuis la page de téléchargement du SDK AWS IoT Greengrass Machine Learning.
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
La invoke_inference_service
fonction du SDK AWS IoT Greengrass Machine Learning accepte les arguments suivants.
Argument |
Description |
---|---|
|
Nom du type d'algorithme à utiliser pour l'inférence. Actuellement, seul Nécessaire : Type : Valeurs valides : |
|
Nom du service d'inférence local. Utilisez le nom que vous avez spécifié pour le paramètre Nécessaire : Type : |
|
Nom du type mime de l'image d'entrée. Nécessaire : Type : Valeurs valides : |
|
Contenu du type mime de l'image d'entrée. Nécessaire : Type : |
Installation des dépendances du runtime Neo Deep Learning sur le AWS IoT Greengrass noyau
Les connecteurs ML Object Detection sont fournis avec le moteur d'apprentissage profond (DLR) SageMaker AI Neo. 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.
-
Installer CUDA Toolkit 9.0 et cuDNN 7.0. Vous pouvez suivre les instructions de Configuration d'autres appareils dans le didacticiel Démarrez.
-
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. -
Ouvrez le fichier
/etc/apt/sources.list
. -
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
-
-
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. -
Dans le répertoire où vous avez enregistré le fichier, exécutez la commande suivante :
sudo nvidiajtx2.sh
Journalisation et résolution des problèmes
Selon les paramètres de votre groupe, les journaux d'événements et d'erreurs sont écrits dans CloudWatch Logs, dans le système de fichiers local, ou dans 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 le AWS IoT Greengrass groupe est configuré pour écrire des journaux locaux, le connecteur écrit des fichiers journaux dans
. Pour plus d'informations sur la journalisation de Greengrass, consultez. Surveillance à l'aide de AWS IoT Greengrass journauxgreengrass-root
/ggc/var/log/user/region
/aws/
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.
Bibliothèque | Version minimale |
---|---|
ld-linux-aarch64. so.1 | GLIBC_2.17 |
libc.so.6 | GLIBC_2.17 |
libcublas.so.9.0 | non applicable |
libcudart.so.9.0 | non applicable |
libcudnn.so.7 | non applicable |
libcufft.so.9.0 | non applicable |
libcurand.so.9.0 | non applicable |
libcusolver.so.9.0 | non applicable |
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 | non applicable |
libnvrm_gpu.so | non applicable |
libnvrm.so | non applicable |
libnvidia-fatbinaryloader.so.28.2.1 | non applicable |
libnvos.so | non applicable |
libpthread.so.0 | GLIBC_2.17 |
librt.so.1 | GLIBC_2.17 |
libstdc++.so.6 | GLIBCXX_3.4.21, CXXABI_1.3.8 |
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 : |
Exécutez la commande suivante pour désactiver le pilote :
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/licences tiers suivants :
-
AWS SDK pour Python (Boto3)
/Licence Apache 2.0 -
botocore
/Licence Apache 2.0 -
dateutil
/Licence PSF -
docutils
/Licence BSD, licence GPL (General Public License) GNU, licence Python Software Foundation, domaine public -
jmespath
/Licence MIT -
s3transfer
/Licence Apache 2.0 -
urllib3
/Licence MIT
-
Environnement d’exécution Deep Learning
/Licence Apache 2.0 six
/MIT
Ce connecteur est publié dans le cadre du contrat de licence logicielle Greengrass Core
Consultez aussi
-
Intégrer à des services et protocoles à l'aide de connecteurs Greengrass
-
Algorithme de détection d'objets dans le manuel Amazon SageMaker AI Developer Guide