YOLO Vision 2026:

Exportação Sony IMX500 para Ultralytics YOLO11#

Este guia abrange a exportação e implantação de modelos Ultralytics YOLO11 para câmeras Raspberry Pi AI que utilizam o sensor Sony IMX500.

Implantar modelos de visão computacional em dispositivos com poder computacional limitado, como a Raspberry Pi AI Camera, pode ser difícil. Usar um formato de modelo otimizado para um desempenho mais rápido faz uma enorme diferença.

O formato de modelo IMX500 foi concebido para usar energia mínima enquanto oferece desempenho rápido para redes neurais. Ele permite otimizar os teus modelos Ultralytics YOLO11 para inferência de alta velocidade e baixo consumo de energia. Neste guia, vamos acompanhar-te na exportação e implantação dos teus modelos para o formato IMX500, facilitando o bom funcionamento dos teus modelos na Raspberry Pi AI Camera.

Raspberry Pi AI Camera with Sony IMX500 sensor

Por que você deve exportar para IMX500?#

IMX500 Intelligent Vision Sensor da Sony é um pedaço de hardware revolucionário 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 superar muitos desafios na IA de borda, incluindo gargalos de processamento de dados, preocupações com privacidade e limitações de desempenho. Embora outros sensores apenas repassem imagens e quadros, o IMX500 conta uma história completa. Ele processa dados diretamente no sensor, permitindo que os dispositivos gerem percepções em tempo real.

Exportação Sony IMX500 para modelos YOLO11#

O IMX500 foi projetado para transformar a forma como os dispositivos lidam com dados diretamente no sensor, sem a necessidade de enviá-los para a nuvem para processamento.

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

Principais recursos do IMX500:

  • Saída de Metadados: Em vez de transmitir apenas imagens, o IMX500 pode gerar tanto a imagem quanto metadados (resultado da inferência), e pode gerar apenas metadados para minimizar o tamanho dos dados, reduzir a largura de banda e diminuir custos.
  • Aborda preocupações com privacidade: Ao processar dados no dispositivo, o IMX500 resolve preocupações com privacidade, sendo ideal para aplicações centradas em humanos, como contagem de pessoas e rastreamento de ocupação.
  • Processamento em tempo real: O processamento rápido no sensor suporta decisões em tempo real, perfeito para aplicações de IA na borda, como sistemas autônomos.

Antes de Começar: Para melhores resultados, garante que o teu modelo YOLO11 está bem preparado para exportação seguindo o nosso Model Training Guide, Data Preparation Guide e Hyperparameter Tuning Guide.

Tarefas Suportadas#

A exportação IMX500 suporta quatro das sete tarefas do Ultralytics e apenas para YOLOv8n e YOLO11n: outras famílias de modelos, escalas e arquiteturas não são suportadas, e exportar um modelo de segmentação semântica, OBB ou estimativa de profundidade gera um erro.

TarefaYOLOv8YOLO11YOLO26
Detectar
Segmentar
Semântica
Profundidade
Classificar
Pose
OBB

Exemplos de uso#

Exporte um modelo Ultralytics YOLO11 para o formato IMX500 e execute a inferência com o modelo exportado.

O formato IMX500 suporta os modos Export, Predict e Validate. A inferência e a validação correm na Raspberry Pi AI Camera (IMX500).

Nota

Aqui realizamos a inferência apenas para garantir que o modelo funciona conforme o esperado. No entanto, para implantação e inferência na Raspberry Pi AI Camera, vai para a seção Using IMX500 Export in Deployment.

Detecção de objetos
 from ultralytics import YOLO

 # Load a YOLO11n PyTorch model
 model = YOLO("yolo11n.pt")

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

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

 # Run inference
 results = imx_model("https://ultralytics.com/images/bus.jpg")
Estimativa de pose
 from ultralytics import YOLO

 # Load a YOLO11n-pose PyTorch model
 model = YOLO("yolo11n-pose.pt")

 # Export the model
 model.export(format="imx", data="coco8-pose.yaml")  # exports with PTQ quantization by default

 # Load the exported model
 imx_model = YOLO("yolo11n-pose_imx_model")

 # Run inference
 results = imx_model("https://ultralytics.com/images/bus.jpg")
Classificação
 from ultralytics import YOLO

 # Load a YOLO11n-cls PyTorch model
 model = YOLO("yolo11n-cls.pt")

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

 # Load the exported model
 imx_model = YOLO("yolo11n-cls_imx_model")

 # Run inference
 results = imx_model("https://ultralytics.com/images/bus.jpg", imgsz=224)
Segmentação de Instância
 from ultralytics import YOLO

 # Load a YOLO11n-seg PyTorch model
 model = YOLO("yolo11n-seg.pt")

 # Export the model
 model.export(format="imx", data="coco8-seg.yaml")  # exports with PTQ quantization by default

 # Load the exported model
 imx_model = YOLO("yolo11n-seg_imx_model")

 # Run inference
 results = imx_model("https://ultralytics.com/images/bus.jpg")
Validar
 from ultralytics import YOLO

 # Load the exported IMX500 model
 model = YOLO("yolo11n_imx_model")

 # Validate accuracy on the COCO8 dataset
 metrics = model.val(data="coco8.yaml")
Aviso

O pacote Ultralytics instala dependências de exportação adicionais em tempo de execução. Na primeira vez que você executar o comando de exportação, pode ser necessário reiniciar seu console para garantir que funcione corretamente.

Argumentos de Exportação#

ArgumentoTipoPredefiniçãoDescrição
formatstr'imx'Formato de destino para o modelo exportado, definindo a compatibilidade com vários ambientes de implementação.
imgszint ou tuple640Tamanho de imagem desejado para a entrada do modelo. Pode ser um número inteiro para imagens quadradas ou uma tupla (height, width) para dimensões específicas.
quantizeint ou str8/autoPrecisão de quantização. 8 (INT8/PTQ) é ativado automaticamente para o IMX500; "w8a16" exporta pesos INT8 com ativações FP16. Exportação apenas em FP32 e FP16 não é suportada. Substitui as flags depreciadas half/int8.
datastrNoneCaminho para o YAML do dataset, essencial para a quantização; a classificação, em vez disso, aceita um diretório de dataset ou um nome de dataset integrado. Se omitido com quantize=8 ou 'w8a16', o Ultralytics seleciona o dataset de calibração padrão para a tarefa do modelo.
fractionfloat, int ou list1.0Subconjunto de calibração como proporção, contagem de imagens ou proporções/contagens de [train, val]; uma lista limita train ou val, enquanto test permanece completo.
nmsboolFalseAdiciona Non-Maximum Suppression (NMS) ao modelo exportado. Quando True, conf, iou e agnostic_nms também são aceitos.
devicestrNoneEspecifica o dispositivo para exportação: GPU (device=0), CPU (device=cpu).
Dica

Se estiveres a exportar numa GPU com suporte CUDA, passa o argumento device=0 para uma exportação mais rápida.

Para mais detalhes sobre o processo de exportação, visita a página de documentação do Ultralytics sobre exportação.

O processo de exportação criará um modelo ONNX para validação de quantização, juntamente com um diretório chamado <model-name>_imx_model. Este diretório incluirá o arquivo packerOut.zip, que é essencial para empacotar o modelo para implantação no hardware IMX500. Além disso, a pasta <model-name>_imx_model conterá um arquivo de texto (labels.txt) listando todos os rótulos associados ao modelo.

Estrutura de pastas
yolo11n_imx_model
├── dnnParams.xml
├── labels.txt
├── packerOut.zip
├── model_imx.onnx
├── model_imx_MemoryReport.json
└── model_imx.pbtxt

Usando a Exportação IMX500 na Implantação#

Após exportar o modelo Ultralytics YOLO11n para o formato IMX500, ele pode ser implantado na Raspberry Pi AI Camera para inferência.

Pré-requisitos de hardware#

Certifique-se de ter o hardware abaixo:

  1. Raspberry Pi 5 ou Raspberry Pi 4 Model B
  2. Raspberry Pi AI Camera

Conecte a Raspberry Pi AI Camera ao conector MIPI CSI de 15 pinos na Raspberry Pi e ligue a Raspberry Pi.

Pré-requisitos de software#

Nota

Este guia foi testado com o Raspberry Pi OS Bookworm rodando em um Raspberry Pi 5.

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

sudo apt update && sudo apt full-upgrade

Passo 2: Instale o firmware IMX500 necessário para operar o sensor IMX500.

sudo apt install imx500-all

Passo 3: Reinicie a Raspberry Pi para que as alterações entrem em vigor.

sudo reboot

Passo 4: Instalar a Aitrios Raspberry Pi application module library

pip install git+https://github.com/SonySemiconductorSolutions/aitrios-rpi-application-module-library.git

Passo 5: Executar a deteção de objetos, estimativa de pose, classificação e segmentação do YOLO11 usando os scripts abaixo que estão disponíveis em aitrios-rpi-application-module-library examples.

Nota

Certifica-te de substituir os diretórios model_file e labels.txt de acordo com o teu ambiente antes de executar estes scripts.

Scripts Python
import numpy as np
from modlib.apps import Annotator
from modlib.devices import AiCamera
from modlib.models import COLOR_FORMAT, MODEL_TYPE, Model
from modlib.models.post_processors import pp_od_yolo_ultralytics

class YOLO(Model):
    """YOLO model for IMX500 deployment."""

    def __init__(self):
        """Initialize the YOLO model for IMX500 deployment."""
        super().__init__(
            model_file="yolo11n_imx_model/packerOut.zip",  # replace with proper directory
            model_type=MODEL_TYPE.CONVERTED,
            color_format=COLOR_FORMAT.RGB,
            preserve_aspect_ratio=False,
        )

        self.labels = np.genfromtxt(
            "yolo11n_imx_model/labels.txt",  # replace with proper directory
            dtype=str,
            delimiter="\n",
        )

    def post_process(self, output_tensors):
        """Post-process the output tensors for object detection."""
        return pp_od_yolo_ultralytics(output_tensors)

device = AiCamera(frame_rate=16)  # Optimal frame rate for maximum FPS of the YOLO model running on the AI Camera
model = YOLO()
device.deploy(model)

annotator = Annotator()

with device as stream:
    for frame in stream:
        detections = frame.detections[frame.detections.confidence > 0.55]
        labels = [f"{model.labels[class_id]}: {score:0.2f}" for _, score, class_id, _ in detections]

        annotator.annotate_boxes(frame, detections, labels=labels, alpha=0.3, corner_radius=10)
        frame.display()

Benchmarks#

Os benchmarks YOLOv8n, YOLO11n, YOLOv8n-pose, YOLO11n-pose, YOLOv8n-cls e YOLO11n-cls abaixo foram executados pela equipa do Ultralytics na Raspberry Pi AI Camera com o formato de modelo imx, medindo velocidade e precisão.

ModeloFormatoTamanho (pixels)Tamanho de packerOut.zip (MB)mAP50-95(B)Tempo de inferência (ms/im)
YOLOv8nimx6402.10.47058.79
YOLO11nimx6402.20.51758.82
YOLOv8n-poseimx6402.00.68758.79
YOLO11n-poseimx6402.10.78862.50
ModeloFormatoTamanho (pixels)Tamanho de packerOut.zip (MB)acc (top1)acc (top5)Tempo de inferência (ms/im)
YOLOv8n-clsimx2242.30.250.533.31
YOLO11n-clsimx2242.30.250.41733.31
Nota

A validação para os benchmarks acima foi feita usando o conjunto de dados COCO128 para modelos de detecção, o conjunto de dados COCO8-Pose para modelos de estimativa de pose e o ImageNet10 para modelos de classificação.

O que há por baixo do capô?#

Sony IMX500 YOLO model deployment workflow

Sony Model Compression Toolkit (MCT)#

Sony's Model Compression Toolkit (MCT) é uma ferramenta poderosa para otimizar modelos de deep learning através de quantização e poda. Ela 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 menor latência.

Recursos suportados do MCT#

O MCT da Sony oferece uma gama de recursos projetados para otimizar modelos de redes neurais:

  1. Otimizações de Grafo: Transforma modelos em versões mais eficientes dobrando camadas como a normalização de lote (batch normalization) nas camadas precedentes.
  2. Busca de Parâmetros de Quantização: Minimiza o ruído de quantização usando métricas como Erro Quadrático Médio, Sem Corte e Erro Médio Absoluto.
  3. Algoritmos Avançados de Quantização:
    • Correção de Deslocamento Negativo: Aborda problemas de desempenho decorrentes da quantização de ativação simétrica.
    • Filtragem de Outliers: Usa escore z para detectar e remover outliers.
    • Clustering: Utiliza grades de quantização não uniformes para melhor correspondência de distribuição.
    • Busca de Precisão Mista: Atribui diferentes larguras de bit de quantização por camada com base na sensibilidade.
  4. Visualização: Use o TensorBoard para observar insights de desempenho do modelo, fases de quantização e configurações de largura de bit.

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-Treinamento (PTQ):
    • Disponível via APIs Keras e PyTorch.
    • Complexidade: Baixa
    • Custo Computacional: Baixo (minutos de CPU)
  2. Quantização Pós-Treinamento baseada em gradiente (GPTQ):
    • Disponível via APIs Keras e PyTorch.
    • Complexidade: Média
    • Custo Computacional: Moderado (2-3 horas de GPU)
  3. Treinamento com Consciência de Quantização (QAT):
    • Complexidade: Alta
    • Custo Computacional: Alto (12-36 horas de GPU)

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

  1. Potência de dois (amigável ao hardware)
  2. Simétrico
  3. Uniforme

Poda Estruturada#

O MCT introduz a poda de modelos estruturada e consciente do hardware, projetada para arquiteturas de hardware específicas. Esta técnica aproveita as capacidades de Single Instruction, Multiple Data (SIMD) da plataforma de destino ao podar grupos SIMD. Isso reduz o tamanho e a complexidade do modelo enquanto otimiza a utilização dos canais, alinhado com a arquitetura SIMD para uma utilização direcionada dos recursos 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, Raspberry Pi AI Cameras). Esta ferramenta facilita a transição de modelos Ultralytics YOLO11 processados através do software Ultralytics, garantindo que sejam compatíveis e tenham um desempenho eficiente no hardware especificado. O procedimento de exportação após a quantização do modelo envolve a geração de arquivos binários que encapsulam dados essenciais e configurações específicas do dispositivo, simplificando o processo de implementação na Raspberry Pi AI Camera.

Casos de Uso no Mundo Real#

A exportação para o formato IMX500 possui ampla aplicabilidade em vários setores. Aqui estão alguns exemplos:

  • Edge AI e IoT: Permita a detecção de objetos em drones ou câmeras de segurança, onde o processamento em tempo real em dispositivos de baixa potência é essencial.
  • Dispositivos Vestíveis (Wearables): Implemente modelos otimizados para processamento de IA em pequena escala em dispositivos vestíveis de monitoramento de saúde.
  • Cidades Inteligentes: Utilize modelos YOLO11 exportados para IMX500 para monitoramento de tráfego e análise de segurança com processamento mais rápido e latência mínima.
  • Análise de Varejo: Melhore o monitoramento nas lojas implementando modelos otimizados em sistemas de ponto de venda ou prateleiras inteligentes.

Conclusão#

Exportar modelos Ultralytics YOLO11 para o formato IMX500 da Sony permite que você implemente seus modelos para inferência eficiente em câmeras baseadas em IMX500. Ao aproveitar técnicas avançadas de quantização, você 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, consulta o IMX500 website da Sony.

FAQ#

  • Para exportar um modelo YOLO11 para o formato IMX500, use a API Python ou o comando CLI:

    from ultralytics import YOLO
    
    model = YOLO("yolo11n.pt")
    model.export(format="imx")  # Exports with PTQ quantization by default

    O processo de exportação criará um diretório contendo os arquivos necessários para a implantação, incluindo packerOut.zip.

  • O formato IMX500 oferece várias vantagens importantes para a implementação na borda (edge):

    • O processamento de IA no chip reduz a latência e o consumo de energia
    • Produz tanto imagem quanto metadados (resultado da inferência) em vez de apenas imagens
    • Privacidade aprimorada ao processar dados localmente sem dependência da nuvem
    • Capacidades de processamento em tempo real ideais para aplicações sensíveis ao tempo
    • Quantização otimizada para implementação eficiente de modelos em dispositivos com recursos limitados
  • Para implementar modelos IMX500, você precisará de:

    Hardware:

    • Raspberry Pi 5 ou Raspberry Pi 4 Model B
    • Raspberry Pi AI Camera com sensor IMX500

    Software:

    • Raspberry Pi OS Bookworm
    • Firmware e ferramentas do IMX500 (sudo apt install imx500-all)
  • Com base nos benchmarks da Ultralytics na Raspberry Pi AI Camera:

    • O YOLO11n alcança 58,82ms de tempo de inferência por imagem
    • mAP50-95 de 0,517 no conjunto de dados COCO128
    • Tamanho do modelo de apenas 2,2 MB após a quantização

    Isso demonstra que o formato IMX500 oferece inferência eficiente em tempo real enquanto mantém uma boa precisão para aplicações de Edge AI.

Comentários