Projektaufbau und Umgebungseinrichtung – Verkehrsschildererkennung KI: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Fabian.babik@stud.hshl.de (Diskussion | Beiträge)
Fabian.babik@stud.hshl.de (Diskussion | Beiträge)
Zeile 235: Zeile 235:


[[Datei:ImageLabeler.jpg|400px|right|border]]
[[Datei:ImageLabeler.jpg|400px|right|border]]
<div style="width:400px; height:25px; float:right; font-size:20px;padding:0px; margin:0px;line-height:1.5;">02. Image Labeler öffnen</div>
 


<p>• '''[[#New Individual Project|New Individual Project]]'''</p>
<p>• '''[[#New Individual Project|New Individual Project]]'''</p>

Version vom 10. November 2025, 12:42 Uhr

Autoren: Fabian Babik, Adrian Klinspon
Art: Projekt im Praxissemester
Dauer: 29.09.2025 bis 01.01.2026
Betreuer: Prof. Dr.-Ing. Schneider

Einfuehrung und Überblick zum Projekt „Klassifikation von Verkehrsschildern mittels KI“

Im Rahmen unseres Projekts wurden mehrere KIs zur Erkennung von Verkehrsschildern entwickelt. Die Trainingsdaten stammen teils aus unseren eigenen Aufnahmen in Lippstadt, Soest und Münster, teils aus externen Datensätzen (z. B. von der Ruhr-Universität Bochum). Je nach KI variiert daher die Bildbasis. Einige der externen Daten waren bereits gelabelt, während unsere eigenen Bilder manuell annotiert wurden, um die KIs mit korrekten Trainingsdaten zu versorgen.

Für die Modelle wurden verschiedene Backbones eingesetzt, darunter CSPDarknet53, CSPDarknet53 vortrainiert auf COCO, Tiny-YOLOv4, Tiny-YOLOv4 vortrainiert auf COCO sowie ein von uns entwickeltes eigenes Backbone.

Der gesamte Entwicklungs- und Trainingsprozess wurde in Matlab R2025b durchgeführt.

Für das Verständnis und die Nachvollziehbarkeit der folgenden Inhalte wird empfohlen, sich mit den grundlegenden Konzepten von MATLAB sowie spezifischen Technologien im Bereich Bildverarbeitung und Künstliche Intelligenz vertraut zu machen. Insbesondere eignen sich die folgenden MATLAB-Onramp-Kurse als Einstieg:

Diese Kurse vermitteln die wesentlichen Grundlagen und Technologien, die für das Verständnis der im Projekt eingesetzten Methoden notwendig sind.

Der konkrete Projektansatz weist jedoch in einigen Punkten Abweichungen zu den Beispielen aus den Kursen auf. Dies erfordert eine flexible Herangehensweise und eigene Lösungswege bei der Implementierung.

Der aktuelle Stand der Implementierung ist im folgenden Repository verfügbar (Zugriff nur mit Berechtigung, Ansprechpartner: Prof. Dr.-Ing. Schneider): SVN_Repository

Dieser Artikel beschreibt, wie man mit unserem SVN-System arbeitet, die KI verwendet, mit eigenen oder externen Bilddaten neu trainiert und eine typische MATLAB-Fehlermeldung korrekt behandelt.

SVN Einweisung nach dem Stand 22.10.2025

Eine kurze Einweisung findest Sie hier.

Im SVN_Repository sollte folgende Verzeichnisstruktur zu finden sein:

   ..
   ImageLabelingProject/
   LAB29-03/
   LAB29-04/
   LAB29-06/
   LAB29-07/
   TestBilder/
   TrainAndValPictures/

Der Eintrag .. führt immer in das vorherige Verzeichnis und ist für uns nicht relevant.

ImageLabelingProject/

Im Ordner ImageLabelingProject/ sind die wichtigsten Dateien und Unterordner gespeichert, die das Labeling-Projekt zusammenfassen:

   ..
   GroundTruthProject/
   ImageLabelingProject.prj
   Schilder_groundTruth.mat
   resources/

◉Im Ordner GroundTruthProject werden alle Daten abgelegt, die den letzten Status des Image Labelers speichern, z.B.:

appState.mat enthält den letzten Arbeitszustand des Image Labelers.
labelDefinitions.mat definiert, welche Labels verwendet werden (z.B. "Absolutes_Halteverbot").
signalInfo.mat speichert, welche Bilder der Image Labeler benötigt und hält alle Bildpfade bereit.
project.mat enthält weitere Metadaten zum Labeling-Projekt, z.B. Beschreibungen oder Einstellungen.
roiLabelData.mat beinhaltet alle selbst gelabelten Bounding Boxes.

Mit folgendem MATLAB-Code kann man die Bounding Boxes aus roiLabelData.mat laden und die Labels nachvollziehen (z.B. [x y Breite Höhe]):

% Lädt die Datei mit den gelabelten Regionen
data = load('roiLabelData.mat');  

% Die Tabelle mit den Label-Daten aus der Datei
S = data.S;                      

% Spaltenüberschriften der Tabelle anschauen:
S.Properties.VariableNames

% Nur die ersten 5 Zeilen anzeigen lassen 
head(S, 5)

% Ganze Tabelle ausgeben (bei großen Datenmengen vorsichtig):
disp(S)

Die Ausgabe sieht ungefähr so aus (Beispiel für 16 Klassen, hier nur 5 gezeigt):

Absolutes_Halteverbot Andreaskreuz Bahnuebergang Einbahnstrasse Eingeschraenktes_Halteverbot
[234 233 14 11] 0×0 double 0×0 double 0×0 double 0×0 double
[246 217 22 20] 0×0 double 0×0 double 0×0 double 0×0 double
[192 160 71 56] 0×0 double 0×0 double 0×0 double 0×0 double
[183 111 151 113] 0×0 double 0×0 double 0×0 double 0×0 double
[232 171 34 38] 0×0 double 0×0 double 0×0 double 0×0 double

Ein Eintrag 0×0 double bedeutet, dass in diesem Bild kein Schild der jeweiligen Klasse gelabelt wurde.
Im Ordner ImageLabelingProject/ findest du neben GroundTruthProject/ noch weitere wichtige Dateien und Verzeichnisse:

ImageLabelingProject.prj

 Diese Datei ist das Projektfile für den MATLAB Image Labeler.  
 Sie enthält die Projekt-Konfiguration und speichert, wie der Image Labeler das Projekt beim Öffnen initialisiert (z.B. welche Bilder geladen werden, welche Labels definiert sind usw.).  
 Kurz: Das ist die zentrale Projektdatei für das Labeling-Tool.

Schilder_groundTruth.mat

Diese Datei enthält die vollständigen und sorgfältig geprüften Referenzdaten für das Verkehrszeichenprojekt, die sogenannte Ground Truth. Darin sind für alle Bilder die genauen Positionen (Bounding Boxes) und Klassenbezeichnungen der Verkehrsschilder gespeichert. Diese Annotationen stellen den verbindlichen „Wahrheits“-Datensatz dar, an dem die Ergebnisse von Erkennungsalgorithmen gemessen und trainiert werden. 
Praktisch fasst Schilder_groundTruth.mat somit die geprüften Label-Daten zusammen, die auch im Ordner GroundTruthProject/ zu finden sind, jedoch in einer kompakten Form, die direkt als Referenz oder Trainingsgrundlage für KI-Modelle genutzt wird.

resources/

 Das ist ein Ordner, in dem zusätzliche Ressourcen liegen, die für das Projekt wichtig sind.  
 Das sind z.B. Beispielbilder, Icons, Label-Definitionen, Skripte oder Hilfsdaten sein.  
 Oft sammelt man hier alles, was man für das Labeling oder die spätere Auswertung braucht, aber nicht direkt zum Ground Truth gehört.

LAB29-0x/

Unter den verschiedenen LAB29-0x-Systemen (wobei x die Rechnernummern 3, 4, 6 oder 7 bezeichnet) sind die einzelnen Arbeitsstationen/Rechner zu verstehen, auf denen wir unterschiedliche KI-Konfigurationen getestet haben. Im jeweiligen Unterordner befindet sich ausschließlich das Verzeichnis SchilderProjekt/. Darin sollte folgende Struktur zu finden sein:

   ..
   15ModellbewertungManuelleEvaluationderTestBilder.mlx
   Converter.mlx
   Ergebnisse_1_yolov4_tiny_1700/
   Ergebnisse_2/
   Schildererkennung_durch_Kuenstliche_Intelligenz_KI.mlx

Auf jedem dieser Rechner finden sich drei .mlx-Dateien.

Die wichtigste Datei ist Schildererkennung_durch_Kuenstliche_Intelligenz_KI.mlx, da hier die vollständige Implementierung der KI enthalten ist. In diesem Skript werden sämtliche Schritte ausführlich beschrieben und erläutert. Diese Datei sollte unbedingt eingesehen werden, um das Funktionsprinzip der entwickelten KI nachvollziehen zu können.

Die Datei Converter.mlx diente der Skalierung der Bilddaten. Da unsere Originalbilder Auflösungen von 4284×5712 bzw. 3000×4000 Pixel aufwiesen, wurden sie auf ein Format von 512×512 Pixel reduziert.

Die Datei 15ModellbewertungManuelleEvaluationderTestBilder.mlx war ursprünglich im 15. Schritt der Schildererkennung_durch_Kuenstliche_Intelligenz_KI.mlx integriert, wurde jedoch ausgelagert. Hintergrund war, dass bereits eine automatische Validierung implementiert war, deren Zuverlässigkeit jedoch überprüft werden sollte. Wer die Qualität der automatischen Auswertung hinterfragen möchte, kann daher dieses Skript ausführen, um die Testbilder manuell zu bewerten. Dabei wird automatisch eine eigene, manuell erstellte Konfusionsmatrix generiert.

Im Ordner Ergebnisse_* befinden sich die Resultate der jeweiligen KI-Auswertungen anhand der Testbilder. Anhand dieser Daten lässt sich auch die Leistungsfähigkeit der Modelle nachvollziehen. Bisher ist auf allen Rechnern der Ordner Ergebnisse_1 vorhanden, der den ersten Testlauf auf einem der Systeme dokumentiert. Im weiteren Verlauf unserer Testreihen werden zusätzliche Ergebnisordner entstehen, die sich zwischen den einzelnen Rechnern unterscheiden können (z. B. LAB29-03/Ergebnisse_2 im Vergleich zu LAB29-04/Ergebnisse_2/). Ab dem Ordner Ergebnisse_2 werden auch Excel-Dateien erzeugt, die zusätzliche Informationen wie die Average Precision und den mAPOverlapAvg enthalten. Gleichzeitig werden dort sowie im gleichen Verzeichnis auch die Confusion Matrix und weitere relevante Daten abgelegt. Später wird auf alle diese Inhalte näher eingegangen.

In der zugehörigen Wiki-Dokumentation werden wir die Pfade zu den jeweiligen Ergebnissen nochmals eindeutig angeben, sodass klar ersichtlich ist, auf welche Resultate sich unsere Analysen beziehen. Voraussichtlich wird die Überschrift der jeweiligen Analyse direkt als Link zum entsprechenden Pfad implementiert.

TestBilder/

Im Ordner TestBilder befinden sich die für die Auswertung verwendeten Testbilder. Diese können jederzeit eingesehen oder, bei einer erneuten Ausführung beziehungsweise beim Nachbau des Projekts, durch eigene Bilder ersetzt werden. Auf diese Bilddaten wird die KI angewendet, und die resultierenden Ausgaben werden, wie bereits erläutert, im jeweiligen Ordner Ergebnisse_* gespeichert.

TrainAndValPictures/

Die in diesem Verzeichnis enthaltenen Bilder dürfen grundsätzlich nicht ausgetauscht werden, es sei denn, man beabsichtigt, die Daten im ImageLabeler eigenständig zu labeln, so wie es in unserem Projekt durchgeführt wurde. Das manuelle Labeln von 500 Bildern mit insgesamt 16 Klassen nahm in unserem Fall etwa acht Stunden in Anspruch. Diese Arbeit wurde im Rahmen unserer wissenschaftlichen Untersuchung durchgeführt, um nachfolgenden Forschenden diesen Schritt zu ersparen. Sollte dennoch Interesse bestehen, den Labelvorgang selbst nachzuvollziehen, verweise ich auf die entsprechenden MATLAB-Tutorial, in denen der Prozess des Labelns anschaulich und ausführlich erläutert wird.

SVN Kurzeinweisung

ImageLabelingProject/
Enthält das zentrale MATLAB-Projekt zum Labeln der Verkehrszeichen, inklusive Ground-Truth-Daten, Projektdatei und zugehörigen Ressourcen.

LAB29-0x/
Beinhaltet die verschiedenen Implementierungen und Testläufe der KI auf unterschiedlichen Rechnern, inklusive der Hauptskripte und Auswertungsergebnisse.

TestBilder/
Dieser Ordner enthält die Testbilder, mit denen die trainierte KI überprüft und ihre Erkennungsleistung bewertet wird.

TrainAndValPictures/
Hier liegen die Trainings- und Validierungsbilder mit geprüften Labels, die als Grundlage für das Training der KI dienen.

Eine neue KI trainieren

Im folgendem werden Sie erklärt bekommen wie man eine eigene KI entwickelt.

Wie anhand der Studie von Hermens (2024) zur YOLOv8-Objekterkennung gezeigt wurde, wurden dort mehrere Forschungsfragen adressiert. Die Fragen, die für uns am meisten von Interesse waren, sind:

(1) „How many annotated images are needed to train an object detector in a low variability setting?“(Hermens, 2024,56:7307–7330)
(3) „Does the YOLO version and the pre-trained model size affect performance of the detector?“(Hermens, 2024,56:7307–7330)

Die Antworten auf die übrigen Fragen erschienen uns eher kanonisch. Bemerkenswert ist, dass die Studie erstmals eine konkrete Kennzahl liefert: Bereits hunderte annotierte Bilder können ausreichen, um eine erfolgreiche Differenzierung zwischen den Klassen zu ermöglichen. Allerdings kann ein gleichbleibender Hintergrund die Detektionsleistung verschlechtern.

Ein weiterer interessanter Punkt, den wir zunächst übersehen hatten: Bei weniger Trainingsbildern sollten mehr Trainingsepochen durchgeführt werden, während bei einer größeren Bildanzahl weniger Epochen ausreichen. Hermens formuliert dies wie folgt:

„More training epochs were needed when fewer images were used (around 20) than for many images (fewer than ten epochs).“

Schritt 1: Schilder Fotografieren oder Datenset aus dem Internet holen (schwierig)

Erstellen Sie zunächst einen Ordner mit einem aussagekräftigen Namen, in dem Sie Ihre Bilder speichern. Achten Sie darauf, dass die Bilder der Verkehrsschilder möglichst vielfältig sind. Unterschiedliche Blickwinkel, Beleuchtungssituationen und Hintergründe erhöhen die Qualität des Trainingsdatensatzes erheblich.

Beispiel anhand der Schildergattung: Absolutes Halteverbot (Ausnahme bei den Nachtbild, wird im Nachgang eventuell ersetzt)


Überlegen Sie bereits im Vorfeld, welche Klassentypen Sie erkennen möchten, und planen Sie entsprechend. Pro Klasse sollten Sie mindestens 500 Bilder einplanen, um eine robuste Klassifikation zu gewährleisten. Die Bilddateien sollten im JPG- oder PPM-Format vorliegen, da andere Formate im MATLAB Image Labeler möglicherweise nicht unterstützt werden.Insgesamt sollt der Ordner wie hier aussehen: TrainAndValPictures/

Schritt 2: ImageLabeler verwenden

Schritt 2.1: ImageLabeler öffnen

Zunächst muss der Image Labeler gestartet werden. Dafür empfiehlt es sich, im Menüpunkt „Apps“ nach „Image Labeler“ zu suchen. Alternativ kann auch die allgemeine Suchleiste verwendet werden. Für eine effizientere Nutzung schlagen wir vor, die Anwendung in der App-Leiste zu suchen und diese als Favoriten (Stern markieren) hinzuzufügen. Auf diese Weise ist der Image Labeler jederzeit schnell zugänglich, da er häufig geöffnet und geschlossen werden muss. Nach dem Start des Image Labeler befindet man sich auf der Startseite und hat drei Optionen:


New Individual Project

Open Project

New Team Project

Die Wahl der Projektart hängt davon ab, ob man alleine oder im Team an einem Projekt arbeitet. In unserem Fall waren wir zu zweit, entschieden uns jedoch zunächst für die Option „New Individual Project“. Der Grund dafür war, dass es uns zu Beginn nicht gelang, den Team Project-Modus so einzurichten, dass eine parallele und effiziente Bearbeitung auf zwei Rechnern möglich war, obwohl dieser Modus genau für die gemeinsame Arbeit vorgesehen ist. Nachträglich haben wir dennoch auf den Team-Modus umgestellt, um eine bessere Übersicht über bereits gelabelte und noch nicht bearbeitete Bilder zu erhalten.

01. Image Labeler starten
2. Bilder Klassen erstellen
1. Bilder Importieren

New Individual Project

1. Zunächst ist es erforderlich, die Bilder, die als Trainings- und Validierungsdatensätze verwendet werden sollen, zu importieren (import->Images->From File). Testbilder werden zu diesem Zeitpunkt nicht benötigt. Abhängig von der Datenmenge kann das Laden der Bilder einige Zeit in Anspruch nehmen. In unserem Fall dauert das Einlesen von etwa 40.000 Bildern ungefähr 20 Minuten. Dieser Zeitraum verlängert sich, sobald Data-Augmentation-Methoden angewendet werden, jedoch werden die Bilder in diesem Fall automatisch gelabelt, sodass eine manuelle Anpassung der Ground-Truth-Daten im Image Labler entfällt.

2. Nach dem Import stehen die Bilder zur Verfügung, und es ist notwendig, die zuvor definierten Klassen als Labels zuzuordnen. In unserem Beispiel umfasst der Klassensatz etwa 50 Klassen. Dies kann in anderen Projekten stark variieren.(Add Label->ROI Label DEFINITION->Rectangle) Es ist von besonderer Bedeutung, dass die Labels als Rechtecke („Rectangle“) definiert werden, da das zugrundeliegende Skript ausschließlich mit rechteckigen Annotationen arbeitet.

3. Bilder abspeichern
4. Projekt exportieren

3. Beim Definieren des Label-Namens sollte man sich am besten nicht verschreiben. Die Farbe entspricht immer direkt dem jeweiligen Schild, daher sollten keine gleichen Farben für unterschiedliche Labels verwendet werden. Demenstprechend keine gleichen Farben nehmen. Für die Annotation selbst kann man jedes Bild auswählen und durch Klicken und Ziehen mit der Maus einen Rahmen um das relevante Objekt erstellen. Es empfiehlt sich, regelmäßig Zwischenspeicherungen vorzunehmen, entweder durch die Tastenkombination Strg+S oder durch die entsprechende Schaltfläche „Save Project“. Dadurch entsteht eine .prj Datei die man jederzeit wieder im ImageLabler öffnen kann.

4. Nach Abschluss der Labeling-Prozedur ist es entscheidend, die Labels als .mat-Datei zu exportieren(Export->Labels->To File). Diese Datei ermöglicht es, bei zukünftigen Projekten die Klassendefinitionen direkt zu importieren, wodurch Redundanzen vermieden werden. Bei der Arbeit mit mehreren individuellen Projekten, die später zusammengeführt werden sollen, ist darauf zu achten, dass die Klassennamen exakt übereinstimmen. Unterschiede in der Farbzuordnung stellen kein Problem dar, da der Image Labler diese automatisch angleicht.

Am Ende des Prozesses sollten zwei wesentliche Dateien vorliegen: eine Projektdatei, die jederzeit im Image Labler geöffnet werden kann, sowie eine .mat-Datei, die in anderen Projekten importiert werden kann, um bereits definierte Klassenzuordnungen wiederzuverwenden.

Open Project

"Man öffnet 'nen Projekt"

New Team Project

Wenn man sich für Team Project entscheidet, sollte man vorher noch das MATLAB Compiler Add-On installieren. Damit lässt sich später eine EXE-Datei erstellen, die man an andere Teammitglieder weitergeben kann, sodass diese auf ihren Rechnern die ihnen zugewiesenen Aufgaben erledigen können.

Eine trainierte KI anwenden

Links

Hermens F. (2024). Automatic object detection for behavioural research using YOLOv8. Behavior research methods, 56(7), 7307–7330. https://doi.org/10.3758/s13428-024-02420-5

J. Stallkamp, M. Schlipsing, J. Salmen, C. Igel, Man vs. computer: Benchmarking machine learning algorithms for traffic sign recognition, Neural Networks, Available online 20 February 2012, ISSN 0893-6080, 10.1016/j.neunet.2012.02.016. (http://www.sciencedirect.com/science/article/pii/S0893608012000457) Keywords: Traffic sign recognition; Machine learning; Convolutional neural networks; Benchmarking