Exportation Sony IMX500 pour Ultralytics YOLO11
Ce guide couvre l'exportation et le déploiement de modèles Ultralytics YOLO11 vers les Raspberry Pi AI Camera équipées du capteur Sony IMX500.
Déployer des modèles de vision par ordinateur sur des appareils à puissance de calcul limitée, comme la 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 utiliser un minimum d'énergie tout en offrant une performance rapide pour les réseaux de neurones. Il te permet d'optimiser tes modèles Ultralytics YOLO11 pour une inférence à haute vitesse et basse consommation. Dans ce guide, nous te guiderons à travers l'exportation et le déploiement de tes modèles au format IMX500, tout en facilitant la performance de tes modèles sur la Raspberry Pi AI Camera.
Pourquoi exporter vers IMX500 ?
Le IMX500 Intelligent Vision Sensor de Sony est un matériel révolutionnaire dans le traitement de l'Edge AI. C'est le premier capteur de vision intelligent au monde doté de capacités d'IA intégrées. Ce capteur aide à surmonter de nombreux défis de l'Edge AI, notamment les goulots d'étranglement du traitement des données, les préoccupations en matière de confidentialité et les limitations de performance. Alors 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 informations en temps réel.
Exportation Sony IMX500 pour les 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 vers 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 de précision. C'est idéal pour les ressources limitées de l'Edge computing, permettant aux applications de répondre rapidement en réduisant la latence et en autorisant un traitement local rapide des données, sans dépendance au cloud. Le traitement local préserve également la confidentialité et la sécurité des données utilisateur, car elles ne sont pas envoyées vers un serveur distant.
Fonctionnalités 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 diminuer les coûts.
- Réponse 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 : Le traitement rapide sur capteur prend en charge les décisions en temps réel, parfait pour les applications d'Edge AI telles que les systèmes autonomes.
Avant de commencer : Pour obtenir les 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, notre Guide de préparation des données et notre 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 évaluée pour YOLOv8n et YOLO11n (nano). Les autres architectures et échelles de modèle ne sont pas prises en charge.
Exemples d'utilisation
Exporte un modèle Ultralytics YOLO11 vers le format IMX500 et effectue une inférence avec le modèle exporté.
Ici, nous effectuons une inférence juste 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 à la section Utiliser 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 package Ultralytics installe des dépendances d'exportation supplémentaires lors de l'exécution. La première fois que tu lances la commande d'exportation, tu pourrais avoir besoin de redémarrer ta console pour t'assurer qu'elle fonctionne correctement.
Arguments d'exportation
| Argument | Type | 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 de accuracy minimale, principalement pour les appareils en périphérie. |
data | str | 'coco8.yaml' | Chemin vers le fichier de configuration du dataset (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 d'effectuer la calibration sur un sous-ensemble du jeu de données complet, ce qui est utile pour les expérimentations 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-maxima (NMS) au modèle exporté. Lorsque True est défini, conf, iou et agnostic_nms sont également acceptés. |
device | str | None | Spécifie l'appareil pour l'exportation : GPU (device=0), CPU (device=cpu). |
Si tu effectues l'exportation 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 la 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 le packaging du modèle en vue d'un 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.pbtxtUtiliser l'exportation IMX500 dans le déploiement
Après avoir exporté le modèle Ultralytics YOLO11n au format IMX500, il peut être déployé sur la Raspberry Pi AI Camera pour l'inférence.
Prérequis matériels
Assure-toi d'avoir le matériel suivant :
- 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 micrologiciel IMX500 qui est nécessaire 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 de modules 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 les exemples de la bibliothèque de modules d'application aitrios-rpi.
Assure-toi de remplacer les répertoires model_file et labels.txt 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é réalisés par l'équipe Ultralytics sur une 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 (MB) | 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 (MB) | 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 dataset COCO128 pour les modèles de détection, le dataset COCO8-Pose pour les modèles d'estimation de pose et ImageNet10 pour les modèles de classification.
Qu'y a-t-il sous le capot ?
Sony Model Compression Toolkit (MCT)
Le Sony's Model Compression Toolkit (MCT) est un outil puissant pour optimiser les modèles de deep learning par la quantification et l'élagage. Il prend en charge diverses méthodes de quantification et fournit des algorithmes avancés pour réduire la taille et la complexité computationnelle du modèle sans sacrifier significativement la précision. MCT est particulièrement utile pour déployer des modèles sur des appareils aux ressources contraintes, assurant une inférence efficace et une latence réduite.
Fonctionnalités prises en charge par MCT
Le MCT de Sony offre une gamme de fonctionnalités conçues pour optimiser les modèles de réseaux de neurones :
- Optimisations de graphe : Transforme les modèles en versions plus efficaces en fusionnant des couches comme la normalisation par lots (batch normalization) 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 du décalage négatif (Shift Negative Correction) : Adresse les problèmes de performance liés à la quantification symétrique de l'activation.
- Filtrage des valeurs aberrantes : Utilise le z-score 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 : Attribue différentes largeurs de bits de quantification par couche en fonction de la sensibilité.
- Visualisation : Utilise TensorBoard pour observer les aperçus de performance du modèle, les phases de quantification et les configurations de largeur de bit.
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)
- Entraînement conscient de la quantification (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 un élagage de modèle structuré et conscient du matériel, conçu pour des architectures matérielles spécifiques. Cette technique exploite les 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 le déploiement sur le capteur IMX500 de Sony (par exemple, les Raspberry Pi AI Cameras). Cet outil facilite la transition des modèles Ultralytics YOLO11 traités via le logiciel Ultralytics, assurant qu'ils sont compatibles et fonctionnent efficacement 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 à l'appareil, rationalisant le processus de déploiement sur la Raspberry Pi AI Camera.
Cas d'utilisation réels
L'exportation vers le format IMX500 a une large applicabilité à travers les industries. Voici quelques exemples :
- Edge AI et IoT : Permet la détection d'objets sur des drones ou des caméras de sécurité, où le traitement en temps réel sur des appareils basse 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 tes modèles YOLO11 exportés au format IMX500 pour la surveillance du trafic et l'analyse de sécurité avec un traitement plus rapide et une latence minimale.
- Analyse de vente au 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 les étagères intelligentes.
Conclusion
L'exportation des modèles Ultralytics YOLO11 vers le format IMX500 de Sony te permet de déployer tes modèles pour une inférence efficace sur des caméras basées sur l'IMX500. En tirant parti de techniques de quantification avancées, tu peux réduire la taille du modèle et améliorer la vitesse d'inférence sans compromettre significativement la précision.
Pour plus d'informations et des directives détaillées, consulte le site web IMX500 de Sony.
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, incluant packerOut.zip.
Quels sont les principaux avantages de l'utilisation du format IMX500 pour le déploiement d'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
- Produit à la fois des images et des métadonnées (résultat d'inférence) au lieu d'images uniquement
- Confidentialité renforcée par le traitement local des données sans dépendance au cloud
- Capacités de traitement en temps réel idéales pour les applications sensibles au facteur temps
- Quantification optimisée pour un déploiement efficace des modèles sur des appareils aux ressources limitées
Quels prérequis matériels et logiciels sont nécessaires pour le déploiement 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)
Quelle performance puis-je attendre des modèles YOLO11 sur l'IMX500 ?
Basé sur les benchmarks 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 jeu de données COCO128
- Taille de modèle de seulement 3,2 Mo après quantification
Cela démontre que le format IMX500 offre une inférence efficace en temps réel tout en maintenant une bonne précision pour les applications d'IA en périphérie.