Vai al contenuto

Documentazione Ultralytics: Utilizzo di YOLO11 con SAHI per l'inferenza a sezioni

Apri SAHI per l'inferenza a fette in Colab

Benvenuti nella documentazione di Ultralytics su come utilizzare YOLO11 con SAHI (Slicing Aided Hyper Inference). Questa guida completa ha lo scopo di fornirvi tutte le conoscenze essenziali necessarie per implementare SAHI insieme a YOLO11. Approfondiremo cosa è SAHI, perché l'inferenza a fette è fondamentale per le applicazioni su larga scala e come integrare queste funzionalità con YOLO11 per migliorare le prestazioni di object detection.

Panoramica dell'inferenza a sezioni SAHI

Introduzione a SAHI

SAHI (Slicing Aided Hyper Inference) è una libreria innovativa progettata per ottimizzare gli algoritmi di object detection per immagini su larga scala e ad alta risoluzione. La sua funzionalità principale risiede nella suddivisione delle immagini in sezioni gestibili, nell'esecuzione dell'object detection su ciascuna sezione e quindi nell'unione dei risultati. SAHI è compatibile con una vasta gamma di modelli di object detection, inclusa la serie YOLO, offrendo quindi flessibilità e garantendo al contempo un uso ottimizzato delle risorse computazionali.



Guarda: Inferenza con SAHI (Slicing Aided Hyper Inference) utilizzando Ultralytics YOLO11

Caratteristiche principali di SAHI

  • Integrazione perfetta: SAHI si integra facilmente con i modelli YOLO, il che significa che puoi iniziare a sezionare e rilevare senza molte modifiche al codice.
  • Efficienza delle risorse: Suddividendo le immagini di grandi dimensioni in parti più piccole, SAHI ottimizza l'utilizzo della memoria, consentendoti di eseguire rilevamenti di alta qualità su hardware con risorse limitate.
  • Alta precisione: SAHI mantiene l'accuratezza del rilevamento impiegando algoritmi intelligenti per unire le caselle di rilevamento sovrapposte durante il processo di stitching.

Cos'è l'inferenza a fette?

L'Inferenza a Fette si riferisce alla pratica di suddividere un'immagine grande o ad alta risoluzione in segmenti più piccoli (fette), eseguire il rilevamento degli oggetti su queste fette e quindi ricompilare le fette per ricostruire le posizioni degli oggetti sull'immagine originale. Questa tecnica è preziosa in 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

  • Ridotto carico computazionale: Le porzioni 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 porzione viene trattata in modo indipendente, non vi è alcuna riduzione della qualità del rilevamento degli oggetti, a condizione che le porzioni siano sufficientemente grandi da catturare gli oggetti di interesse.

  • Scalabilità Migliorata: La tecnica consente di scalare più facilmente il rilevamento di oggetti su diverse dimensioni e risoluzioni di immagini, rendendola ideale per una vasta gamma di applicazioni, dalle immagini satellitari alla diagnostica medica.

YOLO11 senza SAHI YOLO11 con SAHI
YOLO11 senza SAHI YOLO11 con SAHI

Installazione e preparazione

Installazione

Per iniziare, installa le versioni più recenti di SAHI e Ultralytics:

pip install -U ultralytics sahi

Importa moduli e scarica risorse

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

from sahi.utils.file import download_from_url
from sahi.utils.ultralytics import download_yolo11n_model

# Download YOLO11 model
model_path = "models/yolo11n.pt"
download_yolo11n_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",
)

Inferenza standard con YOLO11

Istanziare il modello

Puoi istanziare un modello YOLO11 per il rilevamento di oggetti in questo modo:

from sahi import AutoDetectionModel

detection_model = AutoDetectionModel.from_pretrained(
    model_type="ultralytics",
    model_path=model_path,
    confidence_threshold=0.3,
    device="cpu",  # or 'cuda:0'
)

Esegui la previsione standard

Esegui l'inferenza standard utilizzando un percorso di immagine o un'immagine numpy.

from sahi.predict import get_prediction
from sahi.utils.cv import read_image

# With an image path
result = get_prediction("demo_data/small-vehicles1.jpeg", detection_model)

# With a numpy image
result_with_np_image = get_prediction(read_image("demo_data/small-vehicles1.jpeg"), detection_model)

Visualizza i risultati

Esporta e visualizza i riquadri di delimitazione e le maschere previsti:

from IPython.display import Image

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

Inferenza a fette con YOLO11

Esegui l'inferenza a fette specificando le dimensioni delle fette 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 della previsione

SAHI fornisce un PredictionResult oggetto, 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 batch

Per la previsione batch su una directory di immagini:

from sahi.predict import predict

predict(
    model_type="ultralytics",
    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,
)

Questo è tutto! Ora sei attrezzato per utilizzare YOLO11 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, cita l'articolo originale su SAHI e riconosci 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 risorsa preziosa per la comunità di computer vision. Per maggiori informazioni su SAHI e i suoi creatori, visitate il repository GitHub di SAHI.

FAQ

Come posso integrare YOLO11 con SAHI per l'inferenza a segmenti nel rilevamento di oggetti?

L'integrazione di Ultralytics YOLO11 con SAHI (Slicing Aided Hyper Inference) per l'inferenza a fette ottimizza le tue attività di rilevamento oggetti su immagini ad alta risoluzione partizionandole 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 YOLO11 e immagini di test:

from sahi.utils.file import download_from_url
from sahi.utils.ultralytics import download_yolo11n_model

# Download YOLO11 model
model_path = "models/yolo11n.pt"
download_yolo11n_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 all'Inferenza a fette.

Perché dovrei usare SAHI con YOLO11 per il rilevamento di oggetti su immagini di grandi dimensioni?

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

  • Ridotto carico computazionale: Le porzioni più piccole sono più veloci da elaborare e consumano meno memoria, rendendo fattibile l'esecuzione di rilevamenti di alta qualità su hardware con risorse limitate.
  • Accuratezza di detection mantenuta: SAHI utilizza algoritmi intelligenti per unire le box sovrapposte, preservando la qualità della detection.
  • Scalabilità Migliorata: Scalando i compiti di rilevamento di oggetti su diverse dimensioni e risoluzioni di immagini, SAHI diventa ideale per varie applicazioni, come l'analisi di immagini satellitari e la diagnostica medica.

Scopri di più sui vantaggi dell'inferenza a fette nella nostra documentazione.

Posso visualizzare i risultati della previsione quando si utilizza YOLO11 con SAHI?

Sì, puoi visualizzare i risultati della previsione quando usi YOLO11 con SAHI. Ecco come puoi esportare e visualizzare i risultati:

from IPython.display import Image

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

Questo comando salverà le predizioni visualizzate nella directory specificata, e potrai quindi caricare l'immagine per visualizzarla nel tuo notebook o applicazione. Per una guida dettagliata, consulta la sezione Sezione Inferenza Standard.

Quali funzionalità offre SAHI per migliorare il rilevamento di oggetti YOLO11?

SAHI (Slicing Aided Hyper Inference) offre diverse funzionalità che completano Ultralytics YOLO11 per l'object detection:

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

Per una comprensione più approfondita, leggi le caratteristiche principali di SAHI.

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

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

  1. Installa le librerie richieste: Assicurati di avere le versioni più recenti di ultralytics e sahi.
  2. Configura l'inferenza a fette: Determina le dimensioni ottimali delle fette e i rapporti di sovrapposizione per il tuo specifico progetto.
  3. Esegui previsioni batch: Utilizza le funzionalità di SAHI per eseguire previsioni batch su una directory di immagini, migliorando l'efficienza.

Esempio per la predizione batch:

from sahi.predict import predict

predict(
    model_type="ultralytics",
    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 passaggi più dettagliati, visita la nostra sezione sulla Predizione batch.



📅 Creato 1 anno fa ✏️ Aggiornato 23 giorni fa

Commenti