Xilin Zhu
KontaktAvailable for work
← Alle Projekte

Bachelorarbeit · Universität Guangzhou

Gestenbasierte Steuerung eines intelligenten mobilen Roboters

Bachelorarbeit — Entwurf eines Steuerungssystems für ein intelligentes Kleinfahrzeug auf Basis von Gestenerkennung

2022.09 — 2023.04

YOLOv5s und C3D für statische und dynamische Gestenerkennung verbessert (81,3 % mAP, bis zu 83,3 % Genauigkeit) und ein Raspberry-Pi-Roboterfahrzeug per WLAN in Echtzeit mit 10 Bewegungsbefehlen über statische Gesten gesteuert.

mAP@0.5:0.95 bei statischer Gestenerkennung (CBAM-YOLOv5s)
81.3%
Beste Genauigkeit bei dynamischer Gestenerkennung (BN-C3D)
83.3%
Eigener Datensatz statischer Gesten (Bilder)
4488
Gestenbefehle
10

Überblick

  • Zeitraum und Rahmen — September 2022 bis April 2023, Bachelorarbeit im Studiengang Robotik an der Universität Guangzhou, in Einzelarbeit
  • Aufgabe — Handgesten mit einer gewöhnlichen Monokamera erkennen und in Fahrbefehle für ein mobiles Roboterfahrzeug übersetzen, mit höherer Erkennungsgenauigkeit und besserem Zusammenspiel von Erkennung und Steuerung
  • Ergebnis — 81,3 % mAP bei statischer Gestendetektion; bis zu 83,3 % Genauigkeit bei dynamischen Gesten; Echtzeitsteuerung des Fahrzeugs mit 10 Bewegungsbefehlen über statische Gesten

Meine Beiträge

  • Eigener Datensatz statischer Gesten — chinesische Zahlengesten 0–5 mit der Laptopkamera von 5 Personen aufgenommen, insgesamt 4.488 Bilder (3.740 Training / 748 Validierung), ergänzt um Szenen mit Gesicht und Hand sowie um 45° gedrehte und gespiegelte Aufnahmen
  • YOLOv5s für statische Gesten verbessert — drei Varianten verglichen (CA-Attention, CBAM-Attention, CoordConv) und CBAM-YOLOv5s gewählt: mAP@0.5:0.95 stieg von 80,2 % auf 81,3 %, der Rechenaufwand sank von 16,0 auf 15,8 GFLOPs, und die Fehldetektionen des Hintergrunds als Ziffer 4 oder 5 gingen zurück
  • C3D für dynamische Gesten verbessert — das ursprüngliche C3D erreichte auf fünf Gestenklassen aus DSL-46 nur 19,2 %, der Loss wurde NaN. Mit binarisierten Videos auf 1.260 Clips erweitert, Batch-Normalisierung nach den Faltungsschichten ergänzt und die Lernrate von 0,001 auf 0,0001 gesenkt: 83,3 %, vor R3D (55 %) und R(2+1)D (54 %) unter gleichen Bedingungen
  • Gestengesteuertes Fahrzeug aufgebaut — Raspberry-Pi-4B-Fahrzeug mit TB6612FNG-Doppel-H-Brücke und PWM-Drehzahlregelung über GPIO; der Host-PC erkennt die Gesten und sendet die Befehle per WLAN über TCP/IP für 10 Bewegungen: Stopp, vorwärts, rückwärts, Drehen nach links und rechts, Beschleunigen sowie Zweihandkombinationen für Kurven und Rückwärtsfahren nach links und rechts

Technische Details

Statische Gesten: drei Varianten im Vergleich

Gleicher Datensatz, gleiche Trainingseinstellungen (100 Epochen, Batch 8):

Modell Änderung mAP@0.5:0.95 Rechenaufwand (GFLOPs)
YOLOv5s (Basis) 80,2 % 16,0
CA-YOLOv5s Coordinate Attention nach dem 2., 3. und 4. C3-Block des Backbones 80,6 % 16,0
CBAM-YOLOv5s (gewählt) CBAM (Kanal- und Raum-Attention) in den C3-Blöcken des Backbones 81,3 % 15,8
CoordConv-YOLOv5s Koordinatenfaltung statt 1×1-Faltungen im Head, zusätzlich vor den Detektionsköpfen 80,8 % 21,7

Auf demselben Datensatz erreichten die neueren YOLOv7 79,7 % und YOLOv8s 82,3 %. Unter den drei YOLOv5-Varianten hatte CBAM die höchste Genauigkeit und zugleich den geringsten Rechenaufwand.

Dynamische Gesten: von 19,2 % auf 83,3 %

  • Daten — fünf Alltagsgesten aus dem öffentlichen Datensatz DSL-46 (come, don’t want, fine, go, hello), je 120 Clips, für das Training in Einzelbilder zerlegt
  • Ausgangspunkt — ursprüngliches C3D (8 Faltungsschichten mit 3×3×3-Kernen, 3 vollverbundene Schichten), 20 Epochen trainiert; der Loss sank nicht
  • Änderungen — binarisierte Kopien der Videos erweiterten die Daten auf 1.260 Clips (804 Training / 204 Validierung / 252 Test); Batch-Normalisierung (Momentum 0,9) nach den Faltungsschichten; Lernrate 0,0001; 100 Epochen
Netz Beste Genauigkeit
BN-C3D 83,3 %
R3D 55 %
R(2+1)D 54 %

Von der Erkennung zur Bewegung

  • Ablauf — Kamera am Host → CBAM-YOLOv5s in Echtzeit → Zuordnung von Geste zu Befehl → WLAN (TCP/IP) → Raspberry Pi 4B → TB6612FNG → Gleichstrommotoren
  • Hardware — Aluminiumchassis, Differentialantrieb, Gleichstrommotoren mit Metallgetriebe, zwei 7,4-V-Lithiumakkus; Host-PC mit i7-12650H und RTX 4060 Laptop GPU
  • Software — Python 3.8, PyTorch 1.13, OpenCV 4.7; das Fahrprogramm per VNC auf dem Pi eingerichtet
  • Befehle — eine Hand: 0 Stopp · 1 vorwärts · 2 rückwärts · 3 Drehen links · 4 Drehen rechts · 5 beschleunigen; zwei Hände: 1+3 Kurve links · 1+4 Kurve rechts · 2+3 rückwärts links · 2+4 rückwärts rechts

Grenzen und Lehren

  • Dynamische Gesten kamen nie am Fahrzeug an — BN-C3D schwankte auf der Validierung stark und erkannte eigene Aufnahmen schlecht; die Echtzeiterkennung dynamischer Gesten erfüllte die Steuerungsanforderungen nicht, deshalb wurde das Fahrzeug nur mit statischen Gesten gesteuert. Ursachen: nur 120 Clips pro Klasse und eine einfache Monokamera ohne Tiefeninformation
  • Begrenzter Zugewinn — Gestendetektion ist einfacher als allgemeine Objektdetektion; die Basis lag schon bei 80,2 %, die Verbesserung brachte etwa einen Prozentpunkt. YOLOv8s erreichte 82,3 % auf denselben Daten (anderer Loss, daher nicht streng vergleichbar)
  • Was daraus wurde — ferne Pylonen im KAL-Projekt am KIT waren dasselbe Kleinobjektproblem; dort habe ich wieder Attention eingesetzt (Coordinate Attention) und eine Tiefenkamera ergänzt