Semantische Segmentierung

Drei Dinge, die Sie wissen sollten

Was ist semantische Segmentierung?

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.

Funktionsweise der semantischen Segmentierung

Um ein Netz für die semantische Segmentierung zu trainieren, werden folgende Prozessschritte durchgeführt:

  1. Analysieren einer Zusammenstellung von Bildern mit Kennzeichnung auf Pixelebene
  2. Erstellen eines Netzes für die semantische Segmentierung
  3. Trainieren des Netzes, damit es Pixelkategorien in Bildern klassifizieren kann
  4. 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 folgt die gleiche Anzahl von Unpooling-Schichten (orange).

Verwendung von MATLAB für die semantische Segmentierung

 

In MATLAB besteht der Workflow für die semantische Segmentierung aus den folgenden fünf Schritten:

  1. Kennzeichnen von Daten oder Abrufen gekennzeichneter Daten
  2. Erstellen eines Datastores für ursprüngliche Bilder und eines Datastores für gekennzeichnete Bilder
  3. Partitionieren der Datastores
  4. Importieren eines CNN und Umwandeln dieses CNN in ein SegNet
  5. 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 

Erfahren Sie mehr

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:

  1. den ImageDatastore, der die ursprünglichen Bilder enthält
  2. 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:

  1. den Trainingssatz, mit dem das SegNet trainiert wird
  2. 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 dessen Umwandlung in ein SegNet

Bei der Erstellung eines SegNet müssen Sie den Datastore in zwei Teile partitionieren:

  1. den Trainingssatz, mit dem das SegNet trainiert wird
  2. den Testsatz, mit dem die Genauigkeit eines Netzes bewertet wird

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 semantische Segmentierung

Produkte, die die semantische Segmentierung für Bildanalysen unterstützen, sind MATLAB®, die Computer Vision System 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™.

Software-Referenz

Kostenlose Testversion anfordern

Eine 30-tägige Erkundungsreise in greifbarer Nähe.

Haben Sie Fragen?

Sprechen Sie mit einem Deep-Learning-Experten.