Semantische Segmentierung

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 Instanz-Segmentierung, die einzelne Objekte voneinander trennt, gruppiert die semantische Segmentierung alle Pixel derselben Klasse zusammen, unabhängig davon, wie viele verschiedene Objekte vorhanden sind.

Die Ausgabe eines Modells zur semantischen Segmentierung ist eine einzelne Höhen-mal-Breiten-Klassenkarte, bei der jeder Pixelwert einer vorhergesagten Klassen-ID entspricht. Das macht die semantische Segmentierung ideal für Szenenanalyse-Aufgaben wie autonomes Fahren, medizinische Bildgebung und Landnutzungskartierung.

Tipp

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

Modelle

YOLO26 semantische Segmentierungsmodelle, die auf dem Cityscapes Datensatz vortrainiert wurden, sind unten dargestellt.

Modelle werden bei der ersten Verwendung automatisch von der neuesten Ultralytics Release heruntergeladen.

ModellGröße
(Pixel)
mIoUvalGeschwindigkeit
RTX3090 PyTorch
(ms)
Parameter
(M)
FLOPs
(B)
YOLO26n-sem1024 × 204878.34.4 ± 0.01.622.7
YOLO26s-sem1024 × 204880.88.4 ± 0.06.588.8
YOLO26m-sem1024 × 204882.019.9 ± 0.114.3304.5
YOLO26l-sem1024 × 204882.926.5 ± 0.117.9384.7
YOLO26x-sem1024 × 204883.648.9 ± 0.240.2861.7
  • mIoUval Werte gelten für das Single-Model bei einfacher Skalierung auf dem Cityscapes Validierungssatz.
    Reproduziere dies mit yolo semantic val data=cityscapes.yaml device=0 imgsz=2048
  • Geschwindigkeits-Metriken werden über Cityscapes-Validierungsbilder unter Verwendung einer Amazon EC2 P4d Instanz gemittelt.
    Reproduziere dies mit yolo semantic val data=cityscapes.yaml batch=1 device=0|cpu imgsz=2048
  • Params- und FLOPs-Werte beziehen sich auf das fusionierte Modell nach model.fuse(), welches Conv- und BatchNorm-Schichten zusammenführt. Vortrainierte Checkpoints behalten die vollständige Trainingsarchitektur bei und können höhere Anzahlen aufweisen.

Trainieren

Trainiere YOLO26n-sem auf dem Cityscapes8 Datensatz für 100 Epochen bei einer Bildgröße von 1024. Eine vollständige Liste der verfügbaren Argumente findest du auf der Konfigurationsseite.

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)

Siehe vollständige train-Modus-Details auf der Train-Seite.

Datensatzformat

Datensätze für die semantische Segmentierung verwenden einkanalige Maskenbilder, typischerweise PNG, bei denen jeder Pixelwert eine Klassen-ID repräsentiert. Pixel mit dem Wert 255 werden als "ignorieren" behandelt und von der Verlustberechnung ausgeschlossen. Die Datensatz-YAML sollte Pfade zu Bildern und deren entsprechenden Maskenverzeichnissen angeben. Siehe den Leitfaden für Datensätze zur semantischen Segmentierung für Formatdetails. Unterstützte Datensätze umfassen Cityscapes und ADE20K.

Val

Validiere die Genauigkeit des trainierten YOLO26n-sem Modells auf einem Datensatz für semantische Segmentierung. Übergebe data explizit, damit die Validierung die beabsichtigte Datensatz-YAML 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 auf Bildern 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  # height x width class map (torch.Tensor)

Siehe vollständige predict-Modus-Details auf der Predict-Seite.

Exportieren

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

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

Verfügbare YOLO26 Exportformate für die semantische Segmentierung findest du in der Tabelle unten. Du kannst in jedes Format exportieren, indem du das format-Argument verwendest, z. B. format='onnx' oder format='engine'. Du kannst Vorhersagen oder Validierungen direkt mit exportierten Modellen durchführen, z. B. yolo predict model=yolo26n-sem.onnx. Anwendungsbeispiele werden für dein Modell angezeigt, sobald der Export abgeschlossen ist.

Formatformat ArgumentModellMetadatenArgumente
PyTorch-yolo26n-sem.pt-
TorchScripttorchscriptyolo26n-sem.torchscriptimgsz, half, dynamic, optimize, nms, batch, device
ONNXonnxyolo26n-sem.onnximgsz, half, dynamic, simplify, opset, nms, batch, device
OpenVINOopenvinoyolo26n-sem_openvino_model/imgsz, half, dynamic, int8, nms, batch, data, fraction, device
TensorRTengineyolo26n-sem.engineimgsz, half, dynamic, simplify, workspace, int8, nms, batch, data, fraction, device
CoreMLcoremlyolo26n-sem.mlpackageimgsz, dynamic, half, int8, nms, batch, device
TF SavedModelsaved_modelyolo26n-sem_saved_model/imgsz, keras, int8, nms, batch, data, fraction, device
TF GraphDefpbyolo26n-sem.pbimgsz, batch, device
TF Litetfliteyolo26n-sem.tfliteimgsz, half, int8, nms, batch, data, fraction, device
TF Edge TPUedgetpuyolo26n-sem_edgetpu.tfliteimgsz, int8, data, fraction, device
TF.jstfjsyolo26n-sem_web_model/imgsz, half, int8, nms, batch, data, fraction, device
PaddlePaddlepaddleyolo26n-sem_paddle_model/imgsz, batch, device
MNNmnnyolo26n-sem.mnnimgsz, batch, int8, half, device
NCNNncnnyolo26n-sem_ncnn_model/imgsz, half, batch, device
IMX500imxyolo26n-sem_imx_model/imgsz, int8, data, fraction, nms, device
RKNNrknnyolo26n-sem_rknn_model/imgsz, batch, name, device
ExecuTorchexecutorchyolo26n-sem_executorch_model/imgsz, batch, device
Axeleraaxelerayolo26n-sem_axelera_model/imgsz, batch, int8, data, fraction, device
DeepXdeepxyolo26n-sem_deepx_model/imgsz, int8, data, optimize, device

Siehe vollständige export-Details auf der Export-Seite.

FAQ

Wie trainiere ich ein YOLO26 Modell zur semantischen Segmentierung auf einem benutzerdefinierten Datensatz?

Um ein YOLO26 Modell zur semantischen Segmentierung auf einem benutzerdefinierten Datensatz zu trainieren, musst du PNG-Maskenbilder vorbereiten, bei denen jeder Pixelwert eine Klassen-ID (0, 1, 2, ...) repräsentiert und Pixel mit dem Wert 255 während des Trainings ignoriert werden. Erstelle eine Datensatz-YAML-Datei, die auf deine Bild- und Maskenverzeichnisse verweist, und trainiere dann 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)

Überprüfe die Konfigurationsseite für weitere verfügbare Argumente.

Was ist der Unterschied zwischen Instanz-Segmentierung und semantischer Segmentierung?

Instanz-Segmentierung und semantische Segmentierung sind beides Aufgaben auf Pixelebene, unterscheiden sich jedoch grundlegend:

  • Semantische Segmentierung weist jedem Pixel ein Klassenlabel zu, unterscheidet aber nicht zwischen einzelnen Objekten derselben Klasse. Zum Beispiel teilen sich alle Autos in einer Szene dasselbe Klassenlabel.
  • Instanz-Segmentierung identifiziert jedes einzelne Objekt separat und erzeugt für jedes Objekt unterschiedliche Masken, selbst wenn sie zur selben Klasse gehören.

Semantische Segmentierung eignet sich am besten für Aufgaben der Szenenanalyse wie autonomes Fahren und Landnutzungskartierung, während Instanz-Segmentierung bevorzugt wird, wenn es darauf ankommt, einzelne Objekte zu zählen oder zu verfolgen.

Kann ich Daten der Instanz-Segmentierung verwenden, um semantische Segmentierung zu trainieren?

Ja. Wenn dein Datensatz Ultralytics YOLO Polygon-Labels (ein .txt pro Bild) verwendet, lasse masks_dir in der Datensatz-YAML weg und der Loader konvertiert die Polygone automatisch während des Betriebs in semantische Masken pro Bild. Bei Datensätzen mit mehreren Klassen (N > 1) wird automatisch eine zusätzliche background-Klasse an die names angehängt. Bei Datensätzen mit einer einzelnen 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. Siehe den Leitfaden für Datensätze zur semantischen Segmentierung für Details.

Welche Datensätze werden für die semantische Segmentierung unterstützt?

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

  • Cityscapes: Urbane Straßenszenen mit 19 Klassen, weit verbreitet für die Forschung zum autonomen Fahren.
  • ADE20K: Ein groß angelegter Datensatz zur Szenenanalyse mit 150 Klassen.

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

Wie validiere ich ein vortrainiertes YOLO26 Modell zur semantischen Segmentierung?

Validiere ein vortrainiertes YOLO26 Modell zur semantischen Segmentierung mit der Datensatz-YAML, die für die Evaluierung verwendet wurde:

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 Intersection over Union (mIoU) und die Pixelgenauigkeit, die Standardmaße zur Bewertung der Leistung der semantischen Segmentierung sind.

Wie kann ich ein YOLO26 Modell zur semantischen Segmentierung in das ONNX-Format exportieren?

Exportiere ein YOLO26 Modell zur semantischen 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 Details zum Export in verschiedene Formate findest du auf der Export-Seite.

Kommentare