Overslaan naar inhoud

Ultralytics Documenten: YOLOv8 gebruiken met SAHI voor Sliced Inferentie

Welkom bij de Ultralytics documentatie over het gebruik van YOLOv8 met SAHI (Slicing Aided Hyper Inference). Deze uitgebreide gids is bedoeld om je te voorzien van alle essentiële kennis die je nodig hebt om SAHI te implementeren naast YOLOv8. We gaan diep in op wat SAHI is, waarom sliced inference cruciaal is voor grootschalige toepassingen en hoe je deze functionaliteiten kunt integreren met YOLOv8 voor verbeterde prestaties bij objectdetectie.

SAHI Gesneden Inferentie Overzicht

Inleiding tot SAHI

SAHI (Slicing Aided Hyper Inference) is een innovatieve bibliotheek die is ontworpen om objectdetectiealgoritmen te optimaliseren voor grootschalige beelden met een hoge resolutie. De kernfunctionaliteit ligt in het verdelen van beelden in hanteerbare segmenten, het uitvoeren van objectdetectie op elk segment en het weer samenvoegen van de resultaten. SAHI is compatibel met een reeks objectdetectiemodellen, waaronder de YOLO serie, en biedt zo flexibiliteit terwijl het optimaal gebruik van rekenkracht garandeert.

Belangrijkste kenmerken van SAHI

  • Naadloze integratie: SAHI integreert moeiteloos met YOLO modellen, wat betekent dat je kunt beginnen met snijden en detecteren zonder veel code aan te passen.
  • Efficiënt gebruik van bronnen: Door grote afbeeldingen op te splitsen in kleinere delen, optimaliseert SAHI het geheugengebruik, waardoor je detectie van hoge kwaliteit kunt uitvoeren op hardware met beperkte bronnen.
  • Hoge nauwkeurigheid: SAHI behoudt de detectienauwkeurigheid door slimme algoritmes te gebruiken om overlappende detectievelden samen te voegen tijdens het stikproces.

Wat is Sliced Inference?

Sliced Inference verwijst naar de praktijk van het onderverdelen van een grote afbeelding of afbeelding met hoge resolutie in kleinere segmenten (segmenten), het detecteren van objecten op deze segmenten en vervolgens het hercompileren van de segmenten om de objectlocaties op de oorspronkelijke afbeelding te reconstrueren. Deze techniek is van onschatbare waarde in scenario's waar de rekenkracht beperkt is of bij het werken met afbeeldingen met een extreem hoge resolutie die anders tot geheugenproblemen zou kunnen leiden.

Voordelen van Sliced Inference

  • Minder rekenlast: Kleinere beeldschijven zijn sneller te verwerken en verbruiken minder geheugen, waardoor ze soepeler werken op hardware van lagere kwaliteit.

  • Behouden detectiekwaliteit: Omdat elke slice onafhankelijk wordt behandeld, is er geen vermindering in de kwaliteit van objectdetectie, op voorwaarde dat de slices groot genoeg zijn om de objecten van interesse vast te leggen.

  • Verbeterde schaalbaarheid: De techniek maakt het mogelijk om objectdetectie gemakkelijker te schalen over verschillende beeldformaten en -resoluties, waardoor het ideaal is voor een breed scala aan toepassingen, van satellietbeelden tot medische diagnostiek.

YOLOv8 zonder SAHI YOLOv8 met SAHI
YOLOv8 zonder SAHI YOLOv8 met SAHI

Installatie en voorbereiding

Installatie

Om te beginnen installeer je de nieuwste versies van SAHI en Ultralytics:

pip install -U ultralytics sahi

Modules importeren en bronnen downloaden

Hier lees je hoe je de benodigde modules importeert en een YOLOv8 model en wat testafbeeldingen downloadt:

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

Standaard inferentie met YOLOv8

Het model instantiëren

Je kunt een YOLOv8 model als volgt instantiëren voor objectdetectie:

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

Standaard voorspelling uitvoeren

Voer standaard inferentie uit met behulp van een afbeeldingspad of een numpy afbeelding.

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

Resultaten visualiseren

Exporteer en visualiseer de voorspelde bounding boxes en maskers:

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

Gesneden inferentie met YOLOv8

Voer sliced inferentie uit door de slice afmetingen en overlapratio's op te geven:

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
)

Omgaan met voorspellingsresultaten

SAHI biedt een PredictionResult object, dat kan worden geconverteerd naar verschillende annotatieformaten:

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

Voor batchvoorspelling op een map met afbeeldingen:

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

Dat was het! Nu kun je YOLOv8 gebruiken met SAHI voor zowel standaard als gesneden inferentie.

Citaten en erkenningen

Als je SAHI gebruikt in je onderzoek of ontwikkeling, citeer dan het originele SAHI artikel en vermeld de auteurs:

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

We bedanken de SAHI onderzoeksgroep voor het maken en onderhouden van deze onschatbare bron voor de computer vision gemeenschap. Ga voor meer informatie over SAHI en de makers naar de SAHI GitHub repository.



Gemaakt op 2023-11-12, Bijgewerkt op 2023-11-22
Auteurs: glenn-jocher (3)

Reacties