Zurück zu den Projekten

KI · Computer Vision · Python

Live-Messererkennung mit selbst trainiertem YOLOv11-Modell

Ein eigenständiger Forschungsprototyp: 4.742 selbst aufgenommene Bilder, eine gemessene Validierungsbasis von mAP@0,5 = 0,844, ein Experiment zur Labelstruktur, das über Zahlen statt Bauchgefühl entschieden wurde, und eine ehrliche Fehleranalyse.

Funktionsfähiger Forschungsprototyp · kein Sicherheitsprodukt

Live-Kamerabild mit einem erkannten Messer und angezeigten 82 Prozent Konfidenz
Aktuelle Demonstration · ein Messer mit 82 % angezeigter Konfidenz erkannt
Datensatz
731 Messerbilder · 4.011 ohne Messer
Modell
YOLOv11-S · 640 × 640 · 150 Epochen
Validierung
mAP@0,5 = 0,844 · mAP@0,5:0,95 = 0,554
Live-Leistung
6–10 FPS auf dem Laptop beobachtet

Ziel und Eigenanteil

Das Projekt untersuchte die frühzeitige visuelle Erkennung von Messern in Live-Kamerabildern. Ich habe es in rund 250 Stunden eigenständig umgesetzt und mit sehr wenig Vorerfahrung in Computer Vision begonnen: Python, Datenlabeling, YOLO-Training und Edge-Deployment habe ich mir im Projektverlauf erarbeitet.

Selbst aufgenommener Datensatz

Alle Bilder wurden eigens für das Projekt aufgenommen, einschließlich Einzelbildern aus eigenen Videos. Der Datensatz enthält 731 Bilder mit Messern und 4.011 Bilder ohne Messer, aufgeteilt in 3.781 Trainings- und 961 Validierungsbilder – mit 327 gelabelten Boxen im Validierungsdatensatz. Die Labels habe ich manuell geprüft und später Auto-Labeling zur Beschleunigung eingesetzt; der Labeling-Aufwand lag bei etwa 40–60 Stunden.

Frühe Versionen stuften viele in der Hand gehaltene Gegenstände als Messer ein, weil der Datensatz zu wenige repräsentative Negativszenen enthielt. Die Erweiterung auf über 4.000 Negativbilder beseitigte den Großteil dieser Fehlerkennungen – die wirksamste Einzelmaßnahme im Projekt, und eine, die Aufnahmezeit statt Rechenleistung gekostet hat.

Live-Kamerabild, in dem eine Schere korrekt nicht als Messer klassifiziert wird
True Negative · die Schere wurde korrekt nicht als Messer klassifiziert

Das Experiment zur Klassenstruktur

Eine Zwischenversion teilte die Labels in zwei Klassen auf: ein Messer, das in einer Szene liegt, und ein Messer, das in der Hand gehalten wird. Die Überlegung dahinter: Für eine Alarmierungsanwendung steckt genau in dieser Unterscheidung die Bedeutung – ein Gegenstand auf der Arbeitsplatte ist nicht dasselbe Ereignis wie ein Gegenstand in jemandes Griff.

Gemessen gegen die zusammengeführte Ein-Klassen-Version auf denselben Bildern und derselben Validierungsaufteilung hat sich die Trennung nicht ausgezahlt. Alle aggregierten Metriken verbesserten sich, nachdem die beiden Klassen wieder zu einer zusammengelegt wurden, und die Klasse ohne Hand war durchgehend die schwächere Hälfte – mit einem Bruchteil der Instanzen der Klasse mit Hand. Die Aufteilung eines kleinen Datensatzes bescherte dem Modell zwei schlecht gestützte Probleme statt eines gut gestützten.

Der Vergleich ist nicht perfekt kontrolliert: Der zusammengeführte Lauf trainierte auch 150 statt 110 Epochen. Die Richtung ist aber über Precision, Recall und beide mAP-Maße hinweg einheitlich – und das Ein-Klassen-Modell ist das, was eingesetzt wird.

MetrikZwei Klassen · 110 EpochenEine Klasse · 150 Epochen
mAP@0,50,8020,844
mAP@0,5:0,950,5160,554
Precision0,8120,841
Recall0,7390,768
Bester F1-Wert0,77 bei Konf. 0,5020,80 bei Konf. 0,554

Trainingskonfiguration

Statt einer vagen Anzahl von Experimenten hier die exakte Konfiguration hinter dem eingesetzten Modell. Der Lauf dauerte 2 Stunden 23 Minuten auf der weiter unten beschriebenen Tesla T4.

ParameterWert
Basisgewichteyolo11s.pt (vortrainiert)
Klassen1 – Messer
Eingangsauflösung640 × 640
Epochen150 · bester Checkpoint bei Epoche 148
Batchgröße16
Optimiererauto (SGD gewählt) · lr0 0,01 · lrf 0,01 · Momentum 0,937
AugmentierungMosaic 1,0 (letzte 10 Epochen deaktiviert) · fliplr 0,5 · HSV · Scale 0,5 · Erasing 0,4
Seed0 · deterministisch
Trainingsdauer2 h 23 min auf einer einzelnen Tesla T4

Gemessene Ergebnisse

Die folgenden Werte stammen aus dem Validierungsdatensatz beim besten Checkpoint. Sie beschreiben diesen Datensatz und diese Aufteilung – was sie noch nicht belegen, steht in den offenen Punkten am Seitenende.

MetrikWert
mAP@0,50,844
mAP@0,5:0,950,554
Precision (bestes Epoch)0,841
Recall (bestes Epoch)0,768
Bester F1-Wert0,80 bei Konfidenz 0,554
Precision erreicht 1,00bei Konfidenz 0,862
Maximaler Recall0,92
Precision-Recall-Kurve der einzelnen Messerklasse mit mAP bei 0,5 von 0,844
Precision-Recall-Kurve · die Precision hält bis etwa 0,8 Recall über 0,9 und fällt dann steil ab
F1-Konfidenz-Kurve mit Maximum von 0,80 bei einer Konfidenzschwelle von 0,554
F1 über Konfidenz · die Kurve ist zwischen etwa 0,3 und 0,6 flach, der Arbeitspunkt reagiert also unempfindlich auf kleine Schwellenänderungen
Trainingskurven über 150 Epochen: die Losses fallen, während Precision, Recall, mAP50 und mAP50-95 steigen und abflachen
Training über 150 Epochen · mAP@0,5 flacht ab etwa Epoche 120 ab, mAP@0,5:0,95 stieg noch leicht weiter

Wo das Modell tatsächlich versagt

Die aggregierten Zahlen verdecken die nützlichere Information, deshalb hier die Fehlerstruktur aus der Confusion Matrix bei der Standard-Konfidenzschwelle. Von 327 gelabelten Instanzen im Validierungsdatensatz wurden 275 erkannt und 52 übersehen.

Das größere Problem liegt in der anderen Richtung: 120 Erkennungen entfielen auf Hintergrundbereiche ohne gelabeltes Objekt. Das ist rund ein Fehlalarm auf 2,3 korrekte Erkennungen. Das Modell löst eher zu oft als zu selten aus, und für eine Alarmierungsanwendung ist das die teurere Fehlerart. Es ist außerdem der einzige Wert, der sich zwischen den beiden Trainingsläufen kaum bewegt hat – ein Hinweis darauf, dass er an den Daten liegt und nicht an der Labelstruktur. Die nächste Runde muss ihn mit schwierigeren Negativszenen angehen.

  • Erkannt: 275 von 327 gelabelten Instanzen (84 %)
  • Übersehen: 52 Instanzen (16 %)
  • Fehlalarme auf Hintergrund: 120
  • Die Zuverlässigkeit sinkt bei Verdeckung und ungewöhnlichen Messerformen
Confusion Matrix mit 275 korrekten Messererkennungen, 52 übersehenen und 120 Fehlalarmen auf Hintergrund
Confusion Matrix · die 120 in der Hintergrundspalte sind das eigentliche Problem

Live-Betrieb

Das Modell läuft von einer Live-Webcam auf einem Lenovo Yoga Slim 6 mit beobachteten 6–10 FPS sowie auf NVIDIA-Jetson-Plattformen, unter anderem einem Orin Nano Super. Demonstriert wurde es in unbekannten Szenen bei unterschiedlichen Lichtverhältnissen und Hintergründen.

Infrastruktur: was die Workstation wirklich gekostet hat

Im März 2025 habe ich nahezu alle Komponenten gebraucht beschafft und für rund 910 € einen lokalen KI-Rechner aufgebaut, statt GPU-Zeit zu mieten. Rein auf die Rechenleistung gerechnet trägt sich diese Entscheidung nicht, und das gehört klar gesagt.

Eine T4-vergleichbare Cloud-Instanz kostet derzeit etwa 0,20 bis 0,76 $ pro Stunde On-Demand. In der Mitte dieser Spanne liegt der Break-even der 910 € bei rund 3.300 GPU-Stunden – 137 Tage Dauerlast. Über alle Läufe dieses Projekts habe ich in der Größenordnung von 100 Stunden gerechnet. Diese Rechenzeit zu mieten hätte etwa 30 € gekostet. Pro tatsächlich genutzter Stunde war die Workstation damit rund dreißigmal teurer als Miete.

Drei Punkte rechtfertigen sie trotzdem, und keiner davon ist der Stundenpreis. Erstens besteht der Datensatz aus Videoaufnahmen in meiner eigenen Wohnung und zeigt mich und mein Umfeld; diese Daten einem fremden Anbieter zu übergeben wollte ich nicht. Zweitens hat ein Grenzkostensatz von null meine Arbeitsweise verändert – das Klassenexperiment weiter oben, das nützlichste Ergebnis dieses Projekts, ist nur entstanden, weil ein zusätzlicher Trainingslauf nichts kostete. Bei abgerechneter Rechenzeit hätte ich weniger ausprobiert und weniger gelernt. Drittens sind 910 € der Preis für einen vollständigen Rechner, nicht für GPU-Stunden: Ryzen 7 5800X, 64 GB RAM und die 1-TB-SSD tragen auch CAD-Arbeit und Slicing, den vollen Betrag diesem Projekt zuzurechnen überzeichnet die Kosten. Die Cloudpreise lagen zum Entscheidungszeitpunkt außerdem deutlich höher als heute.

Die ehrliche Schlussfolgerung ist eine Regel, kein Urteil: Für ein Projekt dieser Größe ohne Datenschutzauflage ist Mieten bei den heutigen Preisen die richtige Wahl, und ich würde mieten. Der Kauf war durch diese Auflage und durch den Wert unbegrenzter Iteration begründet – nicht durch die Rechnung.

PositionWert
Kaufpreis≈ 910 €, nahezu vollständig gebraucht, inkl. verhandeltem CPU-/Mainboard-/RAM-Bundle
KernhardwareNVIDIA Tesla T4 · Ryzen 7 5800X · 64 GB RAM · 1 TB Samsung 990 Pro
Tatsächlich genutzte RechenzeitIn der Größenordnung von 100 GPU-Stunden über alle Läufe
Dieselbe Rechenzeit gemietet≈ 30 € bei 0,30 $ pro Stunde
Break-even gegen Miete≈ 3.300 GPU-Stunden, rund 30-mal meine tatsächliche Nutzung
EnergieTraining zeitlich in die eigene PV-Erzeugung gelegt, nachdem der 2-kWh-Speicher voll war

Was ein realer Betrieb kosten würde

Ein Prototyp beantwortet die Frage „erkennt er es?". Ein Betreiber fragt „was kostet der Betrieb?" – und meine eigene Fehlalarmrate beantwortet das, denn in einem Alarmierungssystem verbraucht jeder Fehlalarm die Aufmerksamkeit eines Menschen. Die folgende Rechnung arbeitet mit offengelegten Annahmen, nicht mit echten Kundenzahlen, und sie hat verändert, welche Entwicklungsarbeit ich als Nächstes für sinnvoll halte.

Angenommenes Szenario: ein überwachter Eingangsbereich eines Gewerbegebäudes, vier Kameras, rund 312 Betriebsstunden im Monat. Ein bewertetes Bild pro Sekunde und Kamera, 30 Sekunden Sichtprüfung je Alarm, 20 € pro Stunde Personalkosten inklusive Nebenkosten. Hardware zu den Preisen, die ich tatsächlich bezahlt habe: 250 € je Jetson Orin Nano Super, dazu geschätzt 50 € je Kameramodul. Montage, Netzwerk und Gehäuse sind nicht enthalten.

Die Hardware ist nicht das Problem. Vier Knoten kosten einmalig 1.200 €. Ohne jede Filterung erzeugt eine Fehlalarmrate von 12,5 % pro Bild etwa 1.800 Alarme pro Stunde über vier Kameras – das sind fünfzehn dauerhaft gebundene Personen, womit die Frage geklärt ist, ob das unbearbeitete Modell betriebsfähig ist. Verlangt man drei Erkennungen in Folge, bevor ein Alarm ausgelöst wird, kostet das keine zusätzliche Hardware und senkt den Wert auf 28 Alarme pro Stunde, also rund 1.460 € Prüfaufwand im Monat. Die einmaligen Hardwarekosten sind damit in weniger als einem Monat von den Personalkosten überholt.

Die interessante Folge ist nichtlinear. Weil ein Drei-Bild-Filter die Rate pro Einzelbild in die dritte Potenz erhebt, halbiert eine Halbierung der Fehlalarmrate nicht die Prüfkosten – sie senkt sie um den Faktor acht, von rund 1.460 € auf etwa 180 € im Monat. Damit wird aus „das Modell etwas verbessern" eine bezifferte Rendite, und die günstige Maßnahme rückt vor die naheliegende: erst filtern zum Preis von null, dann etwa 40 bis 60 Stunden zusätzliche Aufnahmen von Negativszenen, und erst danach überhaupt die Frage nach einem größeren Modell.

  • Investition: einmalig 1.200 € für vier Knoten, zu den von mir bezahlten Preisen
  • Die Betriebskosten werden von menschlicher Aufmerksamkeit bestimmt, nicht von Hardware oder Energie
  • Eine Halbierung der Fehlalarmrate bringt beim Prüfaufwand etwa Faktor acht
  • Die wirksamste günstige Maßnahme ist zeitliche Filterung und kostet nichts in der Umsetzung
Erkennungen in Folge nötigAlarme pro Stunde, 4 KamerasPrüfzeitPrüfkosten pro Monat
1 (ohne Filter)≈ 1.80015 Personen dauerhaftnicht betreibbar
2≈ 225112 min pro Stunde≈ 11.700 €
3≈ 2814 min pro Stunde≈ 1.460 €
4≈ 3,52 min pro Stunde≈ 180 €

Ergebnis

Das Projekt hat eine funktionierende Live-Demonstration, eine gemessene Ausgangsbasis von mAP@0,5 = 0,844 und wiederverwendbare Trainingshardware hervorgebracht. Die übertragbarste Erkenntnis: Die Zusammensetzung der Daten war wichtiger als Modellgröße oder ausgefeilte Labels. Die entscheidenden Fortschritte kamen durch tausende passender Negativszenen und durch das Vereinfachen der Labelstruktur, nicht durch ihr Verfeinern. Das Modell ist YOLOv11-S – die kleine Variante – und sie ist nicht der begrenzende Faktor.