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 Slice-Dimensionen und ÜberlappungsverhĂ€ltnisse 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 nutzen.

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