Sony IMX500 Export for Ultralytics YOLO11
This guide covers exporting and deploying Ultralytics YOLO11 models to Raspberry Pi AI Cameras that feature the Sony IMX500 sensor.
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.
The IMX500 model format is designed to use minimal power while delivering fast performance for neural networks. It allows you to optimize your Ultralytics YOLO11 models for high-speed and low-power inferencing. In this guide, we'll walk you through exporting and deploying your models to the IMX500 format while making it easier for your models to perform well on the Raspberry Pi AI Camera.
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.
Sony's IMX500 Export for YOLO11 Models
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.
Before You Begin: For best results, ensure your YOLO11 model is well-prepared for export by following our Model Training Guide, Data Preparation Guide, and Hyperparameter Tuning Guide.
Exemplos de utilização
Export an Ultralytics YOLO11 model to IMX500 format and run inference with the exported model.
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 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")
# Export a YOLO11n PyTorch model to imx format with Post-Training Quantization (PTQ)
yolo export model=yolo11n.pt format=imx data=coco8.yaml
# Run inference with the exported model
yolo predict model=yolo11n_imx_model source='https://ultralytics.com/images/bus.jpg'
Aviso
The Ultralytics package installs additional export dependencies at runtime. The first time you run the export command, you may need to restart your console to ensure it works correctly.
Argumentos de exportação
Argumento | Tipo | Predefinição | Descrição |
---|---|---|---|
format |
str |
'imx' |
Formato de destino para o modelo exportado, definindo a compatibilidade com vários ambientes de implantação. |
imgsz |
int ou tuple |
640 |
Tamanho de imagem pretendido para a entrada do modelo. Pode ser um número inteiro para imagens quadradas ou uma tupla (height, width) para dimensões específicas. |
int8 |
bool |
True |
Ativa a quantização INT8, comprimindo ainda mais o modelo e acelerando a inferência com uma perda mínima de precisão, principalmente para dispositivos de borda. |
data |
str |
'coco8.yaml' |
Caminho para o conjunto de dados ficheiro de configuração (predefinição: coco8.yaml ), essencial para a quantização. |
fraction |
float |
1.0 |
Especifica a fração do conjunto de dados a utilizar para a calibração da quantização INT8. Permite a calibração num subconjunto do conjunto de dados completo, útil para experiências ou quando os recursos são limitados. Se não for especificado com a INT8 activada, será utilizado o conjunto de dados completo. |
device |
str |
None |
Especifica o dispositivo para exportação: GPU (device=0 ), CPU (device=cpu ). |
Dica
Se estiver a exportar para uma GPU com suporte CUDA , passe o argumento device=0
para uma exportação mais rápida.
Para mais informações sobre o processo de exportação, visite a página de documentaçãoUltralytics sobre exportação.
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.
yolo11n_imx_model
├── dnnParams.xml
├── labels.txt
├── packerOut.zip
├── yolo11n_imx.onnx
├── yolo11n_imx500_model_MemoryReport.json
└── yolo11n_imx500_model.pbtxt
Utilização da exportação IMX500 na implementação
After exporting Ultralytics YOLO11n model to IMX500 format, it can be deployed to Raspberry Pi AI Camera for inference.
Pré-requisitos de hardware
Certifique-se de que possui o hardware abaixo indicado:
- Raspberry Pi 5 ou Raspberry Pi 4 Modelo B
- 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 path/to/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 https://github.com/raspberrypi/picamera2
cd picamera2
pip install -e . --break-system-packages
cd examples/imx500
Step 3: Run YOLO11 object detection, using the labels.txt file that has been generated during the IMX500 export.
python imx500_object_detection_demo.py --model path/to/network.rpk --fps 17 --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
Referências
YOLOv8 and YOLO11n benchmarks below were run by the Ultralytics team on Raspberry Pi AI Camera with imx
velocidade e precisão de medição do formato do modelo.
Modelo | Formato | Estado | Size of RPK (MB) |
mAP50-95(B) | Tempo de inferência (ms/im) |
---|---|---|---|---|---|
YOLOv8n | imx | ✅ | 3.1 | 0.602 | 58.82 |
YOLO11n | imx | ✅ | 3.2 | 0.644 | 62.50 |
Nota
Validation for the above benchmark was done using coco8 dataset on a Raspberry Pi 5
O que é que está debaixo do capot?
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:
- Optimizações de gráficos: Transforma modelos em versões mais eficientes, dobrando camadas como a normalização de lotes em camadas anteriores.
- 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.
- 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.
- 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:
- Quantização pós-formação (PTQ):
- Disponível através das APIs Keras e PyTorch .
- Complexidade: Baixa
- Custo computacional: Baixo (CPU minutos)
- 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)
- 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:
- Potência de dois (compatível com o hardware)
- Simétrico
- 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)
The IMX500 Converter Tool is integral to the IMX500 toolset, allowing the compilation of models for deployment on Sony's IMX500 sensor (for instance, Raspberry Pi AI Cameras). This tool facilitates the transition of Ultralytics YOLO11 models processed through Ultralytics software, ensuring they are compatible and perform efficiently on the specified hardware. The export procedure following model quantization involves the generation of binary files that encapsulate essential data and device-specific configurations, streamlining the deployment process on the Raspberry Pi AI Camera.
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.
- Smart Cities: Use IMX500-exported YOLO11 models for traffic monitoring and safety analysis with faster processing and minimal latency.
- 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
Exporting Ultralytics YOLO11 models to Sony's IMX500 format allows you to deploy your models for efficient inference on IMX500-based cameras. By leveraging advanced quantization techniques, you can reduce model size and improve inference speed without significantly compromising accuracy.
Para mais informações e diretrizes detalhadas, consulte o website IMX500 da Sony.
FAQ
How do I export a YOLO11 model to IMX500 format for Raspberry Pi AI Camera?
To export a YOLO11 model to IMX500 format, use either the Python API or CLI command:
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 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
)
What performance can I expect from YOLO11 models on the IMX500?
Com base em Ultralytics benchmarks da câmara Raspberry Pi AI:
- YOLO11n achieves 58.82ms inference time per image
- 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:
-
Utilize a ferramenta de empacotamento para criar um ficheiro RPK:
imx500-package -i path/to/packerOut.zip -o path/to/output/folder
-
Clonar e instalar o picamera2:
git clone https://github.com/raspberrypi/picamera2 cd picamera2 && pip install -e . --break-system-packages
-
Executar a inferência utilizando o ficheiro RPK gerado:
python imx500_object_detection_demo.py --model path/to/network.rpk --fps 17 --bbox-normalization --labels path/to/labels.txt