Projektaufbau und Umgebungseinrichtung – Verkehrsschildererkennung KI: Unterschied zwischen den Versionen
Die Seite wurde neu angelegt: „{| class="wikitable" |- | '''Autoren:''' || Fabian Babik, Adrian Klinspon |- | '''Art:''' || Projekt im Praxissemester |- | '''Dauer:''' || 29.09.2025 bis 01.01.2026 |- | '''Betreuer:''' || Prof. Dr.-Ing. Schneider |}“ |
|||
| (316 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 9: | Zeile 9: | ||
| '''Betreuer:''' || [[Benutzer:Ulrich_Schneider|Prof. Dr.-Ing. Schneider]] | | '''Betreuer:''' || [[Benutzer:Ulrich_Schneider|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: | |||
<div class="mw-collapsible mw-collapsed" style="width:40%; font-size:90%; border:1px solid gray; background:#f9f9f9; padding:5px; margin: 10px 0; clear: both;"> | |||
<div class="mw-collapsible-toggle" style="font-weight:bold; cursor:pointer; width:100%">▶ Empfohlene MATLAB-Kurse</div><br> | |||
<div class="mw-collapsible-content"> | |||
• [https://matlabacademy.mathworks.com/de/details/object-detection-with-deep-learning/otmloddl Object Detection with Deep Learning] <br> | |||
• [https://matlabacademy.mathworks.com/de/details/deep-learning-onramp/deeplearning Deep Learning Onramp]<br> | |||
• [https://matlabacademy.mathworks.com/de/details/matlab-onramp/gettingstarted MATLAB Onramp]<br> | |||
• [https://matlabacademy.mathworks.com/de/details/computer-vision-onramp/orcv Computer Vision Onramp]<br> | |||
• [https://matlabacademy.mathworks.com/de/details/image-processing-onramp/imageprocessing Image Processing Onramp]<br> | |||
</div> | |||
</div> | |||
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): [https://svn.hshl.de/svn/MATLAB_Vorkurs/trunk/Signalverarbeitung_mit_Kuenstlicher_Intelligenz/Classification_of_road_signs_through_object_recognition_with_AI/ 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 [[#SVN Kurzeinweisung|hier]].<br> | |||
Im [https://svn.hshl.de/svn/MATLAB_Vorkurs/trunk/Signalverarbeitung_mit_Kuenstlicher_Intelligenz/Classification_of_road_signs_through_object_recognition_with_AI/ SVN_Repository] sollte folgende Verzeichnisstruktur zu finden sein: | |||
.. | |||
ImageLabelingProject/ | |||
LAB29-03/ | |||
LAB29-04/ | |||
LAB29-06/ | |||
LAB29-07/ | |||
TestBilder/ | |||
TrainAndValPictures/ | |||
Der Eintrag <code>..</code> führt immer in das vorherige Verzeichnis und ist für uns nicht relevant. | |||
===ImageLabelingProject/=== | |||
Im Ordner <code>ImageLabelingProject/</code> sind die wichtigsten Dateien und Unterordner gespeichert, die das Labeling-Projekt zusammenfassen: | |||
.. | |||
GroundTruthProject/ | |||
ImageLabelingProject.prj | |||
Schilder_groundTruth.mat | |||
resources/ | |||
◉Im Ordner <code>GroundTruthProject</code> werden alle Daten abgelegt, die den letzten Status des Image Labelers speichern, z.B.: | |||
<code>appState.mat</code> enthält den letzten Arbeitszustand des Image Labelers.<br> | |||
<code>labelDefinitions.mat</code> definiert, welche Labels verwendet werden (z.B. "Absolutes_Halteverbot").<br> | |||
<code>signalInfo.mat</code> speichert, welche Bilder der Image Labeler benötigt und hält alle Bildpfade bereit.<br> | |||
<code>project.mat</code> enthält weitere Metadaten zum Labeling-Projekt, z.B. Beschreibungen oder Einstellungen.<br> | |||
<code>roiLabelData.mat</code> beinhaltet alle selbst gelabelten Bounding Boxes.<br> | |||
Mit folgendem MATLAB-Code kann man die Bounding Boxes aus <code>roiLabelData.mat</code> laden und die Labels nachvollziehen (z.B. [x y Breite Höhe]): | |||
<syntaxhighlight lang="matlab"> | |||
% 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) | |||
</syntaxhighlight> | |||
Die Ausgabe sieht ungefähr so aus (Beispiel für 16 Klassen, hier nur 5 gezeigt): | |||
{| class="wikitable" style="font-family: monospace;" | |||
! 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 <code>0×0 double</code> bedeutet, dass in diesem Bild kein Schild der jeweiligen Klasse gelabelt wurde.<br> | |||
Im Ordner <code>ImageLabelingProject/</code> findest du neben <code>GroundTruthProject/</code> noch weitere wichtige Dateien und Verzeichnisse: | |||
◉<code>ImageLabelingProject.prj</code> | |||
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. | |||
◉<code>Schilder_groundTruth.mat</code> | |||
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. | |||
◉<code>resources/</code> | |||
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 <code>LAB29-0x</code>-Systemen (wobei <code>x</code> 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 <code>SchilderProjekt/</code>. 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 <code>.mlx</code>-Dateien. | |||
Die wichtigste Datei ist <code>Schildererkennung_durch_Kuenstliche_Intelligenz_KI.mlx</code>, da hier die vollständige Implementierung der KI enthalten ist. In diesem Skript werden sämtliche Schritte ausführlich beschrieben und erläutert. <b>Diese Datei sollte unbedingt eingesehen werden</b>, um das Funktionsprinzip der entwickelten KI nachvollziehen zu können. | |||
Die Datei <code>Converter.mlx</code> 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 <code>15ModellbewertungManuelleEvaluationderTestBilder.mlx</code> war ursprünglich im 15. Schritt der <code>Schildererkennung_durch_Kuenstliche_Intelligenz_KI.mlx</code> 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 <code>Ergebnisse_*</code> 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 <code>Ergebnisse_1</code> 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. <code>LAB29-03/Ergebnisse_2</code> im Vergleich zu <code>LAB29-04/Ergebnisse_2/</code>). 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 <code>TestBilder</code> 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 <code>Ergebnisse_*</code> gespeichert. | |||
===TrainAndValPictures/=== | |||
Die in diesem Verzeichnis enthaltenen Bilder dürfen grundsätzlich <b>nicht</b> ausgetauscht werden, es sei denn, man beabsichtigt, die Daten im <code>ImageLabeler</code> 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 [https://matlabacademy.mathworks.com/v1/portal.html?course=otmloddl#chapter=2v1&lesson=1§ion=1 MATLAB-Tutorial], in denen der Prozess des Labelns anschaulich und ausführlich erläutert wird. | |||
== SVN Kurzeinweisung == | |||
'''ImageLabelingProject/'''<br> | |||
Enthält das zentrale MATLAB-Projekt zum Labeln der Verkehrszeichen, inklusive Ground-Truth-Daten, Projektdatei und zugehörigen Ressourcen. | |||
'''LAB29-0x/'''<br> | |||
Beinhaltet die verschiedenen Implementierungen und Testläufe der KI auf unterschiedlichen Rechnern, inklusive der Hauptskripte und Auswertungsergebnisse. | |||
'''TestBilder/'''<br> | |||
Dieser Ordner enthält die Testbilder, mit denen die trainierte KI überprüft und ihre Erkennungsleistung bewertet wird. | |||
'''TrainAndValPictures/'''<br> | |||
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)<br> | |||
(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. | |||
<b>Beispiel anhand der Schildergattung: Absolutes Halteverbot (Ausnahme bei den Nachtbild, wird im Nachgang eventuell ersetzt)</b> | |||
<gallery mode="packed-hover"> | |||
File:BeispielBildA.jpg|300px|[[Media:BeispielBildA.jpg|Weitsicht]] | |||
File:BeispielBildB.jpg|300px|[[Media:BeispielBildB.jpg|Normalsicht]] | |||
File:BeispielBildC.jpg|300px|[[Media:BeispielBildC.jpg|Nahsicht]] | |||
File:BeispielBildD.jpg|300px|[[Media:BeispielBildD.jpg|Perspektiven]] | |||
File:BeispielBildE.jpg|300px|[[Media:BeispielBildE.jpg|Nachtaufnahme]] | |||
File:BeispielBildF.jpg|300px|[[Media:BeispielBildF.jpg|Vandalismus]] | |||
</gallery> | |||
<gallery mode="slideshow"> | |||
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>Hinweis: Überlegen Sie sich im Vorfeld, aus welcher Distanz die Schilder aufgenommen werden sollen.</b> | |||
File:BeispielBildB.jpg|300px|[[Media:BeispielBildB.jpg|<h2>Normalsicht</h2><br>]]In der Normalsicht ist es entscheidend, dass das Schild vollständig und klar sichtbar ist. Es dürfen keine Teile abgeschnitten oder unscharf sein. Diese Perspektive entspricht typischerweise der Betrachtung aus mittlerer Entfernung, bei der das Schild in einem natürlichen Abstand erfasst wird. Um sicherzustellen, dass das Modell die Schildinformationen korrekt verarbeitet, müssen alle relevanten Merkmale des Schildes klar erkennbar sein. Verzerrungen durch Perspektive oder falsche Fokussierung sollten vermieden werden, um eine zuverlässige Klassifizierung zu ermöglichen.<br><b>Hinweis: Stellen Sie sicher, dass das Schild vollständig und klar sichtbar ist.<br></b> | |||
File:BeispielBildC.jpg|300px|[[Media:BeispielBildC.jpg|<h2>Nahsicht</h2><br>]]Bei der Nahsicht wird der Fokus auf detaillierte Merkmale des Schildes gelegt. Hier ist es wichtig, dass selbst kleinste Details wie Text oder Schriftzeichen klar erkennbar sind, um eine präzise Identifikation zu gewährleisten. Um Verzerrungen zu vermeiden, sollte die Kamera mit optimaler Fokussierung arbeiten, da die Aufnahme aus kurzer Distanz dazu führen kann, dass die Bildqualität leidet, wenn der Fokus nicht korrekt gesetzt ist.<br><b>Hinweis: Achten Sie darauf, dass alle Details des Schildes, wie Text oder Schriftzeichen, klar erkennbar sind.</b> | |||
File:BeispielBildD.jpg|300px|[[Media:BeispielBildD.jpg|<h2>Perspektiven</h2><br>]]Es ist entscheidend, dass das Schild aus verschiedenen Perspektiven aufgenommen wird, damit die KI es auch aus verschiedenen Blickwinkeln zuverlässig erkennen kann. In der realen Welt wird ein Schild nicht immer nur aus der idealen oder direkten Frontalansicht betrachtet. Ob aus der Sicht eines Fahrers, Fußgängers oder aus verschiedenen Distanzen – die vielfältige Erfassung von Perspektiven sorgt dafür, dass das Modell das Schild auch dann korrekt identifiziert, wenn es sich nicht in einer Standardansicht befindet. Dies erhöht die Robustheit der KI und gewährleistet eine präzise Erkennung unter realistischen Bedingungen. Eine gute Abdeckung von Perspektiven hilft der KI, unterschiedliche Blickwinkel zu generalisieren und so in der Praxis immer wieder zuverlässig zu arbeiten.<br><b>Hinweis: Nehmen Sie das Schild aus verschiedenen Blickwinkeln auf, um die Erkennung aus unterschiedlichen Perspektiven zu gewährleisten.</b> | |||
File:BeispielBildE.jpg|300px|[[Media:BeispielBildE.jpg|<h2>Nachtaufnahme</h2><br>]]Nachtaufnahmen oder Aufnahmen bei schlechten Lichtverhältnissen sind nützlich, aber nicht zwingend erforderlich, da durch Datenaugmentation die Helligkeit, der Kontrast und andere Bildfaktoren auch nachträglich angepasst werden können. Es ist jedoch sinnvoll, die KI auch auf dunklere Szenarien und verschiedene Hintergrundbedingungen zu trainieren, um sie besser zu verallgemeinern. Wenn Bilder bei Nacht aufgenommen werden, sollten dabei die Auflösung und der Fokus weiterhin eine zentrale Rolle spielen, um sicherzustellen, dass auch bei wenig Licht die relevanten Merkmale des Schildes klar erkennbar bleiben. Das Training mit einer breiten Variation an Lichtverhältnissen und Hintergründen hilft, das Modell robust gegenüber unterschiedlichen realen Bedingungen zu machen, und stellt sicher, dass es auch unter weniger idealen Bedingungen eine zuverlässige Leistung zeigt.<br><b>Hinweis: Es kann sinnvoll sein, auch bei schlechten Lichtverhältnissen aufzunehmen, um die KI zu verallgemeinern.</b> | |||
File:BeispielBildF.jpg|300px|[[Media:BeispielBildF.jpg|<h2>Vandalismus</h2><br>]]Bei Vandalismus, etwa durch Sticker, Graffiti oder andere Beschädigungen, ist es wichtig, dass die KI das Schild trotz dieser Störungen erkennen kann. Die KI sollte in der Lage sein, relevante Informationen zu extrahieren, selbst wenn Teile des Schildes verdeckt oder beschädigt sind. Allerdings ist es entscheidend, dass der Großteil des Datensatzes aus klaren, ungestörten Bildern besteht, in denen das Schild ohne Ablenkung oder Beschädigung sichtbar ist. Diese Bilder dienen als Grundlage für eine zuverlässige Klassifizierung und ein robustes Modell. Bilder mit Vandalismus sollten nur dann verwendet werden, wenn das Schild trotz der Störungen erkennbar bleibt, andernfalls ist es besser, auf klarere Aufnahmen zurückzugreifen. Ein ausgewogenes Verhältnis von sauberen und beschädigten Schildern im Trainingsdatensatz hilft der KI, auch unter realen, gestörten Bedingungen präzise zu arbeiten.<br><b>Hinweis: Achten Sie darauf, dass die Schilder auch bei Beschädigungen oder Verunreinigungen erkannt werden können.</b> | |||
</gallery> | |||
Ü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/|TrainAndValPictures/]] | |||
== Schritt 2: ImageLabeler verwenden == | |||
<div style="float:left; margin-right:20px;"> | |||
[[Datei:Image Labeler.jpg|left|800px]]<div style="width:800px; height:25px; font-size:20px;padding-bottom:10px;padding-top:5px;; margin:0px;line-height:1.5;">01. Image Labeler öffnen</div> | |||
</div> | |||
===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: | |||
<div style="float:right"> | |||
[[Datei:ImageLabeler.jpg|400px|right|border]] | |||
<div style="width:400px; height:25px; font-size:20px;padding:0px; margin:0px;line-height:1.5;">02. Image Labeler Modi</div> | |||
</div> | |||
</div> | |||
<p>• '''[[#New Individual Project|New Individual Project]]'''</p> | |||
<p>• '''[[#Open Project|Open Project]]'''</p> | |||
<p>• '''[[#New Team Project|New Team Project]]'''</p> | |||
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. | |||
<div style="clear:both;"> | |||
<div style="width:800px; margin:0; padding-bottom:10px;padding-top:5px; overflow:hidden;font-size:0; float:left; margin-right:20px;"> | |||
[[Datei:Import.jpg|400px|left]][[Datei:RectangleZwei.jpg|400px|right]] | |||
<div style="width:400px; height:25px; float:right; font-size:20px; padding:0px; margin:0px;line-height:1.5;">04. Bilder Klassen erstellen</div> | |||
<div style="width:400px; height:25px; float:left; font-size:20px;padding:0px; margin:0px;line-height:1.5;">03. Bilder Importieren</div> | |||
</div> | |||
===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. | |||
<div style="clear:both;"> | |||
<div style="width:800px; margin:0; padding-bottom:10px;padding-top:5px; overflow:hidden;font-size:0; float:left; margin-right:20px;"> | |||
[[Datei:Rectangle Defenition Two.jpg|332px|left]][[Datei:Eport as mat.jpg|467px|right]] | |||
<div style="width:332px; float:left; font-size:20px; margin-top:4px;">05. Bilder abspeichern</div> | |||
<div style="width:467px; float:left; font-size:20px; margin-top:4px;">06. Projekt exportieren</div> | |||
</div> | |||
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.<br> | |||
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. | |||
<div style="clear:both;"> | |||
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=== | |||
Zunächst muss die abgespeicherte .prj-Datei wiedergefunden und geöffnet werden. Wenn die Bilder zwischenzeitlich verschoben wurden, kann der Image Labeler sie möglicherweise nicht mehr finden. In diesem Fall müssen die neuen Pfade angegeben werden. Viele Datensätze, wie beispielsweise der der Ruhr-Universität Bochum, sind nach Klassen nummeriert, also mit Ordnern 0, 1, 2, … n, wobei jede Zahl einer bestimmten Schildgattung entspricht. Es wird empfohlen, alle Bilder in einen einzigen Ordner zu legen, da dies beim Resolven erheblich Zeit spart. Wenn beispielsweise 43 Klassen vorhanden sind, müsste man sonst 43 Mal im Explorer den richtigen Pfad auswählen. | |||
Beim Resolven der Pfade ist darauf zu achten, welchen Pfad der Image Labeler aktuell ersetzen möchte, da die Reihenfolge der Ordner nicht unbedingt logisch verläuft. Sobald die Bilder gefunden wurden, wird die entsprechende Zeile grün markiert. Es ist notwendig, die Option zum automatischen Ersetzen der Pfade zu aktivieren, da sonst jedes Bild einzeln gesucht werden müsste. Oberhalb der Liste wird angezeigt, wie viele Pfade bereits korrekt zugeordnet wurden und wie viele noch fehlen. Sobald alle Pfade aufgelöst sind, kann das Image Labeler-Projekt wie gewohnt mit allen Bildern und Labels vollständig genutzt werden. | |||
===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 | |||
Aktuelle Version vom 10. November 2025, 15:27 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:
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.
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. 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
Zunächst muss die abgespeicherte .prj-Datei wiedergefunden und geöffnet werden. Wenn die Bilder zwischenzeitlich verschoben wurden, kann der Image Labeler sie möglicherweise nicht mehr finden. In diesem Fall müssen die neuen Pfade angegeben werden. Viele Datensätze, wie beispielsweise der der Ruhr-Universität Bochum, sind nach Klassen nummeriert, also mit Ordnern 0, 1, 2, … n, wobei jede Zahl einer bestimmten Schildgattung entspricht. Es wird empfohlen, alle Bilder in einen einzigen Ordner zu legen, da dies beim Resolven erheblich Zeit spart. Wenn beispielsweise 43 Klassen vorhanden sind, müsste man sonst 43 Mal im Explorer den richtigen Pfad auswählen.
Beim Resolven der Pfade ist darauf zu achten, welchen Pfad der Image Labeler aktuell ersetzen möchte, da die Reihenfolge der Ordner nicht unbedingt logisch verläuft. Sobald die Bilder gefunden wurden, wird die entsprechende Zeile grün markiert. Es ist notwendig, die Option zum automatischen Ersetzen der Pfade zu aktivieren, da sonst jedes Bild einzeln gesucht werden müsste. Oberhalb der Liste wird angezeigt, wie viele Pfade bereits korrekt zugeordnet wurden und wie viele noch fehlen. Sobald alle Pfade aufgelöst sind, kann das Image Labeler-Projekt wie gewohnt mit allen Bildern und Labels vollständig genutzt werden.
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





