Skip to content

Latest commit

 

History

History
206 lines (145 loc) · 7.12 KB

File metadata and controls

206 lines (145 loc) · 7.12 KB

Edge AI Pipeline Lehrbeispiel: Keyword Spotting (KWS) für Edge-Geräte

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“.


1. Warum Edge AI? (Kurskontext)

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.


2. Was ist Keyword Spotting (KWS)?

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

Metriken im Projekt

Im Projekt betrachten wir vor allem:

  • Accuracy (Top-1) auf Validation/Test
  • Latenz (mean/p50/p95) der Inferenz
  • Modellgröße (Checkpoint-Dateigröße, Parameteranzahl)

3. Die Pipeline-Idee: Teacher → Student → Distillation → Quantisierung → Benchmark

Eine typische Edge-AI Vorgehensweise ist:

  1. Teacher trainieren: Großes Modell, hohe Accuracy.
  2. Student entwerfen: Kleineres Modell (Edge-optimiert), zunächst baseline trainieren.
  3. Knowledge Distillation: Student lernt zusätzlich von den Teacher-Logits, um Accuracy-Verlust zu reduzieren.
  4. Quantisierung: Reduktion der Modellgröße und (oft) schnellere CPU-Inferenz.
  5. Benchmarking: Vergleich aller Varianten; Diskussion von Trade-offs.

Im Ordner Pipeline_example/kws_edge_projekt/ ist genau dieser Ablauf implementiert.


4. Daten & Features: Warum Log-Mel?

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.

Shapes im Projekt

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

5. Die 4-stufige Einführung (Woche 1–4) – Teaching Scripts

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/

Woche 1 / Labor 1: Teacher & Feature-Exploration

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 --fast

Erwartete Outputs:

  • woche1_logmel_example.png
  • woche1_results.json

Woche 2 / Labor 2: Student (DS-CNN) Design & Training

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 --fast

Erwartete Outputs:

  • woche2_student_learning_curves.png
  • woche2_results.json

Woche 3 / Labor 3: Distillation & Quantisierung

Script: woche3_distillation_quantization.py

Lernziele:

  • Distillation (Temperature T, Alpha)
  • PTQ vs. QAT im Skeleton verstehen

Start:

python experiments/teaching/woche3_distillation_quantization.py --fast

Erwartete Outputs:

  • Checkpoints in artifacts/ (z. B. student_distill_fp32.pt, student_int8_ptq.pt, student_int8_qat.pt)
  • woche3_results.json

Woche 4 / Labor 4: Benchmarking & Diskussion

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 val

Erwartete Outputs:

  • woche4_benchmarks.json
  • woche4_benchmarks.csv
  • woche4_results_text.png

6. Projekt ausführen: Quickstart (echte Daten)

6.1 Dataset herunterladen

source edge_ai_venv/bin/activate
cd Pipeline_example/kws_edge_projekt
python data/download_data.py

6.2 Teacher/Student Training (SpeechCommands)

python 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 0

6.3 Quantisierung

python models/quantization.py --mode ptq --checkpoint artifacts/student_fp32.pt
python models/quantization.py --mode qat --checkpoint artifacts/student_fp32.pt --qat-epochs 1

6.4 Benchmarking

python 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

7. Reflexion: Was du als Bachelor-Student mitnehmen solltest

  1. Es gibt kein „bestes“ Modell. Accuracy, Latenz, Größe und Robustheit sind Zielkonflikte.
  2. Edge-Optimierung ist ein Engineering-Problem. Architektur, Distillation und Quantisierung sind Werkzeuge.
  3. Benchmarking ist Pflicht. Ohne Messung ist jede „Optimierung“ nur Vermutung.
  4. Dokumentation gehört dazu. Begründe Entscheidungen (warum DS-CNN? warum QAT?).

8. Weiterführende Quellen