Im November 2019 hat der Bundestag das Klimapaket verabschiedet, das unter anderem die Erneuerung der deutschen Radverkehrsinfrastruktur [1] zum Ziel hat. Um sich einen Überblick über den aktuellen Zustand der Radwege zu verschaffen, werden für die Überwachung der Straßenzustände meist teure Messfahrzeuge eingesetzt. Im Bereich der Data-Science-Beratung beschäftigen wir uns als Unternehmen schon seit einigen Jahren mit Themen wie Sensordatenanalyse und Predictive Maintenance. Daher haben wir uns die Frage gestellt, wie diese Themen kosteneffizient kombiniert werden können, um den Straßenzustand zu bewerten. Dies wäre insbesondere für Kommunen interessant, die damit ausgestattete Leihfahrradflotten einsetzen könnten.
Zielsetzung
Das Ziel dieses Projektes ist eine automatisierte fahrradbasierte Straßenanalyse. Dazu müssen die Daten eines Beschleunigungs-, Gyroskop- und GPS-Sensors an einen Klassifizierungsserver übermittelt werden. Es werden verschiedene maschinelle Lernmodelle miteinander verglichen, um eine möglichst hohe Genauigkeit bei der Vorhersage von Straßentypen und -zuständen zu erreichen. Es wird zwischen den Straßentypen Asphalt, Kopfsteinpflaster und Schotter in Verbindung mit den Zuständen glatt, rau und holprig unterschieden, was insgesamt neun Klassen ergibt. Darüber hinaus werden die Ergebnisse mit Hilfe einer IoT-Plattform live auf einer Karte visualisiert.
Verfahren
Der Aufbau dieses Projekts erfordert vor allem zwei Dinge: Daten und ein maschinelles Lernmodell. Die Datensätze sammeln wir selbst, sodass die Frage der Hardwareauswahl für die Sensordatenerfassung eine wichtige Rolle spielt. Für die Klassifikationsaufgabe werden verschiedene Modelle getestet, von baumbasierten Verfahren bis hin zu Deep-Learning-Ansätzen.
Daten
Für die Sensordatenerfassung wurde der Bosch XDK 110 [2] gewählt (siehe mittleres Bild in Abb. 1). Der XDK ist u.a. mit einem Beschleunigungsmesser und einem Gyroskop ausgestattet. Die aufgezeichneten Daten können kabellos über Bluetooth, WiFi oder SD-Karte übertragen werden. Die frei programmierbaren Tasten und LEDs dienen als einfache Benutzerschnittstelle.
Der XDK kann mit der Eclipse-basierten XDK Workbench in C programmiert werden. Weiterhin wird ein normales Trekkingrad verwendet (Bild oben links). Die Halterung des XDK, die auch als Regenschutz dient, wird im Fahrradkorb montiert (Bild unten links). Um die gesammelten Daten zu annotieren, wurde eine App mit dem React Native Framework entwickelt (siehe Bilder rechts). Die aufgezeichneten Daten des XDK werden über Bluetooth an die App übertragen. Außerdem nutzt die App den GPS-Sensor des Smartphones, um die aktuelle Position zu bestimmen. Wenn eine Route kommentiert werden soll, wird der Plus-Button gedrückt, um die entsprechenden Informationen einzugeben.
Fig. 1: Einrichtung für die Datenerfassung
Auf diese Weise wird ein erster Datensatz erstellt: Über einen Zeitraum von 376 Minuten werden 91 km zurückgelegt und etwa 735.000 Messwerte pro Sensorkanal aufgezeichnet, was einer Abtastrate von 32,5 Hz entspricht. Die Durchschnittsgeschwindigkeit betrug etwa 14,6 km/h.
Um den Einfluss der Abtastrate auf die Genauigkeit unserer Modelle zu beurteilen, wurde ein zweiter Datensatz erstellt, bei dem die Abtastrate maximiert werden sollte. Zu diesem Zweck können die Daten wegen des geringeren Durchsatzes nicht mehr per Bluetooth an die Labelling-App übertragen werden. Stattdessen werden sie direkt auf der SD-Karte gespeichert. Die Tasten und LEDs des XDK wurden entsprechend für das Label sowie für das Starten und Stoppen der Aufzeichnung programmiert. Der zweite Datensatz schließlich umfasst eine Strecke von rund 77 km, die in 314 Minuten aufgezeichnet wurde. Aufgrund der höheren Abtastrate von 294 Hz wurden deutlich mehr Daten aufgezeichnet – etwa 5,6 Millionen Datenpunkte pro Sensorkanal.
Schließlich wurde ein Testdatensatz auf die gleiche Weise aufgezeichnet, wobei das Fahrrad durch ein kvv.nextbike ersetzt wurde, um die Übertragbarkeit der Modelle auf unbekannte Fahrräder zu überprüfen. Insgesamt wurden ca. 9 km gefahren, wobei knapp über 500.000 Messwerte pro Sensorkanal gespeichert wurden.
Maschinelles Lernen
Für den Bereich des maschinellen Lernens wurden verschiedene Modelle verglichen. Zum einen wurden baumbasierte Verfahren wie Random Forest und XGBoost sowie Support Vector Machines gewählt. Alle diese Methoden haben sich bereits als sehr zuverlässige Modelle für eine Vielzahl von Klassifizierungsaufgaben erwiesen.
Darüber hinaus sind baumbasierte Algorithmen recht intuitiv und ihre Entscheidungen lassen sich im Gegensatz zu Black-Box-Modellen leicht interpretieren. Auf der anderen Seite wurden Deep-Learning-basierte Methoden eingesetzt. Neben LSTM-Netzen wurden auch faltige neuronale Netze getestet, insbesondere Deep Residual Networks. Diese wollen wir uns näher ansehen.
Fig. 2: ResNet für die Klassifizierung von Zeitreihen
Die obige Abbildung 2 zeigt ein von Fawaz et al. [3] entwickeltes ResNet zur Klassifizierung von Zeitreihen. Im Vergleich zur Bilderkennung gibt es hier eine Besonderheit: Die Filter gleiten nur in einer Dimension (Zeit) über die Eingabedaten. Alles andere funktioniert jedoch genau gleich. Wir sehen drei Restblöcke, die jeweils drei Faltungsschichten enthalten. Der erste Block verwendet 64 Filter und die beiden anderen Blöcke 128 Filter. Die Restverbindungen können das Degradationsproblem verhindern, d. h. es können tiefere Netze aufgebaut werden, ohne dass die Trainingsgenauigkeit rapide abnimmt. Auf die Restblöcke folgen schließlich ein Durchschnitts-Pooling und eine vollständig verbundene Ausgangsschicht.
Fig. 3: InceptionTime
Mit InceptionTime wird von Fawaz et al. [4] auch der aktuelle Stand der Technik im Bereich der Zeitreihenklassifikation vorgeschlagen. Die Architektur bleibt im Vergleich zum bisherigen ResNet weitgehend unverändert. Es werden jedoch nur zwei statt drei Residualblöcke verwendet. Schließlich werden die einzelnen Faltungsschichten durch Inception-Module ersetzt (siehe Abbildung 3 oben). In diesen Modulen laufen parallele Faltungsoperationen ab, deren Ausgang zu einem gemeinsamen Ausgang zusammengeführt wird.
Die Modelle werden mit Python, scikit-learn und keras implementiert. Zur Optimierung der Hyperparameter wird eine Gittersuche mit zehnfacher stratifizierter Kreuzvalidierung durchgeführt. Zuvor werden die von den Modellen verwendeten Eingabedaten vorbereitet, indem sie normalisiert werden. Außerdem werden zusammenfassende Statistiken wie Durchschnittswerte, Standardabweichungen usw. für die nicht auf Deep Learning basierenden Methoden berechnet. Insgesamt 14 neue Merkmale pro Sensorkanal dienen als Eingabe für diese Modelle.