Conector de detecção de objetos do ML - AWS IoT Greengrass

AWS IoT Greengrass Version 1 entrou na fase de vida útil prolongada em 30 de junho de 2023. Para obter mais informações, consulte política de manutenção do AWS IoT Greengrass V1. Após essa data, AWS IoT Greengrass V1 não lançaremos atualizações que forneçam recursos, aprimoramentos, correções de erros ou patches de segurança. Os dispositivos que funcionam AWS IoT Greengrass V1 não serão interrompidos e continuarão operando e se conectando à nuvem. É altamente recomendável que você migre para AWS IoT Greengrass Version 2, o que adiciona novos recursos significativos e suporte para plataformas adicionais.

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Conector de detecção de objetos do ML

Atenção

Esse conector passou para a fase de vida útil estendida e AWS IoT Greengrass não lançará atualizações que forneçam atributos, aprimoramentos para atributos existentes, patches de segurança ou correções de erros. Para obter mais informações, consulte Política de manutenção do AWS IoT Greengrass Version 1.

Os conectores ML Object Detection fornecem um serviço de inferência de aprendizado de máquina (ML) executado no AWS IoT Greengrass núcleo. Esse serviço de inferência local realiza a detecção de objetos usando um modelo de detecção de objetos compilado pelo compilador de aprendizado profundo SageMaker AI Neo. Dois tipos de modelos de detecção de objetos são compatíveis: Single Shot Multibox Detector (SSD) e You Only Look Once (YOLO) v3. Para obter mais informações, consulte Requisitos do modelo de detecção de objetos.

As funções Lambda definidas pelo usuário usam o Machine AWS IoT Greengrass Learning SDK para enviar solicitações de inferência ao serviço de inferência local. O serviço realiza a inferência local em uma imagem de entrada e retorna uma lista de previsões para cada objeto detectado na imagem. Cada previsão contém uma categoria de objeto, uma pontuação de confiança de previsão e coordenadas de pixels que especificam uma caixa delimitadora em torno do objeto previsto.

AWS IoT Greengrass fornece conectores de detecção de objetos de ML para várias plataformas:

Conector

Descrição e ARN

Detecção de objetos em ML Aarch64 JTX2

Serviço de inferência de detecção de objetos para NVIDIA Jetson. TX2 Compatível com a aceleração de GPU.

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

Detecção de objetos do ML x86_64

Serviço de inferência de detecção de objetos para plataformas x86_64.

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

Detecção de objetos de ML ARMv7

Serviço de inferência de detecção de objetos para ARMv7 plataformas.

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

Requisitos

Esses conectores têm os seguintes requisitos:

  • AWS IoT Greengrass Core Software v1.9.3 ou posterior.

  • Python, versão 3.7 ou 3.8, instalado no dispositivo de núcleo e adicionado à variável de ambiente PATH.

    nota

    Para usar o Python 3.8, execute o comando a seguir para criar um symblink da pasta de instalação padrão do Python 3.7 para os binários instalados do Python 3.8.

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

    Isso configura seu dispositivo para atender ao requisito Python para AWS IoT Greengrass.

  • Dependências do tempo de execução de aprendizado profundo SageMaker AI Neo instalado no dispositivo principal. Para obter mais informações, consulte Instalando dependências de tempo de execução do Neo deep learning no núcleo AWS IoT Greengrass.

  • Um recurso de ML no grupo do Greengrass. O recurso de ML deve fazer referência a um bucket do Amazon S3 que contém um modelo de detecção de objeto. Para obter mais informações, consulte Origem de modelo do Amazon S3.

    nota

    O modelo deve ser um tipo de modelo de detecção de objetos Single Shot Multibox Detector ou You Only Look Once v3. Ele deve ser compilado usando o compilador de aprendizado profundo SageMaker AI Neo. Para obter mais informações, consulte Requisitos do modelo de detecção de objetos.

  • O conector de feedback do ML adicionado ao grupo do Greengrass e configurado. Isso será necessário somente se você quiser usar o conector para fazer upload de dados de entrada do modelo e publicar previsões em um tópico MQTT.

  • AWS IoT Greengrass O Machine Learning SDK v1.1.0 é necessário para interagir com esse conector.

Requisitos do modelo de detecção de objetos

Os conectores de detecção de objetos do ML oferecem suporte aos tipos de modelo de detecção de objetos Single Shot multibox Detector (SSD) e You Only Look Once (YOLO) v3. Você pode usar os componentes de detecção de objetos fornecidos pelo GluonCV para treinar o modelo com seu próprio conjunto de dados. Ou pode usar modelos pré-treinados do GluonCV Model Zoo:

Seu modelo de detecção de objetos deve ser treinado com imagens de entrada 512 x 512. Os modelos pré-treinados do GluonCV Model Zoo já atendem a esse requisito.

Modelos treinados de detecção de objetos devem ser compilados com o compilador de aprendizado profundo SageMaker AI Neo. Ao compilar, verifique se o hardware de destino corresponde ao hardware do seu dispositivo de núcleo do Greengrass. Para obter mais informações, consulte SageMaker AI Neo no Amazon SageMaker AI Developer Guide.

O modelo compilado deve ser adicionado como um recurso de ML (origem de modelo do Amazon S3) ao mesmo grupo do Greengrass que o conector.

Parâmetros do conector

Esses conectores fornecem os parâmetros a seguir.

MLModelDestinationPath

O caminho absoluto para o bucket do Amazon S3 que contém o modelo de ML compatível com Neo. Esse é o caminho de destino especificado para o recurso de modelo de ML.

Nome de exibição no AWS IoT console: caminho de destino do modelo

Obrigatório: true

Digite: string

Padrão válido: .+

MLModelResourceId

O ID do recurso de ML que faz referência ao modelo de origem.

Nome de exibição no AWS IoT console: recurso de ML do grupo Greengrass

Obrigatório: true

Digite: S3MachineLearningModelResource

Padrão válido: ^[a-zA-Z0-9:_-]+$

LocalInferenceServiceName

O nome para o serviço de inferência local. As funções Lambda definidas pelo usuário invocam o serviço passando o nome para a função do SDK invoke_inference_service do Machine AWS IoT Greengrass Learning. Para obter um exemplo, consulte Exemplo de uso.

Nome de exibição no AWS IoT console: nome do serviço de inferência local

Obrigatório: true

Digite: string

Padrão válido: ^[a-zA-Z0-9][a-zA-Z0-9-]{1,62}$

LocalInferenceServiceTimeoutSeconds

O tempo (em segundos) até que a solicitação de inferência seja encerrada. O valor mínimo é 1. O valor padrão é 10.

Nome de exibição no AWS IoT console: Tempo limite (segundo)

Obrigatório: true

Digite: string

Padrão válido: ^[1-9][0-9]*$

LocalInferenceServiceMemoryLimitKB

A quantidade de memória (em KB) que o serviço tem acesso. O valor mínimo é 1.

Nome de exibição no AWS IoT console: limite de memória

Obrigatório: true

Digite: string

Padrão válido: ^[1-9][0-9]*$

GPUAcceleration

O contexto de computação CPU ou GPU (acelerada). Essa propriedade se aplica somente ao JTX2 conector ML Image Classification Aarch64.

Nome de exibição no AWS IoT console: aceleração de GPU

Obrigatório: true

Digite: string

Valores válidos: CPU ou GPU

MLFeedbackConnectorConfigId

O ID da configuração de feedback a ser usada para fazer upload dos dados de entrada do modelo. Ele deve corresponder ao ID de uma configuração de feedback definida para o conector ML Feedback.

Esse parâmetro é necessário somente se você quiser usar o conector ML Feedback para fazer upload de dados de entrada do modelo e publicar previsões em um tópico MQTT.

Nome de exibição no AWS IoT console: ID de configuração do conector ML Feedback

Obrigatório: false

Digite: string

Padrão válido: ^$|^[a-zA-Z0-9][a-zA-Z0-9-]{1,62}$

Exemplo de criação de conector (AWS CLI)

O seguinte comando da CLI cria um ConnectorDefinition com uma versão inicial que contém um conector de detecção de objeto do ML. Este exemplo cria uma instância do ARMv7l conector 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" } } ] }'
nota

A função do Lambda nesses conectores tem um ciclo de vida longo.

No AWS IoT Greengrass console, você pode adicionar um conector na página Conectores do grupo. Para obter mais informações, consulte Conceitos básicos de conectores do Greengrass (console).

Dados de entrada

Esses conectores aceitam um arquivo de imagem como entrada. Os arquivos de imagem de entrada devem estar no formato jpeg ou png. Para obter mais informações, consulte Exemplo de uso.

Esses conectores não aceitam mensagens MQTT como dados de entrada.

Dados de saída

Esses conectores retornam uma lista formatada de resultados de previsão para os objetos identificados na imagem de entrada:

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

Cada previsão na lista está contida entre colchetes e contém seis valores:

  • O primeiro valor representa a categoria de objeto prevista para o objeto identificado. As categorias de objetos e seus valores correspondentes são determinados ao treinar seu modelo de machine learning de detecção de objetos no compilador de aprendizado profundo do Neo.

  • O segundo valor é a pontuação de confiança para a previsão da categoria de objeto. Isso representa a probabilidade de a previsão estar correta.

  • Os últimos quatro valores correspondem às dimensões de pixels que representam uma caixa delimitadora em torno do objeto previsto na imagem.

Esses conectores não publicam mensagens MQTT como dados de saída.

Exemplo de uso

O exemplo de função do Lambda a seguir usa o SDK AWS IoT Greengrass de machine learning para interagir com um conector de detecção de objetos do ML.

nota

Você pode baixar o SDK na página de downloads do ‭‬SDK AWS IoT Greengrass de Machine Learning‭.

O exemplo inicializa um cliente do SDK e de forma síncrona chama a função invoke_inference_service do SDK para invocar o serviço de inferência local. Ela passa o tipo de algoritmo, o nome do serviço, o tipo de imagem e o conteúdo da imagem. Em seguida, o exemplo analisa a resposta do serviço para obter os resultados de probabilidade (previsões).

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

A invoke_inference_service função no AWS IoT Greengrass Machine Learning SDK aceita os seguintes argumentos.

Argumento

Descrição

AlgoType

O nome do tipo de algoritmo a ser usado para inferência. No momento, só há compatibilidade com object-detection.

Obrigatório: true

Digite: string

Valores válidos: object-detection

ServiceName

O nome do serviço de inferência local. Use o nome que você especificou para o parâmetro LocalInferenceServiceName quando você configurou o conector.

Obrigatório: true

Digite: string

ContentType

O tipo de mime da imagem de entrada.

Obrigatório: true

Digite: string

Valores válidos: image/jpeg, image/png

Body

O conteúdo do arquivo de imagem de entrada.

Obrigatório: true

Digite: binary

Instalando dependências de tempo de execução do Neo deep learning no núcleo AWS IoT Greengrass

Os conectores ML Object Detection são fornecidos com o SageMaker AI Neo deep learning runtime (DLR). Os conectores usam o runtime para atender ao modelo de ML. Para usar esses conectores, você deve instalar as dependências do DLR no dispositivo de núcleo.

Antes de instalar as dependências do DLR, certifique-se de que as bibliotecas do sistema necessárias (com as versões mínimas especificadas) estejam presentes no dispositivo.

NVIDIA Jetson TX2
  1. Instale CUDA Toolkit 9.0 e cuDNN 7.0. Você pode seguir as instruções em Configurar outros dispositivos no tutorial Conceitos básicos.

  2. Habilite repositórios universe para que o conector possa instalar softwares livres mantidos pela comunidade. Para obter mais informações, consulte Repositórios/Ubuntu na documentação do Ubuntu.

    1. Abra o arquivo /etc/apt/sources.list.

    2. Certifique-se de que as seguintes linhas permaneçam sem comentário.

      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. Salve uma cópia do script de instalação a seguir em um arquivo denominado nvidiajtx2.sh no dispositivo de núcleo.

    #!/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 o OpenCV não for instalado com êxito usando esse script, você poderá tentar compilar a partir do código-fonte. Para obter mais informações, consulte Instalação no Linux na documentação do OpenCV ou consulte outros recursos online da sua plataforma.

  4. A partir do diretório em que você salvou o arquivo, execute o seguinte comando:

    sudo nvidiajtx2.sh
x86_64 (Ubuntu or Amazon Linux)
  1. Salve uma cópia do script de instalação a seguir em um arquivo denominado x86_64.sh no dispositivo de núcleo.

    #!/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 o OpenCV não for instalado com êxito usando esse script, você poderá tentar compilar a partir do código-fonte. Para obter mais informações, consulte Instalação no Linux na documentação do OpenCV ou consulte outros recursos online da sua plataforma.

  2. A partir do diretório em que você salvou o arquivo, execute o seguinte comando:

    sudo x86_64.sh
ARMv7 (Raspberry Pi)
  1. Salve uma cópia do script de instalação a seguir em um arquivo denominado armv7l.sh no dispositivo de núcleo.

    #!/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 o OpenCV não for instalado com êxito usando esse script, você poderá tentar compilar a partir do código-fonte. Para obter mais informações, consulte Instalação no Linux na documentação do OpenCV ou consulte outros recursos online da sua plataforma.

  2. A partir do diretório em que você salvou o arquivo, execute o seguinte comando:

    sudo bash armv7l.sh
    nota

    Em um Raspberry Pi, usar o pip para instalar dependências de machine learning é uma operação com uso intensivo de memória que pode fazer com que o dispositivo fique sem memória e deixe de responder. Como alternativa, você pode aumentar temporariamente o tamanho da permuta. Em /etc/dphys-swapfile, aumente o valor da variável CONF_SWAPSIZE e, em seguida, execute o seguinte comando para reiniciar dphys-swapfile.

    /etc/init.d/dphys-swapfile restart

Registro em log e solução de problemas

Dependendo das configurações do seu grupo, os registros de eventos e erros são gravados CloudWatch nos Registros, no sistema de arquivos local ou em ambos. Os logs desse conector usam o prefixo LocalInferenceServiceName. Se o conector se comportar de forma inesperada, verifique os logs do conector. Normalmente, eles contêm informações úteis de depuração, como uma dependência de biblioteca de ML ausente ou a causa de uma falha de startup do conector.

Se o AWS IoT Greengrass grupo estiver configurado para gravar registros locais, o conector grava arquivos de log emgreengrass-root/ggc/var/log/user/region/aws/. Para obter mais informações sobre o registro em log do Greengrass, consulte Monitoramento com logs do AWS IoT Greengrass.

Use as informações a seguir para ajudar a solucionar os problemas com os conectores de detecção de objetos do ML.

Bibliotecas do sistema necessárias

As guias a seguir listam as bibliotecas do sistema necessárias para cada conector de detecção de objetos do ML.

ML Object Detection Aarch64 JTX2
Biblioteca Versão mínima
ld-linux-aarch64.so.1 GLIBC_2.17
libc.so.6 GLIBC_2.17
libcublas.so.9.0 não aplicável
libcudart.so.9.0 não aplicável
libcudnn.so.7 não aplicável
libcufft.so.9.0 não aplicável
libcurand.so.9.0 não aplicável
libcusolver.so.9.0 não aplicável
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 não aplicável
libnvrm_gpu.so não aplicável
libnvrm.so não aplicável
libnvidia-fatbinaryloader.so.28.2.1 não aplicável
libnvos.so não aplicável
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
Biblioteca Versão mínima
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
Biblioteca Versão mínima
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

Problemas

Sintomas Solução

Em um Raspberry Pi, a mensagem de erro a seguir será registrada em log e você não está usando a câmera: Failed to initialize libdc1394

Execute o comando a seguir para desabilitar o driver:

sudo ln /dev/null /dev/raw1394

Essa operação é efêmera. O symblink desaparece após a reinicialização. Consulte o manual de distribuição do seu sistema operacional para saber como criar o link automaticamente na reinicialização.

Licenças

Os conectores de detecção de objetos do ML incluem o seguinte licenciamento/software de terceiros:

Esse conector é liberado de acordo com o Contrato de licença de software do Greengrass Core.

Consulte também