Erkennung von Gefahren in Bahnabschnitten


Automatische Erkennung gefährlicher Objekte in Videoaufnahmen von Zügen.

Input

Großer Datensatz ungelabelter Videos und kleiner Datensatz gelabelter Videos, von Frontalaufnahmen diverser Zugfahrten

Output

Masken/Bounding Boxes von Objekten in der Szene, mit einer Anomaliebewertung für jedes Objekt

Ziel

Erkennung von Objekten in der Umgebung der kommenden Zugtrasse und Schätzung enthaltener Anomalien


Einführung


Im Rahmen der Sektorinitiative “Digitale Schiene Deutschland”, entwickelt unser Kunde die Deutsche Bahn ein automatisiertes Fahrsystem für Züge. Um einen sicheren Betrieb dieses Systems zu gewährleisten, müssen anomale/gefährliche Objekte automatisch erkannt werden. Das System soll nicht nur Objekte innerhalb einer bestimmten Klasse (z. B. Personen, Signale oder Fahrzeuge) erkennen, sondern vielmehr in der Lage sein, jedes beliebige Objekt zu erkennen und nach dem Grad seiner Anomalität einzustufen. In einer Reihe von zwei Projekten haben wir eine Pipeline entwickelt, die Objekte aus RGB-Videos erkennen kann.


Startpunkt


Traditionell sind die Lokführer für die Erkennung anomaler Objekte während der Fahrt verantwortlich. Unser Ziel ist es, ein Machine-Learning-System zu entwickeln, das diese Aufgabe übernimmt.

Als Datensatz stellt uns die Digitale Schiene Deutschland OSDAR23 zur Verfügung, einen offenen Datensatz mit Annotationen von zwanzig Objektklassen, die wir sowohl für die Feinabstimmung unseres Modells als auch für die Evaluierung der Endergebnisse verwenden. Außerdem erhalten wir Zugang zu einer größeren Menge nicht annotierter Daten, die für das selbstüberwachte Lernen verwendet werden.

Der OSDAR23-Datensatz enthält 45 Szenen. Jede Szene enthält Bilder, die von mehreren RGB-Kameras und Infrarotkameras aufgenommen wurden, sowie Radar- und Lidar-Daten. In den nicht annotierten Daten haben wir nur Bilder, die von RGB-Kameras aufgenommen wurden.


Herausforderungen


Während es eine relativ einfache Aufgabe ist, Objekte aus einer gegebenen Sammlung von Klassen zu erkennen, ist es unser Ziel, ein System zu entwickeln, das jedes möglicherweise anomale Objekt erkennen kann. Diese Anforderung stellt eine erhebliche Schwierigkeit dar, da wir nicht einfach ein Modell anhand der Anmerkungen im Datensatz trainieren können, sondern andere Methoden zur Segmentierung von Objekten entwickeln müssen.

Eine weitere Schwierigkeit ergibt sich aus der Definition (oder Interpretation) von "anomalen Objekten". Obwohl der Datensatz mit verschiedenen Klassen von Objekten annotiert ist, werden die meisten von ihnen, wie z. B. Personen, die auf dem Bahnsteig eines Bahnhofs stehen, als "normal" und nicht gefährlich für den Zug angesehen. Daher fehlt es uns an Beispielen für anomale Objekte und wir müssen einen geeigneten Weg finden, um den Begriff zu interpretieren.


Lösung


Unsere Herangehensweise an das Problem beginnt mit der folgenden entscheidenden Beobachtung: Ein anormales Objekt "ragt" immer aus der flachen Oberfläche heraus, auf der es steht (Boden, Plattform usw.), entspricht also einem lokalen Minimum in der Tiefenkarte.

Eine "Tiefenkarte" für eine Szene ist ein Bild, bei dem der Wert an jedem Pixel gleich dem Abstand der Oberflächen der Szenenobjekte vom Objektiv der Kamera ist. In der obigen Abbildung ist das rechte Bild eine geschätzte Tiefenkarte des linken Bildes. Beachten Sie, dass die Objekte (Schild, Mast und Baum) aus dem Hintergrund "herausragen".

Basierend auf dieser Idee, bauen wir unsere Lösung in drei Schritten auf:

  1. Ausgehend von einem Videobild wird eine geschätzte Tiefenkarte erstellt;

  2. Unter Verwendung der Tiefenkarte als Richtlinie wird das Bild an ein Objektsegmentierungsmodell weitergeleitet, um Masken von Objekten zu erhalten;

  3. Sortierung und Auswahl der relevantesten Objekte, wiederum mit Hilfe der Tiefenkarte.


Technischer Hintergrund


Wir verwenden zwei Hauptinstrumente: die monokulare Tiefenschätzung und das Segment anything model


1. Monokulare Tiefenschätzung

Für die Tiefenschätzung verwenden wir MonoViT, ein selbstüberwachtes Modell, das auf Vision-Transformern basiert.


Das ursprüngliche Modell wurde mit dem KITTI-Datensatz trainiert, der aus Videos besteht, die in einem Auto aufgenommen wurden; um das Modell für unsere Zwecke besser geeignet zu machen, haben wir es mit den nicht annotierten Daten der Digitalen Schiene Deutschland weitertrainiert (sog. Finetuning).

Für das Finetuning werden zwei Modelle gleichzeitig trainiert: ein Tiefenmodell, das eine Schätzung der Tiefenkarte aus einem einzelnen RGB-Bild berechnet, und ein PoseNet-Modell, das die 3D-Transformation zwischen zwei Bildern in einem Video schätzt.

Bei zwei (in der Regel aufeinanderfolgenden) Bildern A und B aus einem Video verwenden wir die geschätzte Transformation zwischen ihnen, um die aus Bild A erhaltene 3D-Punktwolke und ihre geschätzte Tiefenkarte zu transformieren. Nach der Reprojektion auf die Ansicht von Bild B erhalten wir eine Rekonstruktion von Bild B. Anschließend trainieren wir die Modelle, um diesen Fehler bei der Bildrekonstruktion zu minimieren.

Die Leistung des Modells verbessert sich nach dem Finetuning deutlich.

Vorher:


Nachher:


Vorher:


Nachher:

Wir haben die Ausgabe von MonoViT mit den im OSDAR23-Datensatz verfügbaren Lidar-Daten verglichen. Wir haben festgestellt, dass die Lidar-Daten nicht genau mit den RGB-Bildern übereinstimmen, aber sie können immer noch als Sicherheitsprüfung verwendet werden.


2. Segment-Anything-Modell

In der ersten Projektphase verwenden wir einen Watershed-Algorithmus aus der klassischen Bildverarbeitung auf der Tiefenkarte, um Objekte zu segmentieren. Bei diesem Ansatz gibt es zwei Probleme:

  1. Die Auflösung der Tiefenkarte ist relativ gering

  2. Die Grenze ist nicht gut definiert, z. B. hat der Fuß einer Person, die auf dem Boden steht, die gleiche Tiefe wie der Boden.

Dieser Schritt wird in der zweiten Projektphase verbessert, in der wir das vortrainierte Segment Anything Model (SAM) verwenden, um qualitativ hochwertige Masken der Objekte zu erstellen. Die Tiefenkarte hilft uns, "interessante" Punkte auf dem Bild zu finden, die wir mit SAM als Eingabeaufforderung verarbeiten.

Kombiniert man die beiden Schritte, erhält man eine große Menge an Masken segmentierter Objekte. Der letzte Schritt besteht darin, die Masken zu sortieren und auszuwählen, wobei Informationen aus der Tiefenkarte verwendet werden, die es uns ermöglichen, das 2D-Bild in eine 3D-Punktwolke zu verwandeln. So werden beispielsweise Objekte entfernt, die zu weit von der Kamera entfernt sind oder ein zu großes Volumen im 3D-Raum einnehmen.

Ähnliche Projekte