Vai al contenuto

Ultralytics Documenti: Utilizzare YOLOv8 con SAHI per l'inferenza a fette

Benvenuto nella documentazione di Ultralytics su come utilizzare YOLOv8 con SAHI (Slicing Aided Hyper Inference). Questa guida completa mira a fornirti tutte le conoscenze essenziali di cui avrai bisogno per implementare SAHI insieme a YOLOv8. Approfondiremo cos'è SAHI, perché l'inferenza a fette è fondamentale per le applicazioni su larga scala e come integrare queste funzionalità con YOLOv8 per migliorare le prestazioni di rilevamento degli oggetti.

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: Inferenza con SAHI (Slicing Aided Hyper Inference) utilizzando Ultralytics YOLOv8

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.
  • Alta precisione: SAHI mantiene l'accuratezza del rilevamento utilizzando algoritmi intelligenti per unire le caselle di rilevamento sovrapposte durante il processo di cucitura.

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.

YOLOv8 senza SAHI YOLOv8 con SAHI
YOLOv8 senza SAHI YOLOv8 con 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

Ecco come importare i moduli necessari e scaricare un modello di YOLOv8 e alcune immagini di prova:

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

Inferenza standard con YOLOv8

Istanziare il modello

Puoi istanziare un modello YOLOv8 per il rilevamento degli oggetti in questo modo:

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

Inferenza a fette con YOLOv8

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

Ecco fatto! Ora sei in grado di utilizzare YOLOv8 con SAHI sia per l'inferenza standard che per quella a fette.

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

Ringraziamo il gruppo di ricerca SAHI per aver creato e mantenuto questa preziosa risorsa per la comunità della computer vision. Per maggiori informazioni su SAHI e sui suoi creatori, visita il repository SAHI GitHub.

DOMANDE FREQUENTI

Come posso integrare YOLOv8 con SAHI per l'inferenza a fette nel rilevamento di oggetti?

L'integrazione di Ultralytics YOLOv8 con SAHI (Slicing Aided Hyper Inference) per l'inferenza a fette ottimizza le attività di rilevamento di oggetti su immagini ad alta risoluzione suddividendole in fette gestibili. Questo approccio migliora l'utilizzo della memoria e garantisce un'elevata precisione di rilevamento. Per iniziare, devi installare le librerie ultralytics e sahi:

pip install -U ultralytics sahi

Quindi, scarica un modello di YOLOv8 e delle immagini di prova:

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

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

Perché dovrei utilizzare SAHI con YOLOv8 per il rilevamento di oggetti su immagini di grandi dimensioni?

L'utilizzo di SAHI con Ultralytics YOLOv8 per il rilevamento di oggetti su immagini di grandi dimensioni offre diversi vantaggi:

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

Posso visualizzare i risultati delle previsioni quando utilizzo YOLOv8 con SAHI?

Sì, puoi visualizzare i risultati delle previsioni quando utilizzi YOLOv8 con SAHI. Ecco come esportare e visualizzare i risultati:

result.export_visuals(export_dir="demo_data/")
from IPython.display import Image

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.

Quali funzioni offre SAHI per migliorare il rilevamento degli oggetti su YOLOv8 ?

SAHI (Slicing Aided Hyper Inference) offre diverse funzionalità che completano Ultralytics YOLOv8 per il rilevamento degli oggetti:

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

Come posso gestire progetti di inferenza su larga scala utilizzando YOLOv8 e SAHI?

Per gestire progetti di inferenza su larga scala utilizzando YOLOv8 e SAHI, segui queste best practice:

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

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



Creato 2023-11-12, Aggiornato 2024-07-05
Autori: glenn-jocher (7), RizwanMunawar (1)

Commenti