Passer au contenu

Docs Ultralytics : Utilisation de YOLO11 avec SAHI pour l'inférence en tranches

Ouvrir SAHI pour l'inférence en tranches dans Colab

Bienvenue dans la documentation Ultralytics sur l'utilisation de YOLO11 avec SAHI (Slicing Aided Hyper Inference). Ce guide complet vise à vous fournir toutes les connaissances essentielles dont vous aurez besoin pour implémenter SAHI avec YOLO11. Nous allons approfondir ce qu'est SAHI, pourquoi l'inférence en tranches est essentielle pour les applications à grande échelle, et comment intégrer ces fonctionnalités avec YOLO11 pour améliorer les performances de la détection d'objets.

Présentation de l'inférence en tranches SAHI

Introduction à SAHI

SAHI (Slicing Aided Hyper Inference) est une bibliothèque innovante conçue pour optimiser les algorithmes de détection d'objets pour l'imagerie à grande échelle et à haute résolution. Sa fonctionnalité principale réside dans le partitionnement des images en tranches gérables, l'exécution de la détection d'objets sur chaque tranche, puis l'assemblage des résultats. SAHI est compatible avec une gamme de modèles de détection d'objets, y compris la série YOLO, offrant ainsi une flexibilité tout en assurant une utilisation optimisée des ressources de calcul.



Regarder : Inférence avec SAHI (Slicing Aided Hyper Inference) en utilisant Ultralytics YOLO11

Principales caractéristiques de SAHI

  • Intégration transparente : SAHI s'intègre sans effort aux modèles YOLO, ce qui signifie que vous pouvez commencer à découper et à détecter sans avoir à modifier beaucoup de code.
  • Efficacité des ressources : En divisant les grandes images en parties plus petites, SAHI optimise l'utilisation de la mémoire, ce qui vous permet d'exécuter une détection de haute qualité sur du matériel aux ressources limitées.
  • Haute Précision : SAHI maintient la précision de la détection en employant des algorithmes intelligents pour fusionner les boîtes de détection qui se chevauchent pendant le processus d'assemblage.

Qu'est-ce que l'inférence segmentée ?

L'inférence en tranches fait référence à la pratique consistant à subdiviser une image volumineuse ou à haute résolution en segments plus petits (tranches), à effectuer la détection d'objets sur ces tranches, puis à recompiler les tranches pour reconstruire les emplacements des objets sur l'image originale. Cette technique est inestimable dans les scénarios où les ressources de calcul sont limitées ou lorsque vous travaillez avec des images à très haute résolution qui pourraient autrement entraîner des problèmes de mémoire.

Avantages de l'inférence segmentée

  • Charge de calcul réduite : Les tranches d'image plus petites sont plus rapides à traiter et consomment moins de mémoire, ce qui permet un fonctionnement plus fluide sur du matériel moins performant.

  • Qualité de détection préservée : Puisque chaque tranche est traitée indépendamment, il n'y a pas de réduction de la qualité de la détection d'objets, à condition que les tranches soient suffisamment grandes pour capturer les objets d'intérêt.

  • Scalabilité Améliorée : Cette technique permet d'adapter plus facilement la détection d'objets à différentes tailles et résolutions d'images, ce qui la rend idéale pour un large éventail d'applications, de l'imagerie satellite aux diagnostics médicaux.

YOLO11 sans SAHI YOLO11 avec SAHI
YOLO11 sans SAHI YOLO11 avec SAHI

Installation et préparation

Installation

Pour commencer, installez les dernières versions de SAHI et Ultralytics :

pip install -U ultralytics sahi

Importer les modules et télécharger les ressources

Voici comment importer les modules nécessaires et télécharger un modèle YOLO11 ainsi que des images de test :

from sahi.utils.file import download_from_url
from sahi.utils.ultralytics import download_yolo11n_model

# Download YOLO11 model
model_path = "models/yolo11n.pt"
download_yolo11n_model(model_path)

# Download test images
download_from_url(
    "https://raw.githubusercontent.com/obss/sahi/main/demo/demo_data/small-vehicles1.jpeg",
    "demo_data/small-vehicles1.jpeg",
)
download_from_url(
    "https://raw.githubusercontent.com/obss/sahi/main/demo/demo_data/terrain2.png",
    "demo_data/terrain2.png",
)

Inférence standard avec YOLO11

Instancier le modèle

Vous pouvez instancier un modèle YOLO11 pour la détection d'objets comme ceci :

from sahi import AutoDetectionModel

detection_model = AutoDetectionModel.from_pretrained(
    model_type="ultralytics",
    model_path=model_path,
    confidence_threshold=0.3,
    device="cpu",  # or 'cuda:0'
)

Effectuer une prédiction standard

Effectuer une inférence standard en utilisant un chemin d'image ou une image numpy.

from sahi.predict import get_prediction
from sahi.utils.cv import read_image

# With an image path
result = get_prediction("demo_data/small-vehicles1.jpeg", detection_model)

# With a numpy image
result_with_np_image = get_prediction(read_image("demo_data/small-vehicles1.jpeg"), detection_model)

Visualiser les résultats

Exporter et visualiser les boîtes englobantes et les masques prédits :

from IPython.display import Image

result.export_visuals(export_dir="demo_data/")
Image("demo_data/prediction_visual.png")

Inférence en tranches avec YOLO11

Effectuer une inférence segmentée en spécifiant les dimensions des segments et les taux de chevauchement :

from sahi.predict import get_sliced_prediction

result = get_sliced_prediction(
    "demo_data/small-vehicles1.jpeg",
    detection_model,
    slice_height=256,
    slice_width=256,
    overlap_height_ratio=0.2,
    overlap_width_ratio=0.2,
)

Gestion des résultats de prédiction

SAHI fournit un PredictionResult objet, qui peut être converti en différents formats d'annotation :

# Access the object prediction list
object_prediction_list = result.object_prediction_list

# Convert to COCO annotation, COCO prediction, imantics, and fiftyone formats
result.to_coco_annotations()[:3]
result.to_coco_predictions(image_id=1)[:3]
result.to_imantics_annotations()[:3]
result.to_fiftyone_detections()[:3]

Prédiction par lots

Pour la prédiction par lots sur un répertoire d'images :

from sahi.predict import predict

predict(
    model_type="ultralytics",
    model_path="path/to/yolo11n.pt",
    model_device="cpu",  # or 'cuda:0'
    model_confidence_threshold=0.4,
    source="path/to/dir",
    slice_height=256,
    slice_width=256,
    overlap_height_ratio=0.2,
    overlap_width_ratio=0.2,
)

C'est tout ! Vous êtes maintenant équipé pour utiliser YOLO11 avec SAHI pour l'inférence standard et segmentée.

Citations et remerciements

Si vous utilisez SAHI dans vos travaux de recherche ou de développement, veuillez citer l'article original de SAHI et mentionner les auteurs :

@article{akyon2022sahi,
  title={Slicing Aided Hyper Inference and Fine-tuning for Small Object Detection},
  author={Akyon, Fatih Cagatay and Altinuc, Sinan Onur and Temizel, Alptekin},
  journal={2022 IEEE International Conference on Image Processing (ICIP)},
  doi={10.1109/ICIP46576.2022.9897990},
  pages={966-970},
  year={2022}
}

Nous remercions le groupe de recherche SAHI pour la création et la maintenance de cette ressource inestimable pour la communauté de la vision par ordinateur. Pour plus d'informations sur SAHI et ses créateurs, consultez le référentiel SAHI GitHub.

FAQ

Comment puis-je intégrer YOLO11 avec SAHI pour l'inférence en tranches dans la détection d'objets ?

L'intégration d'Ultralytics YOLO11 avec SAHI (Slicing Aided Hyper Inference) pour l'inférence en tranches optimise vos tâches de détection d'objets sur des images haute résolution en les partitionnant en tranches gérables. Cette approche améliore l'utilisation de la mémoire et garantit une grande précision de détection. Pour commencer, vous devez installer les bibliothèques ultralytics et sahi :

pip install -U ultralytics sahi

Ensuite, téléchargez un modèle YOLO11 et des images de test:

from sahi.utils.file import download_from_url
from sahi.utils.ultralytics import download_yolo11n_model

# Download YOLO11 model
model_path = "models/yolo11n.pt"
download_yolo11n_model(model_path)

# Download test images
download_from_url(
    "https://raw.githubusercontent.com/obss/sahi/main/demo/demo_data/small-vehicles1.jpeg",
    "demo_data/small-vehicles1.jpeg",
)

Pour des instructions plus détaillées, consultez notre guide sur l'inférence en tranches.

Pourquoi devrais-je utiliser SAHI avec YOLO11 pour la détection d'objets sur de grandes images ?

L'utilisation de SAHI avec Ultralytics YOLO11 pour la détection d'objets sur de grandes images offre plusieurs avantages :

  • Charge de calcul réduite : Les tranches plus petites sont plus rapides à traiter et consomment moins de mémoire, ce qui permet d'exécuter des détections de haute qualité sur du matériel aux ressources limitées.
  • Précision de détection maintenue : SAHI utilise des algorithmes intelligents pour fusionner les boîtes qui se chevauchent, préservant ainsi la qualité de la détection.
  • Scalabilité Améliorée : En adaptant les tâches de détection d'objets à différentes tailles et résolutions d'image, SAHI devient idéal pour diverses applications, telles que l'analyse d'imagerie satellite et les diagnostics médicaux.

Apprenez-en davantage sur les avantages de l'inférence en tranches dans notre documentation.

Puis-je visualiser les résultats de prédiction lors de l'utilisation de YOLO11 avec SAHI ?

Oui, vous pouvez visualiser les résultats de prédiction lorsque vous utilisez YOLO11 avec SAHI. Voici comment vous pouvez exporter et visualiser les résultats :

from IPython.display import Image

result.export_visuals(export_dir="demo_data/")
Image("demo_data/prediction_visual.png")

Cette commande enregistrera les prédictions visualisées dans le répertoire spécifié, et vous pourrez ensuite charger l'image pour la visualiser dans votre notebook ou application. Pour un guide détaillé, consultez la section Inférence Standard.

Quelles fonctionnalités SAHI offre-t-il pour améliorer la détection d’objets YOLO11 ?

SAHI (Slicing Aided Hyper Inference) offre plusieurs fonctionnalités qui complètent Ultralytics YOLO11 pour la détection d'objets :

  • Intégration transparente : SAHI s'intègre facilement aux modèles YOLO, nécessitant un minimum d'ajustements de code.
  • Efficacité des ressources : Il divise les grandes images en tranches plus petites, ce qui optimise l'utilisation de la mémoire et la vitesse.
  • Haute Précision : En fusionnant efficacement les boîtes de détection qui se chevauchent pendant le processus d'assemblage, SAHI maintient une haute précision de détection.

Pour une compréhension plus approfondie, consultez les principales fonctionnalités de SAHI.

Comment gérer des projets d’inférence à grande échelle à l’aide de YOLO11 et SAHI ?

Pour gérer des projets d'inférence à grande échelle avec YOLO11 et SAHI, suivez ces bonnes pratiques :

  1. Installer les bibliothèques requises : Assurez-vous d’avoir les dernières versions d’ultralytics et de sahi.
  2. Configurer l'inférence segmentée : Déterminez les dimensions de segment et les taux de chevauchement optimaux pour votre projet spécifique.
  3. Exécuter des prédictions par lots : Utilisez les capacités de SAHI pour effectuer des prédictions par lots sur un répertoire d'images, ce qui améliore l'efficacité.

Exemple pour la prédiction par lots :

from sahi.predict import predict

predict(
    model_type="ultralytics",
    model_path="path/to/yolo11n.pt",
    model_device="cpu",  # or 'cuda:0'
    model_confidence_threshold=0.4,
    source="path/to/dir",
    slice_height=256,
    slice_width=256,
    overlap_height_ratio=0.2,
    overlap_width_ratio=0.2,
)

Pour des étapes plus détaillées, consultez notre section sur la Prédiction par lots.



📅 Créé il y a 1 an ✏️ Mis à jour il y a 23 jours

Commentaires