Sofortantwort
Image Segmentation einfach erklärt
Jeder Pixel wird einer Klasse zugeordnet – präziser als Bounding Boxes.
- Kurz gesagt
- Semantic Segmentation: Jeder Pixel bekommt eine Klasse (aber keine Instanz-Unterscheidung)
- Typischer Einsatz
- Medizinische Bildgebung, Autonomes Fahren, Bildbearbeitung
- Wichtig zu wissen
- SAM (Segment Anything Model) von Meta hat die Segmentierung demokratisiert
Image Segmentation im Überblick
Image Segmentation ist die präziseste Form der Objekterkennung in Computer Vision. Während Object Detection Objekte mit groben Rechtecken (Bounding Boxes) umrahmt, ordnet Segmentation jeden einzelnen Pixel des Bildes einer Klasse zu. Das Ergebnis ist eine pixelgenaue Maske, die exakt die Form des Objekts abbildet – nicht nur einen Rahmen darum.
Diese Präzision ist entscheidend für Anwendungen, wo Bounding Boxes nicht ausreichen: Ein autonomes Fahrzeug muss wissen, wo genau die Straße endet und der Bürgersteig beginnt – nicht nur, dass irgendwo eine Straße ist. Ein medizinisches Bildanalysesystem muss den genauen Rand eines Tumors bestimmen, um die Größe zu messen. Eine Foto-App muss haargenau wissen, welche Pixel zum Vordergrund gehören, um den Hintergrund zu ersetzen.
Technisch betrachtet
Arten der Segmentierung
| Typ | Beschreibung | Beispiel |
|---|---|---|
| Semantic Segmentation | Jeder Pixel → Klasse | Alle Autos = “Auto” |
| Instance Segmentation | Jeder Pixel → Klasse + Instanz | Auto #1, Auto #2 |
| Panoptic Segmentation | Kombination beider Ansätze | Vollständiges Szenenverständnis |
Wichtige Architekturen
U-Net (2015): Encoder-Decoder mit Skip Connections
→ Standard in medizinischer Bildgebung
DeepLab v3+ (2018): Atrous Convolutions für Multi-Scale-Kontext
→ Semantic Segmentation auf Straßenszenen
Mask R-CNN (2017): Faster R-CNN + Segmentierungsmaske
→ Instance Segmentation, Basis vieler Systeme
SAM (2023): Vision Transformer + promptbasierte Segmentierung
→ Zero-Shot, beliebige Objekte
SAM Quickstart
from segment_anything import SamPredictor, sam_model_registry
import numpy as np
# Modell laden
sam = sam_model_registry["vit_h"](checkpoint="sam_vit_h.pth")
predictor = SamPredictor(sam)
# Bild setzen
predictor.set_image(image) # numpy array (H, W, 3)
# Punkt-Prompt: Klick auf Objekt
input_point = np.array([[500, 375]]) # x, y Koordinaten
input_label = np.array([1]) # 1 = Vordergrund
# Segmentierung
masks, scores, logits = predictor.predict(
point_coords=input_point,
point_labels=input_label,
multimask_output=True,
)
# masks: (3, H, W) Boolean-Arrays
Metriken
IoU (Intersection over Union) / Jaccard Index:
IoU = |Vorhersage ∩ Ground Truth| / |Vorhersage ∪ Ground Truth|
→ 1.0 = perfekte Übereinstimmung
Dice Coefficient (F1 für Segmentierung):
Dice = 2 × |Vorhersage ∩ Ground Truth| / (|Vorhersage| + |Ground Truth|)
→ Sensitiver bei kleinen Objekten als IoU
mIoU (mean IoU):
Durchschnitt des IoU über alle Klassen
→ Standard-Metrik für Semantic Segmentation