Salta 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 câmaras Raspberry Pi AI com o sensor Sony IMX500.

A implementação de modelos de visão por computador em dispositivos com poder computacional limitado, como a Raspberry Pi AI Camera, pode ser complicada. Utilizar 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 neurais. Permite-lhe otimizar os seus Ultralytics YOLOv8 modelos para inferências de alta velocidade e baixo consumo de energia. Neste guia, vamos orientar-te na exportação e implementação dos teus modelos para o formato IMX500, facilitando o desempenho dos teus modelos na câmara Raspberry Pi AI.

Câmara de IA Raspberry Pi

Porque deves 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 os dados diretamente no sensor, permitindo que os dispositivos gerem informações em tempo real.

Exportação da IMX500 da Sony para os modelos YOLOv8

A IMX500 foi concebida 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 trabalha 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.
  • Resolve as preocupações com a privacidade: Ao processar os dados no dispositivo, o IMX500 resolve as questões de 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 os melhores resultados, certifica-te de que o teu 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

Exporta um modelo Ultralytics YOLOv8 para o formato IMX500 e executa 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, salta para 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, podes especificar vários argumentos:

ChaveValorDescrição
formatimxFormato para o qual exportar (imx)
int8TrueAtiva a quantização INT8 para o modelo (predefinição: True)
imgsz640Tamanho da imagem para a entrada do modelo (predefinição: 640)

Utilizar a exportação IMX500 na implementação

Depois de exportares 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

Certifica-te de que tens o hardware abaixo:

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

Liga a câmara Raspberry Pi AI ao conetor MIPI CSI de 15 pinos do Raspberry Pi e liga 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: Abre uma janela de terminal e executa os seguintes comandos para atualizar o software Raspberry Pi para a versão mais recente.

sudo apt update && sudo apt full-upgrade

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

sudo apt install imx500-all imx500-tools

Passo 3: Instala 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: Reinicia o Raspberry Pi para que as alterações entrem em vigor

sudo reboot

Empacota o modelo e implementa na câmara AI

Depois de obteres packerOut.zip do processo de conversão IMX500, podes 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: Empacota 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 instala-o e navega 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: Executa a deteção de objectos em 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>

Em seguida, poderás ver o resultado da inferência em direto da seguinte forma

Inferência na câmara de IA Raspberry Pi

Referências

YOLOv8 Os benchmarks abaixo foram executados pela equipa Ultralytics na Raspberry Pi AI Camera com imx formato do modelo que mede a velocidade e a precisão.

ModeloFormatoEstadoTamanho (MB)mAP50-95(B)Tempo de inferência (ms/im)
YOLOv8nimx2.90.52266.66

Nota

A validação da referência acima foi efectuada utilizando o conjunto de dados coco8

O que tens debaixo do capô?

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 da quantização e da 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 os 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 Quadrado Médio, No-Clipping e Erro 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: Usa o z-score para detetar e remover outliers.
    • Agrupa: 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: Utiliza 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-treinamento 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 sensível à quantização (QAT):
    • Complexidade: Alta
    • Custo computacional: elevado (12-36 GPU horas)

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

  1. Power-of-Two (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: Permite 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: Implementa modelos optimizados para processamento de IA em pequena escala em dispositivos portáteis de monitorização da saúde.
  • Cidades inteligentes: Utiliza 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: Melhora 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-te implementar os teus modelos para uma inferência eficiente em câmaras baseadas em IMX500. Ao utilizar técnicas de quantização avançadas, podes reduzir o tamanho do modelo e melhorar a velocidade de inferência sem comprometer significativamente a precisão.

Para mais informações e orientações detalhadas, consulta o site 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, utiliza 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 usado 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 de ponta?

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

  • O processamento de IA no chip reduz a latência e o consumo de energia
  • Emite 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, necessitarás 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?

Baseado em Ultralytics benchmarks na câmara Raspberry Pi AI:

  • YOLOv8n obtém 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 exportares para o formato IMX500:

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

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

    git clone -b next https://github.com/raspberrypi/picamera2
    cd picamera2 && pip install -e . --break-system-packages
    
  3. Executa 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>
    
📅 Created 8 days ago ✏️ Updated 6 days ago

Comentários