Neuronale Netze zum Ausprobieren – Erkennung von Fahrbahnmarkierungen

18.03.2022

Letztes Jahr haben wir euch in einer dreiteiligen Beitragsserie die Entstehung unseres Showcase „Erkennung von Fahrbahnmarkierungen“ vorgestellt. Um das Modell weiter zu verbessern, möchten wir gerne den Input unserer Kolleg:innen und Kund:innen nutzen.

Das geht am besten über eine einfache Anwendung des Showcases. Daher kam der Wunsch auf, unseren entwickelten Showcase mit einer grafischen Oberfläche zu versehen. Über diese Oberfläche soll es möglich sein, eigene Bilder an das trainierte Modell zu schicken und direkt die Ergebnisse sehen zu können. In diesem Blogbeitrag möchten wir euch sowohl die technische Umsetzung ebenjener Oberfläche, sowie das erzielte Endergebnis vorstellen. Abschließend gibt es noch einen kurzen Ausblick über mögliche weitere Entwicklungsstufen des Showcases, die sich mit der neuen grafischen Oberfläche ergeben.

 

Technische Umsetzung eines Showcases zur Erkennung von Fahrbahnmarkierungen

Für die Umsetzung haben wir uns dazu entschieden, sowohl das Modell als auch die Oberfläche jeweils als Docker Container zu entwickeln. Dazu musste zunächst das trainierte Modell so gespeichert werden, dass es von einem Container genutzt werden kann. Dafür haben wir das von TensorFlow angebotene SavedModel-Format genutzt, welches im folgenden Abschnitt genauer betrachtet werden soll.

SavedModel Format

Unser Modell wurde nach dem initialen Training im SavedModel-Format abgespeichert, sodass wir es für künftige Versuche weiterverwenden können. Dieses Format entspricht einer Verzeichnisstruktur mit folgendem Aufbau:

  • assets/ (optional)
  • variables/
  • saved_model.pb

Das assets Verzeichnis ist ein optionales Verzeichnis, welches benötigt wird, falls Vokabular-Tabellen verwendet werden. Da wir für unseren Showcase keine solchen Tabellen verwendet haben, wird nicht genauer auf dieses Verzeichnis eingegangen.

Im Verzeichnis variables werden unter anderem sogenannte Checkpoints gespeichert. Bei TensorFlow werden die Werte aller Parameter zu einem bestimmten Zeitpunkt des Trainings in einem Checkpoint zusammengefasst. Das SavedModel-Format enthält neben den Parameterwerten (Checkpoint) eine Beschreibung der vom Modell definierten Berechnung. Dadurch sind Modelle in diesem Format unabhängig vom Quellcode und eignen sich dadurch für die Bereitstellung, beispielsweise über TensorFlow Serving (näheres hierzu im nächsten Abschnitt).

Der dritte Bestandteil des Formates ist das eigentliche Modell, gespeichert als Protobuf (pb) Datei. Hierin sind sowohl die Gewichte des Modells, sowie die Definition des Graphen gespeichert. Näheres zu Gewichten eines neuronalen Netzes und wie diese ermittelt werden, kann im zweiten Teil der Blogbeitragsreihe nachgelesen werden.

TensorFlow Serving

Um ein TensorFlow Modell bereitstellen zu können, bietet TensorFlow selbst ein System namens TensorFlow Serving an. Hierbei kann das Modell selbst als „Server“ bereitgestellt werden. Mithilfe einer API können Daten, wie z.B. Bilder an das Modell gesendet werden. Als Antwort erhält man die Antwort des Modells, in unserem Fall die erkannten Fahrbahnmarkierungen auf dem (oder den) gesendeten Bilder(n).
Wir nutzen das bereits verfügbare Docker Image von TensorFlow Serving. Dieses kann direkt genutzt werden, es müssen lediglich Parameter, wie etwa der Name des Modells und der Pfad, unter welchem das Modell abgespeichert ist, mitgegeben werden.
Um ein Bild an die TensorFlow Serving API zu senden und das Ergebnis unseres Modells zurückzubekommen, muss ein POST Request an die API gesendet werden. Dabei ist die URL wie folgt aufgebaut:

http://host:port/v1/models/MODEL_NAME

Dabei sind die Variablen host, port und MODEL_NAME durch die jeweils verwendeten Werte ersetzt worden. Zusätzlich muss im Body des Requests ein JSON Dokument mit folgendem Aufbau mitgegeben werden:

{
„inputs“: <list-of-tensors>
}

Die Variable list-of-tensors wird hierbei durch das hochgeladene Bild, dargestellt als Tensoren, ersetzt. Tensoren sind multidimensionale Arrays, näheres zu ihrem Aufbau und ihrer Erstellung kann auf dieser TensorFlow Seite nachgelesen werden.

Erstellung der Oberfläche für den Showcase mit neuronalen Netzen

Implementiert wurde unsere Oberfläche in der Programmiersprache Python. Eine Möglichkeit, mit Python eine einfache und funktionale grafische Weboberfläche zu bauen, ist das Framework Flask in Kombination mit Flask-Dropzone.

Flask bietet die Möglichkeit, relativ simpel eine Oberfläche mit Python, HTML und CSS zu entwickeln. Flask-Dropzone liefert zusätzlich eine sogenannte Dropzone in der Oberfläche, die es erlaubt per Drag&Drop Bilder oder auch andere Dateien hochladen zu können.

Ergebnis des Showcase zu für die Erkennung von Fahrbahnmarkierungen

Die finale Version unserer Oberfläche zeigen wir euch im Folgenden als Screenshot:

Abbildung 1: Oberfläche für den Upload eigener Bilder

Auf dieser Seite können ein oder mehrere Bilder hochgeladen werden. Zusätzlich bieten wir die Möglichkeit, den Zeitraum zu konfigurieren, für welchen die Bilder auf dem Server gespeichert werden und im Nachgang abgerufen werden können. Nach Ablauf der Zeit werden die Bilder von unserem Server gelöscht. Die automatische Löschung der Bilder dient dazu, den Speicherplatz auf dem Server nicht unkontrolliert zu füllen. Ebenso können Nutzerinnen und Nutzer, deren Bilder nicht für die Allgemeinheit gedacht sind, die Einstellung so treffen, dass die Bilder nur kurze Zeit auf unserem Server liegen und so nicht dauerhaft abrufbar sind.

Um bereits hochgeladene Bilder nicht erneut an unser Modell senden zu müssen, wird nach erfolgreichem Upload und Verarbeitung von Bildern ein Link generiert, der dem Nutzenden auf der Ergebnisseite angezeigt wird. Über diesen Link lassen sich die Ergebnisse direkt aufrufen, ohne einen erneuten Upload. Die Lebensdauer dieses Links wird durch den Zeitraum beeinflusst, wie lange die Bilder auf dem Server gespeichert werden.
Nachfolgend haben wir den Ablauf eines Uploads als GIF aufgenommen, um einen Eindruck von unserer Oberfläche zu geben:

Abbildung 2: Upload eines Bildes und Ergebnisbetrachtung

 

Fazit

Unser Showcase ermöglicht es, eigene Bilder hochzuladen und von unserem Modell zur Erkennung von Fahrbahnmarkierungen auswerten zu lassen. Dadurch ist das Modell auch innerhalb unseres Unternehmens für eine breitere Masse an Kolleginnen und Kollegen nutzbar geworden. So ergeben sich auch weitere Möglichkeiten, diesen Showcase fortzuführen und auszubauen.
In einer möglichen zukünftigen Ausbaustufe wäre es auch denkbar, dass die zur Verfügung gestellten Bilder für das weitere Training des Modells genutzt werden können, um dadurch die Genauigkeit unseres Modells zu verbessern. Durch die Bereitstellung unserer Oberfläche können uns deutlich mehr Personen direkt mit Daten unterstützen und so die Modellqualität zukünftig weiter steigern.
Im ersten Schritt wurde unsere Weboberfläche nur in unserem Firmennetzwerk ausgerollt und zur Verfügung gestellt. Zukünftig ist auch denkbar, dass diese Applikation im Internet gehostet werden kann, sodass auch Interessierte außerhalb unseres Unternehmens das Modell testen und verbessern können.

 

Mehr über das Automatisierte Fahrtenbuch

Quellen
1 https://www.tensorflow.org/guide/saved_model, Zugriffsdatum: 10.01.2022
2 https://www.tensorflow.org/guide/checkpoint, Zugriffsdatum: 10.01.2022
3 https://www.tensorflow.org/tfx/guide/serving, Zugriffsdatum: 10.01.2022

Zurück zur Übersicht

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

*Pflichtfelder

*