Exportation Sony IMX500 pour Ultralytics YOLO11
Ce guide couvre l'exportation et le déploiement de modèles Ultralytics YOLO11 sur les caméras AI Raspberry Pi équipées du capteur Sony IMX500.
Déployer des modèles de vision par ordinateur sur des appareils aux ressources computationnelles limitées, comme Raspberry Pi AI Camera, peut s'avérer complexe. Utiliser un format de modèle optimisé pour une performance plus rapide fait une énorme différence.
Le format de modèle IMX500 est conçu pour consommer un minimum d'énergie tout en offrant des performances rapides pour les réseaux neuronaux. Il te permet d'optimiser tes Ultralytics YOLO11 modèles pour une inférence à haute vitesse et basse consommation. Dans ce guide, nous te montrerons comment exporter et déployer tes modèles au format IMX500 tout en facilitant leur exécution sur le Raspberry Pi AI Camera.
Pourquoi exporter vers IMX500 ?
Le IMX500 Intelligent Vision Sensor de Sony est une technologie révolutionnaire dans le traitement de l'IA en périphérie (edge AI). C'est le premier capteur de vision intelligent au monde doté de capacités d'IA intégrées sur la puce. Ce capteur aide à surmonter de nombreux défis de l'IA en périphérie, notamment les goulots d'étranglement du traitement des données, les préoccupations liées à la confidentialité et les limites de performance. Tandis que d'autres capteurs se contentent de transmettre des images et des cadres, l'IMX500 raconte toute une histoire. Il traite les données directement sur le capteur, permettant aux appareils de générer des insights en temps réel.
Exportation Sony IMX500 pour modèles YOLO11
L'IMX500 est conçu pour transformer la manière dont les appareils traitent les données directement sur le capteur, sans avoir besoin de les envoyer dans le cloud pour traitement.
L'IMX500 fonctionne avec des modèles quantifiés. La quantification rend les modèles plus petits et plus rapides sans perdre beaucoup en la précision. C'est idéal pour les ressources limitées de l'informatique en périphérie, permettant aux applications de réagir rapidement en réduisant la latence et en permettant un traitement rapide des données localement, sans dépendance au cloud. Le traitement local préserve également la confidentialité et la sécurité des données des utilisateurs, puisqu'elles ne sont pas envoyées sur un serveur distant.
Caractéristiques clés de l'IMX500 :
- Sortie de métadonnées : Au lieu de transmettre uniquement des images, l'IMX500 peut sortir à la fois l'image et les métadonnées (résultat d'inférence), ou uniquement les métadonnées pour minimiser la taille des données, réduire la bande passante et réduire les coûts.
- Répond aux préoccupations de confidentialité : En traitant les données sur l'appareil, l'IMX500 répond aux préoccupations de confidentialité, ce qui est idéal pour les applications centrées sur l'humain comme le comptage de personnes et le suivi d'occupation.
- Traitement en temps réel : Un traitement rapide sur le capteur prend en charge les décisions en temps réel, parfait pour les applications d'IA en périphérie telles que les systèmes autonomes.
Avant de commencer : Pour de meilleurs résultats, assure-toi que ton modèle YOLO11 est bien préparé pour l'exportation en suivant notre Guide d'entraînement de modèle, Guide de préparation des données, et la Guide de réglage des hyperparamètres.
Tâches prises en charge
Actuellement, tu ne peux exporter vers le format IMX500 que les modèles incluant les tâches suivantes.
L'exportation IMX est conçue et testée pour YOLOv8n et en YOLO11n (nano). Les autres architectures et échelles de modèles ne sont pas supportées.
Exemples d'utilisation
Exporte un modèle Ultralytics YOLO11 vers le format IMX500 et exécute l'inférence avec le modèle exporté.
Ici, nous effectuons une inférence simplement pour nous assurer que le modèle fonctionne comme prévu. Cependant, pour le déploiement et l'inférence sur la Raspberry Pi AI Camera, merci de passer à Utilisation de l'exportation IMX500 dans le déploiement.
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") 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") 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) 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")Le paquet Ultralytics installe des dépendances d'exportation supplémentaires à l'exécution. La première fois que tu exécutes la commande d'exportation, il se peut que tu doives redémarrer ta console pour t'assurer qu'elle fonctionne correctement.
Arguments d'exportation
| Argument | Type | Par défaut | Description |
|---|---|---|---|
format | str | 'imx' | Format cible pour le modèle exporté, définissant la compatibilité avec divers environnements de déploiement. |
imgsz | int ou tuple | 640 | Taille d'image souhaitée pour l'entrée du modèle. Peut être un entier pour des images carrées ou un tuple (height, width) pour des dimensions spécifiques. |
int8 | bool | True | Active la quantification INT8, compressant davantage le modèle et accélérant l'inférence avec une perte minimale de la précision perte, principalement pour les appareils en périphérie. |
data | str | 'coco8.yaml' | Chemin vers le fichier de configuration du jeu de données fichier de configuration (par défaut : coco8.yaml), essentiel pour la quantification. |
fraction | float | 1.0 | Spécifie la fraction du jeu de données à utiliser pour la calibration de la quantification INT8. Permet de calibrer sur un sous-ensemble du jeu de données complet, utile pour les expériences ou lorsque les ressources sont limitées. S'il n'est pas spécifié avec INT8 activé, le jeu de données complet sera utilisé. |
nms | bool | False | Ajoute la suppression des non-maximums (NMS) au modèle exporté. Lorsque True, conf, iou, et la agnostic_nms sont également acceptés. |
device | str | None | Spécifie le périphérique pour l'exportation : GPU (device=0), CPU (device=cpu). |
Si tu exportes sur un GPU avec support CUDA, merci de passer l'argument device=0 pour une exportation plus rapide.
Pour plus de détails sur le processus d'exportation, visite le page de documentation Ultralytics sur l'exportation.
Le processus d'exportation créera un modèle ONNX pour la validation de la quantification, ainsi qu'un répertoire nommé <model-name>_imx_model. Ce répertoire inclura le fichier packerOut.zip, qui est essentiel pour empaqueter le modèle pour le déploiement sur le matériel IMX500. De plus, le dossier <model-name>_imx_model contiendra un fichier texte (labels.txt) listant toutes les étiquettes associées au modèle.
yolo11n_imx_model
├── dnnParams.xml
├── labels.txt
├── packerOut.zip
├── model_imx.onnx
├── model_imx_MemoryReport.json
└── model_imx.pbtxtUtilisation de l'exportation IMX500 dans le déploiement
Après avoir exporté le modèle Ultralytics YOLO11n vers le format IMX500, il peut être déployé sur la Raspberry Pi AI Camera pour l'inférence.
Prérequis matériels
Assure-toi de disposer du matériel ci-dessous :
- Raspberry Pi 5 ou Raspberry Pi 4 Model B
- Raspberry Pi AI Camera
Connecte la Raspberry Pi AI camera au connecteur MIPI CSI 15 broches sur le Raspberry Pi et allume le Raspberry Pi.
Prérequis logiciels
Ce guide a été testé avec Raspberry Pi OS Bookworm fonctionnant sur un Raspberry Pi 5.
Étape 1 : Ouvre une fenêtre de terminal et exécute les commandes suivantes pour mettre à jour le logiciel Raspberry Pi vers la dernière version.
sudo apt update && sudo apt full-upgradeÉtape 2 : Installe le firmware IMX500 qui est requis pour faire fonctionner le capteur IMX500.
sudo apt install imx500-allÉtape 3 : Redémarre le Raspberry Pi pour que les changements prennent effet.
sudo rebootÉtape 4 : Installe la bibliothèque du module d'application Aitrios Raspberry Pi
pip install git+https://github.com/SonySemiconductorSolutions/aitrios-rpi-application-module-library.gitÉtape 5 : Exécute la détection d'objets, l'estimation de pose, la classification et la segmentation YOLO11 en utilisant les scripts ci-dessous qui sont disponibles dans aitrios-rpi-application-module-library examples.
Assure-toi de remplacer les model_file et en labels.txt répertoires selon ton environnement avant d'exécuter ces scripts.
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 DPS 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
Les benchmarks YOLOv8n, YOLO11n, YOLOv8n-pose, YOLO11n-pose, YOLOv8n-cls et YOLO11n-cls ci-dessous ont été exécutés par l'équipe Ultralytics sur la Raspberry Pi AI Camera avec le format de modèle imx en mesurant la vitesse et la précision.
| Modèle | Format | Taille (pixels) | Taille de packerOut.zip (Mo) | mAP50-95(B) | Temps d'inférence (ms/im) |
|---|---|---|---|---|---|
| YOLOv8n | imx | 640 | 2.1 | 0.470 | 58.79 |
| YOLO11n | imx | 640 | 2.2 | 0.517 | 58.82 |
| YOLOv8n-pose | imx | 640 | 2.0 | 0.687 | 58.79 |
| YOLO11n-pose | imx | 640 | 2.1 | 0.788 | 62.50 |
| Modèle | Format | Taille (pixels) | Taille de packerOut.zip (Mo) | acc (top1) | acc (top5) | Temps d'inférence (ms/im) |
|---|---|---|---|---|---|---|
| YOLOv8n-cls | imx | 224 | 2,3 | 0.25 | 0.5 | 33.31 |
| YOLO11n-cls | imx | 224 | 2,3 | 0.25 | 0.417 | 33.31 |
La validation pour les benchmarks ci-dessus a été effectuée en utilisant le jeu de données COCO128 pour les modèles de détection, le jeu de données COCO8-Pose pour les modèles d'estimation de pose et ImageNet10 pour les modèles de classification.
Qu'est-ce qu'il y a sous le capot ?
Sony Model Compression Toolkit (MCT)
Le Sony Model Compression Toolkit (MCT) est un outil puissant pour optimiser les modèles d'apprentissage profond via la quantification et l'élagage. Il supporte diverses méthodes de quantification et fournit des algorithmes avancés pour réduire la taille du modèle et la complexité computationnelle sans sacrifier significativement la précision. MCT est particulièrement utile pour déployer des modèles sur des appareils aux ressources limitées, garantissant une inférence efficace et une latence réduite.
Fonctionnalités supportées de MCT
Le MCT de Sony offre une gamme de fonctionnalités conçues pour optimiser les modèles de réseaux neuronaux :
- Optimisations de graphe: Transforme les modèles en versions plus efficaces en fusionnant des couches comme la normalisation par lots dans les couches précédentes.
- Recherche de paramètres de quantification: Minimise le bruit de quantification en utilisant des métriques comme l'erreur quadratique moyenne (Mean-Square-Error), No-Clipping et l'erreur absolue moyenne (Mean-Average-Error).
- Algorithmes de quantification avancés:
- Correction de décalage négatif (Shift Negative Correction): Résout les problèmes de performance liés à la quantification symétrique de l'activation.
- Filtrage des valeurs aberrantes (Outliers Filtering): Utilise le score z pour détecter et supprimer les valeurs aberrantes.
- Clustering: Utilise des grilles de quantification non uniformes pour une meilleure correspondance de distribution.
- Recherche de précision mixte: Assigne différentes largeurs de bits de quantification par couche en fonction de la sensibilité.
- Visualisation: Utilise TensorBoard pour observer les aperçus des performances du modèle, les phases de quantification et les configurations de largeur de bits.
Quantification
MCT prend en charge plusieurs méthodes de quantification pour réduire la taille du modèle et améliorer la vitesse d'inférence :
- Quantification post-entraînement (PTQ):
- Disponible via les API Keras et PyTorch.
- Complexité : Faible
- Coût computationnel : Faible (minutes CPU)
- Quantification post-entraînement basée sur le gradient (GPTQ):
- Disponible via les API Keras et PyTorch.
- Complexité : Moyenne
- Coût computationnel : Modéré (2-3 heures GPU)
- Quantification consciente de l'entraînement (QAT):
- Complexité : Élevée
- Coût computationnel : Élevé (12-36 heures GPU)
MCT prend également en charge divers schémas de quantification pour les poids et les activations :
- Puissance de deux (adapté au matériel)
- Symétrique
- Uniforme
Élagage structuré
MCT introduit l'élagage de modèle structuré et conscient du matériel, conçu pour des architectures matérielles spécifiques. Cette technique tire parti des capacités SIMD (Single Instruction, Multiple Data) de la plateforme cible en élaguant les groupes SIMD. Cela réduit la taille et la complexité du modèle tout en optimisant l'utilisation des canaux, en accord avec l'architecture SIMD pour une utilisation ciblée des ressources de l'empreinte mémoire des poids. Disponible via les API Keras et PyTorch.
Outil de conversion IMX500 (Compilateur)
L'outil de conversion IMX500 fait partie intégrante de la suite d'outils IMX500, permettant la compilation de modèles pour un déploiement sur le capteur IMX500 de Sony (par exemple, Raspberry Pi AI Camera). Cet outil facilite la transition des modèles Ultralytics YOLO11 traités via le logiciel Ultralytics, en garantissant leur compatibilité et leurs performances efficaces sur le matériel spécifié. La procédure d'exportation suivant la quantification du modèle implique la génération de fichiers binaires qui encapsulent les données essentielles et les configurations spécifiques au périphérique, rationalisant ainsi le processus de déploiement sur la Raspberry Pi AI Camera.
Cas d'utilisation réels
L'exportation au format IMX500 a une large applicabilité dans tous les secteurs. Voici quelques exemples :
- Edge AI et IoT: Permets la détection d'objets sur les drones ou les caméras de sécurité, où le traitement en temps réel sur des appareils à faible consommation est essentiel.
- Appareils portables: Déploie des modèles optimisés pour le traitement IA à petite échelle sur des appareils portables de suivi de santé.
- Villes intelligentes: Utilise les modèles YOLO11 exportés pour IMX500 pour la surveillance du trafic et l'analyse de sécurité avec un traitement plus rapide et une latence minimale.
- Analytique de détail: Améliore la surveillance en magasin en déployant des modèles optimisés dans les systèmes de point de vente ou sur les étagères intelligentes.
Conclusion
Exporter les modèles Ultralytics YOLO11 vers le format IMX500 de Sony te permet de déployer tes modèles pour une inférence efficace sur les caméras basées sur IMX500. En exploitant des techniques de quantification avancées, tu peux réduire la taille du modèle et améliorer la vitesse d'inférence sans compromettre de manière significative la précision.
Pour plus d'informations et des directives détaillées, consulte le site Web de Sony IMX500 website.
FAQ
Comment exporter un modèle YOLO11 au format IMX500 pour la Raspberry Pi AI Camera ?
Pour exporter un modèle YOLO11 au format IMX500, utilise soit l'API Python, soit la commande CLI :
from ultralytics import YOLO
model = YOLO("yolo11n.pt")
model.export(format="imx") # Exports with PTQ quantization by defaultLe processus d'exportation créera un répertoire contenant les fichiers nécessaires au déploiement, y compris packerOut.zip.
Quels sont les principaux avantages de l'utilisation du format IMX500 pour le déploiement de l'IA en périphérie (edge AI) ?
Le format IMX500 offre plusieurs avantages importants pour le déploiement en périphérie :
- Le traitement IA sur puce réduit la latence et la consommation d'énergie
- Génère à la fois l'image et les métadonnées (résultat d'inférence) au lieu d'images uniquement
- Confidentialité améliorée par le traitement des données localement sans dépendance au cloud
- Capacités de traitement en temps réel idéales pour les applications sensibles au temps
- Quantification optimisée pour un déploiement efficace du modèle sur des appareils aux ressources limitées
Quels sont les prérequis matériels et logiciels nécessaires au déploiement sur IMX500 ?
Pour déployer des modèles IMX500, tu auras besoin de :
Matériel :
- Raspberry Pi 5 ou Raspberry Pi 4 Model B
- Raspberry Pi AI Camera avec capteur IMX500
Logiciel :
- Raspberry Pi OS Bookworm
- Micrologiciel et outils IMX500 (
sudo apt install imx500-all)
Quelles performances puis-je attendre des modèles YOLO11 sur l'IMX500 ?
Basé sur les benchmarks d'Ultralytics sur la Raspberry Pi AI Camera :
- YOLO11n atteint un temps d'inférence de 62,50 ms par image
- mAP50-95 de 0,492 sur le dataset COCO128
- Taille de modèle de seulement 3,2 Mo après quantification
Cela démontre que le format IMX500 fournit une inférence efficace en temps réel tout en maintenant une bonne précision pour les applications d'IA en périphérie.