Zum Inhalt springen

Ultralytics Docs: YOLOv8 mit SAHI für Sliced Inference verwenden

Willkommen bei der Ultralytics Dokumentation über die Verwendung von YOLOv8 mit SAHI (Slicing Aided Hyper Inference). In diesem umfassenden Leitfaden findest du alle wichtigen Informationen, die du brauchst, um SAHI zusammen mit YOLOv8 zu implementieren. Wir erfahren, was SAHI ist, warum Slicing Aided Hyper Inference für umfangreiche Anwendungen wichtig ist und wie du diese Funktionen in YOLOv8 integrieren kannst, um die Leistung der Objekterkennung zu verbessern.

SAHI Sliced Inference Übersicht

Einführung in SAHI

SAHI (Slicing Aided Hyper Inference) ist eine innovative Bibliothek zur Optimierung von Objekterkennungsalgorithmen für großflächige und hochauflösende Bilder. Ihre Kernfunktion besteht darin, Bilder in handhabbare Slices zu unterteilen, die Objekterkennung auf jedem Slice durchzuführen und die Ergebnisse dann wieder zusammenzufügen. SAHI ist mit einer Reihe von Objekterkennungsmodellen kompatibel, z. B. mit der YOLO Serie, und bietet so Flexibilität bei optimaler Nutzung der Rechenressourcen.

Die wichtigsten Merkmale von SAHI

  • Nahtlose Integration: SAHI lässt sich mühelos in die Modelle von YOLO integrieren. Das bedeutet, dass du mit dem Slicen und Detektieren beginnen kannst, ohne viel Code zu ändern.
  • Ressourceneffizienz: Indem große Bilder in kleinere Teile zerlegt werden, optimiert SAHI die Speichernutzung und ermöglicht es dir, hochwertige Erkennungen auf Hardware mit begrenzten Ressourcen durchzuführen.
  • Hohe Genauigkeit: SAHI hält die Erkennungsgenauigkeit aufrecht, indem es intelligente Algorithmen einsetzt, um überlappende Erkennungsfelder während des Stitching-Prozesses zusammenzuführen.

Was ist Sliced Inference?

Unter Sliced Inference versteht man die Unterteilung eines großen oder hochauflösenden Bildes in kleinere Segmente (Slices), die Durchführung einer Objekterkennung auf diesen Slices und die anschließende Neukompilierung der Slices, um die Objektpositionen auf dem Originalbild zu rekonstruieren. Diese Technik ist von unschätzbarem Wert, wenn die Rechenressourcen begrenzt sind oder wenn du mit extrem hochauflösenden Bildern arbeitest, die sonst zu Speicherproblemen führen könnten.

Vorteile der Sliced Inference

  • Geringerer Rechenaufwand: Kleinere Bildausschnitte sind schneller zu verarbeiten und verbrauchen weniger Speicherplatz, was einen reibungsloseren Betrieb auf weniger leistungsfähiger Hardware ermöglicht.

  • Gleichbleibende Erkennungsqualität: Da jedes Slice unabhängig behandelt wird, verringert sich die Qualität der Objekterkennung nicht, vorausgesetzt, die Slices sind groß genug, um die Objekte von Interesse zu erfassen.

  • Verbesserte Skalierbarkeit: Die Technik ermöglicht eine einfachere Skalierung der Objekterkennung über verschiedene Bildgrößen und -auflösungen hinweg und ist damit ideal für eine Vielzahl von Anwendungen, von Satellitenbildern bis hin zur medizinischen Diagnostik.

YOLOv8 ohne SAHI YOLOv8 mit SAHI
YOLOv8 ohne SAHI YOLOv8 mit SAHI

Installation und Vorbereitung

Installation

Um loszulegen, installiere die neuesten Versionen von SAHI und Ultralytics:

pip install -U ultralytics sahi

Module importieren und Ressourcen herunterladen

Hier erfährst du, wie du die notwendigen Module importierst und ein YOLOv8 Modell und einige Testbilder herunterlädst:

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

Standard-Inferenz mit YOLOv8

Das Modell instanziieren

Du kannst ein YOLOv8 Modell zur Objekterkennung wie folgt instanziieren:

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

Standardvorhersage durchführen

Führe die Standardinferenz mit einem Bildpfad oder einem Numpy-Bild durch.

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

Ergebnisse visualisieren

Exportiere und visualisiere die vorhergesagten Begrenzungsrahmen und Masken:

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

Sliced Inference mit YOLOv8

Führe eine Sliced Inference durch, indem du die Abmessungen der Slices und das Überlappungsverhältnis angibst:

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
)

Umgang mit Vorhersageergebnissen

SAHI bietet eine PredictionResult Objekt, das in verschiedene Anmerkungsformate umgewandelt werden kann:

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

Batch-Vorhersage

Für die Stapelvorhersage in einem Verzeichnis von Bildern:

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

Das war's! Jetzt bist du in der Lage, YOLOv8 mit SAHI sowohl für Standard- als auch für Sliced Inference zu verwenden.

Zitate und Danksagungen

Wenn du SAHI in deiner Forschungs- oder Entwicklungsarbeit verwendest, zitiere bitte das Originalpapier von SAHI und nenne die Autoren:

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

Wir bedanken uns bei der SAHI-Forschungsgruppe für die Erstellung und Pflege dieser unschätzbaren Ressource für die Computer Vision Community. Weitere Informationen über SAHI und seine Macher findest du im SAHI GitHub Repository.



Erstellt am 2023-11-12, Aktualisiert am 2023-11-22
Autoren: glenn-jocher (3)

Kommentare