Tutorial: eseguire l'inferenza della classificazione delle immagini di esempio utilizzando TensorFlow Lite - AWS IoT Greengrass

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à.

Tutorial: eseguire l'inferenza della classificazione delle immagini di esempio utilizzando TensorFlow Lite

Questo tutorial mostra come utilizzare il componente di inferenza della classificazione delle immagini TensorFlow Lite per eseguire l'inferenza della classificazione delle immagini di esempio su un dispositivo principale Greengrass. Questo componente include le seguenti dipendenze dei componenti:

  • TensorFlow Componente di archiviazione del modello di classificazione delle immagini Lite

  • TensorFlow Componente di runtime Lite

Quando si distribuisce questo componente, scarica un modello MobileNet v1 pre-addestrato e installa il runtime TensorFlow Lite e le sue dipendenze. Questo componente pubblica i risultati dell'inferenza sull'argomento. ml/tflite/image-classification Per visualizzare questi risultati di inferenza, utilizzate il client AWS IoT MQTT nella AWS IoT console per abbonarvi a questo argomento.

In questo tutorial si implementa il componente di inferenza del campione per eseguire la classificazione delle immagini sull'immagine di esempio fornita da. AWS IoT Greengrass Dopo aver completato questo tutorial, puoi completareTutorial: Esegui l'inferenza della classificazione delle immagini di esempio sulle immagini di una fotocamera utilizzando TensorFlow Lite, che mostra come modificare il componente di inferenza del campione per eseguire la classificazione delle immagini sulle immagini di una fotocamera localmente su un dispositivo principale Greengrass.

Per ulteriori informazioni sull'apprendimento automatico sui dispositivi Greengrass, vedere. Esecuzione dell'inferenza di Machine Learning

Prerequisiti

Per completare questo tutorial, è necessario quanto segue:

  • Un dispositivo core Linux Greengrass. Se non lo hai, consultare Tutorial: Nozioni di base su AWS IoT Greengrass V2. Il dispositivo principale deve soddisfare i seguenti requisiti:

    • Sui dispositivi core Greengrass che eseguono Amazon Linux 2 o Ubuntu 18.04, sul dispositivo è installata la versione 2.27 o successiva della GNU C Library (glibc).

    • Sui dispositivi ARMv7L, come Raspberry Pi, le dipendenze per OpenCV-Python sono installate sul dispositivo. Esegui il comando seguente per installare le dipendenze.

      sudo apt-get install libopenjp2-7 libilmbase23 libopenexr-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libgtk-3-0 libwebp-dev
    • I dispositivi Raspberry Pi che eseguono il sistema operativo Raspberry Pi Bullseye devono soddisfare i seguenti requisiti:

      • NumPy 1.22.4 o versione successiva installata sul dispositivo. Il sistema operativo Raspberry Pi Bullseye include una versione precedente di NumPy, quindi è possibile eseguire il seguente comando per l'aggiornamento del dispositivo. NumPy

        pip3 install --upgrade numpy
      • Lo stack di fotocamere legacy è abilitato sul dispositivo. Il sistema operativo Raspberry Pi Bullseye include un nuovo stack di fotocamere abilitato di default e non compatibile, quindi è necessario abilitare lo stack di fotocamere precedente.

        Per abilitare lo stack di telecamere precedente
        1. Esegui il seguente comando per aprire lo strumento di configurazione Raspberry Pi.

          sudo raspi-config
        2. Seleziona Opzioni di interfaccia.

        3. Seleziona Legacy camera per abilitare lo stack di telecamere legacy.

        4. Riavvia il dispositivo Raspberry Pi.

Passaggio 1: iscriviti all'argomento delle notifiche predefinito

In questo passaggio, configurate il client AWS IoT MQTT nella AWS IoT console per guardare i messaggi MQTT pubblicati dal componente di classificazione delle immagini TensorFlow Lite. Per impostazione predefinita, il componente pubblica i risultati di inferenza sull'argomento. ml/tflite/image-classification Abbonati a questo argomento prima di distribuire il componente sul tuo dispositivo principale Greengrass per vedere i risultati dell'inferenza quando il componente viene eseguito per la prima volta.

Per sottoscrivere l'argomento delle notifiche predefinito
  1. Nel menu di navigazione della AWS IoTconsole, scegliete Test, MQTT test client.

  2. In Sottoscrivi a un argomento, nella casella Nome argomento, inserisciml/tflite/image-classification.

  3. Scegliere Subscribe (Effettua sottoscrizione).

Fase 2: Implementazione del componente di classificazione delle immagini TensorFlow Lite

In questo passaggio, distribuisci il componente di classificazione delle immagini TensorFlow Lite sul tuo dispositivo principale:

  1. Nel menu di navigazione AWS IoT Greengrassdella console, scegli Componenti.

  2. Nella pagina Componenti, nella scheda Componenti pubblici, scegli aws.greengrass.TensorFlowLiteImageClassification.

  3. Nella pagina aws.greengrass.TensorFlowLiteImageClassification, scegli (Distribuisci).

  4. Da Aggiungi alla distribuzione, scegli una delle seguenti opzioni:

    1. Per unire questo componente a una distribuzione esistente sul dispositivo di destinazione, scegli Aggiungi alla distribuzione esistente, quindi seleziona la distribuzione che desideri modificare.

    2. Per creare una nuova distribuzione sul dispositivo di destinazione, scegli Crea nuova distribuzione. Se hai una distribuzione esistente sul tuo dispositivo, la scelta di questo passaggio sostituisce la distribuzione esistente.

  5. Nella pagina Specifica destinazione, procedi come segue:

    1. In Informazioni sulla distribuzione, inserisci o modifica il nome descrittivo della distribuzione.

    2. In Destinazione della distribuzione, seleziona una destinazione della distribuzione e scegli Avanti. Non è possibile modificare la destinazione della distribuzione se si sta revisionando una distribuzione esistente.

  6. Nella pagina Seleziona componenti, in Componenti pubblici, verifica che il aws.greengrass.TensorFlowLiteImageClassification componente sia selezionato e scegli Avanti.

  7. Nella pagina Configura componenti, mantieni le impostazioni di configurazione predefinite e scegli Avanti.

  8. Nella pagina Configura impostazioni avanzate, mantieni le impostazioni di configurazione predefinite e scegli Avanti.

  9. Nella pagina Revisione, scegli Distribuisci

  1. Crea un deployment.json file per definire la configurazione di distribuzione per il componente di classificazione delle immagini TensorFlow Lite. Questo file dovrebbe avere il seguente aspetto:

    { "targetArn":"targetArn", "components": { "aws.greengrass.TensorFlowLiteImageClassification": { "componentVersion": 2.1.0, "configurationUpdate": { } } } }
    • Nel campo targetArn, sostituisci targetArn con l'ARN (Amazon Resource Name) dell'oggetto o del gruppo di oggetti a cui destinare la distribuzione, nel seguente formato:

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

      • Gruppo di oggetti: arn:aws:iot:region:account-id:thinggroup/thingGroupName

    • Questo tutorial utilizza la versione 2.1.0 del componente. Nell'oggetto aws.greengrass.TensorFlowLiteObjectDetection componente, sostituite 2.1.0 per utilizzare una versione diversa del componente TensorFlow Lite per il rilevamento degli oggetti.

  2. Esegui il comando seguente per distribuire il componente di classificazione delle immagini TensorFlow Lite sul dispositivo:

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

La distribuzione può richiedere alcuni minuti. Nel passaggio successivo, controlla il registro dei componenti per verificare che la distribuzione sia stata completata correttamente e per visualizzare i risultati dell'inferenza.

Fase 3: Visualizzazione dei risultati dell'inferenza

Dopo aver distribuito il componente, è possibile visualizzare i risultati dell'inferenza nel registro dei componenti sul dispositivo principale Greengrass e nel client AWS IoT MQTT nella console. AWS IoT Per sottoscrivere l'argomento su cui il componente pubblica i risultati dell'inferenza, vedere. Passaggio 1: iscriviti all'argomento delle notifiche predefinito

  • AWS IoTClient MQTT: per visualizzare i risultati pubblicati dal componente di inferenza sull'argomento delle notifiche predefinite, completate i seguenti passaggi:

    1. Nel menu di navigazione della AWS IoTconsole, scegliete Test, MQTT test client.

    2. In Abbonamenti, scegli. ml/tflite/image-classification

      Dovresti vedere messaggi simili all'esempio seguente.

      { "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" } ] }
  • Registro dei componenti: per visualizzare i risultati dell'inferenza nel registro dei componenti, esegui il seguente comando sul tuo dispositivo principale Greengrass.

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

    Dovreste vedere risultati simili a quelli dell'esempio seguente.

    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}

Se non riesci a visualizzare i risultati dell'inferenza nel registro dei componenti o nel client MQTT, la distribuzione non è riuscita o non ha raggiunto il dispositivo principale. Ciò può verificarsi se il dispositivo principale non è connesso a Internet o non dispone delle autorizzazioni necessarie per eseguire il componente. Esegui il comando seguente sul tuo dispositivo principale per visualizzare il file di registro del software AWS IoT Greengrass Core. Questo file include i log del servizio di distribuzione del dispositivo principale Greengrass.

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

Per ulteriori informazioni, consulta Risoluzione dei problemi di inferenza dell'apprendimento automatico.

Passaggi successivi

Se disponi di un dispositivo principale Greengrass con un'interfaccia fotocamera supportata, puoi completareTutorial: Esegui l'inferenza della classificazione delle immagini di esempio sulle immagini di una fotocamera utilizzando TensorFlow Lite, che mostra come modificare il componente di inferenza del campione per eseguire la classificazione delle immagini sulle immagini di una fotocamera.

Per esplorare ulteriormente la configurazione del componente di inferenza per la classificazione delle immagini Sample TensorFlow Lite, provate quanto segue:

  • Modifica il parametro InferenceInterval di configurazione per modificare la frequenza di esecuzione del codice di inferenza.

  • Modifica i parametri ImageName e ImageDirectory di configurazione nella configurazione del componente di inferenza per specificare un'immagine personalizzata da utilizzare per l'inferenza.

Per informazioni sulla personalizzazione della configurazione dei componenti pubblici o sulla creazione di componenti di machine learning personalizzati, consulta. Personalizza i tuoi componenti di machine learning