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.

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

Inferenza standard con YOLOv8

Istanziare il modello

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

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.

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

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:

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.



Creato 2023-11-12, Aggiornato 2023-11-22
Autori: glenn-jocher (3)

Commenti