Esempio: Identificazione degli oggetti negli stream video con SageMaker - Amazon Kinesis Video Streams

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

Esempio: Identificazione degli oggetti negli stream video con SageMaker

Questo esempio dimostra come creare una soluzione utilizzata per l'utilizzoSageMakerper identificare quando determinati oggetti appaiono in un flusso video Amazon Kinesis. SageMakerè la piattaforma gestita per sviluppatori e data scientist per creare, formare e distribuire i modelli di machine learning in modo rapido e semplice.

L'esempio include un container Docker con la funzionalità dell'applicazione e un modello AWS CloudFormation che consente di automatizzare la distribuzione delle risorse AWS dell'applicazione.

Il modello AWS CloudFormation crea le seguenti risorse:

L'applicazione è compatibile con qualsiasi endpoint SageMaker di elaborazione dei dati. In questo esempio vengono fornite istruzioni per creare unSageMakerendpoint che utilizza un modello di esempio di algoritmo di identificazione degli oggetti. Puoi modificare o sostituire l'algoritmo in base ai casi d'uso e ai requisiti dell'applicazione.

Prerequisiti

L'applicazione di esempio include i seguenti prerequisiti:

SageMaker

Questo esempio richiede unSageMakernotebook. Per informazioni sulla creazione di un notebook, consulta.Creazione di un'istanza notebooknellaAmazonSageMakerGuida per gli sviluppatori. Durante la creazione del notebook, prendi nota di quanto segue:

  • Aggiungi ilobject_detection_image_json_format.ipynbesempio (dalIntroduzione ad Amazon Algorithmsnella sezioneSageMakerEsempischeda dellaGiupyterconsole) sul notebook.

  • Crea un bucket Amazon Simple Storage Service (Amazon S3) e inserisci il nome nelPrerequisitipasso quando si aggiunge l'esempio.

  • Dopo avere creato il notebook, scegliere Endpoint configuration (Configurazione endpoint) nella console SageMaker e annotare l'Endpoint name (Nome endpoint).

Kinesis Video Stream

Questo esempio richiede uno o più flussi video Kinesis con dati video in tempo reale. Per informazioni sulla creazione di un flusso video Kinesis e l'invio di dati da una videocamera, consultaGStreamer. Prendere nota del nome del flusso video Kinesis.

Ruolo collegato ai servizi

Questo esempio richiede che l'account disponga di un ruolo collegato ai servizi per l'operazione di AWS Fargate. Nei nuovi account AWS questo ruolo è abilitato per impostazione predefinita. Se viene visualizzato il seguente errore al momento della creazione dell'applicazione, è necessario abilitare il ruolo collegato ai servizi:

Unable to assume the service linked role. Please verify that the ECS service linked role exists

Per abilitare il ruolo collegato ai servizi, eseguire il seguente comando:

aws iam create-service-linked-role --aws-service-name ecs.amazonaws.com

Creazione dell'applicazione

Per creare l'applicazione di esempio, si utilizza AWS CloudFormation e i modelli forniti.

Per utilizzare AWS CloudFormation per creare l'applicazione

  1. Accedere a AWS Management Console e aprire la console AWS CloudFormation utilizzando uno dei seguenti collegamenti delle regioni AWS. Il collegamento avvia lo stack corretto per la regione:

  2. Nella pagina Create Stack (Crea stack), specificare i seguenti valori:

    • Assegnare allo stack un nome univoco (ad esempio,nome utente-KVS-SageMaker).

    • Specificare il nome dell'endpoint SageMaker (non l'ARN dell'endpoint) creato nella sezione precedente.

    • Fornire il nome del flusso video Kinesis. Se disponi di più flussi video Kinesis, specificare i nomi dei flussi tra virgolette e separati da virgole.

    • Lasciare inalterate le altre impostazioni.

    Scegli Next (Successivo).

  3. Nella pagina Options (Opzioni), non modificare le impostazioni.

  4. Seleziona ilRiconosco che AWSCloudFormationpotrebbe creare risorse IAM. Scegli Next (Successivo).

AWS CloudFormation crea l'applicazione.

La tabella seguente elenca i diversi parametri utilizzati dal container Docker al momento della creazione di uno stack con questo modello AWS CloudFormation. I valori sono predefiniti nella risorsa SSM del modello, ma è possibile personalizzarli in base alle esigenze.

Nome risorsa Valore predefinito Descrizione
inferenceInterval 6 The sampling ratio for video frames that are sent to the SageMaker endpoint. Currently, we only support inferencing on I-Frames. The default value of 6 means that 1 out of every 6 I-Frames is sent to the SageMaker endpoint.
sageMakerTaskQueueSize 5000 The size of the queue that maintains the pending requests to the SageMaker endpoint. The size of the queue is affected by ‘inferenceInternval’ and ‘sageMakerTaskTimeoutInMilli’. If SageMaker inference takes longer, requests are buffered in this queue.
sageMakerTaskThreadPoolSize 20 Number of threads that is used to concurrently execute SageMaker requests.
sageMakerTaskTimeoutInMilli 20000 The maximum duration allowed for a single request (or a retry request) that is sent to the SageMaker endpoint.
sageMakerTaskThreadPoolName SageMakerThreadPool-%d The name of the threadpool that is sending requests to the SageMaker endpoint.

Per personalizzare i valori di questi parametri, scarica il AWS CloudFormation modello scegliendo l’URL nella pagina Crea stack e quindi individua i parametri nella sezione Params del modello che è come il seguente:

Params: Type: AWS::SSM::Parameter Properties: Name: Ref: AppName Description: "Configuration for SageMaker app" Type: String Value: Fn::Sub: | {"streamNames":[${StreamNames}], "tagFilters":[${TagFilters}],"sageMakerEndpoint":"${SageMakerEndpoint}", "endPointAcceptContentType": "${EndPointAcceptContentType}", "kdsStreamName":"${Kds}","inferenceInterval":6,"sageMakerTaskQueueSize":5000, "sageMakerTaskThreadPoolSize":20,"sageMakerTaskTimeoutInMilli":20000, "sageMakerTaskThreadPoolName":"SageMakerThreadPool-%d"}

Monitoraggio dell'applicazione

L'applicazione creata dalAWS CloudFormationil modello include un AmazonCloudWatchPannello di controllo e unCloudWatchFlusso di log utilizzato per monitorare i parametri e gli eventi dell'applicazione.

Pannello di controllo dell'applicazione

L'applicazione include un pannello di controllo CloudWatch per monitorare i relativi parametri. Per visualizzare la dashboard dell'applicazione, apri ilCloudWatchconsole inhttps://console.aws.amazon.com/cloudwatch/e scegliPannelli di controllosulla barra di navigazione sinistra.

SelezionaKVS-SageMaker-Driver-KvsSageMakerIntegration-aws-region Pannello di controllo. Il pannello di controllo mostra le seguenti informazioni:

  • Metriche dei frame: Metriche per l'elaborazione del flusso video, invio di fotogrammi alSageMakerendpoint e scrittura sul flusso di dati Kinesis che collega ilSageMakernotebook conAWS Lambdafunzione che elaboraSageMakerrisultati di output di inferenza.

  • IngestToProcessLatency: La differenza di tempo tra l'inclusione di un fotogramma video nel servizio Kinesis Video Streams e la ricezione del fotogramma da parte dell'applicazione.

  • Totale leasing corrente: All'applicazione vengono concesse le autorizzazioni per la lettura dal flusso video Kinesis mediante un lease. Questo parametro mostra il numero di lease attivi. L'applicazione utilizza un lease per flusso video Kinesis e un lease per la sincronizzazione fra i flussi.

  • Metriche di sincronizzazione leasing: La frequenza e la durata della sincronizzazione dei lease di autorizzazione.

  • LeaseCountper lavoratore: La distribuzione dei contratti di locazione tra iSageMakerthread worker.

  • Numero di worker: Il numero diSageMakerlavoratori che elaborano flussi. Ogni attività di un cluster Amazon ECS prevede un lavoratore. Un lavoratore può elaborare più flussi.

  • Utilizzo del servizio ECS: Metriche di utilizzo per il cluster Amazon ECS.

  • KinesisDataFlussi: Metriche di utilizzo del flusso di dati Kinesis.

  • SageMaker: Operazioni eseguite dalSageMakernotebook.

  • Lambda: Numero e durata della funzione Lambda che elabora l'output dalSageMakernotebook.

Se una qualsiasi delle informazioni di questi grafici indica un problema operativo (ad esempio un valore costantemente in aumento anziché stabile), consulta la sezione seguente per informazioni su come leggere i log delle applicazioni per determinare il problema.

Log di CloudWatch

L'applicazione include due log CloudWatch:

Log dell'applicazione

Puoi utilizzare il log dell'applicazione per monitorare gli eventi e le condizioni di errore dell'applicazione. Questo log è utile se devi contattare il supporto del prodotto relativamente a un problema.

Per leggere il log dell'applicazione

  1. Apri la console Amazon ECS all'indirizzohttps://console.aws.amazon.com/ecs.

  2. Scegliere il cluster KVS-Sagemaker-Driver.

  3. Selezionastack-name-SageMakerDriverServicenel servizioServizischeda.

  4. Scegliere la scheda Logs (Registri).

Il log dell'applicazione mostra eventi quali l'inizializzazione, la configurazione e le attività dei lease.

Il registro delle funzioni Lambda

Puoi utilizzare il log della funzione Lambda per tenere traccia delle identificazioni degli oggetti andate a buon fine.

Per leggere il log Lambda

  1. Apertura dellaAWS Lambdaconsole inhttps://console.aws.amazon.com/lambda.

  2. Scegli la funzione Lambda per l'applicazione. Il nome della funzione Lambda ha il seguente formato:

    stack-name-LambdaFunction-A1B2C3D4E5F6G
  3. Scegliere il riquadro Monitoring (Monitoraggio).

  4. Seleziona Visualizza log in CloudWatch.

LaCloudWatchIl log dell'applicazione mostra le identificazioni di oggetti andate a buon fine nel flusso video Kinesis e in altri eventi dell'applicazione.

Ampliamento dell'applicazione

Puoi aggiungere funzionalità personalizzate all'applicazione modificando i valori forniti nella finestra del modello AWS CloudFormation, come indicato di seguito:

  • EndPointAcceptContentTipo: Puoi modificare questo valore seSageMakerendpoint non accetta i fotogrammi in formato JPG. Sono supportati i formati seguenti:

    • image/jpeg

    • image/png

    • image/bmp

    • image/gif

    • application/x-image

  • LambdaFunctionBucket, LambdaFunctionKey: Le impostazioni fornite utilizzano unAWS Lambdafunzione che elabora ilSageMakeroutput e lo scrive suCloudWatchregistri. Se vuoi inviare ilSageMakerIn uscita altrove, puoi fornire la tua funzione Lambda.

  • Filtri per i tag: Se si dispone di stream che sono contrassegnati con il tagTagStream, è possibile specificare i tag dei flussi da elaborare. Ad esempio, se disponi di due flussi con la chiave Location con i valori Front e Parking, potresti applicare filtri per utilizzare solo quei flussi immettendo quanto segue:

    {"key":"Location","values":["Front","Parking"]}

Pulizia dell'applicazione

Al termine dell'utilizzo dell'applicazione creata per questo tutorial, ti consigliamo di eliminare le risorse che non desideri conservare per evitare l'addebito di spese aggiuntive.

  1. SageMakerEndpoint : Se hai creato ilSageMakerendpoint per questo tutorial anziché utilizzare un endpoint esistente, elimina l'endpoint. Nel pannello di controllo SageMaker, scegliere Endpoint configurations (Configurazioni endpoint). Scegliere l'endpoint creato, quindi Actions (Operazioni), Delete (Elimina). Confermare l'eliminazione.

  2. SageMakernotebook: SulSageMakerconsole, scegliistanze notebook. Scegliere il notebook creato, quindi Actions (Operazioni), Stop (Arresta). Se lo Status (Stato) del notebook è Stopped (Arrestato), scegliere Actions (Operazioni), Delete (Elimina). Confermare l'eliminazione.

    Nota

    Per ulteriori informazioni sulla pulizia delle risorse SageMaker, consulta Pulizia nella Guida per gli sviluppatori SageMaker.

  3. SageMakerPolicy di esecuzione: Sulla console IAM, selezionare nel riquadro di navigazionePolicy. Scegliere la policy creata per questo tutorial. Il nome della policy è simile al seguente: AmazonSageMaker-ExecutionPolicy-timestamp

    Scegliere Policy actions (Operazioni policy), Delete (Elimina). Confermare l'eliminazione.

  4. SageMakerruolo di esecuzione: Sulla console IAM, selezionare nel riquadro di navigazioneRuoli. Scegliere il ruolo creato per questo tutorial. Il nome del ruolo è simile al seguente: AmazonSageMaker-ExecutionRole-timestamp

    Scegli Delete role (Elimina ruolo). Confermare l'eliminazione.

  5. AWS CloudFormationpila: SulAWS CloudFormationconsole, scegliere lo stack creato per questo tutorial. Scegli Actions (Operazioni), quindi Delete Stack (Elimina stack). Confermare l'eliminazione.

  6. Bucket Amazon S3: Nella console Amazon S3, scegliere il bucket creato per archiviare l'SageMakerasset. Scegliere Delete (Elimina). Immettere il nome del bucket e scegliere Confirm (Conferma) per confermare l'eliminazione.

  7. Flusso video Kinesis: Nella console Kinesis Video Streams, scegliere il flusso video creato per l'applicazione. Scegliere Delete (Elimina). Confermare l'eliminazione.