Projektaufbau und Umgebungseinrichtung – Verkehrsschildererkennung KI: Unterschied zwischen den Versionen
| Zeile 214: | Zeile 214: | ||
</gallery> | </gallery> | ||
<gallery mode="slideshow"> | <gallery mode="slideshow"> | ||
File:BeispielBildA.jpg|300px|[[Media:BeispielBildA.jpg|<h2>Weitsicht</h2>]] | File:BeispielBildA.jpg|300px|[[Media:BeispielBildA.jpg|<h2>Weitsicht</h2><br>]]Wenn man mit Bildern arbeitet, bei denen Objekte aus weiter Entfernung sichtbar sind, ist es wichtig, von Anfang an zu überlegen, mit welcher Auflösung diese Bilder später für das Labeln verwendet werden sollen. Wenn man sich beim Labeln für eine niedrige Auflösung wie 224x224 Pixel entscheidet, mag es zwar für uns Menschen möglich sein, das Objekt (zum Beispiel ein Schild) aufgrund unserer Erinnerung an das Originalbild zu erkennen. Doch in der reduzierten Auflösung sind viele feine Details nicht mehr sichtbar. Wir neigen dazu, zu denken, dass wir das Bild auch bei dieser niedrigen Auflösung noch eindeutig erkennen können – dabei sehen wir es selbst nicht mehr so deutlich. Das Problem entsteht, weil der Feature Extraction Layer in YOLO (und ähnlichen Modellen) mit einer sehr niedrigen Anzahl von Pixeln arbeitet und somit nicht genug Details extrahieren kann, um das Bild korrekt zu klassifizieren. Dieser Layer, der für die Identifikation von Mustern und Strukturen verantwortlich ist, benötigt ausreichend Auflösung, um feine Details wie Texturen, Kanten oder Schriftzeichen zu erkennen. Wenn wir das Bild selbst bei dieser Auflösung kaum noch erkennen können, wird es auch der KI schwerfallen, das Objekt korrekt zu identifizieren – selbst wenn wir glauben, dass sie es tun wird, weil wir die ursprüngliche hohe Auflösung im Kopf haben. Dieses Problem führt dazu, dass das Modell Fehler macht, das Objekt gar nicht erkennt oder es falsch klassifiziert. Obwohl wir beim Labeln oft davon ausgehen, dass die KI die nötigen Details erkennen kann, wird sie durch die reduzierte Bildqualität genauso eingeschränkt, wie wir es sind. <br><b>Dementsprechend sollte man sich im Vorfeld überlegen aus welche Distanz man die Schilder aufnehmen möchte</b> | ||
File:BeispielBildB.jpg|300px|[[Media:BeispielBildB.jpg|<h2>Normalsicht</h2>]] | |||
File:BeispielBildC.jpg|300px|[[Media:BeispielBildC.jpg|<h2>Nahsicht</h2>]] | File:BeispielBildB.jpg|300px|[[Media:BeispielBildB.jpg|<h2>Normalsicht</h2><br>]] | ||
File:BeispielBildD.jpg|300px|[[Media:BeispielBildD.jpg|<h2>Links Perspektive</h2>]] | File:BeispielBildC.jpg|300px|[[Media:BeispielBildC.jpg|<h2>Nahsicht</h2><br>]] | ||
File:BeispielBildD.jpg|300px|[[Media:BeispielBildD.jpg|<h2>Links Perspektive</h2><br>]] | |||
</gallery> | </gallery> | ||
Version vom 6. November 2025, 09:07 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).“
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
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 von einer Schildgattung:
Ü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/
Eine trainierte KI anwenden
Links
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