Connettore ML Object Detection - AWS IoT Greengrass

AWS IoT Greengrass Version 1 è entrato nella fase di estensione della vita utile il 30 giugno 2023. Per ulteriori informazioni, consulta la politica AWS IoT Greengrass V1 di manutenzione. Dopo questa data, AWS IoT Greengrass V1 non rilascerà aggiornamenti che forniscano funzionalità, miglioramenti, correzioni di bug o patch di sicurezza. I dispositivi che funzionano AWS IoT Greengrass V1 non subiranno interruzioni e continueranno a funzionare e a connettersi al cloud. Ti consigliamo vivamente di eseguire la migrazione a AWS IoT Greengrass Version 2, che aggiunge nuove importanti funzionalità e supporto per piattaforme aggiuntive.

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Connettore ML Object Detection

avvertimento

Questo connettore è stato spostato nellaFase di vita prolungata, eAWS IoT Greengrassnon rilascerà aggiornamenti che forniscono funzionalità, miglioramenti alle funzionalità esistenti, patch di sicurezza o correzioni di bug. Per ulteriori informazioni, consulta la pagina AWS IoT Greengrass Version 1politica di manutenzione .

Rilevamento di oggetti MLconnettorifornisce un servizio di inferenza Machine Learning (ML) eseguito sulAWS IoT Greengrassnucleo. Questo servizio di inferenza locale esegue il rilevamento dell'oggetto utilizzando un modello di rilevamento dell'oggetto compilato dal SageMaker Compiler Neo Deep Learning. Sono supportati due tipi di modelli di rilevamento di oggetti: Single Shot Multibox Detector (SSD) e si guarda solo una volta (YOLO) v3. Per ulteriori informazioni, consulta la sezione relativa ai requisiti del modello di rilevamento dell'oggetto.

Le funzioni Lambda definite dall'utente utilizzano ilAWS IoT GreengrassMachine Learning SDK per inviare le richieste di inferenza al servizio di inferenza locale. Il servizio esegue l'inferenza locale su un'immagine di input e restituisce un elenco di previsioni per ogni oggetto rilevato nell'immagine. Ogni previsione contiene una categoria dell'oggetto, un punteggio di affidabilità della previsione e le coordinate dei pixel che specificano un riquadro di delimitazione intorno all'oggetto previsto.

AWS IoT Greengrassfornisce i connettori ML Object Detection per più piattaforme:

Connector

Descrizione e ARN

Rilevamento di oggetti ML Aarch64 JTX2

Servizio di inferenza di rilevamento oggetti per NVIDIA Jetson TX2. Supporta l'accelerazione GPU.

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

Rilevamento di oggetti ML x86_64

Servizio di inferenza di rilevamento oggetti per piattaforme x86_64.

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

Rilevamento oggetti ML ARMv7

Servizio di inferenza di rilevamento oggetti per piattaforme ARMv7.

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

Requisiti

Questi connettori presentano i seguenti requisiti:

  • AWS IoT GreengrassCore Software v1.9.3 o versioni successive.

  • Pitoneversione 3.7 o 3.8 installata sul dispositivo core e aggiunta alla variabile di ambiente PATH.

    Nota

    Per utilizzare Python 3.8, eseguire il seguente comando per creare un collegamento simbolico dalla cartella di installazione predefinita di Python 3.7 ai binari Python 3.8 installati.

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

    Questo configura il dispositivo in modo che soddisfi il requisito Python per AWS IoT Greengrass.

  • Dipendenze per il SageMaker Neo deep learning Runtime installato sul dispositivo core. Per ulteriori informazioni, consulta la pagina Installazione delle dipendenze Neo Deep Learning Runtime su AWS IoT Greengrass Core .

  • Una risorsa ML nel gruppo Greengrass. La risorsa ML deve fare riferimento a un bucket Amazon S3 contenente un modello di rilevamento dell'oggetto. Per ulteriori informazioni, consultaModelli Amazon S3 di origine.

    Nota

    Il modello deve essere un tipo di modello di rilevamento dell'oggetto Single Shot Multibox Detector o You Only Look Once v3. Deve essere compilato utilizzando il SageMaker Compiler Neo Deep Learning. Per ulteriori informazioni, consulta la sezione relativa ai requisiti del modello di rilevamento dell'oggetto.

  • LaConnettore ML Feedbackaggiunto al gruppo Greengrass e configurato. Questo è obbligatorio solo se desideri utilizzare il connettore per caricare i dati di input del modello e pubblicare le previsioni in un argomento MQTT.

  • AWS IoT GreengrassSDK di Machine LearningLa versione v1.1.0 è obbligatoria per interagire con questo connettore.

Requisiti del modello di rilevamento dell'oggetto

I connettori ML Object Detector supportano i tipi di modello di rilevamento dell'oggetto Single Shot Multibox Detector (SSD) e You Only Look Once (YOLO) v3. Puoi utilizzare i componenti di rilevamento dell'oggetto forniti da GluonCV per eseguire il training del modello con il tuo set di dati. In alternativa, puoi utilizzare modelli pre-formati da GluonCV Model Zoo:

Il training del modello di rilevamento dell'oggetto deve essere eseguito con immagini di input 512 x 512. I modelli pre-formati da GluonCV Model Zoo soddisfano già questo requisito.

I modelli di rilevamento dell'oggetto con training devono essere compilati con SageMaker Compiler Neo Deep Learning. Durante la compilazione, assicurati che l'hardware di destinazione corrisponda all'hardware del dispositivo core Greengrass. Per ulteriori informazioni, consulta SageMaker NeonellaAmazon SageMaker Guida per lo Sviluppatore.

Il modello compilato deve essere aggiunto come una risorsa ML (Modello Amazon S3 di origine) allo stesso gruppo Greengrass del connettore.

Parametri connettore

Questi connettori forniscono i seguenti parametri.

MLModelDestinationPath

Il percorso assoluto al bucket Amazon S3 contenente il modello ML compatibile con Neo. Si tratta del percorso di destinazione specificato per la risorsa del modello ML.

Nome visualizzato nellaAWS IoTConsole : Percorso di destinazione del modello

Campo obbligatorio:true

Tipo: string

Modello valido:.+

MLModelResourceId

L'ID della risorsa ML che fa riferimento al modello di origine.

Nome visualizzato nellaAWS IoTConsole : Risorsa ML del gruppo Greengrass

Campo obbligatorio:true

Tipo: S3MachineLearningModelResource

Modello valido:^[a-zA-Z0-9:_-]+$

LocalInferenceServiceName

Il nome del servizio di inferenza locale. Le funzioni Lambda definite dall'utente invocano il servizio passando il nome alinvoke_inference_servicefunzione diAWS IoT GreengrassSDK di Machine Learning. Per un esempio, consultare Esempio di utilizzo.

Nome visualizzato nellaAWS IoTConsole : Nome del servizio di inferenza locale

Campo obbligatorio:true

Tipo: string

Modello valido:^[a-zA-Z0-9][a-zA-Z0-9-]{1,62}$

LocalInferenceServiceTimeoutSeconds

Il tempo (in secondi) prima che la richiesta di inferenza venga terminata. Il valore minimo è 1. Il valore predefinito è 10.

Nome visualizzato nellaAWS IoTConsole : Timeout (secondi)

Campo obbligatorio:true

Tipo: string

Modello valido:^[1-9][0-9]*$

LocalInferenceServiceMemoryLimitKB

La quantità di memoria (in KB) a cui ha accesso il servizio. Il valore minimo è 1.

Nome visualizzato nellaAWS IoTConsole : Memory limit (Limite memoria)

Campo obbligatorio:true

Tipo: string

Modello valido:^[1-9][0-9]*$

GPUAcceleration

Il contesto di calcolo della CPU o GPU (accelerata). Questa proprietà si applica solo al connettore ML Image Classification Aarch64 JTX2.

Nome visualizzato nellaAWS IoTConsole : Accelerazione GPU

Campo obbligatorio:true

Tipo: string

Valori validi: CPU o GPU

MLFeedbackConnectorConfigId

L'ID della configurazione di feedback da utilizzare per caricare i dati di input del modello. Deve corrispondere all'ID di una configurazione di feedback definita per il connettore ML Feedback.

QuestoIl parametro è obbligatorio solo se desideri utilizzare il connettore ML Feedback per caricare i dati di input del modello e pubblicare le previsioni in un argomento MQTT.

Nome visualizzato nellaAWS IoTConsole : ID di configurazione del connettore ML Feedback

Campo obbligatorio:false

Tipo: string

Modello valido:^$|^[a-zA-Z0-9][a-zA-Z0-9-]{1,62}$

Esempio di creazione di un connettore (AWS CLI)

Il seguente comando CLI crea unConnectorDefinitioncon una versione iniziale che contiene un connettore ML Object Detection. In questo esempio viene creata un'istanza del connettore 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" } } ] }'
Nota

La funzione Lambda in questi connettori è dotata dilunga durataciclo di vita.

NellaAWS IoT Greengrassconsole, è possibile aggiungere un connettore dal gruppoConnettori(Certificato creato). Per ulteriori informazioni, consulta la pagina Nozioni di base sui connettori Greengrass (console) .

Dati di input

Questi connettori accettano un file di immagine come input. I file di immagine di input devono essere in formato png o jpeg. Per ulteriori informazioni, consulta la pagina Esempio di utilizzo .

Questi connettori non accettano messaggi MQTT come dati di input.

Dati di output

Questi connettori restituiscono un elenco formattato di risultati delle previsioni per gli oggetti identificati nell'immagine di input:

{ "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 ], ... ] }

Ogni previsione nell'elenco è contenuta tra parentesi quadre e contiene sei valori:

  • Il primo valore rappresenta la categoria di oggetto prevista per l'oggetto identificato. Le categorie di oggetti e i valori corrispondenti vengono determinati durante il training del modello di machine learning di rilevamento dell'oggetto nel compilatore di deep learning Neo.

  • Il secondo valore è il punteggio di affidabilità per la previsione della categoria dell'oggetto. Questo rappresenta la probabilità che la previsione fosse corretta.

  • Gli ultimi quattro valori corrispondono alle dimensioni in pixel che rappresentano un riquadro di delimitazione intorno all'oggetto previsto nell'immagine.

Questi connettori non pubblicano messaggi MQTT come dati di output.

Esempio di utilizzo

La funzione Lambda di esempio seguente utilizza ilAWS IoT GreengrassSDK di Machine Learningper interagire con un connettore ML Object Detection.

Nota

Puoi scaricare l'SDK dalAWS IoT GreengrassSDK di Machine LearningPagina download.

In questo esempio viene inizializzato un client SDK e viene chiamata in modo sincrono la funzione invoke_inference_service di SDK per richiamare il servizio di inferenza locale. Trasferisce il tipo di algoritmo, il nome del servizio, il tipo di immagine e il contenuto dell'immagine. Quindi, l'esempio analizza la risposta del servizio per ottenere i risultati di probabilità (previsioni).

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

Lainvoke_inference_servicefunzione nellaAWS IoT GreengrassMachine Learning SDK accetta i seguenti argomenti.

Argomento

Descrizione

AlgoType

Il nome del tipo di algoritmo da utilizzare per l'inferenza. Attualmente è supportato solo object-detection.

Campo obbligatorio:true

Tipo: string

Valori validi: object-detection

ServiceName

Il nome del servizio di inferenza locale. Utilizza il nome specificato per il parametro LocalInferenceServiceName al momento della configurazione del connettore.

Campo obbligatorio:true

Tipo: string

ContentType

Il tipo mime dell'immagine di input.

Campo obbligatorio:true

Tipo: string

Valori validi: image/jpeg, image/png

Body

Il contenuto del file immagine di input.

Campo obbligatorio:true

Tipo: binary

Installazione delle dipendenze Neo Deep Learning Runtime su AWS IoT Greengrass Core

I connettori ML Object Detection sono raggruppati con SageMaker Neo Deep Learning Runtime (DLR). I connettori utilizzano il runtime per servire il modello ML. Per utilizzare questi connettori, devi installare le dipendenze per il DLR sul dispositivo core.

Prima di installare le dipendenze DLR, assicurati che le librerie di sistema richieste (nelle versioni minime specificate) siano presenti sul dispositivo.

NVIDIA Jetson TX2
  1. Installa CUDA Toolkit 9.0 e cuDNN 7.0. Puoi seguire le istruzioni di Configurazione di altri dispositivi nel tutorial Nozioni di base.

  2. Abilita i repository universali in modo che il connettore sia in grado di installare l'open software gestito dalla community. Per ulteriori informazioni, consulta Repository/Ubuntu nella documentazione Ubuntu.

    1. Apri il file /etc/apt/sources.list.

    2. Assicurati che le seguenti righe non presentino commenti.

      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. Salva una copia del seguente script di installazione nel file nvidiajtx2.sh del dispositivo core.

    #!/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.'
    Nota

    Se OpenCV non viene installato correttamente utilizzando questo script, puoi provare a compilare dall'origine. Per ulteriori informazioni, consulta Installazione in Linux nella documentazione di OpenCV o fai riferimento ad altre risorse online per la tua piattaforma.

  4. Dalla directory in cui è stato salvato il file, eseguire questo comando:

    sudo nvidiajtx2.sh
x86_64 (Ubuntu or Amazon Linux)
  1. Salva una copia del seguente script di installazione nel file x86_64.sh del dispositivo core.

    #!/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.'
    Nota

    Se OpenCV non viene installato correttamente utilizzando questo script, puoi provare a compilare dall'origine. Per ulteriori informazioni, consulta Installazione in Linux nella documentazione di OpenCV o fai riferimento ad altre risorse online per la tua piattaforma.

  2. Dalla directory in cui è stato salvato il file, eseguire questo comando:

    sudo x86_64.sh
ARMv7 (Raspberry Pi)
  1. Salva una copia del seguente script di installazione nel file armv7l.sh del dispositivo core.

    #!/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.'
    Nota

    Se OpenCV non viene installato correttamente utilizzando questo script, puoi provare a compilare dall'origine. Per ulteriori informazioni, consulta Installazione in Linux nella documentazione di OpenCV o fai riferimento ad altre risorse online per la tua piattaforma.

  2. Dalla directory in cui è stato salvato il file, eseguire questo comando:

    sudo bash armv7l.sh
    Nota

    Su un Raspberry Pi, l'utilizzo di pip per installare dipendenze di machine learning è un'operazione con elevati requisiti di memoria che può esaurire la memoria del dispositivo e causarne il blocco. Per risolvere il problema, è possibile aumentare temporaneamente la dimensione di swap: In /etc/dphys-swapfile, aumenta il valore della variabile CONF_SWAPSIZE e quindi esegui il comando seguente per riavviare dphys-swapfile.

    /etc/init.d/dphys-swapfile restart

Registrazione e risoluzione dei problemi

A seconda delle impostazioni del gruppo, i log degli eventi e degli errori vengono scritti in CloudWatch Registri, nel file system locale o in entrambi. I log di questo connettore utilizzano il prefisso LocalInferenceServiceName. Se il connettore si comporta inaspettatamente, controlla i log del connettore. Questi di solito contengono utili informazioni di debug, ad esempio una dipendenza della libreria ML mancante o la causa di un errore di avvio del connettore.

Se il fileAWS IoT GreengrassIl gruppo è configurato per scrivere i log locali, il connettore scrive i file di log ingreengrass-root/ggc/var/log/user/region/aws/. Per ulteriori informazioni sulla registrazione di Greengrass, consultaMonitoraggio con i log AWS IoT Greengrass.

Utilizza le informazioni seguenti per risolvere i problemi relativi ai connettori ML Object Detection.

Librerie di sistema richieste

Le seguenti schede elencano le librerie di sistema richieste per ogni connettore ML Object Detection.

ML Object Detection Aarch64 JTX2
Libreria Versione minima
ld-linux-aarch64.so.1 GLIBC_2.17
libc.so.6 GLIBC_2.17
libcublas.so.9.0 non applicabile
libcudart.so.9.0 non applicabile
libcudnn.so.7 non applicabile
libcufft.so.9.0 non applicabile
libcurand.so.9.0 non applicabile
libcusolver.so.9.0 non applicabile
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 applicabile
libnvrm_gpu.so non applicabile
libnvrm.so non applicabile
libnvidia-fatbinaryloader.so.28.2.1 non applicabile
libnvos.so non applicabile
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
Libreria Versione minima
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
Libreria Versione minima
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

Problemi

Sintomo Soluzione

In un Raspberry Pi, il seguente messaggio di errore viene registrato e non si sta utilizzando la fotocamera: Failed to initialize libdc1394

Per disabilitare il driver, esegui il seguente comando:

sudo ln /dev/null /dev/raw1394

Questa operazione è temporanea. Il collegamento simbolico scompare dopo il riavvio. Consulta il manuale di distribuzione del sistema operativo per ulteriori informazioni su come creare automaticamente il link al riavvio.

Licenze

I connettori ML Object Detection includono il software e le licenze di terze parti indicati di seguito:

Questo connettore viene rilasciato sottoAccordo di licenza del software Greengrass Core.

Consultare anche