Ergebnisse, Anpassungen und Erkenntnisse – Verkehrsschildererkennung KI
| Autoren: | Fabian Babik, Adrian Klinspon |
| Art: | Projekt im Praxissemester |
| Dauer: | 29.09.2025 bis 01.01.2026 |
| Betreuer: | Prof. Dr.-Ing. Schneider |
Im Rahmen unseres Projekts wurde eine KI zur Erkennung von Verkehrsschildern entwickelt. Die Grundlage dafür bildete eine Datenbasis aus Bildern, die in den Städten Lippstadt und Soest aufgenommen wurden. Alle Verkehrsschilder auf diesen Bildern mussten von uns eigenständig manuell gelabelt werden, um die KI mit korrekten Trainingsdaten zu versorgen.
Die KI basiert auf zuvor erstellten Modellen, nämlich CSPDarknet53, CSPDarknet53 vortrainiert auf COCO, Tiny-YOLOv4 und Tiny-YOLOv4 vortrainiert auf COCO, die jeweils angepasst und umtrainiert wurden. Dabei wurden die Modelle sowohl mit unseren selbst gelabelten Bildern validiert.
Der gesamte Entwicklungs- und Trainingsprozess wurde in Matlab R2025b durchgeführt.
Einfuehrung und Überblick zum Projekt „Klassifikation von Verkehrsschildern mittels KI“
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 legt den Fokus auf die Ergebnisse der bisherigen Implementierung, deren Analyse und Bewertung. Darüber hinaus werden die vorgenommenen Änderungen dokumentiert sowie geplante Weiterentwicklungen und Optimierungen beschrieben, um die Leistungsfähigkeit der KI kontinuierlich zu verbessern.
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.
Ergebnisse des ersten Durchlaufs mit tiny-yolov4-coco, 20 Epochen und 1700 gelabelten Bildern
Beim ersten Trainingsdurchlauf wurde der vorgefertigte Tiny-YOLOv4-COCO-Detektor verwendet, wobei ca. 1700 manuell gelabelte Bilder zur Verfügung standen. Als Trainingsdauer wurden 20 Epochen gewählt.
Obwohl die ursprüngliche Codebasis dieses Durchlaufs nicht vollständig dokumentiert wurde, sind die wichtigsten Konfigurationen und Ergebnisse weiterhin nachvollziehbar und werden im Folgenden zusammengefasst.
Verwendete Trainingsparameter:
% Ausschnitt aus Schritt 9
detector = yolov4ObjectDetector("tiny-yolov4-coco", classNames, anchorBoxes, InputSize=inputSize);
% Ausschnitt aus Schritt 10
options = trainingOptions("sgdm", ...
InitialLearnRate = 0.0001, ...
MaxEpochs = 20, ...
MiniBatchSize = 4, ...
Shuffle = "every-epoch", ...
ValidationData = validierungData, ...
ValidationFrequency = 15, ...
LearnRateSchedule = "piecewise", ...
LearnRateDropFactor = 0.1, ...
LearnRateDropPeriod = 5, ...
Plots = "training-progress", ...
ExecutionEnvironment = "auto");

Auswertung der ConfusionMatrix
| Tatsächliche Klassen | Treffer | Gesamtanzahl | Trefferquote | Anmerkungen |
| Absoultes_Halteverbot | 154 | 182 | ≈ 84.6% | Das Absolute Halteverbot wird in den meisten Fällen korrekt erkannt und zeigt eine insgesamt hohe Erkennungsrate. |
| Andreskreuz | 0 | 27 | ≈ 0.0% | Das Andreaskreuz wird nahezu nie korrekt erkannt und gelegentlich fälschlich als Vorfahrt-gewähren-Schild klassifiziert. |
| Bahnuebergang | 31 | 47 | ≈ 66.0% | Die Erkennung des Bahnübergangs ist überwiegend zuverlässig, erfolgt jedoch nicht konsistent über alle Testbilder hinweg. |
| Einbahnstrasse | 49 | 108 | ≈ 45.4% | Die Einbahnstraße wird häufig korrekt erkannt, jedoch treten teilweise Verwechslungen mit dem Vorfahrt-gewähren-Schild oder Nicht-Erkennungen auf. |
| Eingeschraenktes_Halteverbot | 11 | 50 | ≈ 22.0% | Das Eingeschränkte Halteverbot wird oft fälschlich als Absolutes Halteverbot erkannt, was auf eine visuelle Ähnlichkeit der Schilder zurückzuführen ist. |
| Verbot_der_Einfahrt | 49 | 129 | ≈ 38.0% | Das Schild Verbot der Einfahrt zeigt eine moderate Erkennungsrate, wobei eine relativ hohe Anzahl nicht zugeordneter (unmatched) Ergebnisse auffällt. |
| Verbot_fuer_Fahrzeuge_aller_Art | 0 | 7 | ≈ 0.0% | Diese Klasse wird derzeit nicht erkannt, was vermutlich auf eine unzureichende Datenbasis im Trainings- und Validierungssatz zurückzuführen ist. |
| Vorfahrt_gewaehren | 50 | 82 | ≈ 61.0% | Das Vorfahrt-gewähren-Schild wird insgesamt zufriedenstellend erkannt, zeigt jedoch noch vereinzelte Verwechslungen mit Bahnübergang- und Vorfahrtstraße-Schildern. |
| Vorfahrtstrasse | 16 | 48 | ≈ 33.3% | Die Vorfahrtstraße wird teilweise fälschlich als Vorfahrt-gewähren-Schild erkannt oder nicht erkannt, was auf eine unzureichende Differenzierung im Modell hindeutet |
| Vorgeschreibene_Farhtrichtung_geraderaus_oder_links | 7 | 18 | ≈ 38.9% | Das Verkehrszeichen führt zu signifikanten Klassifizierungsfehlern. Auffällig ist hierbei die Fehlinterpretation des blauen, runden Gebotsschildes, welches erstaunlicherweise primär mit gänzlich anders gestalteten Zeichen wie dem Absoluten Halteverbot, der Einbahnstraße oder dem Verbot der Einfahrt verwechselt wird. |
| Vorgeschreibene_Farhtrichtung_geraderaus_oder_rechts | 0 | 13 | ≈ 0.0% | Obwohl dieses Verkehrszeichen dem vorherigen in seiner Gestaltung ähnelt, wird es nicht verwechselt, sondern überhaupt nicht erkannt. Dies deutet auf grundlegende Erkennungsprobleme hin, möglicherweise bedingt durch eine unzureichende Repräsentation im Trainingsdatensatz oder feine visuelle Unterschiede. |
| Vorgeschreibene_Farhtrichtung_links | 4 | 6 | ≈ 66.7% | Obwohl dieses Schild laut der Auswertung sehr gut erkannt wurde, ist das Ergebnis mit Vorsicht zu betrachten. Es könnte sich dabei um ein verzerrtes Bild der tatsächlichen Modellleistung handeln. Möglicherweise stammen viele der erkannten Bilder vom exakt gleichen Schild,mit identischem Winkel, gleicher Beleuchtung und ähnlichem Hintergrund. In diesem Fall hätte das Modell nicht wirklich generalisiert, sondern lediglich ein konkretes Muster auswendig gelernt. Das gute Abschneiden in der Confusion Matrix wäre dann eher ein Hinweis auf Overfitting als auf tatsächliches Verständnis der Schildklasse. |
| Vorgeschreibene_Farhtrichtung_rechts | 0 | 13 | ≈ 0.0% | Diese Klasse wird nicht erkannt und häufig mit dem Absoluten Halteverbot verwechselt, was auf fehlerhafte Klassengrenzen im Modell hindeutet. |
| Vorgeschreibene_Vorbeifahrt_recht_vorbei | 9 | 21 | ≈ 43.9% | Die Ergebnisse sind zwar noch verbesserungswürdig, aber besser als zunächst erwartet. Besonders bemerkenswert ist dies, da die Bounding-Boxen beim Labeln sehr klein gesetzt wurden. Dadurch wurde das Schild nur in geringer Auflösung erfasst, was die Erkennung durch die KI eigentlich hätte erschweren müssen. |
| Zulaessige_Hoechstgeschwindigkeit20 | 0 | 16 | ≈ 0.0% | Dieses Schild wird nicht erkannt und teilweise mit dem Absoluten Halteverbot verwechselt, was eine Überarbeitung der Klassentrennung nahelegt. |
| Zulaessige_Hoechstgeschwindigkeit30 | 3 | 11 | ≈ 27.3% | Die Erkennung ist schwach, mit häufigen Fehlklassifikationen als Absolutes Halteverbot oder Verbot der Einfahrt. |
Auswertung der Excel Werte
In dem Durchlauf wurden noch keine Werte in Excel gespeichert.
Beispiel Bilder
Stärken und Schwächen der Künstlichen Intelligenz
Es ist positiv hervorzuheben, dass grundsätzlich eine Erkennung der Verkehrszeichen erfolgt, insbesondere bei den Schildern der Klasse „Absolutes Halteverbot“. Dennoch überwiegen die negativen Aspekte, da in der Validierung fünf Schilder vollständig nicht erkannt wurden. Ein weiterer kritischer Punkt, der bislang nicht ausreichend thematisiert wurde, ist die hohe Anzahl der tatsächlichen Klassen, die keinem erkannten Objekt zugeordnet werden konnten („unmatched“). Dies bedeutet, dass viele Objekte fälschlicherweise als Verkehrszeichen erkannt werden, obwohl an den entsprechenden Positionen keine Schilder vorhanden sind – beispielsweise Fahrzeuge, Wolken oder Straßenlampen.
Dieses Phänomen ist besonders ausgeprägt bei der Klasse „Verbot der Einfahrt“, bei der die Anzahl der Fehldetektionen einen Wert von 350 erreicht. Positiv ist jedoch, dass die Verwechslungen zwischen den Klassen relativ gering ausfallen. Abgesehen von der Ausnahme bei „Vorgeschriebene Fahrtrichtung rechts“ liegen keine Fälle vor, in denen ein Schild komplett als eine andere Klasse klassifiziert wurde.
Wir vermuten, dass für einige Verkehrsschilder nicht genügend Bildmaterial zur Verfügung steht. Zudem wurden manche Aufnahmen wahrscheinlich nur aus einer begrenzten Perspektive, mit einheitlicher Belichtung und Distanz aufgenommen, was die Erkennungsgenauigkeit negativ beeinflussen kann.
Anpassungen nach dem Durchlauf
Nach unserem Gedächtnisprotokoll umfassten die letzten Anpassungen folgende Punkte:
1. Farbkodierung der Labels
Die annotatedLabels waren zuvor alle gelb, was in der visuellen Auswertung der Bilder zu Verwirrung führte. Daher wurden die Schilder nun mit verschiedenen Farben gemappt, um die Differenzierung im Bildmaterial zu verbessern.
2. Erhöhung der Epochenanzahl (von 20 auf 100–200)
Die Anzahl der Trainings-Epochen wurde deutlich erhöht, da sich zeigte, dass 20 Epochen für eine ausreichende Konvergenz des Netzwerks nicht ausreichten. Durch die Erhöhung auf 100–200 Epochen kann das Modell tiefere Merkmale besser lernen und die Generalisierung auf neue Daten verbessern.
3. Anpassung des LearnRateDropPeriod (von 5 auf 20)
Die Lernrate wurde vorher zu schnell reduziert, was das Training verfrüht ausgebremst hat. Mit einem höheren LearnRateDropPeriod von 20 kann das Netzwerk länger mit einer höheren Lernrate lernen und somit komplexere Zusammenhänge effektiver erfassen.
4. GPU-Kompatibilität aktiviert
Durch die Zeile parallel.gpu.enableCUDAForwardCompatibility(true) wird sichergestellt, dass das Training auch bei neueren CUDA-Versionen auf der GPU läuft, insbesondere wenn ExecutionEnvironment = "auto" gesetzt ist. Auf den neuen Rechnern ist eine NVIDIA RTX 5070 verbaut, wodurch GPU-Training erheblich beschleunigt werden kann.
5. Verbose-Einstellungen optimiert
Die Optionen Verbose = true und VerboseFrequency = 15 wurden gesetzt, um eine kontrollierte Ausgabe der Trainingsfortschritte alle 15 Iterationen zu ermöglichen. Dies sorgt für bessere Nachverfolgbarkeit während des Trainings und verhindert eine Überflutung der Konsole.
6. Treshold erhöht von 0.2 auf 0.8
Der folgende Codeabschnitt [bboxes, scores, labels] = detect(detector, img, 'Threshold', 0.2); führt aufgrund des niedrigen Schwellenwerts zu einer sehr hohen Sensitivität bei der Objekterkennung. Dies bedeutet, dass das Modell viele potenzielle Objekte erkennt, was zwar die Wahrscheinlichkeit erhöht, echte Objekte zu finden, jedoch gleichzeitig auch die Anzahl der Fehlalarme (False Positives) signifikant steigen lässt.
Ergebnisse mit tiny-yolov4, 100 Epochen und 3.264 gelabelten Bildern
Beim ersten Trainingsdurchlauf wurde der vorgefertigte Tiny-YOLOv4-Detektor verwendet, wobei ca. 3.264 manuell gelabelte Bilder zur Verfügung standen. Als Trainingsdauer wurden 100 Epochen gewählt.
Zusammenfassung der Trainingsoptionen für diesen Lauf:
% Ausschnitt aus Schritt 9
detector = yolov4ObjectDetector("tiny-yolov4", classNames, anchorBoxes, InputSize=inputSize);
% Ausschnitt aus Schritt 10
options = trainingOptions("sgdm", ...
InitialLearnRate = 0.0001, ...
MaxEpochs = 100, ...
MiniBatchSize = 4, ...
Shuffle = "every-epoch", ...
ValidationData = validierungData, ...
ValidationFrequency = 15, ...
Verbose = true, ...
VerboseFrequency = 15, ...
LearnRateSchedule = "piecewise", ...
LearnRateDropFactor = 0.1, ...
LearnRateDropPeriod = 20, ...
Plots = "training-progress", ...
ExecutionEnvironment = "auto");

| Auswertung der ConfusionMatrix | |||
|---|---|---|---|
| Tatsächliche Klassen | Treffer | Gesamtanzahl | Trefferquote |
| Absoultes_Halteverbot | 17 | 188 | ≈ 9.0% |
| Andreskreuz | 3 | 103 | ≈ 2.9% |
| Bahnuebergang | 4 | 30 | ≈ 13.3% |
| Einbahnstrasse | 5 | 127 | ≈ 3.9% |
| Eingeschraenktes_Halteverbot | 1 | 76 | ≈ 1.3% |
| Verbot_der_Einfahrt | 13 | 147 | ≈ 8.8% |
| Verbot_fuer_Fahrzeuge_aller_Art | 0 | 14 | ≈ 0.0% |
| Vorfahrt_gewaehren | 6 | 100 | ≈ 6.0% |
| Vorfahrtstrasse | 2 | 74 | ≈ 2.7% |
| Vorgeschreibene_Fahrtrichtung_geraderaus_oder_links | 0 | 22 | ≈ 0.0% |
| Vorgeschreibene_Fahrtrichtung_geraderaus_oder_rechts | 0 | 30 | ≈ 0.0% |
| Vorgeschreibene_Fahrtrichtung_links | 0 | 8 | ≈ 0.0% |
| Vorgeschreibene_Fahrtrichtung_rechts | 0 | 17 | ≈ 0.0% |
| Vorgeschreibene_Vorbeifahrt_recht_vorbei | 0 | 31 | ≈ 0.0% |
| Zulaessige_Hoechstgeschwindigkeit20 | 0 | 20 | ≈ 0.0% |
| Zulaessige_Hoechstgeschwindigkeit30 | 9 | 87 | ≈ 10.3% |
Auswertung der ConfusionMatrix
Wie man erkennt, schneidet die aktuelle KI im Vergleich zur vorherigen Version schlechter ab. Andererseits zeigt sich, dass sie sich bis auf eine Ausnahme nicht mehr zwischen mehreren Objekten verwechselt. Allerdings bedeutet das nicht unbedingt, dass die KI insgesamt besser arbeitet. Vielmehr erkennt sie in vielen Fällen gar nichts mehr. Auch die Anzahl der fälschlich erkannten Objekte, sogenannte „unmatched“, wie etwa Autos oder Straßenlaternen, hat sich verringert. Beide Effekte lassen sich auf denselben Grund zurückführen: Der Threshold-Wert wurde etwas zu hoch angesetzt. Dadurch erhalten wir zwar weniger Fehl-Erkennungen, aber auch insgesamt weniger Treffer, was die Gesamtergebnisse verschlechtert. Man könnte den Threshold zwar bei 0,8 belassen, bräuchte dafür jedoch deutlich mehr Trainingsdaten beziehungsweise Bilder, um zuverlässige Ergebnisse zu erzielen. Anhand der Testdaten, unten sind zwei Bilder eingeblendet, die von der KI mit einem Threshold von 0,2 erzeugt wurden, erkennt man, dass sich die aktuelle Version gegenüber dem Vorgänger nicht wirklich verbessert hat aber auch gleichzeit sich verschelchtert hat.
Auswertung der Excel Werte
| NumObjects | 1074 |
| mAP0.75 | 0,0118869892055791 |
NumObject gibt die Anzahl der markierten Schilder im Validationsdatensatz an. Es waren etwa 980 Bilder in der Validierung, daher ist der Wert sinnvoll. Damit ein Objekt als erkannt gilt, muss sich die vorhergesagte Box zu mindestens 75 % mit der Ground-Truth-Box überlappen. Nur etwa 1,2 % der Objekte wurden gut und genau erkannt. Das bedeutet, dass die Erkennungsleistung insgesamt nicht gut ist.
| Name | Average Precision |
|---|---|
| Absolutes_Halteverbot | 0,014132115 |
| Anderaskreuz | 0,002748217 |
| Bahnuebergang | 0,066825397 |
| Einbahnstrasse | 0,012181556 |
| Eingeschraenktes_Halteverbot | 0,002631579 |
| Verbot_der_Einfahrt | 0,026156597 |
| Verbot_fuer_Fahrzeuge_aller_Art | 0 |
| Vorfahrt_gewaehren | 0,03434596 |
| Vorfahrtstrasse | 0,005705706 |
| Vorgeschriebene_Fahrtrichtung_geradeaus_oder_links | 0 |
| Vorgeschriebene_Fahrtrichtung_geradeaus_oder_rechts | 0 |
| Vorgeschriebene_Fahrtrichtung_links | 0 |
| Vorgeschriebene_Fahrtrichtung_rechts | 0 |
| Vorgeschriebene_Vorbeifahrt_rechts_vorbei | 0 |
| Zulaessige_Hoechstgeschwindigkeit_20 | 0 |
| Zulaessige_Hoechstgeschwindigkeit_30 | 0,025464701 |
Wie in der Tabelle ‚Auswertung der Confusion Matrix‘ zu sehen ist, spiegelt sich die Trefferquote in der Average Precision wieder (vgl. Verbot_fuer_Fahrzeuge_aller_Art).
Beispiel Bilder ([boxLabels, scores, labels] = detect(detector, testImage, 'Threshold', 0.2);)
Stärken und Schwächen der Künstlichen Intelligenz
Die objektive Evaluation des betrachteten Systems gestaltet sich insgesamt als anspruchsvoll. Positiv hervorzuheben ist, dass die KI Verkehrsschilder, sofern sie erkannt wurden, nahezu durchgehend korrekt klassifizieren konnte. Gleichzeitig konnte eine signifikante Reduktion fehlerhafter Objekterkennungen festgestellt werden, insbesondere bei Straßenlaternen sowie bei zufällig markierten Fahrzeugen.
Die Implementierung visueller Hervorhebungen durch Farbmarkierungen in Kombination mit der Angabe der Erkennungswahrscheinlichkeit erwies sich als besonders nützlich. Diese Mechanismen ermöglichten eine transparente Nachvollziehbarkeit der Entscheidungsprozesse der KI und lieferten wertvolle Einblicke in die Bedingungen, unter denen die Erkennungsleistung des Systems eingeschränkt war.
Anpassungen nach dem Durchlauf
1. Treshold verringert von 0.8 auf 0.4 setzen
Der folgende Codeabschnitt [bboxes, scores, labels] = detect(detector, img, 'Threshold', 0.8); führt aufgrund des hohen Schwellenwerts zum Gegenereigniss. Deswegen wurden kaum Schilder in der Validierung erkannt.
2. Erhöhung der Epochenanzahl (von 100 auf 300)
Die Anzahl der Trainings-Epochen wurde deutlich erhöht, da sich zeigte, dass 100 Epochen für eine ausreichende Konvergenz des Netzwerks nicht ausreichten. Durch die Erhöhung auf 100–200 Epochen kann das Modell tiefere Merkmale besser lernen und die Generalisierung auf neue Daten verbessern.
3. Anpassung des LearnRateDropPeriod (von 20 auf 40)
Die Lernrate wurde vorher zu schnell reduziert, was das Training verfrüht ausgebremst hat. Mit einem höheren LearnRateDropPeriod von 40 kann das Netzwerk länger mit einer höheren Lernrate lernen und somit komplexere Zusammenhänge effektiver erfassen.
4. 1200 neu gelabelte Bilder ergänzt
Das hinzuguegen neu gelabelter Bilder führt zur einer Abwechslungsreichere Vielfalt der Schilder. Die KI ist in der Laage neue Perspektiven, Belichtungen und Größen der Schilder zu differenzieren.
5. Initiale Lernrate wurde von 0.0001 auf 0.0005 erhöht
Grund dafür ist, dass das Modell nicht in einem lokalen Minimum verharren soll, sondern durch die erhöhte Lernrate die Fähigkeit erhält, solche suboptimalen Täler zu verlassen und so bessere, tiefere Lösungen zu finden.
Ergebnisse mit tiny-yolov4, 200 Epochen und 3.264 gelabelten Bildern

| Auswertung der ConfusionMatrix | |||
|---|---|---|---|
| Tatsächliche Klassen | Treffer | Gesamtanzahl | Trefferquote |
| Absoultes_Halteverbot | 25 | 188 | ≈ 13.3% |
| Andreskreuz | 4 | 103 | ≈ 3.9% |
| Bahnuebergang | 1 | 30 | ≈ 3.3% |
| Einbahnstrasse | 0 | 127 | ≈ 0.0% |
| Eingeschraenktes_Halteverbot | 1 | 76 | ≈ 1.3% |
| Verbot_der_Einfahrt | 4 | 147 | ≈ 2.7% |
| Verbot_fuer_Fahrzeuge_aller_Art | 0 | 14 | ≈ 0.0% |
| Vorfahrt_gewaehren | 9 | 100 | ≈ 9.0% |
| Vorfahrtstrasse | 1 | 74 | ≈ 1.4% |
| Vorgeschreibene_Fahrtrichtung_geraderaus_oder_links | 0 | 22 | ≈ 0.0% |
| Vorgeschreibene_Fahrtrichtung_geraderaus_oder_rechts | 0 | 30 | ≈ 0.0% |
| Vorgeschreibene_Fahrtrichtung_links | 0 | 8 | ≈ 0.0% |
| Vorgeschreibene_Fahrtrichtung_rechts | 0 | 17 | ≈ 0.0% |
| Vorgeschreibene_Vorbeifahrt_recht_vorbei | 0 | 31 | ≈ 0.0% |
| Zulaessige_Hoechstgeschwindigkeit20 | 0 | 20 | ≈ 0.0% |
| Zulaessige_Hoechstgeschwindigkeit30 | 11 | 87 | ≈ 12.6% |
Auswertung der ConfusionMatrix
Wie man erkennt, schneidet die aktuelle KI im Vergleich zur vorherigen Version schlechter ab. Andererseits zeigt sich, dass sie sich – bis auf eine Ausnahme – nicht mehr zwischen mehreren Objekten verwechselt. Das bedeutet jedoch nicht unbedingt, dass die KI alles richtig macht – vielmehr erkennt sie in vielen Fällen gar nichts mehr. Auch die Anzahl der fälschlich erkannten Objekte („unmatched“), wie etwa Autos oder Straßenlaternen, hat sich verringert. Das liegt unter anderem daran, dass der Threshold-Wert etwas zu hoch angesetzt wurde. Dadurch erhalten wir nur noch wenige Erkennungen, was die Gesamtergebnisse verschlechtert. Man könnte den Threshold zwar bei 0.8 belassen, bräuchte dafür jedoch deutlich mehr Trainingsdaten bzw. Bilder, um zuverlässige Ergebnisse zu erzielen.
Auswertung der Excel Werte
| NumObjects | 1074 |
| mAP0.75 | 0,0125316070084919 |
Es waren etwa 980 Bilder in der Validierung, daher ist der Wert sinnvoll. Damit ein Objekt als erkannt gilt, muss sich die vorhergesagte Box zu mindestens 75 % mit der Ground-Truth-Box überlappen. Nur etwa 1,3 % der Objekte wurden gut und genau erkannt. Das bedeutet, dass die Erkennungsleistung insgesamt nicht gut ist.
| Name | Average Precision |
|---|---|
| Absolutes_Halteverbot | 0,072436389 |
| Anderaskreuz | 0,00403171 |
| Bahnuebergang | 0,011111111 |
| Einbahnstrasse | 0,0 |
| Eingeschraenktes_Halteverbot | 0,013157895 |
| Verbot_der_Einfahrt | 0,002513104 |
| Verbot_fuer_Fahrzeuge_aller_Art | 0 |
| Vorfahrt_gewaehren | 0,058876571 |
| Vorfahrtstrasse | 0,001501502 |
| Vorgeschriebene_Fahrtrichtung_geradeaus_oder_links | 0 |
| Vorgeschriebene_Fahrtrichtung_geradeaus_oder_rechts | 0 |
| Vorgeschriebene_Fahrtrichtung_links | 0 |
| Vorgeschriebene_Fahrtrichtung_rechts | 0 |
| Vorgeschriebene_Vorbeifahrt_rechts_vorbei | 0 |
| Zulaessige_Hoechstgeschwindigkeit_20 | 0 |
| Zulaessige_Hoechstgeschwindigkeit_30 | 0,03687743 |
Wie in der Tabelle ‚Auswertung der Confusion Matrix‘ zu sehen ist, spiegelt sich die Trefferquote in der Average Precision wieder (vgl. Verbot_fuer_Fahrzeuge_aller_Art).
Beispiel Bilder ([boxLabels, scores, labels] = detect(detector, testImage, 'Threshold', 0.2);)
Stärken und Schwächen der Künstlichen Intelligenz
vlg. Stärken und Schwächen mit tiny-yolov4, 100 Epochen und 3.264 gelabelten Bildern
Die objektive Evaluation des betrachteten Systems gestaltet sich insgesamt als anspruchsvoll. Positiv hervorzuheben ist, dass die KI Verkehrsschilder, sofern sie erkannt wurden, nahezu durchgehend korrekt klassifizieren konnte. Gleichzeitig konnte eine signifikante Reduktion fehlerhafter Objekterkennungen festgestellt werden, insbesondere bei Straßenlaternen sowie bei zufällig markierten Fahrzeugen.
Die Implementierung visueller Hervorhebungen durch Farbmarkierungen in Kombination mit der Angabe der Erkennungswahrscheinlichkeit erwies sich als besonders nützlich. Diese Mechanismen ermöglichten eine transparente Nachvollziehbarkeit der Entscheidungsprozesse der KI und lieferten wertvolle Einblicke in die Bedingungen, unter denen die Erkennungsleistung des Systems eingeschränkt war.
Anpassungen nach dem Durchlauf
vlg. Anpassungen von tiny-yolov4, 100 Epochen und 3.264 gelabelten Bildern
1. Treshold verringert von 0.8 auf 0.4 setzen
Der folgende Codeabschnitt [bboxes, scores, labels] = detect(detector, img, 'Threshold', 0.8); führt aufgrund des hohen Schwellenwerts zum Gegenereigniss. Deswegen wurden kaum Schilder in der Validierung erkannt.
2. Erhöhung der Epochenanzahl (von 100 auf 300)
Die Anzahl der Trainings-Epochen wurde deutlich erhöht, da sich zeigte, dass 100 Epochen für eine ausreichende Konvergenz des Netzwerks nicht ausreichten. Durch die Erhöhung auf 100–200 Epochen kann das Modell tiefere Merkmale besser lernen und die Generalisierung auf neue Daten verbessern.
3. Anpassung des LearnRateDropPeriod (von 20 auf 40)
Die Lernrate wurde vorher zu schnell reduziert, was das Training verfrüht ausgebremst hat. Mit einem höheren LearnRateDropPeriod von 40 kann das Netzwerk länger mit einer höheren Lernrate lernen und somit komplexere Zusammenhänge effektiver erfassen.
4. 1200 neu gelabelte Bilder ergänzt
Das hinzuguegen neu gelabelter Bilder führt zur einer Abwechslungsreichere Vielfalt der Schilder. Die KI ist in der Laage neue Perspektiven, Belichtungen und Größen der Schilder zu differenzieren.
5. Initiale Lernrate wurde von 0.0001 auf 0.0005 erhöht
Grund dafür ist, dass das Modell nicht in einem lokalen Minimum verharren soll, sondern durch die erhöhte Lernrate die Fähigkeit erhält, solche suboptimalen Täler zu verlassen und so bessere, tiefere Lösungen zu finden.
Ergebnisse des ersten Durchlaufs mit tiny-yolov4, 300 Epochen und 4388 gelabelten Bildern
Beim dritten Trainingsdurchlauf wurde der vorgefertigte Tiny-YOLOv4-Detektor verwendet, wobei ca. 4.388 manuell gelabelte Bilder zur Verfügung standen. Als Trainingsdauer wurden 300 Epochen gewählt.
Zusammenfassung der Trainingsoptionen für diesen Lauf:
% Ausschnitt aus Schritt 9
detector = yolov4ObjectDetector("tiny-yolov4", classNames, anchorBoxes, InputSize=inputSize);
% Ausschnitt aus Schritt 10
options = trainingOptions("sgdm", ...
InitialLearnRate = 0.0005, ...
MaxEpochs = 300, ...
MiniBatchSize = 8, ...
Shuffle = "every-epoch", ...
ValidationData = validierungData, ...
ValidationFrequency = 15, ...
Verbose = true, ...
VerboseFrequency = 15, ...
LearnRateSchedule = "piecewise", ...
LearnRateDropFactor = 0.1, ...
LearnRateDropPeriod = 40, ...
Plots = "training-progress", ...
ExecutionEnvironment = "auto");

| Auswertung der ConfusionMatrix | |||
|---|---|---|---|
| Tatsächliche Klassen | Treffer | Gesamtanzahl | Trefferquote |
| Absoultes_Halteverbot | NaN | NaN | ≈ NaN% |
| Andreskreuz | NaN | NaN | ≈ NaN% |
| Bahnuebergang | NaN | NaN | ≈ NaN% |
| Einbahnstrasse | NaN | NaN | ≈ NaN% |
| Eingeschraenktes_Halteverbot | NaN | NaN | ≈ NaN% |
| Verbot_der_Einfahrt | NaN | NaN | ≈ NaN% |
| Verbot_fuer_Fahrzeuge_aller_Art | NaN | NaN | ≈ NaN% |
| Vorfahrt_gewaehren | NaN | NaN | ≈ NaN% |
| Vorfahrtstrasse | NaN | NaN | ≈ NaN% |
| Vorgeschreibene_Fahrtrichtung_geraderaus_oder_links | NaN | NaN | ≈ NaN% |
| Vorgeschreibene_Fahrtrichtung_geraderaus_oder_rechts | NaN | NaN | ≈ NaN% |
| Vorgeschreibene_Fahrtrichtung_links | NaN | NaN | ≈ NaN% |
| Vorgeschreibene_Fahrtrichtung_rechts | NaN | NaN | ≈ NaN% |
| Vorgeschreibene_Vorbeifahrt_recht_vorbei | NaN | NaN | ≈ NaN% |
| Zulaessige_Hoechstgeschwindigkeit20 | NaN | NaN | ≈ NaN% |
| Zulaessige_Hoechstgeschwindigkeit30 | NaN | NaN | ≈ NaN% |
Auswertung der ConfusionMatrix
"Wie man erkennt, erkennt man nichts." - Fabian Babik 27.10.2025.
"Hast du gut Zusammengefasst!" - Adrian Klinspon 28.10.2025.
Der genaue Grund für das beobachtete Fehlverhalten ist derzeit noch unklar. Aktuell gibt es keine eindeutigen Hinweise, jedoch liegt die erste Vermutung darin, dass das Problem durch Rauschen im Trainingsprozess verursacht wird. Genauer gesagt durch Data Noise und Gradient Noise.
Data Noise (Datenrauschen):
Darunter versteht man zufällige Störungen in den Trainingsdaten, beispielsweise durch variierende Lichtverhältnisse, Bildunschärfe oder andere visuelle Einflüsse. Solche Variationen verändern die Eingabeverteilung und führen dazu, dass das Modell inkonsistente Gradienten berechnet. Auch wenn unser Datensatz manuell gelabelt wurde und wir fehlerhafte Labels weitgehend ausschließen können, besteht mit sehr geringer Wahrscheinlichkeit dennoch die Möglichkeit einzelner Ungenauigkeiten.
Gradient Noise (Gradientenrauschen):
Dieses Rauschen entsteht durch die Verwendung kleiner Mini-Batches während des Trainings. Bei einer Batch Size von nur 8 Bildern wird der Gradientenvektor auf Basis einer sehr kleinen Stichprobe geschätzt. Dadurch kann der berechnete Gradient deutlich vom tatsächlichen (globalen) Gradienten abweichen. In Kombination mit einer zu hohen Lernrate führt das dazu, dass die Gewichte große Sprünge in eine zufällige, möglicherweise falsche, Richtung machen.
Das Modell läuft somit Gefahr, vom optimalen Pfad abzuweichen.
Zusammenfassend lässt sich sagen, dass die Kombination aus hohem Rauschanteil durch kleine Batchgrößen und verstärkender Wirkung einer zu großen Lernrate wahrscheinlich die Hauptursache für das unerwartete Verhalten ist. Eine Anpassung dieser Parameter könnte daher helfen, den Trainingsprozess zu stabilisieren und konsistentere Ergebnisse zu erzielen.
Auswertung der Excel Werte
| NumObjects | 1468 |
| mAP0.75 | 0,0 |
NumObject gibt die Anzahl der markierten Schilder im Validationsdatensatz an. Es waren etwa 1097 Bilder in der Validierung, daher ist der Wert sinnvoll. Damit ein Objekt als erkannt gilt, muss sich die vorhergesagte Box zu mindestens 75 % mit der Ground-Truth-Box überlappen. Nur etwa 0,0 % der Objekte wurden gut und genau erkannt. Das bedeutet, dass die Erkennungsleistung insgesamt nicht gut ist.
| Name | Average Precision |
|---|---|
| Absolutes_Halteverbot | 0,0 |
| Anderaskreuz | 0,0 |
| Bahnuebergang | 0,0 |
| Einbahnstrasse | 0,0 |
| Eingeschraenktes_Halteverbot | 0,0 |
| Verbot_der_Einfahrt | 0,0 |
| Verbot_fuer_Fahrzeuge_aller_Art | 0,0 |
| Vorfahrt_gewaehren | 0,0 |
| Vorfahrtstrasse | 0,0 |
| Vorgeschriebene_Fahrtrichtung_geradeaus_oder_links | 0,0 |
| Vorgeschriebene_Fahrtrichtung_geradeaus_oder_rechts | 0,0 |
| Vorgeschriebene_Fahrtrichtung_links | 0,0 |
| Vorgeschriebene_Fahrtrichtung_rechts | 0,0 |
| Vorgeschriebene_Vorbeifahrt_rechts_vorbei | 0,0 |
| Zulaessige_Hoechstgeschwindigkeit_20 | 0,0 |
| Zulaessige_Hoechstgeschwindigkeit_30 | 0,0 |
Wie in der Tabelle ‚Auswertung der Confusion Matrix‘ zu sehen ist, spiegelt sich die Trefferquote in der Average Precision wieder (vgl. Verbot_fuer_Fahrzeuge_aller_Art).
Beispiel Bilder ([boxLabels, scores, labels] = detect(detector, testImage, 'Threshold', 0.2);)
Stärken und Schwächen der Künstlichen Intelligenz
Wir können die KI nicht bewerten.
Anpassungen nach dem Durchlauf
Wird im Laufe des Projekts noch hinzugefügt.
Ergebnisse des ersten Durchlaufs mit tiny-yolov4-coco, 300 Epochen und 4388 gelabelten Bildern
Beim dritten Trainingsdurchlauf wurde der vorgefertigte Tiny-YOLOv4-Detektor verwendet, wobei ca. 4.388 manuell gelabelte Bilder zur Verfügung standen. Als Trainingsdauer wurden 300 Epochen gewählt.
Zusammenfassung der Trainingsoptionen für diesen Lauf:
% Ausschnitt aus Schritt 9
detector = yolov4ObjectDetector("tiny-yolov4-coco", classNames, anchorBoxes, InputSize=inputSize);
% Ausschnitt aus Schritt 10
options = trainingOptions("sgdm", ...
InitialLearnRate = 0.0005, ...
MaxEpochs = 300, ...
MiniBatchSize = 8, ...
Shuffle = "every-epoch", ...
ValidationData = validierungData, ...
ValidationFrequency = 15, ...
Verbose = true, ...
VerboseFrequency = 15, ...
LearnRateSchedule = "piecewise", ...
LearnRateDropFactor = 0.1, ...
LearnRateDropPeriod = 40, ...
Plots = "training-progress", ...
ExecutionEnvironment = "auto");

| Auswertung der ConfusionMatrix | |||
|---|---|---|---|
| Tatsächliche Klassen | Treffer | Gesamtanzahl | Trefferquote |
| Absoultes_Halteverbot | NaN | NaN | ≈ NaN% |
| Andreskreuz | NaN | NaN | ≈ NaN% |
| Bahnuebergang | NaN | NaN | ≈ NaN% |
| Einbahnstrasse | NaN | NaN | ≈ NaN% |
| Eingeschraenktes_Halteverbot | NaN | NaN | ≈ NaN% |
| Verbot_der_Einfahrt | NaN | NaN | ≈ NaN% |
| Verbot_fuer_Fahrzeuge_aller_Art | NaN | NaN | ≈ NaN% |
| Vorfahrt_gewaehren | NaN | NaN | ≈ NaN% |
| Vorfahrtstrasse | NaN | NaN | ≈ NaN% |
| Vorgeschreibene_Fahrtrichtung_geraderaus_oder_links | NaN | NaN | ≈ NaN% |
| Vorgeschreibene_Fahrtrichtung_geraderaus_oder_rechts | NaN | NaN | ≈ NaN% |
| Vorgeschreibene_Fahrtrichtung_links | NaN | NaN | ≈ NaN% |
| Vorgeschreibene_Fahrtrichtung_rechts | NaN | NaN | ≈ NaN% |
| Vorgeschreibene_Vorbeifahrt_recht_vorbei | NaN | NaN | ≈ NaN% |
| Zulaessige_Hoechstgeschwindigkeit20 | NaN | NaN | ≈ NaN% |
| Zulaessige_Hoechstgeschwindigkeit30 | NaN | NaN | ≈ NaN% |
Auswertung der ConfusionMatrix
"Wie man erkennt, erkennt man nichts" - Fabian Babik 27.10.2025.
"Hast du gut Zusammengefasst" - Adrian Klinspon 28.10.2025.
Der genaue Grund für das beobachtete Fehlverhalten ist derzeit noch unklar. Aktuell gibt es keine eindeutigen Hinweise, jedoch liegt die erste Vermutung darin, dass das Problem durch Rauschen im Trainingsprozess verursacht wird. Genauer gesagt durch Data Noise und Gradient Noise.
Data Noise (Datenrauschen):
Darunter versteht man zufällige Störungen in den Trainingsdaten, beispielsweise durch variierende Lichtverhältnisse, Bildunschärfe oder andere visuelle Einflüsse. Solche Variationen verändern die Eingabeverteilung und führen dazu, dass das Modell inkonsistente Gradienten berechnet. Auch wenn unser Datensatz manuell gelabelt wurde und wir fehlerhafte Labels weitgehend ausschließen können, besteht mit sehr geringer Wahrscheinlichkeit dennoch die Möglichkeit einzelner Ungenauigkeiten.
Gradient Noise (Gradientenrauschen):
Dieses Rauschen entsteht durch die Verwendung kleiner Mini-Batches während des Trainings. Bei einer Batch Size von nur 8 Bildern wird der Gradientenvektor auf Basis einer sehr kleinen Stichprobe geschätzt. Dadurch kann der berechnete Gradient deutlich vom tatsächlichen (globalen) Gradienten abweichen. In Kombination mit einer zu hohen Lernrate führt das dazu, dass die Gewichte große Sprünge in eine zufällige, möglicherweise falsche, Richtung machen.
Das Modell läuft somit Gefahr, vom optimalen Pfad abzuweichen.
Zusammenfassend lässt sich sagen, dass die Kombination aus hohem Rauschanteil durch kleine Batchgrößen und verstärkender Wirkung einer zu großen Lernrate wahrscheinlich die Hauptursache für das unerwartete Verhalten ist. Eine Anpassung dieser Parameter könnte daher helfen, den Trainingsprozess zu stabilisieren und konsistentere Ergebnisse zu erzielen.
Auswertung der Excel Werte
| NumObjects | 1468 |
| mAP0.75 | 0,0 |
NumObject gibt die Anzahl der markierten Schilder im Validationsdatensatz an. Es waren etwa 1097 Bilder in der Validierung, daher ist der Wert sinnvoll. Damit ein Objekt als erkannt gilt, muss sich die vorhergesagte Box zu mindestens 75 % mit der Ground-Truth-Box überlappen. Nur etwa 0,0 % der Objekte wurden gut und genau erkannt. Das bedeutet, dass die Erkennungsleistung insgesamt nicht gut ist.
| Name | Average Precision |
|---|---|
| Absolutes_Halteverbot | 0,0 |
| Anderaskreuz | 0,0 |
| Bahnuebergang | 0,0 |
| Einbahnstrasse | 0,0 |
| Eingeschraenktes_Halteverbot | 0,0 |
| Verbot_der_Einfahrt | 0,0 |
| Verbot_fuer_Fahrzeuge_aller_Art | 0,0 |
| Vorfahrt_gewaehren | 0,0 |
| Vorfahrtstrasse | 0,0 |
| Vorgeschriebene_Fahrtrichtung_geradeaus_oder_links | 0,0 |
| Vorgeschriebene_Fahrtrichtung_geradeaus_oder_rechts | 0,0 |
| Vorgeschriebene_Fahrtrichtung_links | 0,0 |
| Vorgeschriebene_Fahrtrichtung_rechts | 0,0 |
| Vorgeschriebene_Vorbeifahrt_rechts_vorbei | 0,0 |
| Zulaessige_Hoechstgeschwindigkeit_20 | 0,0 |
| Zulaessige_Hoechstgeschwindigkeit_30 | 0,0 |
Wie in der Tabelle ‚Auswertung der Confusion Matrix‘ zu sehen ist, spiegelt sich die Trefferquote in der Average Precision wieder (vgl. Verbot_fuer_Fahrzeuge_aller_Art).
Beispiel Bilder ([boxLabels, scores, labels] = detect(detector, testImage, 'Threshold', 0.2);)
Stärken und Schwächen der Künstlichen Intelligenz
Wir können die KI nicht bewerten.
Anpassungen nach dem Durchlauf
Wird im Laufe des Projekts noch hinzugefügt.
Ergebnisse des ersten Durchlaufs mit csp-draknet53, 300 Epochen und 4388 gelabelten Bildern
Beim dritten Trainingsdurchlauf wurde der vorgefertigte YOLOv4-Detektor verwendet, wobei ca. 4.388 manuell gelabelte Bilder zur Verfügung standen. Als Trainingsdauer wurden 300 Epochen gewählt.
Zusammenfassung der Trainingsoptionen für diesen Lauf:
% Ausschnitt aus Schritt 9
detector = yolov4ObjectDetector("csp-darknet53", classNames, anchorBoxes, InputSize=inputSize);
% Ausschnitt aus Schritt 10
options = trainingOptions("sgdm", ...
InitialLearnRate = 0.0001, ...
MaxEpochs = 300, ...
MiniBatchSize = 8, ...
Shuffle = "every-epoch", ...
ValidationData = validierungData, ...
ValidationFrequency = 15, ...
Verbose = true, ...
VerboseFrequency = 15, ...
LearnRateSchedule = "piecewise", ...
LearnRateDropFactor = 0.1, ...
LearnRateDropPeriod = 40, ...
Plots = "training-progress", ...
ExecutionEnvironment = "auto");

| Auswertung der ConfusionMatrix | |||
|---|---|---|---|
| Tatsächliche Klassen | Treffer | Gesamtanzahl | Trefferquote |
| Absoultes_Halteverbot | 100 | 194 | ≈ 51,5% |
| Andreskreuz | 32 | 109 | ≈ 29,4% |
| Bahnuebergang | 6 | 32 | ≈ 18,8% |
| Einbahnstrasse | 56 | 156 | ≈ 35,9% |
| Eingeschraenktes_Halteverbot | 19 | 88 | ≈ 21,6% |
| Verbot_der_Einfahrt | 101 | 236 | ≈ 42,8% |
| Verbot_fuer_Fahrzeuge_aller_Art | 13 | 56 | ≈ 23,2% |
| Vorfahrt_gewaehren | 73 | 178 | ≈ 41,0% |
| Vorfahrtstrasse | 51 | 117 | ≈ 43,6% |
| Vorgeschreibene_Fahrtrichtung_geraderaus_oder_links | 0 | 22 | ≈ 0,0% |
| Vorgeschreibene_Fahrtrichtung_geraderaus_oder_rechts | 3 | 30 | ≈ 10,0% |
| Vorgeschreibene_Fahrtrichtung_links | 0 | 8 | ≈ 0,0% |
| Vorgeschreibene_Fahrtrichtung_rechts | 4 | 37 | ≈ 10,8% |
| Vorgeschreibene_Vorbeifahrt_recht_vorbei | 31 | 85 | ≈ 36,5% |
| Zulaessige_Hoechstgeschwindigkeit20 | 0 | 10 | ≈ 0,0% |
| Zulaessige_Hoechstgeschwindigkeit30 | 45 | 104 | ≈ 43,3% |
Auswertung der ConfusionMatrix
Anhand der blauen Diagonale ist erkennbar, dass die KI die Verkehrszeichen grundsätzlich richtig klassifiziert. Dennoch gibt es zwei Hauptprobleme:
- Hohe False Negatives (rechte Spalte): Viele echte Schilder werden übersehen und landen in der Kategorie 'unmatched'. Das liegt oft daran, dass der Confidence Threshold zu streng eingestellt ist oder das Modell sich bei schwierigen Lichtverhältnissen nicht sicher genug war.
- Hohe False Positives (untere Zeile): Das System erkennt Schilder, wo gar keine sind. Dies betrifft vor allem Schilder, die im Training sehr oft vorkamen.
Insgesamt zeigt sich: Je mehr Trainingsdaten für ein Schild vorhanden sind, desto aggressiver (und fehleranfälliger für False Positives) reagiert das Modell. Um die Werte zu verbessern, muss der Schwellenwert angepasst und der Datensatz ausgeglichener gestaltet werden.
Auswertung der Excel Werte
| NumObjects | 1472 |
| mAP0.75 | 0,164756501320843 |
| Name | Average Precision |
|---|---|
| Absolutes_Halteverbot | 0,415271465 |
| Anderaskreuz | 0,149020534 |
| Bahnuebergang | 0,141592262 |
| Einbahnstrasse | 0,174075508 |
| Eingeschraenktes_Halteverbot | 0,163610508 |
| Verbot_der_Einfahrt | 0,244552795 |
| Verbot_fuer_Fahrzeuge_aller_Art | 0,188653795 |
| Vorfahrt_gewaehren | 0,244627522 |
| Vorfahrtstrasse | 0,286767188 |
| Vorgeschriebene_Fahrtrichtung_geradeaus_oder_links | 0,0 |
| Vorgeschriebene_Fahrtrichtung_geradeaus_oder_rechts | 0,091666667 |
| Vorgeschriebene_Fahrtrichtung_links | 0,0 |
| Vorgeschriebene_Fahrtrichtung_rechts | 0,034109659 |
| Vorgeschriebene_Vorbeifahrt_rechts_vorbei | 0,206978887 |
| Zulaessige_Hoechstgeschwindigkeit_20 | 0,0 |
| Zulaessige_Hoechstgeschwindigkeit_30 | 0,295177231 |
Wie in der Tabelle ‚Auswertung der Confusion Matrix‘ zu sehen ist, spiegelt sich die Trefferquote in der Average Precision wieder (vgl. Verbot_fuer_Fahrzeuge_aller_Art).
Beispiel Bilder ([boxLabels, scores, labels] = detect(detector, testImage, 'Threshold', 0.2);)
Stärken und Schwächen der Künstlichen Intelligenz
Wir können die KI nicht bewerten.
Anpassungen nach dem Durchlauf
Wird im Laufe des Projekts noch hinzugefügt.









