30. September 2020
timer-icon 5 Min.

Instance Segmentation für Luft- und Satellitenbildaufnahmen

Was genau ist Instance Segmentation und wie kann sie verwendet werden, um z.B. Fahrzeuge auf Parkplätzen in Luft- und Satellitenbildern zu zählen? Das und mehr erfährst Du in diesem Blogpost!
Infrastructure as Code mal durch eine andere Brille betrachten

Die Theorie

Die Instance Segmentation (Instanzen Segmentierung) ist eine Methode der Bildverarbeitung im Bereich der Computer Vision. Sie ist eine Kombination aus Objekterkennung und Semantic Segmentation (semantischer Segmentierung).

Die Aufgabe der Semantic Segmentation ist es, ein Bildverständnis auf Pixelebene zu erhalten, d.h. jedem Pixel eine Objektklasse zuzuordnen. Die Objekterkennung befasst sich damit, Objekte in Bilddaten zu identifizieren. Zusätzlich wird ein Begrenzungsrahmen (Bounding Box, siehe Kästen im Bild) berechnet. Dieser ist das kleinstmögliche achsparallele Rechteck, das das Objekt vollständig enthält.

Die Instance Segmentation stellt eine fortgeschrittene Form der Objekterkennung dar, bei der mehrere Instanzen einer Objektklasse identifiziert werden können. Außerdem können den Instanzen die genauen Pixelwerte zugeordnet werden. Das verwendete Machine-Learning-Modell muss also ein sehr gutes Verständnis für den Bildinhalt erlangen. Zum besseren Verständnis sind in Abbildung 1 die verschiedenen Formen der Klassifikations- und Segmentierungsaufgaben zu sehen, wobei die Instance Segmentation den größten Informationsgehalt bereitstellt.

Ein Überblick über die verschiedenen Klassifikations- und Segmentierungsaufgaben

Abbildung 1: Ein Überblick über die verschiedenen Klassifikations- und Segmentierungsaufgaben [1].

Der Weg zum Mask R-CNN

Für die hier vorgestellte Instance Segmentation wird eine Netzwerkarchitektur namens Mask R-CNN benutzt. Lesen Sie dazu auch unsere Blogpostreihe über Semantic Segmentation.

Die Entstehung des Mask R-CNN beginnt mit dem Netzwerk R-CNN, ein Machine-Learning-Modell zur Objekterkennung. Dabei werden in einem ersten Schritt sogenannte Region Proposals für das Eingabebild erstellt. Diese werden anschließend in eine einheitliche Größe transformiert und in einem letzten Schritt werden durch ein Convolutional Neural Network (CNN)  in Kombination mit einer Support Vector Machine (SVM) die Region Proposals klassifiziert. Das R-CNN ist eines der ersten Modelle, das ein CNN für die Objekterkennung verwendet hat und erzielte dadurch deutlich bessere Ergebnisse als die bisherigen Vorgänger.

Das Netzwerk R-CNN erlangte große Aufmerksamkeit und wurde weiterentwickelt: Beim Fast R-CNN, wie der Name schon vermuten lässt, handelt es sich um eine Verbesserung der Klassifikationszeit. Durch die Einführung einer Region of Interest (RoI) Pooling Schicht kann das Modell durchgehend mit dem Einsatz von Backpropagation trainiert werden. Außerdem verbessert diese Neuerung die Qualität der Klassifizierung sowie die Klassifikationszeit.

Das Fast R-CNN konnte nochmals verbessert werden, sodass das Faster R-CNN entstand.  Die Grundidee ist das Einführen eines eigenen Region Proposal Network (RPN), welches innerhalb einer Netzwerk-in-Netzwerk-Struktur Vorschläge für potentielle Objektbereiche erstellt. Das Region Proposal Network arbeitet mit denselben Feature Maps wie das eigentliche Klassifikationsnetzwerk. Dadurch wird der gesamte Prozess um ein Vielfaches beschleunigt.

Das aktuellste Netzwerk aus dieser Familie ist das Mask R-CNN. Es verwendet das Faster R-CNN als Basisnetzwerk und erweitert es um einen Zweig zur Maskenerzeugung. Dabei wird ein Fully Convolutional Network (FCN) eingesetzt. Das Hauptmerkmal der FCN ist die Ersetzung der Fully Connected Schichten durch 1×1 Convolution-Schichten.  Das Vorgehen des Mask R-CNN kann wie folgt beschrieben werden: parallel zu der Vorhersage der Klasse und der Bounding-Box-Koordinaten wird für jede RoI eine binäre Maske ausgegeben. Das Besondere an diesem Vorgehen ist, dass die Klassifizierung nicht von der Masken-Vorhersage abhängt, sondern parallel zu dieser läuft. Zur Erstellung der Maske wird die Convolution-Operation benutzt. Da in einem FCN die Feature-Map nicht durch FC-Schichten in einen Feature-Vektor umgewandelt wird, geht die räumliche Dimension nicht verloren und kann benutzt werden, um die Maske vorherzusagen. Da für jede RoI eine Maske berechnet wird, müssen die RoIs selbst sehr genau sein und das Objekt komplett enthalten. Daher wurde die RoI-Pooling-Schicht des Faster R-CNN durch eine RoI-Align-Schicht ersetzt. Das RoI-Pooling bedient sich einiger Rundungsverfahren, die die Maskengenauigkeit beeinflussen. Im Gegensatz dazu verwendet das RoI-Align keinerlei Rundungsverfahren und behält somit die exakten räumlichen Informationen der Objekte im Ursprungsbild.

Die Anwendung

Was mit der vorgestellte Netzwerkarchitektur Mask R-CNN möglich ist, wollen wir anhand eines praktischen Beispiels aufzeigen.

Für viele Bereiche sind inzwischen hochauflösende Luft- und Satellitenbilder verfügbar. Zwar schwankt die Qualität von Region zu Region, dennoch lassen sich frei verfügbare Ressourcen (z.B. Google Maps oder Bing-Maps) nutzen, um Informationen über die Auslastung von Parkplätzen (oder Häfen, Abstellgleise, Containerplätze, etc) zu gewinnen. Im Rahmen dieses PoCs haben wir statische Bilder verwendet, denkbar sind jedoch auch wochen- oder tagesaktuelle Bilder, die von Städten und Kommunen erfasst werden. Dies eröffnet ganz neue Möglichkeiten bei der Verkehrsplanung und Überwachung der Auslastungen. Auch ganz andere Szenarien sind möglich, erfordern allerdings ein entsprechendes Training der KI.

In den nachfolgenden Bildern ist ein Screenshot von Bing-Maps eines Parkplatzes und die Ergebnisse der Klassifikation des eigens trainierten Netzwerkes zu sehen.

Screenshot eines Parkplatzes von Bing-Maps

Abbildung 2: Screenshot eines Parkplatzes von Bing-Maps.

Ergebnisse der Klassifikation durch das eigens trainierte Modell

Abbildung 3: Ergebnisse der Klassifikation durch das eigens trainierte Modell. Das Bild wurde in ein Schwarz-Weiß Bild umgewandelt, um die Ergebnisse besser hervorzuheben.

Um solch eine Anwendung zu Erstellen benötigt man einen passenden Datensatz. Für diese Anwendung wurde der Luftbilddatensatz iSAID: A Large-scale Dataset for Instance Segmentation in Aerial Images verwendet. In der nachfolgenden Abbildung sind pro Klasse drei exemplarische Bilder zu sehen.

Beispielbilder des iSAID-Datensatzes aus 15 verschiedenen Klassen

Abbildung 4: Beispielbilder des iSAID-Datensatzes aus 15 verschiedenen Klassen [2].

Der iSAID-Datensatz beinhaltet 655451 Objekt-Instanzen aus 15 verschiedenen Klassen in 2806 hochauflösenden Satellitenbildern. Der Datensatz wurde aus dem Dataset for Object Detection in Aerial Images (DOTA) erstellt. Dieser ist ein Datensatz zur Objekterkennung und beinhaltet keine Masken-Informationen. Die Bilddaten wurden hauptsächlich von Google Earth entnommen. Die Ersteller des iSAID-Datensatz nutzten die Bilder, um die Annotationen komplett neu zu erstellen und den Datensatz somit für die Instanzen-Segmentierung verwendbar zu machen. Die Annotationen wurden sehr aufwändig erstellt und beinhalten deutlich mehr Instanzen als im DOTA Datensatz. Diese wurden im Format der COCO-Annotationen erstellt. Diese werden in Form einer JSON-Datei angelegt. In dieser Datei sind Informationen zu allen Bildern gespeichert. Es finden sich beispielsweise Informationen zu den Bildern, sowie eindeutige IDs für jedes Bild, Angaben über die Höhe und Breite des Bilds, Angaben über die Bounding Box in Form eines Vier-Tupels (x, y, Breite, Höhe), Angaben über die Segmentations-Masken in Form von Lauflängenkodierung und Angaben über die vorkommenden Klassen.

Für das Training wurde eine lokaler Server speziell für das Training von Machine Learning Modellen eingesetzt. Rechner-Spezifikationen:

  • 128GB RAM Arbeitsspeicher
  • Intel Core i9-7920x CPU
  • 2 CUDA fähige Grafikkarten: Nvidia GeForce GTX 1080 Ti

Mit dieser Hardware wurde das Modell etwas länger als 1 Tag trainiert. Dafür wurde das von Facebook Research bereitgestellte Detectron2 Framework verwendet.

Der entsprechende Docker-Container kann nach dem Erstellen des Image mit folgendem Befehl ausgeführt werden:


Um den oben genannten iSAID Datensatz in Detectron2 benutzen zu können, muss dieser zuerst registriert werden. Da die Daten sich in dem gängingen COCO-Format sind, können diese sehr simpel registriert werden:


Nach dem Konfigurieren der Netzwerk-Details kann das Training mit dem DefaultTrainer() gestartet werden:


Für das fertige Modell haben wir ein Web-Service mit dem Python Framework Flask erstellt. Auf der Startseite des Web-Services können per Drag-and-drop oder mittels einer Dateiauswahl im Dateimanager Bilddaten hochgeladen werden. Diese werden anschließend durch das Mask R-CNN Modell-50 klassifiziert. Das Bild wird in ein Graubild umgewandelt und die gefundenen Instanzen werden farbig umrahmt und maskiert eingezeichnet, wie in den Beispielen oben. Dabei werden jegliche gefundenen Objekte gezählt.

Wir hoffen, Dir einen guten Einblick in die Möglichkeiten von Instance Segementation gegen zu haben. Die erstellte Anwendung kann zum Beispiel für eine Analyse von Parkplatzauslastungen mit Hilfe von Drohnenbildern verwendet werden. So kann beispielsweise perspektivisch eine prozentuale Auslastung für verschiedene Tage berechnet werden. Ebenso kann das Verfahren leicht an völlig andere Fragestellungen angepasst werden. Und wir sind noch nicht am Ende. Genauere und performantere Netzwerke werden jetzt gerade erforscht und entwickelt. Manche davon sind auf möglichst genaue Bilderkennung und manche auf möglichst schnelle Erkennung in Echtzeit (z.B. in Videostreams) spezialisiert. Wir dürfen gespannt sein, was die Zukunft bringt!

Bildnachweise: [1] http://cs231n.stanford.edu/slides/2017/cs231n_2017_lecture11.pdf [2] https://captain-whu.github.io/iSAID/index.html

Artikel kommentieren