Saltar para o conteúdo

Sony IMX500 Exportar para Ultralytics YOLOv8

Este guia abrange a exportação e a implementação de modelos Ultralytics YOLOv8 para as câmaras Raspberry Pi AI que incluem o sensor Sony IMX500.

A implementação de modelos de visão por computador em dispositivos com poder computacional limitado, como a câmara Raspberry Pi AI, pode ser complicada. A utilização de um formato de modelo optimizado para um desempenho mais rápido faz uma enorme diferença.

O formato do modelo IMX500 foi concebido para consumir o mínimo de energia e, ao mesmo tempo, proporcionar um desempenho rápido para redes neuronais. Permite-lhe otimizar os seus Ultralytics YOLOv8 modelos para inferências de alta velocidade e baixo consumo de energia. Neste guia, vamos orientá-lo na exportação e implantação de seus modelos para o formato IMX500, facilitando o bom desempenho de seus modelos na Raspberry Pi AI Camera.

Câmara de IA Raspberry Pi

Porque é que deve exportar para o IMX500

O sensor de visão inteligente IMX500 da Sony é uma peça de hardware revolucionária no processamento de IA de ponta. É o primeiro sensor de visão inteligente do mundo com capacidades de IA no chip. Este sensor ajuda a ultrapassar muitos desafios na IA de ponta, incluindo estrangulamentos no processamento de dados, preocupações com a privacidade e limitações de desempenho.
Enquanto outros sensores se limitam a transmitir imagens e fotogramas, o IMX500 conta uma história completa. Processa dados diretamente no sensor, permitindo que os dispositivos gerem conhecimentos em tempo real.

Exportação da IMX500 da Sony para modelos YOLOv8

O IMX500 foi concebido para transformar a forma como os dispositivos tratam os dados diretamente no sensor, sem necessidade de os enviar para a nuvem para processamento.

A IMX500 funciona com modelos quantizados. A quantização torna os modelos mais pequenos e mais rápidos sem perder muita precisão. É ideal para os recursos limitados da computação periférica, permitindo que as aplicações respondam rapidamente através da redução da latência e do processamento rápido de dados a nível local, sem dependência da nuvem. O processamento local também mantém os dados do utilizador privados e seguros, uma vez que não são enviados para um servidor remoto.

IMX500 Caraterísticas principais:

  • Saída de metadados: Em vez de transmitir apenas imagens, a IMX500 pode emitir imagens e metadados (resultado da inferência), e pode emitir apenas metadados para minimizar o tamanho dos dados, reduzir a largura de banda e diminuir os custos.
  • Responde às preocupações com a privacidade: Ao processar os dados no dispositivo, o IMX500 resolve as preocupações com a privacidade, ideal para aplicações centradas no ser humano, como a contagem de pessoas e o controlo de ocupação.
  • Processamento em tempo real: O processamento rápido e no sensor suporta decisões em tempo real, perfeito para aplicações de IA de ponta, como sistemas autónomos.

Antes de começar: Para obter melhores resultados, certifique-se de que o seu modelo YOLOv8 está bem preparado para a exportação, seguindo o nosso Guia de Formação de Modelos, Guia de Preparação de Dados e Guia de Afinação de Hiperparâmetros.

Exemplos de utilização

Exportar um modelo Ultralytics YOLOv8 para o formato IMX500 e executar a inferência com o modelo exportado.

Nota

Aqui realizamos a inferência apenas para garantir que o modelo funciona como esperado. No entanto, para a implementação e inferência na câmara Raspberry Pi AI, consulte a secção Utilizar a exportação IMX500 na implementação.

Exemplo

from ultralytics import YOLO

# Load a YOLOv8n PyTorch model
model = YOLO("yolov8n.pt")

# Export the model
model.export(format="imx")  # exports with PTQ quantization by default

# Load the exported model
imx_model = YOLO("yolov8n_imx_model")

# Run inference
results = imx_model("https://ultralytics.com/images/bus.jpg")
# Export a YOLOv8n PyTorch model to imx format with Post-Training Quantization (PTQ)
yolo export model=yolov8n.pt format=imx

# Run inference with the exported model
yolo predict model=yolov8n_imx_model source='https://ultralytics.com/images/bus.jpg'

O processo de exportação criará um modelo ONNX para validação da quantização, juntamente com um diretório denominado <model-name>_imx_model. Este diretório irá incluir o packerOut.zip que é essencial para empacotar o modelo para ser implementado no hardware IMX500. Além disso, o ficheiro <model-name>_imx_model conterá um ficheiro de texto (labels.txt) que enumera todas as etiquetas associadas ao modelo.

yolov8n_imx_model
├── dnnParams.xml
├── labels.txt
├── packerOut.zip
├── yolov8n_imx.onnx
├── yolov8n_imx500_model_MemoryReport.json
└── yolov8n_imx500_model.pbtxt

Argumentos

Ao exportar um modelo para o formato IMX500, pode especificar vários argumentos:

Chave Valor Descrição
format imx Formato para o qual exportar (imx)
int8 True Ativar a quantização INT8 para o modelo (predefinição: True)
imgsz 640 Tamanho da imagem para a entrada do modelo (predefinição: 640)

Utilização da exportação IMX500 na implementação

Depois de exportar o modelo Ultralytics YOLOv8n para o formato IMX500, este pode ser implementado na câmara Raspberry Pi AI para inferência.

Pré-requisitos de hardware

Certifique-se de que possui o hardware abaixo indicado:

  1. Raspberry Pi 5 ou Raspberry Pi 4 Modelo B
  2. Câmara de IA Raspberry Pi

Ligar a câmara Raspberry Pi AI ao conetor MIPI CSI de 15 pinos do Raspberry Pi e ligar o Raspberry Pi

Pré-requisitos do software

Nota

Este guia foi testado com o Raspberry Pi OS Bookworm a funcionar num Raspberry Pi 5

Passo 1: Abra uma janela de terminal e execute os seguintes comandos para atualizar o software Raspberry Pi para a versão mais recente.

sudo apt update && sudo apt full-upgrade

Passo 2: Instalar o firmware IMX500, necessário para o funcionamento do sensor IMX500, juntamente com uma ferramenta de empacotamento.

sudo apt install imx500-all imx500-tools

Passo 3: Instalar os pré-requisitos para executar picamera2 aplicação. Utilizaremos esta aplicação mais tarde para o processo de implementação.

sudo apt install python3-opencv python3-munkres

Passo 4: Reinicie o Raspberry Pi para que as alterações entrem em vigor

sudo reboot

Modelo de pacote e implementação na câmara de IA

Depois de obter packerOut.zip do processo de conversão IMX500, pode passar este ficheiro para a ferramenta de empacotamento para obter um ficheiro RPK. Este ficheiro pode então ser implementado diretamente na câmara AI utilizando picamera2.

Passo 1: Empacotar o modelo num ficheiro RPK

imx500-package -i <path to packerOut.zip> -o <output folder>

O procedimento acima irá gerar um network.rpk dentro da pasta de saída especificada.

Passo 2: Clonar picamera2 instale-o e navegue até aos exemplos imx500

git clone -b next https://github.com/raspberrypi/picamera2
cd picamera2
pip install -e .  --break-system-packages
cd examples/imx500

Passo 3: Execute a deteção de objectos do YOLOv8 , utilizando o ficheiro labels.txt que foi gerado durante a exportação do IMX500.

python imx500_object_detection_demo.py --model <path to network.rpk> --fps 25 --bbox-normalization --ignore-dash-labels --bbox-order xy --labels <path to labels.txt>

Poderá então ver o resultado da inferência em direto da seguinte forma

Inferência na câmara de IA Raspberry Pi

Referências

YOLOv8 Os parâmetros de referência abaixo foram executados pela equipa Ultralytics na câmara Raspberry Pi AI com imx velocidade e precisão de medição do formato do modelo.

Modelo Formato Estado Tamanho (MB) mAP50-95(B) Tempo de inferência (ms/im)
YOLOv8n imx 2.9 0.522 66.66

Nota

A validação do parâmetro de referência acima foi efectuada utilizando o conjunto de dados coco8

O que é que está debaixo do capot?

Implantação do IMX500

Kit de ferramentas de compressão de modelos (MCT) da Sony

O kit de ferramentas de compressão de modelos (MCT) da Sony é uma ferramenta poderosa para otimizar modelos de aprendizagem profunda através de quantização e poda. Suporta vários métodos de quantização e fornece algoritmos avançados para reduzir o tamanho do modelo e a complexidade computacional sem sacrificar significativamente a precisão. O MCT é particularmente útil para implantar modelos em dispositivos com recursos limitados, garantindo inferência eficiente e latência reduzida.

Caraterísticas suportadas pelo MCT

O MCT da Sony oferece uma gama de funcionalidades concebidas para otimizar os modelos de redes neurais:

  1. Optimizações de gráficos: Transforma modelos em versões mais eficientes, dobrando camadas como a normalização de lotes em camadas anteriores.
  2. Pesquisa de parâmetros de quantização: Minimiza o ruído de quantização usando métricas como Erro Quadrático Médio, No-Clipping e Erro Médio Médio.
  3. Algoritmos avançados de quantização:
    • Correção do desvio negativo: Resolve problemas de desempenho da quantização de ativação simétrica.
    • Filtragem de outliers: Utiliza o z-score para detetar e remover os outliers.
    • Agrupamento: Utiliza grelhas de quantização não uniformes para uma melhor correspondência de distribuição.
    • Pesquisa de precisão mista: Atribui diferentes larguras de bits de quantização por camada com base na sensibilidade.
  4. Visualização: Utilize o TensorBoard para observar informações sobre o desempenho do modelo, fases de quantização e configurações de largura de bits.

Quantização

O MCT suporta vários métodos de quantização para reduzir o tamanho do modelo e melhorar a velocidade de inferência:

  1. Quantização pós-formação (PTQ):
    • Disponível através das APIs Keras e PyTorch .
    • Complexidade: Baixa
    • Custo computacional: Baixo (CPU minutos)
  2. Quantização pós-formação baseada em gradiente (GPTQ):
    • Disponível através das APIs Keras e PyTorch .
    • Complexidade: Média
    • Custo computacional: Moderado (2-3 GPU horas)
  3. Formação com consciência da quantização (QAT):
    • Complexidade: elevada
    • Custo computacional: elevado (12-36 GPU horas)

A MCT também suporta vários esquemas de quantização para pesos e activações:

  1. Potência de dois (compatível com o hardware)
  2. Simétrico
  3. Uniforme

Poda estruturada

A MCT introduz a poda de modelos estruturada e sensível ao hardware, concebida para arquitecturas de hardware específicas. Essa técnica aproveita os recursos de Instrução Única, Dados Múltiplos (SIMD) da plataforma de destino, podando grupos SIMD. Isso reduz o tamanho e a complexidade do modelo ao mesmo tempo em que otimiza a utilização do canal, alinhado com a arquitetura SIMD para a utilização de recursos direcionados da pegada de memória de pesos. Disponível através das APIs Keras e PyTorch .

Ferramenta de conversão IMX500 (Compilador)

A ferramenta de conversão IMX500 é parte integrante do conjunto de ferramentas IMX500, permitindo a compilação de modelos para implementação no sensor IMX500 da Sony (por exemplo, câmaras Raspberry Pi AI). Esta ferramenta facilita a transição dos modelos Ultralytics YOLOv8 processados através do software Ultralytics , garantindo a sua compatibilidade e desempenho eficiente no hardware especificado. O procedimento de exportação após a quantização do modelo envolve a geração de ficheiros binários que encapsulam dados essenciais e configurações específicas do dispositivo, simplificando o processo de implementação na câmara Raspberry Pi AI.

Casos de utilização no mundo real

A exportação para o formato IMX500 tem uma vasta aplicabilidade em todos os sectores. Eis alguns exemplos:

  • IA de ponta e IoT: Permitir a deteção de objectos em drones ou câmaras de segurança, onde o processamento em tempo real em dispositivos de baixo consumo é essencial.
  • Dispositivos vestíveis: Implementar modelos optimizados para processamento de IA em pequena escala em dispositivos portáteis de monitorização da saúde.
  • Cidades inteligentes: Utilize os modelos YOLOv8 exportados pelo IMX500 para monitorização do tráfego e análise de segurança com processamento mais rápido e latência mínima.
  • Análise de retalho: Melhorar a monitorização na loja através da implementação de modelos optimizados em sistemas de ponto de venda ou prateleiras inteligentes.

Conclusão

A exportação de modelos Ultralytics YOLOv8 para o formato IMX500 da Sony permite-lhe implementar os seus modelos para uma inferência eficiente em câmaras baseadas em IMX500. Ao tirar partido de técnicas de quantização avançadas, pode reduzir o tamanho do modelo e melhorar a velocidade de inferência sem comprometer significativamente a precisão.

Para mais informações e diretrizes detalhadas, consulte o website IMX500 da Sony.

FAQ

Como é que exporto um modelo YOLOv8 para o formato IMX500 para a câmara Raspberry Pi AI?

Para exportar um modelo YOLOv8 para o formato IMX500, utilize a API Python ou o comando CLI :

from ultralytics import YOLO

model = YOLO("yolov8n.pt")
model.export(format="imx")  # Exports with PTQ quantization by default

O processo de exportação criará um diretório que contém os ficheiros necessários para a implementação, incluindo packerOut.zip que pode ser utilizado com a ferramenta de empacotamento IMX500 no Raspberry Pi.

Quais são as principais vantagens de utilizar o formato IMX500 para a implementação de IA periférica?

O formato IMX500 oferece várias vantagens importantes para a implantação na periferia:

  • O processamento de IA no chip reduz a latência e o consumo de energia
  • Produz imagens e metadados (resultado da inferência) em vez de apenas imagens
  • Maior privacidade através do processamento local de dados sem dependência da nuvem
  • Capacidades de processamento em tempo real ideais para aplicações sensíveis ao tempo
  • Quantização optimizada para uma implementação eficiente de modelos em dispositivos com recursos limitados

Que pré-requisitos de hardware e software são necessários para a implementação do IMX500?

Para implementar os modelos IMX500, necessita de:

Hardware:

  • Raspberry Pi 5 ou Raspberry Pi 4 Modelo B
  • Câmara Raspberry Pi AI com sensor IMX500

Software:

  • Raspberry Pi OS Bookworm
  • Firmware e ferramentas IMX500 (sudo apt install imx500-all imx500-tools)
  • Python pacotes para picamera2 (sudo apt install python3-opencv python3-munkres)

Que desempenho posso esperar dos modelos YOLOv8 no IMX500?

Com base em Ultralytics benchmarks da câmara Raspberry Pi AI:

  • YOLOv8n atinge um tempo de inferência de 66,66 ms por imagem
  • mAP50-95 de 0,522 no conjunto de dados COCO8
  • Tamanho do modelo de apenas 2,9MB após a quantização

Isto demonstra que o formato IMX500 proporciona uma inferência eficiente em tempo real, mantendo uma boa precisão para aplicações de IA de ponta.

Como posso empacotar e implementar o meu modelo exportado para a câmara Raspberry Pi AI?

Depois de exportar para o formato IMX500:

  1. Utilize a ferramenta de empacotamento para criar um ficheiro RPK:

    imx500-package -i <path to packerOut.zip> -o <output folder>
    
  2. Clonar e instalar o picamera2:

    git clone -b next https://github.com/raspberrypi/picamera2
    cd picamera2 && pip install -e . --break-system-packages
    
  3. Executar a inferência utilizando o ficheiro RPK gerado:

    python imx500_object_detection_demo.py --model <path to network.rpk> --fps 25 --bbox-normalization --labels <path to labels.txt>
    
📅C riado há 1 mês ✏️ Atualizado há 10 dias

Comentários