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 ha lo scopo di 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 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 di 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