Skip to main content

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.

Raspberry Pi AI Camera with Sony IMX500 sensor

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.

Variantes de modèles supportées

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é.

Remarque

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.

Détection d'objets
 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")
Estimation 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")
Classification
 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)
Segmentation d'instance
 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")
Attention

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

ArgumentTypePar défautDescription
formatstr'imx'Format cible pour le modèle exporté, définissant la compatibilité avec divers environnements de déploiement.
imgszint ou tuple640Taille 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.
int8boolTrueActive 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.
datastr'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.
fractionfloat1.0Spé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é.
nmsboolFalseAjoute la suppression des non-maximums (NMS) au modèle exporté. Lorsque True, conf, iou, et la agnostic_nms sont également acceptés.
devicestrNoneSpécifie le périphérique pour l'exportation : GPU (device=0), CPU (device=cpu).
Astuce

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.

Structure des dossiers
yolo11n_imx_model
├── dnnParams.xml
├── labels.txt
├── packerOut.zip
├── model_imx.onnx
├── model_imx_MemoryReport.json
└── model_imx.pbtxt

Utilisation 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 :

  1. Raspberry Pi 5 ou Raspberry Pi 4 Model B
  2. 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

Remarque

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.

Remarque

Assure-toi de remplacer les model_file et en labels.txt répertoires selon ton environnement avant d'exécuter ces 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 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èleFormatTaille (pixels)Taille de packerOut.zip (Mo)mAP50-95(B)Temps d'inférence (ms/im)
YOLOv8nimx6402.10.47058.79
YOLO11nimx6402.20.51758.82
YOLOv8n-poseimx6402.00.68758.79
YOLO11n-poseimx6402.10.78862.50
ModèleFormatTaille (pixels)Taille de packerOut.zip (Mo)acc (top1)acc (top5)Temps d'inférence (ms/im)
YOLOv8n-clsimx2242,30.250.533.31
YOLO11n-clsimx2242,30.250.41733.31
Remarque

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 IMX500 YOLO model deployment workflow

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 :

  1. 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.
  2. 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).
  3. 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é.
  4. 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 :

  1. Quantification post-entraînement (PTQ):
    • Disponible via les API Keras et PyTorch.
    • Complexité : Faible
    • Coût computationnel : Faible (minutes CPU)
  2. 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)
  3. 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 :

  1. Puissance de deux (adapté au matériel)
  2. Symétrique
  3. 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 default

Le 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.

Commentaires