Skip to content

Ultralytics Docs: Using YOLO11 with SAHI for Sliced Inference

Welcome to the Ultralytics documentation on how to use YOLO11 with SAHI (Slicing Aided Hyper Inference). This comprehensive guide aims to furnish you with all the essential knowledge you'll need to implement SAHI alongside YOLO11. We'll deep-dive into what SAHI is, why sliced inference is critical for large-scale applications, and how to integrate these functionalities with YOLO11 for enhanced object detection performance.

Aperçu 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 les images à grande échelle et à haute résolution. Sa fonctionnalité principale consiste à diviser les images en tranches gérables, à exécuter la détection d'objets sur chaque tranche, puis à assembler les résultats. SAHI est compatible avec toute une série de modèles de détection d'objets, y compris la série YOLO , ce qui offre une grande flexibilité tout en garantissant une utilisation optimisée des ressources informatiques.



Regarde : Inference with SAHI (Slicing Aided Hyper Inference) using Ultralytics YOLO11

Caractéristiques principales de SAHI

  • Intégration transparente: SAHI s'intègre sans effort aux modèles YOLO , ce qui signifie que tu peux commencer à découper et à détecter sans avoir à modifier beaucoup de code.
  • Efficacité des ressources: En décomposant les grandes images en parties plus petites, SAHI optimise l'utilisation de la mémoire, ce qui te permet d'exécuter une détection de haute qualité sur du matériel aux ressources limitées.
  • High Accuracy: SAHI maintains the detection accuracy by employing smart algorithms to merge overlapping detection boxes during the stitching process.

Qu'est-ce que l'inférence en tranches ?

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

Avantages de l'inférence en tranches

  • Réduction de la charge de calcul: Les tranches d'images plus petites sont plus rapides à traiter et consomment moins de mémoire, ce qui permet un fonctionnement plus fluide sur du matériel bas de gamme.

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

  • Amélioration de l'évolutivité: La technique permet de mettre plus facilement à l'échelle la détection d'objets sur des images de tailles et de résolutions différentes, ce qui la rend idéale pour un large éventail d'applications allant de l'imagerie satellitaire au diagnostic médical.

YOLO11 without SAHIYOLO11 with SAHI
YOLO11 without SAHIYOLO11 with SAHI

Installation et préparation

Installation

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

pip install -U ultralytics sahi

Importer des modules et télécharger des ressources

Here's how to import the necessary modules and download a YOLO11 model and some test images:

from sahi.utils.file import download_from_url
from sahi.utils.yolov8 import download_yolov8s_model

# Download YOLO11 model
model_path = "models/yolo11s.pt"
download_yolov8s_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",
)

Standard Inference with YOLO11

Instancier le modèle

You can instantiate a YOLO11 model for object detection like this:

from sahi import AutoDetectionModel

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

Effectuer une prédiction standard

Effectue une inférence standard à l'aide d'un chemin d'image ou d'une image numpy.

from sahi.predict import get_prediction

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

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

Visualise les résultats

Exporte et visualise les boîtes de délimitation et les masques prédits :

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

Sliced Inference with YOLO11

Effectue une inférence en tranches en spécifiant les dimensions des tranches 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,
)

Traitement des résultats de la prédiction

SAHI fournit un PredictionResult qui peut être converti en divers 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 de lot

Pour une prédiction par lot sur un répertoire d'images :

from sahi.predict import predict

predict(
    model_type="yolov8",
    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,
)

That's it! Now you're equipped to use YOLO11 with SAHI for both standard and sliced inference.

Citations et remerciements

Si tu utilises SAHI dans tes travaux de recherche ou de développement, cite l'article original de SAHI et remercie 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}
}

We extend our thanks to the SAHI research group for creating and maintaining this invaluable resource for the computer vision community. For more information about SAHI and its creators, visit the SAHI GitHub repository.

FAQ

How can I integrate YOLO11 with SAHI for sliced inference in object detection?

Integrating Ultralytics YOLO11 with SAHI (Slicing Aided Hyper Inference) for sliced inference optimizes your object detection tasks on high-resolution images by partitioning them into manageable slices. This approach improves memory usage and ensures high detection accuracy. To get started, you need to install the ultralytics and sahi libraries:

pip install -U ultralytics sahi

Then, download a YOLO11 model and test images:

from sahi.utils.file import download_from_url
from sahi.utils.yolov8 import download_yolov8s_model

# Download YOLO11 model
model_path = "models/yolo11s.pt"
download_yolov8s_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, reporte-toi à notre guide sur l'inférence en tranches.

Why should I use SAHI with YOLO11 for object detection on large images?

Using SAHI with Ultralytics YOLO11 for object detection on large images offers several benefits:

  • Charge de calcul réduite: Les petites tranches 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.
  • Amélioration de l'évolutivité: En échelonnant les tâches de détection d'objets sur différentes tailles et résolutions d'images, SAHI devient idéal pour diverses applications, telles que l'analyse d'images satellites et les diagnostics médicaux.

Pour en savoir plus sur les avantages de l'inférence en tranches, consulte notre documentation.

Can I visualize prediction results when using YOLO11 with SAHI?

Yes, you can visualize prediction results when using YOLO11 with SAHI. Here's how you can export and visualize the results:

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 tu pourras ensuite charger l'image pour la visualiser dans ton carnet de notes ou ton application. Pour un guide détaillé, consulte la section Inférence standard.

What features does SAHI offer for improving YOLO11 object detection?

SAHI (Slicing Aided Hyper Inference) offers several features that complement Ultralytics YOLO11 for object detection:

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

Pour mieux comprendre, lis les principales caractéristiques de SAHI.

How do I handle large-scale inference projects using YOLO11 and SAHI?

To handle large-scale inference projects using YOLO11 and SAHI, follow these best practices:

  1. Installe les bibliothèques requises: Assure-toi que tu as les dernières versions de ultralytics et de sahi.
  2. Configurer l'inférence en tranches: Détermine les dimensions optimales des tranches et les ratios de chevauchement pour ton projet spécifique.
  3. Exécuter des prédictions par lots: Utilise 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 de prédiction par lots :

from sahi.predict import predict

predict(
    model_type="yolov8",
    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, visite notre section sur la prédiction par lots.

📅 Created 11 months ago ✏️ Updated 22 days ago

Commentaires