Die semantische Segmentierung ist das Verständnis eines Bildes auf Pixel-Ebene, d. h., jedem Pixel eines Bildes wird eine Kennzeichnung oder Kategorie zugeordnet. Deep Learning wird verwendet, um eine Zusammenstellung von Pixeln zu erkennen, die unterschiedliche Kategorien bilden. Beispielsweise muss ein autonomes Fahrzeug Fahrzeuge, Fußgänger, Verkehrsschilder, den Bürgersteig und andere Merkmale auf der Straße erkennen.
Die semantische Segmentierung wird in vielen Anwendungen genutzt, wie dem automatisierten Fahren, der medizinischen Bildgebung und industriellen Inspektionen.
Ein einfaches Beispiel für die semantische Segmentierung ist die Aufteilung von Bildern in zwei Klassen. Beispielsweise zeigt Abbildung 1 ein Bild einer Person am Strand zusammen mit einer Version, in der die Pixel des Bildes in zwei unterschiedliche Klassen segmentiert sind: Person und Hintergrund.
Abbildung 1: Bild und gekennzeichnete Pixel.
Die semantische Segmentierung ist nicht auf zwei Kategorien begrenzt. Sie können die Anzahl der Kategorien für die Klassifizierung der Bildinhalte ändern. Dieses Bild lässt sich auch in vier Klassen segmentieren, etwa Person, Himmel, Wasser und Hintergrund.
Wie unterscheidet sich die semantische Segmentierung von der Objekterkennung?
Die semantische Segmentierung kann eine sinnvolle Alternative zur Objekterkennung sein, da sie es ermöglicht, dass das interessierende Objekt mehrere Bereiche im Bild auf Pixelebene überspannt. Mit dieser Technik lassen sich unregelmäßig geformte Objekte klar erkennen, im Gegensatz zur Objekterkennung, bei der Objekte in eine Bounding Box passen müssen (Abbildung 2).
Abbildung 2: Objekterkennung, wobei Bounding Boxes für die Identifizierung von Objekten gezeigt werden.
Wie wird die semantische Segmentierung verwendet?
Da die semantische Segmentierung Pixel in einem Bild kennzeichnet, ist sie präziser als andere Formen der Objekterkennung. Dies macht die semantische Segmentierung nützlich für Anwendungen in einer Vielzahl von Branchen, die präzise Bildkarten benötigen. Dazu gehören:
- Autonomes Fahren: Identifizierung eines befahrbaren Wegs für Autos, indem die Straße von Hindernissen wie Fußgängern, Bürgersteigen, Pfählen und anderen Fahrzeugen getrennt wird
- Industrielle Inspektionen: Erkennung von Materialfehlern, z. B. Wafer-Inspektion
- Satellitenbilder: Identifizierung von Bergen, Flüssen, Wüsten und anderen Geländearten
- Medizinische Bildgebung: Analyse und Erkennung krebsbedingter Anomalien in Zellen
- Bildverarbeitung durch Roboter: Identifizierung von Objekten und Gelände und entsprechende Navigation
Abbildung 3: Semantische Segmentierung eines multispektralen Satellitenbildes.
Um ein Netz für die semantische Segmentierung zu trainieren, werden folgende Prozessschritte durchgeführt:
- Analysieren einer Zusammenstellung von Bildern mit Kennzeichnung auf Pixelebene
- Erstellen eines Netzes für die semantische Segmentierung
- Trainieren des Netzes, damit es Pixelkategorien in Bildern klassifizieren kann
- Bewerten der Genauigkeit des Netzes
Beispiel: Anwendung für automatisiertes Fahren
Die Abfolge in Abbildung 4 zeigt ein reales Beispiel für eine semantische Segmentierung für automatisiertes Fahren. Auf Bildern werden die Straße und die anderen Fahrzeuge automatisch in unterschiedliche Segmente eingeordnet. Im nächsten Abschnitt zeigen wir, wie diese Netze erstellt werden.
Abbildung 4: Semantische Segmentierung für eine Anwendung für automatisiertes Fahren.
Verstehen der Architektur
Ein verbreiteter Ansatz für die semantische Segmentierung ist die Erstellung eines SegNet, das die Architektur eines Convolutional Neural Network (CNN, neuronales Faltungsnetzwerk) besitzt. In Abbildung 5 ist eine typische CNN-Architektur zu sehen.
Dieses CNN klassifiziert das gesamte Bild in eine von vielen vordefinierten Kategorien.
Abbildung 5: Typische Struktur eines CNN.
Um einzelne Pixel statt das gesamte Bild zu klassifizieren, können Sie eine umgekehrte Implementierung eines CNN anfügen. Der Upsampling-Prozess wird genauso oft durchgeführt wie der Downsampling-Prozess, um sicherzustellen, dass das endgültige Bild dieselbe Größe hat wie das Eingabebild. Zum Schluss wird eine Pixelklassifizierungs-Ausgabeschicht verwendet, die jedes Pixel einer bestimmten Klasse zuordnet. Dies bildet eine Encoder-Decoder-Architektur, die die semantische Segmentierung ermöglicht.
Abbildung 6: CNN, das auf jeder Ebene bildbezogene Funktionen und dann ein Downsampling für das Bild mithilfe einer Pooling-Schicht (grün) durchführt. Dieser Prozess wird in der ersten Hälfte des Netzes mehrfach wiederholt. Nach der Ausgabe aus der ersten Hälfte dieses Diagramms folgen die gleiche Anzahl von Unpooling-Schichten (orange).
In MATLAB besteht der Workflow für die semantische Segmentierung aus den folgenden fünf Schritten:
- Kennzeichnen von Daten oder Abrufen gekennzeichneter Daten
- Erstellen eines Datastores für ursprüngliche Bilder und eines Datastores für gekennzeichnete Bilder
- Partitionieren der Datastores
- Importieren eines CNN und Umwandeln dieses CNN in ein SegNet
- Trainieren und Bewerten des Netzes
SCHRITT 1: Kennzeichnen von Daten oder Abrufen gekennzeichneter Daten
Deep-Learning-Modelle basieren auf umfangreichen Daten, und die semantische Segmentierung bildet da keine Ausnahme. Eine Möglichkeit besteht darin, im Internet nach gekennzeichneten Daten zu suchen. Wenn Sie einen eigenen Datensatz verarbeiten, können Sie die Image Labeler-App in MATLAB nutzen. Sie können diesen Datensatz verwenden, um ein SegNet zu trainieren.
Abbildung 7: Image Labeler-App von MATLAB zur Kennzeichnung von Bildern für die semantische Segmentierung.
Weitere Informationen
SCHRITT 2: Erstellen eines Datastores für ursprüngliche Bilder und eines Datastores für gekennzeichnete Bilder
Bei der Arbeit mit umfangreichen Daten ist es häufig unmöglich, alle Informationen in den Arbeitsspeicher zu laden. Um große Datensätze zu verwalten, können Sie einen Datastore verwenden. Ein Datastore enthält den Speicherort der Dateien, auf die Sie zugreifen möchten, und ermöglicht es, diese Dateien nur dann in den Arbeitsspeicher einzulesen, wenn Sie diese nutzen möchten.
Um ein SegNet zu erstellen, benötigen Sie zwei Datastores:
- den ImageDatastore, der die ursprünglichen Bilder enthält
- den PixelLabelDatastore, der die gekennzeichneten Bilder enthält
SCHRITT 3: Partitionieren der Datastores
Bei der Erstellung eines SegNet müssen Sie den Datastore jeweils in zwei Teile partitionieren:
- den Trainingssatz, mit dem das SegNet trainiert wird
- den Testsatz, mit dem die Genauigkeit eines Netzes bewertet wird
Abbildung 8: Szene auf einer Fernstraße, die das Farbbild (links) und die entsprechenden gekennzeichneten Pixel (rechts) zeigt.
SCHRITT 4: Importieren eines CNN und Umwandeln in ein SegNet.
Indem Sie ein vortrainiertes Netz wie VGG-16 laden und den SegNetLayers-Befehl verwenden, können Sie die erforderliche Encoder-Decoder-Architektur für die Kennzeichnung auf Pixelebene erstellen.
Abbildung 9: Erstellen der SegNet-Architektur mit einer einzigen Codezeile in MATLAB.
SCHRITT 5: Trainieren und Bewerten des Netzes
Im letzten Schritt legen Sie Hyperparameter für das Netz fest und trainieren das Netz.
Weitere Informationen zur semantischen Segmentierung
Produkte, die die semantische Segmentierung für Bildanalysen unterstützen, sind MATLAB, die Computer Vision Toolbox für die Kennzeichnung auf Pixelebene und die Deep Learning Toolbox für die Erstellung und das Trainieren des Netzes.
Training und Vorhersagen werden von CUDA®-fähigen GPUs mit CUDA-Version 3.0 oder höher unterstützt. Die Verwendung einer GPU wird empfohlen. Sie erfordert die Parallel Computing Toolbox.
Videos
- Übersicht über die semantische Segmentierung (7:56)
- Entmystifizierung des Deep Learning: semantische Segmentierung und Deployment (47:09) - Webinar
Beispiele und Anleitungen
Softwarereferenz
- Grundlagen der semantischen Segmentierung – Dokumentation
- Convolutional Neural Networks – Dokumentation
- Image Labeler-App – Dokumentation