Dieses Dokument ist Teil des Edge-AI-Kurses DLBAIPEAI01_D und führt Bachelor-Studierende didaktisch in ein vollständiges Beispielprojekt ein:
KWS Edge Projekt (PyTorch):
Pipeline_example/kws_edge_projekt/
Das Beispiel zeigt eine typische Edge-AI Pipeline von „gutes, großes Modell“ → „kleines, schnelles Modell“ → „Optimierung für Inferenz“ → „Benchmarking & Trade-offs“.
In vielen Anwendungen ist es nicht sinnvoll oder nicht erlaubt, Daten ständig in eine Cloud zu senden. Gründe sind u. a.:
- Latenz: Entscheidungen müssen in Millisekunden getroffen werden.
- Datenschutz: Audio-/Bilddaten dürfen das Gerät nicht verlassen.
- Robustheit: Offline-Fähigkeit ist entscheidend.
- Ressourcen: Edge-Geräte haben wenig CPU/RAM und oft keine GPU.
Das Kursziel in DLBAIPEAI01_D ist, dass du Systemanforderungen (z. B. Echtzeit) mit Modellanforderungen (z. B. Genauigkeit) abwägst und deine Entscheidungen begründest.
Keyword Spotting ist eine Form der Spracherkennung, bei der nur ein begrenztes Set an Wörtern erkannt werden soll (z. B. „yes/no“, „on/off“, „stop/go“).
Typische Einsatzszenarien:
- Sprachaktivierung („Hey …“)
- Lokale Sprachsteuerung in Embedded-Geräten
- Low-Power Always-On Audio
Im Projekt betrachten wir vor allem:
- Accuracy (Top-1) auf Validation/Test
- Latenz (mean/p50/p95) der Inferenz
- Modellgröße (Checkpoint-Dateigröße, Parameteranzahl)
Eine typische Edge-AI Vorgehensweise ist:
- Teacher trainieren: Großes Modell, hohe Accuracy.
- Student entwerfen: Kleineres Modell (Edge-optimiert), zunächst baseline trainieren.
- Knowledge Distillation: Student lernt zusätzlich von den Teacher-Logits, um Accuracy-Verlust zu reduzieren.
- Quantisierung: Reduktion der Modellgröße und (oft) schnellere CPU-Inferenz.
- Benchmarking: Vergleich aller Varianten; Diskussion von Trade-offs.
Im Ordner Pipeline_example/kws_edge_projekt/ ist genau dieser Ablauf implementiert.
Neuronale Netze arbeiten selten direkt auf Roh-Audio (Waveform). Stattdessen transformieren wir Audio in Zeit-Frequenz-Features.
Im Projekt verwenden wir Log-Mel Spectrogramme:
- Mel-Skala entspricht grob der menschlichen Wahrnehmung.
- Logarithmus stabilisiert Wertebereiche.
- Das Ergebnis ist eine „Bild“-ähnliche Matrix: Zeit × Frequenz.
Im KWS-Projekt ist die Eingabe für die CNN-Modelle typischerweise:
(N, C=1, time, n_mels)
Wichtig für die Praxis: Das SpeechCommandsDataset liefert pro Sample bereits (1, time, n_mels), der DataLoader stapelt dann zu (N, 1, time, n_mels).
Relevante Skripte:
- Dataset laden:
Pipeline_example/kws_edge_projekt/data/speechcommands_dataset.py - Optionales Feature-Caching:
Pipeline_example/kws_edge_projekt/data/prepare_dataset.py - Dataset Download:
Pipeline_example/kws_edge_projekt/data/download_data.py
Für den Kurs sind vier Lehrskripte vorbereitet, die dich Schritt für Schritt durch die Pipeline führen. Sie liegen hier:
Pipeline_example/kws_edge_projekt/experiments/teaching/
Alle Skripte sind direkt ausführbar und haben einen --fast Modus für schnelle Kursläufe.
Sie erzeugen Outputs (Plots/CSVs/JSON) unter:
Pipeline_example/kws_edge_projekt/experiments/outputs/
Script: woche1_teacher_features.py
Lernziele:
- Log-Mel Features visualisieren
- Teacher-Trainingpfad verstehen
Start:
source edge_ai_venv/bin/activate
cd Pipeline_example/kws_edge_projekt
python experiments/teaching/woche1_teacher_features.py --fastErwartete Outputs:
woche1_logmel_example.pngwoche1_results.json
Script: woche2_student_design_training.py
Lernziele:
- Teacher vs. Student (Parameter/Komplexität)
- Student trainieren und Lernkurven interpretieren
Start:
python experiments/teaching/woche2_student_design_training.py --fastErwartete Outputs:
woche2_student_learning_curves.pngwoche2_results.json
Script: woche3_distillation_quantization.py
Lernziele:
- Distillation (Temperature T, Alpha)
- PTQ vs. QAT im Skeleton verstehen
Start:
python experiments/teaching/woche3_distillation_quantization.py --fastErwartete Outputs:
- Checkpoints in
artifacts/(z. B.student_distill_fp32.pt,student_int8_ptq.pt,student_int8_qat.pt) woche3_results.json
Script: woche4_benchmarking_and_discussion.py
Lernziele:
- Benchmark-Skripte reproduzierbar ausführen
- Ergebnisse sammeln und Trade-offs diskutieren
Start:
python experiments/teaching/woche4_benchmarking_and_discussion.py --fast --data speechcommands --split valErwartete Outputs:
woche4_benchmarks.jsonwoche4_benchmarks.csvwoche4_results_text.png
source edge_ai_venv/bin/activate
cd Pipeline_example/kws_edge_projekt
python data/download_data.pypython training/train_teacher.py --data speechcommands --epochs 10 --batch-size 64 --num-workers 0
python training/train_student.py --data speechcommands --epochs 10 --batch-size 64 --num-workers 0
python training/train_student_distill.py --data speechcommands --epochs 10 --batch-size 64 --num-workers 0python models/quantization.py --mode ptq --checkpoint artifacts/student_fp32.pt
python models/quantization.py --mode qat --checkpoint artifacts/student_fp32.pt --qat-epochs 1python benchmarking/benchmark_accuracy.py --checkpoint artifacts/student_fp32.pt --data speechcommands --split test --batch-size 64 --num-workers 0
python benchmarking/benchmark_latency.py --checkpoint artifacts/student_fp32.pt --data speechcommands --split val --batch-size 1 --num-workers 0
python benchmarking/benchmark_size.py --checkpoint artifacts/student_fp32.pt- Es gibt kein „bestes“ Modell. Accuracy, Latenz, Größe und Robustheit sind Zielkonflikte.
- Edge-Optimierung ist ein Engineering-Problem. Architektur, Distillation und Quantisierung sind Werkzeuge.
- Benchmarking ist Pflicht. Ohne Messung ist jede „Optimierung“ nur Vermutung.
- Dokumentation gehört dazu. Begründe Entscheidungen (warum DS-CNN? warum QAT?).
- Google Speech Commands: https://arxiv.org/abs/1705.02304
- Hello Edge / ML-KWS for MCU (ARM): https://github.com/ARM-software/ML-KWS-for-MCU
- TensorFlow Lite Micro: https://www.tensorflow.org/lite/microcontrollers