Ultralytics YOLO27:

Semantische Segmentierung mit Ultralytics YOLO#

Semantic segmentation examples

Semantische Segmentierung weist jedem Pixel in einem Bild ein Klassenlabel zu und erzeugt eine dichte Klassenkarte, die die gesamte Szene abdeckt. Im Gegensatz zur Instanzsegmentierung, die einzelne Objekte voneinander trennt, fasst die semantische Segmentierung alle Pixel derselben Klasse zusammen, unabhängig davon, wie viele einzelne Objekte vorhanden sind.



Watch: Semantic Segmentation with Ultralytics YOLO26 | Quickstart Tutorial

Die Ausgabe eines Modells für semantische Segmentierung ist eine einzelne Klassenkarte mit der Höhe und Breite des Bildes, wobei jeder Pixelwert einer vorhergesagten Klassen-ID entspricht. Dadurch eignet sich die semantische Segmentierung ideal für Aufgaben zur Szenenanalyse wie autonomes Fahren, medizinische Bildgebung und Landbedeckungskartierung.

Tipp

Verwende die Aufgabe task=semantic oder yolo semantic CLI für die semantische Segmentierung. Modelldateien für die semantische Segmentierung mit YOLO26 verwenden das Suffix -sem, zum Beispiel yolo26n-sem.pt.

Modelle#

Modelle für die semantische Segmentierung mit YOLO26, die auf dem Datensatz Cityscapes vortrainiert wurden, sind unten aufgeführt.

Modelle werden bei der ersten Verwendung automatisch aus dem neuesten Ultralytics-Release heruntergeladen.

ModellGröße
(Pixel)
mIoUvalGeschwindigkeit
RTX3090 PyTorch
(ms)
Parameter
(M)
FLOPs
(B)
YOLO26n-sem1024 × 204878.34.4 ± 0.01.623.8
YOLO26s-sem1024 × 204880.88.4 ± 0.06.591.0
YOLO26m-sem1024 × 204882.019.9 ± 0.114.3305.5
YOLO26l-sem1024 × 204882.926.5 ± 0.117.8388.2
YOLO26x-sem1024 × 204883.648.9 ± 0.240.1866.9
  • Die Werte für mIoUval gelten für ein einzelnes Modell mit einer einzigen Bildskala auf dem Validierungssatz von Cityscapes.
    Reproduziere sie mit yolo semantic val data=cityscapes.yaml device=0 imgsz=2048
  • Die Geschwindigkeitsmetriken werden über die Validierungsbilder von Cityscapes mit einer RTX3090-Instanz gemittelt.
    Reproduziere sie mit yolo semantic val data=cityscapes.yaml batch=1 device=0|cpu imgsz=2048
  • Die Werte für Params und FLOPs gelten für das fusionierte Modell nach model.fuse(), das Conv- und BatchNorm-Schichten zusammenführt. Vortrainierte Checkpoints enthalten weiterhin die vollständige Trainingsarchitektur und können daher höhere Werte aufweisen.

Modelle für die semantische Segmentierung mit YOLO26, die auf dem Datensatz ADE20K vortrainiert wurden, sind unten aufgeführt.

Modelle werden bei der ersten Verwendung automatisch aus dem neuesten Ultralytics-Release heruntergeladen.

ModellGröße
(Pixel)
mIoUvalGeschwindigkeit
RTX3090 PyTorch
(ms)
Parameter
(M)
FLOPs
(B)
YOLO26n-sem-ade20k64038.83.9 ± 0.21.64.5
YOLO26s-sem-ade20k64045.64.2 ± 0.36.517.5
YOLO26m-sem-ade20k64047.44.7 ± 0.314.459.6
YOLO26l-sem-ade20k64049.78.3 ± 0.217.975.2
YOLO26x-sem-ade20k64051.59.9 ± 0.340.2168.4
  • Die Werte für mIoUval gelten für ein einzelnes Modell mit einer einzigen Bildskala auf dem Validierungssatz von ADE20K.
    Reproduziere sie mit yolo semantic val model=yolo26n-sem-ade20k.pt data=ade20k.yaml device=0 imgsz=640, indem du yolo26n-sem-ade20k.pt durch den gewünschten yolo26*-sem-ade20k.pt-Checkpoint ersetzt.
  • Die Geschwindigkeitsmetriken werden über die Validierungsbilder von ADE20K mit einer RTX3090-Instanz gemittelt.
    Reproduziere sie mit yolo semantic val model=yolo26n-sem-ade20k.pt data=ade20k.yaml batch=1 device=0|cpu imgsz=640, indem du yolo26n-sem-ade20k.pt durch den gewünschten yolo26*-sem-ade20k.pt-Checkpoint ersetzt.
  • Die Werte für Params und FLOPs gelten für das fusionierte Modell nach model.fuse(), das Conv- und BatchNorm-Schichten zusammenführt. Vortrainierte Checkpoints enthalten weiterhin die vollständige Trainingsarchitektur und können daher höhere Werte aufweisen.

Siehe die unreleased YOLO27 preview für vorläufige Cityscapes-mIoU-Ergebnisse.

Trainieren#

Trainiere YOLO26n-sem 100 Epochen lang auf dem Datensatz Cityscapes8 mit einer Bildgröße von 1024. Eine vollständige Liste der verfügbaren Argumente findest du auf der Seite Konfiguration.

Beispiel
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-sem.yaml")  # build a new model from YAML
model = YOLO("yolo26n-sem.pt")  # load a pretrained model (recommended for training)
model = YOLO("yolo26n-sem.yaml").load("yolo26n-sem.pt")  # build from YAML and transfer weights

# Train the model
results = model.train(data="cityscapes8.yaml", epochs=100, imgsz=1024)

Ausführliche Informationen zum Modus train findest du auf der Seite Trainieren. Modelle für die semantische Segmentierung können auch mit dem Cloud-Training der Ultralytics Platform trainiert werden.

Datensatzformat#

Datensätze für die semantische Segmentierung verwenden einkanalige Maskenbilder, typischerweise im PNG-Format, wobei jeder Pixelwert eine Klassen-ID darstellt. Pixel mit dem Wert 255 werden als „ignore“ behandelt und von der Verlustberechnung ausgeschlossen. Die YAML-Datei des Datensatzes sollte Pfade zu den Bildern und den zugehörigen Maskenverzeichnissen enthalten. Einzelheiten zum Format findest du im Leitfaden zu Datensätzen für die semantische Segmentierung. Zu den unterstützten Datensätzen gehören Cityscapes und ADE20K. Mit der Annotation in der Ultralytics Platform kannst du semantische Datensätze verwalten und labeln.

Validierung#

Validiere die Genauigkeit eines trainierten YOLO26n-sem-Modells auf einem Datensatz für die semantische Segmentierung. Übergib data ausdrücklich, damit die Validierung die vorgesehene YAML-Datei des Datensatzes verwendet.

Beispiel
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-sem.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom model

# Validate the model
metrics = model.val(data="cityscapes.yaml")
metrics.miou  # mean Intersection over Union
metrics.pixel_accuracy  # overall pixel accuracy

Vorhersage#

Verwende ein trainiertes YOLO26n-sem-Modell, um Vorhersagen für Bilder auszuführen.

Beispiel
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-sem.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom model

# Predict with the model
results = model("https://ultralytics.com/images/bus.jpg")  # predict on an image

# Access the results
for result in results:
    semantic_mask = result.semantic_mask.data  # class map, shape (H,W), integer dtype selected by class count

Ausführliche Informationen zum Modus predict findest du auf der Seite Predict.

Ausgabe der Ergebnisse#

Die semantische Segmentierung mit YOLO liefert ein Results-Objekt pro Bild. Jedes Ergebnis enthält eine dichte Klassenkarte für das gesamte Bild anstelle einer Liste von Objektmasken. Pixel mit derselben vorhergesagten Klasse haben dieselbe Klassen-ID, auch wenn sie zu getrennten Objekten gehören.

AttributTypFormBeschreibung
result.semantic_maskSemanticMask(H,W)Dichte Klassenkarte.
result.semantic_mask.datatorch.uint8
torch.int16
torch.int32
(H,W)Klassen-IDs; der Datentyp wird anhand der Anzahl der Klassen ausgewählt.
result.masks--Keine Instanzmasken.
result.boxes--Keine Instanzboxen oder Konfidenzwerte.
result.masks.xy--Keine Polygone standardmäßig.

Task-spezifische Felder Results für alle Tasks findest du im Abschnitt Vorhersageergebnisse nach Task.

Qualität der Maskengrenzen

Die semantische Segmentierung sagt eine dichte Klassenkarte voraus und skaliert diese Karte anschließend für die Visualisierung und die weitere Verwendung auf die Bildgröße zurück. Sehr dünne Strukturen wie Fahrbahnmarkierungen, Spielfeldlinien, Masten oder Drähte können daher treppenförmig aussehen, wenn die Inferenz mit einer deutlich geringeren imgsz als der Auflösung des Originalbildes ausgeführt wird. Wenn Grenzen gezackt erscheinen, teste zunächst das native PyTorch-Modell .pt mit einer größeren imgsz, beispielsweise 1024, 1280 oder dem nächstgelegenen praktikablen Wert zur Bildgröße des Ausgangsbildes. Verwende exportierte Modelle erst, nachdem du bestätigt hast, dass die Ausgabe von .pt akzeptabel ist, da Eingaben mit niedrigerer Auflösung feine Details nicht wiederherstellen können, die in der vorhergesagten Klassenkarte nicht vorhanden waren.

Instanz- und semantische Segmentierung#

AspektInstanzsegmentierung (task="segment")Semantische Segmentierung (task="semantic")
Ziel der VorhersageJedes erkannte Objekt separat segmentierenJedem Pixel eine Klassen-ID zuweisen
Ausgabefeldresult.masksresult.semantic_mask
Hauptdatenresult.masks.dataresult.semantic_mask.data
Form(N,H,W)(H,W)
PixelwerteBinärmaskenwerte: 0 oder 1Klassen-IDs: 0, 1, 2, ...
Datentyptorch.uint8torch.uint8
torch.int16
torch.int32
Objekte derselben KlasseAls separate Instanzen beibehaltenZur selben Klassenregion zusammengeführt
PolygoneJa, über result.masks.xy und result.masks.xynStandardmäßig keine Polygon-Ausgabe
Bounding-Boxen und KonfidenzJa, über result.boxesKeine Bounding-Boxen oder Konfidenzwerte pro Instanz
Typische VerwendungZählen, Verfolgen, Zuschneiden, Messungen auf ObjektebeneDichte Szenenbeschriftung, befahrbare Bereiche, Landbedeckung, medizinische Regionen

Export#

Exportiere ein YOLO26n-sem-Modell in ein anderes Format wie ONNX, CoreML usw.

Beispiel
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-sem.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom model

# Export the model
model.export(format="onnx")

Die verfügbaren Exportformate für die semantische Segmentierung mit YOLO26 sind in der folgenden Tabelle aufgeführt. Du kannst mit dem Argument format in jedes Format exportieren, also beispielsweise mit format='onnx' oder format='engine'. Du kannst direkt Vorhersagen auf exportierten Modellen ausführen oder diese validieren, beispielsweise mit yolo predict model=yolo26n-sem.onnx. Nach Abschluss des Exports werden für dein Modell Verwendungsbeispiele angezeigt.

FormatArgument formatModellMetadatenArgumente
PyTorch-yolo26n-sem.pt-
TorchScripttorchscriptyolo26n-sem.torchscriptimgsz, quantize, dynamic, nms, batch, device
ONNXonnxyolo26n-sem.onnximgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device
OpenVINOopenvinoyolo26n-sem_openvino_model/imgsz, quantize, dynamic, nms, batch, data, fraction, device
TensorRTengineyolo26n-sem.engineimgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device
CoreMLcoremlyolo26n-sem.mlpackageimgsz, dynamic, quantize, nms, batch, device
TF SavedModelsaved_modelyolo26n-sem_saved_model/imgsz, keras, quantize, opset, nms, batch, data, fraction, device
TF GraphDefpbyolo26n-sem.pbimgsz, opset, batch, device
TF Edge TPUedgetpuyolo26n-sem_edgetpu.tfliteimgsz, quantize, opset, data, fraction, device
PaddlePaddlepaddleyolo26n-sem_paddle_model/imgsz, batch, device
MNNmnnyolo26n-sem.mnnimgsz, batch, dynamic, quantize, simplify, opset, nms, device
NCNNncnnyolo26n-sem_ncnn_model/imgsz, quantize, batch, device
IMX500imxyolo26n-sem_imx_model/imgsz, quantize, data, fraction, nms, device
RKNNrknnyolo26n-sem_rknn_model/imgsz, batch, name, quantize, simplify, opset, data, fraction, device
ExecuTorchexecutorchyolo26n-sem_executorch_model/imgsz, batch, device
Axeleraaxelerayolo26n-sem_axelera_model/imgsz, batch, quantize, data, fraction, device
DEEPXdeepxyolo26n-sem_deepx_model/imgsz, quantize, simplify, opset, data, optimize, device
Qualcomm QNNqnnyolo26n-sem_qnn.onnximgsz, batch, name, quantize, simplify, opset, data, fraction, device
LiteRTlitertyolo26n-sem.tfliteimgsz, quantize, batch, data, fraction, device
Hailohailoyolo26n-sem_hailo_model/imgsz, name, quantize, data, fraction, simplify, conf, iou
Huawei Ascendascendyolo26n-sem_ascend_model/imgsz, batch, name, quantize, opset, simplify, nms
Apple Core AIcoreaiyolo26n-sem.aimodelimgsz, batch, quantize

nms=None verwendet standardmäßig Rohausgaben für externes NMS. Setze nms=False, um einen verfügbaren NMS-freien Kopf auszuwählen; nicht unterstützte Formate greifen auf ihren nativen Ausgabepfad zurück. Die Einträge nms oben identifizieren Formate, die NMS mit nms=True einbetten können.

Ausführliche Informationen zu export findest du auf der Seite Export.

FAQ#

  • Um ein YOLO26-Modell für die semantische Segmentierung auf einem benutzerdefinierten Datensatz zu trainieren, musst du PNG-Maskenbilder vorbereiten, wobei jeder Pixelwert eine Klassen-ID (0, 1, 2, ...) darstellt und Pixel mit dem Wert 255 während des Trainings ignoriert werden. Erstelle eine YAML-Datei des Datensatzes, die auf die Verzeichnisse mit deinen Bildern und Masken verweist, und trainiere anschließend das Modell:

    Beispiel
    from ultralytics import YOLO
    
    # Load a pretrained YOLO26 semantic segmentation model
    model = YOLO("yolo26n-sem.pt")
    
    # Train the model
    results = model.train(data="path/to/your_dataset.yaml", epochs=100, imgsz=512)

    Weitere verfügbare Argumente findest du auf der Seite Konfiguration.

  • Instanzsegmentierung und semantische Segmentierung sind beides Aufgaben auf Pixelebene, unterscheiden sich jedoch in einem wesentlichen Punkt:

    • Semantische Segmentierung weist jedem Pixel ein Klassenlabel zu, unterscheidet jedoch nicht zwischen einzelnen Objekten derselben Klasse. Beispielsweise haben alle Autos in einer Szene dasselbe Klassenlabel.
    • Instanzsegmentierung erkennt jedes einzelne Objekt separat und erzeugt für jedes Objekt eine eigene Maske, auch wenn die Objekte derselben Klasse angehören.

    Die semantische Segmentierung eignet sich am besten für Aufgaben zum Szenenverständnis wie autonomes Fahren und Landbedeckungskartierung, während die Instanzsegmentierung bevorzugt wird, wenn das Zählen oder Verfolgen einzelner Objekte wichtig ist.

  • Ja. Wenn dein Datensatz Polygon-Labels im Ultralytics-YOLO-Format verwendet (ein .txt pro Bild), lasse masks_dir in der YAML-Datei des Datensatzes weg und stelle sicher, dass im Stammverzeichnis des Datensatzes neben deinen Bildern kein Ordner masks/ vorhanden ist (sein bloßes Vorhandensein aktiviert den PNG-Maskenmodus, auch wenn masks_dir nicht gesetzt ist). Der Loader wandelt die Polygone dann während der Ausführung in semantische Masken pro Bild um. Bei Datensätzen mit mehreren Klassen (N > 1) wird automatisch eine zusätzliche Klasse background an names angehängt. Bei Datensätzen mit einer Klasse (N == 1) bleibt das Training bei 1 Klasse – deine deklarierte Klasse wird zu 1 in der Maske und nicht abgedeckte Pixel werden zu 0. Einzelheiten findest du im Leitfaden zu Datensätzen für die semantische Segmentierung.

  • Ultralytics YOLO26 bietet integrierte Konfigurationen für mehrere Datensätze zur semantischen Segmentierung:

    • Cityscapes: Städtische Straßenszenen mit 19 Klassen, die häufig für die Forschung zum autonomen Fahren verwendet werden.
    • ADE20K: Ein groß angelegter Datensatz zur Szenenanalyse mit 150 Klassen.

    Du kannst auch jeden benutzerdefinierten Datensatz verwenden, der PNG-Maskenannotationen bereitstellt, bei denen die Pixelwerte den Klassen-IDs entsprechen.

  • Validiere ein vortrainiertes YOLO26-Modell für die semantische Segmentierung mit der für die Auswertung verwendeten YAML-Datei des Datensatzes:

    Beispiel
    from ultralytics import YOLO
    
    # Load a pretrained model
    model = YOLO("yolo26n-sem.pt")
    
    # Validate the model
    metrics = model.val(data="cityscapes.yaml")
    print("Mean IoU:", metrics.miou)
    print("Pixel Accuracy:", metrics.pixel_accuracy)

    Diese Schritte liefern dir Validierungsmetriken wie die mittlere Schnittmenge über der Vereinigung (mIoU) und die Pixelgenauigkeit. Dabei handelt es sich um Standardmaße zur Bewertung der Leistung semantischer Segmentierungsmodelle.

  • Exportiere ein YOLO26-Modell für die semantische Segmentierung mit Python- oder CLI-Befehlen in das ONNX-Format:

    Beispiel
    from ultralytics import YOLO
    
    # Load a pretrained model
    model = YOLO("yolo26n-sem.pt")
    
    # Export the model to ONNX format
    model.export(format="onnx")

    Weitere Informationen zum Export in verschiedene Formate findest du auf der Seite Export.

Kommentare