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: Inferenz mit SAHI (Slicing Aided Hyper Inference) mit 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.

FAQ

Wie kann ich YOLOv8 mit SAHI integrieren, um bei der Objekterkennung auf Scheiben zu schließen?

Die Integration von Ultralytics YOLOv8 mit SAHI (Slicing Aided Hyper Inference) für Sliced Inference optimiert deine Objekterkennungsaufgaben auf hochauflösenden Bildern, indem sie in handhabbare Slices unterteilt werden. Dieser Ansatz verbessert die Speichernutzung und gewährleistet eine hohe Erkennungsgenauigkeit. Um loszulegen, musst du die Bibliotheken ultralytics und sahi installieren:

pip install -U ultralytics sahi

Lade dann ein YOLOv8 Modell und Testbilder herunter:

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

Ausführlichere Anweisungen findest du in unserem Leitfaden zu Sliced Inference.

Warum sollte ich SAHI mit YOLOv8 für die Objekterkennung auf großen Bildern verwenden?

Die Verwendung von SAHI mit Ultralytics YOLOv8 zur Objekterkennung auf großen Bildern bietet mehrere Vorteile:

  • Geringerer Rechenaufwand: Kleinere Slices lassen sich schneller verarbeiten und verbrauchen weniger Speicherplatz, sodass hochwertige Erkennungen auch auf Hardware mit begrenzten Ressourcen möglich sind.
  • Beibehaltung der Erkennungsgenauigkeit: SAHI verwendet intelligente Algorithmen, um überlappende Kästchen zusammenzuführen und die Erkennungsqualität zu erhalten.
  • Verbesserte Skalierbarkeit: Durch die Skalierung von Objekterkennungsaufgaben über verschiedene Bildgrößen und Auflösungen hinweg eignet sich SAHI ideal für verschiedene Anwendungen wie die Analyse von Satellitenbildern und die medizinische Diagnostik.

Erfahre mehr über die Vorteile von Sliced Inference in unserer Dokumentation.

Kann ich die Vorhersageergebnisse visualisieren, wenn ich YOLOv8 mit SAHI verwende?

Ja, du kannst die Vorhersageergebnisse visualisieren, wenn du YOLOv8 mit SAHI verwendest. Hier erfährst du, wie du die Ergebnisse exportieren und visualisieren kannst:

result.export_visuals(export_dir="demo_data/")
from IPython.display import Image

Image("demo_data/prediction_visual.png")

Dieser Befehl speichert die visualisierten Vorhersagen im angegebenen Verzeichnis und du kannst das Bild dann laden, um es in deinem Notebook oder deiner Anwendung anzuzeigen. Eine ausführliche Anleitung findest du im Abschnitt Standard-Inferenz.

Welche Funktionen bietet SAHI zur Verbesserung der YOLOv8 Objekterkennung?

SAHI (Slicing Aided Hyper Inference) bietet mehrere Funktionen, die Ultralytics YOLOv8 zur Objekterkennung ergänzen:

  • Nahtlose Integration: SAHI lässt sich problemlos in die Modelle von YOLO integrieren und erfordert nur minimale Code-Anpassungen.
  • Ressourceneffizienz: Es unterteilt große Bilder in kleinere Slices, was die Speichernutzung und die Geschwindigkeit optimiert.
  • Hohe Genauigkeit: Durch das effektive Zusammenführen sich überlappender Erkennungsfelder während des Stitching-Prozesses sorgt SAHI für eine hohe Erkennungsgenauigkeit.

Lies die wichtigsten Funktionen von SAHI, um ein besseres Verständnis zu erhalten.

Wie kann ich mit YOLOv8 und SAHI große Inferenzprojekte durchführen?

Um große Inferenzprojekte mit YOLOv8 und SAHI zu bewältigen, befolge diese Best Practices:

  1. Erforderliche Bibliotheken installieren: Stelle sicher, dass du die neuesten Versionen von ultralytics und sahi hast.
  2. Konfiguriere die Sliced Inference: Bestimme die optimalen Slice-Abmessungen und Überlappungsverhältnisse für dein spezifisches Projekt.
  3. Batch-Vorhersagen durchführen: Nutze die Möglichkeiten von SAHI, um Stapelvorhersagen für ein Verzeichnis von Bildern durchzuführen, was die Effizienz erhöht.

Beispiel für eine Batch-Vorhersage:

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

Detailliertere Schritte findest du in unserem Abschnitt über Batch Prediction.



Erstellt am 2023-11-12, Aktualisiert am 2024-07-05
Autoren: glenn-jocher (7), RizwanMunawar (1)

Kommentare