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.
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 : Inférence avec SAHI (Slicing Aided Hyper Inference) à l'aide de Ultralytics YOLOv8
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 |
---|---|
![]() |
![]() |
Installation et préparation
Installation
Pour commencer, installe les dernières versions de SAHI et de Ultralytics:
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.file import download_from_url
from sahi.utils.yolov8 import download_yolov8s_model
# 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 :
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 :
Inférence en tranches avec YOLOv8
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/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.
FAQ
Comment puis-je intégrer YOLOv8 à SAHI pour l'inférence en tranches dans la détection d'objets ?
L'intégration de Ultralytics YOLOv8 avec SAHI (Slicing Aided Hyper Inference) pour l'inférence en tranches permet d'optimiser les tâches de détection d'objets sur des images haute résolution en les divisant 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, tu dois installer les bibliothèques ultralytics et sahi :
Ensuite, télécharge un modèle YOLOv8 et des images de test :
from sahi.utils.file import download_from_url
from sahi.utils.yolov8 import download_yolov8s_model
# 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",
)
Pour des instructions plus détaillées, reporte-toi à notre guide sur l'inférence en tranches.
Pourquoi utiliser SAHI avec YOLOv8 pour la détection d'objets sur de grandes images ?
L'utilisation de SAHI avec Ultralytics YOLOv8 pour la détection d'objets sur de grandes images offre plusieurs avantages :
- 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.
Puis-je visualiser les résultats des prédictions lorsque j'utilise YOLOv8 avec SAHI ?
Oui, tu peux visualiser les résultats des prédictions lorsque tu utilises YOLOv8 avec SAHI. Voici comment exporter et visualiser les résultats :
result.export_visuals(export_dir="demo_data/")
from IPython.display import Image
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.
Quelles sont les fonctionnalités offertes par SAHI pour améliorer la détection des objets sur YOLOv8 ?
SAHI (Slicing Aided Hyper Inference) offre plusieurs fonctions qui complètent Ultralytics YOLOv8 pour la détection d'objets :
- 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.
Comment gérer les projets d'inférence à grande échelle à l'aide de YOLOv8 et de SAHI ?
Pour gérer des projets d'inférence à grande échelle à l'aide de YOLOv8 et de SAHI, suis les meilleures pratiques suivantes :
- Installe les bibliothèques requises: Assure-toi que tu as les dernières versions de ultralytics et de sahi.
- Configurer l'inférence en tranches: Détermine les dimensions optimales des tranches et les ratios de chevauchement pour ton projet spécifique.
- 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/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,
)
Pour des étapes plus détaillées, visite notre section sur la prédiction par lots.