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.



Pass auf: Inference with SAHI (Slicing Aided Hyper Inference) using Ultralytics YOLOv8

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.file import download_from_url
from sahi.utils.yolov8 import download_yolov8s_model

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

from sahi import AutoDetectionModel

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.

from sahi.predict import get_prediction

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

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

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:

from sahi.predict import predict

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.



Created 2023-11-12, Updated 2024-06-22
Authors: RizwanMunawar (1), glenn-jocher (6)

Kommentare