Ergebnisse, Anpassungen und Erkenntnisse – Verkehrsschildererkennung KI

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Autoren: Fabian Babik, Adrian Klinspon
Art: Projekt im Praxissemester
Dauer: 29.09.2025 bis 01.01.2026
Betreuer: Prof. Dr.-Ing. Schneider


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");
Abb. 1: ConfusionMatrix

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

Abb. 2: Eingeschränktes Halteverbot
Abb. 3: Nicht erfolgreiche Erkennung

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");
Abb. 4: ConfusionMatrix


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);)

Abb. 5: Vorfahrtstrasse mit 79%
Abb. 6: Nicht erfolgreiche Erkennung

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

Abb. 4: ConfusionMatrix
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);)

Abb. 8: Vorfahrtstrasse mit 0%
Abb. 9: Teilweise erfolgreiche Erkennung

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");
Abb. 10: ConfusionMatrix


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);)

Abb. 11: Vorfahrtstrasse ohne Erkennung
Abb. 12: Ohne Erkennung

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");
Abb. 13: ConfusionMatrix



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);)

Abb. 14: Vorfahrtstrasse ohne Erkennung
Abb. 15: Ohne Erkennung

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");
Abb. 16: ConfusionMatrix



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:

  1. 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.
  2. 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

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 16,5 % der Objekte wurden gut und genau erkannt. Das bedeutet, dass die Erkennungsleistung insgesamt nicht gut ist.

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);)

Abb. 14: Vorfahrtstrasse ohne Erkennung
Abb. 15: Ohne Erkennung

Stärken und Schwächen der Künstlichen Intelligenz

Pro: Bisher leistungsstärkste KI-Iteration.

Contra: Unzuverlässige Erkennung von Schildern (hohe Rate an „False Negatives“ und Fehlinterpretationen).

Anpassungen nach dem Durchlauf

Wird im Laufe des Projekts noch hinzugefügt.