Vai al contenuto

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.

Panoramica sull'inferenza a fette SAHI

Introduzione al SAHI

SAHI (Slicing Aided Hyper Inference) è una libreria innovativa progettata per ottimizzare gli algoritmi di rilevamento degli oggetti per immagini di grandi dimensioni e ad alta risoluzione. La sua funzionalità principale consiste nel suddividere le immagini in fette gestibili, eseguire il rilevamento degli oggetti su ciascuna fetta e poi ricucire i risultati. SAHI è compatibile con una serie di modelli di rilevamento degli oggetti, tra cui la serie YOLO , offrendo così flessibilità e garantendo un uso ottimizzato delle risorse computazionali.



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

Caratteristiche principali di SAHI

  • Integrazione perfetta: SAHI si integra facilmente con i modelli di YOLO , il che significa che puoi iniziare a tagliare e rilevare senza dover modificare il codice.
  • Efficienza delle risorse: Suddividendo le immagini di grandi dimensioni in parti più piccole, SAHI ottimizza l'utilizzo della memoria, permettendoti di eseguire rilevamenti di alta qualità su hardware con risorse limitate.
  • High Accuracy: SAHI maintains the detection accuracy by employing smart algorithms to merge overlapping detection boxes during the stitching process.

Cos'è l'inferenza a fette?

L'inferenza a fette si riferisce alla pratica di suddividere un'immagine di grandi dimensioni o ad alta risoluzione in segmenti più piccoli (fette), effettuare il rilevamento degli oggetti su queste fette e poi ricompilare le fette per ricostruire le posizioni degli oggetti sull'immagine originale. Questa tecnica è preziosa negli scenari in cui le risorse computazionali sono limitate o quando si lavora con immagini ad altissima risoluzione che potrebbero altrimenti causare problemi di memoria.

Vantaggi dell'inferenza a fette

  • Riduzione del carico computazionale: Le fette di immagine più piccole sono più veloci da elaborare e consumano meno memoria, consentendo un funzionamento più fluido su hardware di fascia bassa.

  • Qualità di rilevamento preservata: Poiché ogni fetta viene trattata in modo indipendente, non c'è alcuna riduzione della qualità del rilevamento degli oggetti, a patto che le fette siano abbastanza grandi da catturare gli oggetti di interesse.

  • Scalabilità migliorata: La tecnica consente di rilevare gli oggetti in modo più semplice e scalabile su immagini di diverse dimensioni e risoluzioni, rendendola ideale per un'ampia gamma di applicazioni, dalle immagini satellitari alla diagnostica medica.

YOLO11 without SAHI YOLO11 with SAHI
YOLO11 without SAHI YOLO11 with SAHI

Installazione e preparazione

Installazione

Per iniziare, installa le ultime versioni di SAHI e Ultralytics:

pip install -U ultralytics sahi

Importazione di moduli e download di risorse

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

Istanziare il modello

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'
)

Esegui una previsione standard

Eseguire l'inferenza standard utilizzando un percorso di immagini o un'immagine 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)

Visualizza i risultati

Esporta e visualizza i rettangoli di selezione e le maschere previste:

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

Sliced Inference with YOLO11

Esegui l'inferenza a fette specificando le dimensioni della fetta e i rapporti di sovrapposizione:

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,
)

Gestione dei risultati delle previsioni

Il SAHI fornisce un PredictionResult che può essere convertito in vari formati di annotazione:

# 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]

Previsione del lotto

Per la previsione in batch su una directory di immagini:

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.

Citazioni e ringraziamenti

Se utilizzi SAHI nel tuo lavoro di ricerca o sviluppo, ti preghiamo di citare il documento originale di SAHI e di riconoscere gli autori:

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

DOMANDE FREQUENTI

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

Per istruzioni più dettagliate, consulta la nostra guida sull'inferenza a fette.

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:

  • Riduzione del carico computazionale: Le fette più piccole sono più veloci da elaborare e consumano meno memoria, rendendo possibile l'esecuzione di rilevamenti di alta qualità su hardware con risorse limitate.
  • Accuratezza di rilevamento mantenuta: SAHI utilizza algoritmi intelligenti per unire le caselle sovrapposte, preservando la qualità del rilevamento.
  • Scalabilità migliorata: Scalando le attività di rilevamento degli oggetti su diverse dimensioni e risoluzioni delle immagini, SAHI diventa ideale per diverse applicazioni, come l'analisi delle immagini satellitari e la diagnostica medica.

Per saperne di più sui vantaggi dell'inferenza a fette, consulta la nostra documentazione.

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

Questo comando salverà le previsioni visualizzate nella directory specificata e potrai poi caricare l'immagine per visualizzarla nel tuo blocco note o nella tua applicazione. Per una guida dettagliata, consulta la sezione Inferenza 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:

  • Integrazione perfetta: SAHI si integra facilmente con i modelli di YOLO , richiedendo modifiche minime al codice.
  • Efficienza delle risorse: Suddivide le immagini di grandi dimensioni in fette più piccole, ottimizzando l'utilizzo della memoria e la velocità.
  • Alta precisione: unendo efficacemente le caselle di rilevamento sovrapposte durante il processo di cucitura, SAHI mantiene un'elevata precisione di rilevamento.

Per una comprensione più approfondita, leggi le caratteristiche principali di 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. Installare le librerie necessarie: Assicurati di avere le ultime versioni di ultralytics e sahi.
  2. Configura l'inferenza a fette: Determina le dimensioni ottimali delle fette e i rapporti di sovrapposizione per il tuo progetto specifico.
  3. Esegui previsioni in batch: Utilizza le funzionalità di SAHI per eseguire previsioni in batch su un elenco di immagini, migliorando l'efficienza.

Esempio di previsione in batch:

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,
)

Per maggiori dettagli, visita la nostra sezione sulla Predizione dei lotti.


📅 Created 11 months ago ✏️ Updated 12 days ago

Commenti