Skip to content

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

Ultralytics Bienvenue dans la documentation sur l'utilisation de YOLOv8 avec SAHI (Slicing Aided Hyper Inference). Ce guide complet a pour but de te fournir toutes les connaissances essentielles dont tu auras besoin pour mettre en œuvre SAHI avec YOLOv8. Nous verrons en détail ce qu'est SAHI, pourquoi l'inférence en tranches est essentielle pour les applications à grande échelle et comment intégrer ces fonctionnalités à YOLOv8 pour améliorer les performances de la détection d'objets.

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.

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

YOLOv8 sans SAHI YOLOv8 avec SAHI
YOLOv8 sans SAHI YOLOv8 avec 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

Voici comment importer les modules nécessaires et télécharger un modèle YOLOv8 et quelques images de test :

from sahi.utils.yolov8 import download_yolov8s_model
from sahi import AutoDetectionModel
from sahi.utils.cv import read_image
from sahi.utils.file import download_from_url
from sahi.predict import get_prediction, get_sliced_prediction, predict
from pathlib import Path
from IPython.display import Image

# Download YOLOv8 model
yolov8_model_path = "models/yolov8s.pt"
download_yolov8s_model(yolov8_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 YOLOv8

Instancier le modèle

Tu peux instancier un modèle YOLOv8 pour la détection d'objets comme suit :

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.

# 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")

Inférence en tranches avec YOLOv8

Effectue une inférence en tranches en spécifiant les dimensions des tranches et les taux de chevauchement :

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 :

predict(
    model_type="yolov8",
    model_path="path/to/yolov8n.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,
)

Voilà, c'est fait ! Tu es maintenant équipé pour utiliser YOLOv8 avec SAHI pour l'inférence standard et l'inférence en tranches.

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}
}

Nous adressons nos remerciements au groupe de recherche SAHI pour avoir créé et maintenu cette ressource inestimable pour la communauté de la vision par ordinateur. Pour plus d'informations sur SAHI et ses créateurs, visite le dépôt GitHub de SAHI.



Créé le 2023-11-12, Mis à jour le 2023-11-22
Auteurs : glenn-jocher (3)

Commentaires