Arbeitsplatz Bild eurofunk Kappacher GmbH

From Sound to Sense

Description

Sabine Hasenleithner von eurofunk Kappacher spricht in ihrem devjobs.at TechTalk über die technischen Hintergründe von Sprach Erkennung im Notruf Kontext und zeigt in einer Live Demo eine mögliche Implementierung.

Beim Videoaufruf stimmst Du der Datenübermittlung an YouTube und der Datenschutzerklärung zu.

Video Zusammenfassung

In From Sound to Sense zeigt Sabine Hasenleithner (eurofunk Kappacher GmbH), wie man mit PyTorch und TorchAudio ein kompaktes Audio-Kommandoerkennungsnetz trainiert und deployt – motiviert durch Sprachbarrieren im Notrufumfeld. Mit dem Speech Commands-Datensatz (35 Wörter, ~105k 1‑Sekunden-WAVs, 2.600 Sprecher) trainiert sie direkt auf Waveforms, erreicht nach 21 Epochen ~85% Genauigkeit und exportiert das Modell via TorchScript (ca. 138 KB, ~26k Parameter) für eine Flask-Demo; wichtig sind konsistente 8‑kHz-Sample-Rate und der Eval-Modus ohne Dropout/BatchNorm. Zuschauer erhalten einen reproduzierbaren End-to-End-Workflow von Datenimport über Training (Colab/Anaconda) bis Deployment, inklusive Speichern/Laden, Label-Mapping und praxisnahen Fallstricken wie CUDA-Treibern.

Von Sound zu Sense: Sprachbefehle mit PyTorch und TorchAudio trainieren – ein technischer Deep Dive aus „From Sound to Sense“ von Sabine Hasenleithner (eurofunk Kappacher GmbH)

Kontext und Motivation: Warum „Sound to Sense“ im Kontrollzentrumsumfeld zählt

In „From Sound to Sense“ zeigt Sabine Hasenleithner (eurofunk Kappacher GmbH), wie man mit einem PyTorch-Tutorial ein schlankes neuronales Netz für Sprachbefehle trainiert – vom Rohsignal bis zur einsatzfähigen Inferenz. Der praktische Fokus passt zu ihrem Arbeitsalltag: AI-unterstützte Übersetzungs- und Transkriptionssysteme im Backend, mit klarer Ausrichtung auf reale Anforderungen von Leitstellen.

Die Motivation ist handfest: Bereits 2011 wurde für die europäische Notrufnummer 112 berichtet, dass 28 % der Anrufenden Sprachprobleme haben. Für eine Nummer, die „alle“ erreichen soll, ist das ein strukturelles Risiko. Die European Emergency Number Association (EENA) rief daher zu speziellen KI-Initiativen auf – etwa zur Spracherkennung, Sprachidentifikation, Transkription, Übersetzung und (wo nötig) Unterstützung der Triage. Genau in diese Richtung zielt Hasenleithners Praxisbeispiel: robuste, kleine Modelle für präzise Aufgaben, die sich gut in bestehende Systeme integrieren lassen.

Das Werkzeugset: PyTorch und TorchAudio

Hasenleithner baut auf PyTorch – einer Open-Source-Bibliothek, deren Fundament Tensors und neuronale Netze sind. Zentral im Vortrag ist außerdem TorchAudio, ebenfalls Open Source. TorchAudio bringt:

  • Ein- und Ausgabe für Audiodaten
  • Signal- und Datenverarbeitung (Transforms)
  • Zugriff auf kuratierte Datensätze, darunter der hier verwendete Speech-Commands-Datensatz

Diese Kombination erlaubt es, vom WAF-File bis zur Vorhersage in einem konsistenten Workflow zu bleiben. Besonders pragmatisch: Das gesamte Tutorial lässt sich in Google Colab starten – ein Klick auf das Colab-Icon genügt – oder lokal in einem Jupyter-Notebook ausführen.

Vorsicht bei lokaler GPU: Anaconda als Sandbox

Wer lokal mit GPU trainiert, sollte die CUDA-Treiber im Blick behalten. Hasenleithner warnt ausdrücklich davor, „am falschen Knopf zu drehen“ – ein defekter NVIDIA-Treiber kann schnell zu einem Black Screen führen. Ihr Tipp: mit Anaconda arbeiten. Eine isolierte Umgebung reduziert das Risiko, das Host-System durch Treiberexperimente zu zerschießen.

Der Datensatz: Speech Commands

Im Tutorial wird der Speech-Commands-Datensatz aus TorchAudio genutzt. Die Eckdaten, die Hasenleithner hervorhebt:

  • Rund 105.000 Äußerungen
  • 35 verschiedene Wörter (Kommandos)
  • Jede Audiodatei ist maximal 1 Sekunde lang, gespeichert als WAV
  • Etwa 2.600 Sprecherinnen und Sprecher
  • Gesamtgröße ca. 3,8 GB

Die Verteilung der Wörter ist „schön“ balanciert – kein einzelnes Kommando dominiert, was das Training fairer macht. Die Liste umfasst Richtungsangaben (etwa „backward“, „forward“), Tiere („cat“, „dog“), Ziffern (0–9) und mehr. Für ein Befehlsmodell im Leitstellenkontext ist diese Bandbreite ein guter Startpunkt, weil sie kurze, klar abgegrenzte Tokens hat.

Vom Rohsignal aus denken: Waveform statt Merkmalsextraktion

Das Tutorial trainiert direkt auf Waveforms – also auf dem zeitdiskreten Amplitudensignal. Eine Waveform ist ein Zahlenarray mit positiven, negativen und Nullwerten über die Zeit. Hasenleithner deutet das anschaulich: Bei „cat“ lassen sich Peaks rund um den Vokal und ein Stopp am „t“ erkennen. Statt auf Spektrogramme oder MFCCs zu wechseln, bleibt das Beispiel bewusst beim Rohsignal. Das ist didaktisch stark: Man sieht unmittelbar, wie aus „Zahlen über die Zeit“ Bedeutung extrahiert wird.

Der Trainingsablauf in PyTorch: kompakt, reproduzierbar, schnell

Das offizielle Tutorial führt entlang eines klaren Pfads:

  1. Datensatz importieren
  2. Daten formatieren
  3. Netzwerk definieren
  4. Trainieren und testen
  5. Fazit

Der Clou ist die Geschwindigkeit: Bereits nach 21 Epochen erreicht das Modell eine Genauigkeit von etwa 85 %. Für ein minimalistisches Setup mit Waveform-Input ist das ein sehr gutes Ergebnis. Hasenleithner betont, dass oberhalb von 80 % man durchaus zufrieden sein kann – und dass nach 21 Epochen keine nennenswerte Verbesserung mehr eintritt. Interpretation: Entweder braucht es mehr Daten oder Änderungen in der Datenaufbereitung/Architektur, um die Kurve weiter nach oben zu schieben.

Praxis-Hinweis: Sample Rate und Kanäle

Für die Inferenz ist das Audio-Frontend entscheidend. Das gezeigte Modell erwartet eine Abtastrate von 8.000 Hz. Wer ein Audio mit abweichender Samplingrate hineinschiebt, darf sich nicht wundern, wenn die Erkennung kippt. Ebenso sind Länge und Kanalzahl zu beachten. Das Frontend sollte konsequent auf das Trainingsformat normieren.

Speichern und Deployen: TorchScript, eval() und kleine Modelle

Nach dem Training folgt der Übergang ins Deployment. Hasenleithner empfiehlt TorchScript, um das Modell zu exportieren und später in Anwendungen zu laden. Wichtig ist der Moduswechsel:

  • Vor der Inferenz model.eval() aufrufen, damit Dropout und Batch-Normalization so wirken, wie es für die Nutzung (nicht das Training) gedacht ist.
  • Mit TorchScript speichern, um das Modell stabil in produktionsnahe Umgebungen zu bringen. In dieser Form ist es nicht mehr zur weiteren Feinjustierung gedacht – es dient der robusten Ausführung.

Die Größenordnung ist bemerkenswert: Das resultierende Modell hat etwa 138 KB und rund 26.000 Parameter – winzig im Vergleich zu großen Sprachmodellen. Zum Vergleich nannte Hasenleithner das „Whisper tiny“-Modell mit 39 Millionen Parametern und einer geschätzten Größe „zwei bis drei Gigabyte“. Genau diese Asymmetrie macht das Speech-Commands-Modell attraktiv für Edge-nahe oder latenzkritische Szenarien.

Die Inferenz-Pipeline: vom WAV zum Label-String

Der Ablauf von der Aufnahme bis zur Vorhersage folgt einem soliden Muster:

  • Waveform laden (TorchAudio übernimmt das IO)
  • Waveform in einen Tensor transformieren
  • Optional: auf das gewünschte Device bewegen (CPU oder GPU)
  • Für das Modell passend „unsqueezen“ (Batch-Dimension o. ä.)
  • Vorwärtsdurchlauf: Das Modell liefert eine Wahrscheinlichkeitsverteilung über alle Klassen
  • Den wahrscheinlichsten Index bestimmen (Top-1)
  • Index-zu-Label-Abbildung anwenden und den String zurückgeben

Hasenleithner beschreibt diesen Weg als Herzstück ihrer Flask-Demo. Ein labels-Array hält die Zuordnung von Indizes zu Wörtern, eine Hilfsmethode ermittelt den Top-Index, und die finale Ausgabe ist eine menschenlesbare Zeichenkette für die Visualisierung.

Live-Demo mit Flask: simpel, zweckmäßig, erkennt Befehle

Für die Demo hat Hasenleithner eine kleine Flask-Anwendung gebaut. Die Oberfläche ist bewusst minimal. Wichtiger ist die Funktion: Die App nimmt Ton auf, leitet ihn durchs Modell und zeigt den erkannten Befehl an.

In der Session testet sie mehrere Beispiele:

  • „cat“ – korrekt erkannt
  • „backward“ – korrekt erkannt
  • „one“ – korrekt erkannt
  • „Sabine“ – nicht in der Klassenliste; das Modell gibt die „beste“ Annäherung zurück

Auch hier wieder der Praxisbezug: Nicht jeder Input ist abgedeckt. Das Modell liefert dann einen plausiblen, aber nicht notwendigerweise semantisch korrekten Klassenvorschlag aus dem bekannten Wortschatz. Für produktive Systeme könnte man eine Unknown/Reject-Strategie ergänzen – der Talk bleibt jedoch beim gezeigten Tut-Umfang.

Lokales Setup: Anaconda, TorchAudio und robuste IO

In ihrem Code verwendet Hasenleithner TorchAudio konsequent, um IO und Formatdetails zu kapseln. Das spart Zeit, vermeidet Fehler und konzentriert die Logik auf das Wesentliche: Laden, Transformieren, Vorhersagen. Sie betont nochmals den Vorteil von Anaconda, gerade wenn lokal auf GPU trainiert wurde und die Umgebung sauber getrennt bleiben soll.

Lektionen für Engineering-Teams

Aus dem Talk lassen sich mehrere handfeste Lehren ziehen:

  • Kleine Modelle sind mächtiger, als man denkt: 138 KB, ~26k Parameter und trotzdem ~85 % Genauigkeit nach 21 Epochen – das reicht für viele Befehls-Use-Cases.
  • Datenformat ist alles: Wer das Modell mit falscher Samplingrate (hier: 8 kHz) oder falscher Kanalzahl füttert, verschenkt Performance oder bricht die Inferenz.
  • Balancierte Datensätze zahlen sich aus: Speech Commands verteilt seine Klassen gut, was das Training stabilisiert.
  • Training hat natürliche Plateaus: Ab einem Punkt wird’s nicht besser – dann sind Daten, Features oder Architekturen die Stellhebel, nicht einfach „mehr Epochen“.
  • Produktionsreife erfordert Modusdisziplin: eval() vor Inferenz, Dropout/BatchNorm richtig behandeln, TorchScript für stabile Deployments.
  • Lokale GPU-Setups brauchen Pflege: Anaconda minimiert Risiko, Colab senkt Hürden und vermeidet Treiberfallen.

Von der Demo zur Praxis: Was wir angewandten Teams empfehlen

Ohne über den Vortrag hinaus zu spekulieren, ergeben sich klare Handlungsempfehlungen für ähnliche Vorhaben:

  • End-to-End-Denken: Bereits beim Datensatz die spätere Inferenz bedenken (Samplingrate, Kanäle, Längen). Das reduziert Friktion im Deployment erheblich.
  • Tooling konsequent nutzen: TorchAudio übernimmt IO und grundlegende Signalaufbereitung. Das macht die Codebasis schlanker und wartbarer.
  • Evaluationswege klären: Eine einfache Top-1-Logik reicht für Demos. Für kritische Systeme lohnt sich ein Schwellenwert oder eine Unknown-Klasse.
  • Modelllebenszyklus planen: Wenn TorchScript der Zielpfad ist, die nachträgliche Anpassbarkeit sauber kommunizieren – das exportierte Artefakt ist für Ausführung, nicht für weiteres Feintuning.

Zentrale Zitate/Paraphrasen aus der Session

  • Zur Motivation: 28 % der 112-Anrufenden hatten laut 2011er Bericht Sprachprobleme – EENA rief zu KI-Projekten für Erkennung, Identifikation, Transkription, Übersetzung und Triage auf.
  • Zu PyTorch/TorchAudio: Offene Bibliotheken, die Tensors/Netze und Audio-IO/Signalverarbeitung plus Datensätze kombinieren – das Speech-Commands-Set stammt direkt von TorchAudio.
  • Zum Training: „Nach 21 Epochen bereits ~85 % Genauigkeit“ – schnell, solide, für das Setup bemerkenswert.
  • Zum Deployment: Mit TorchScript exportieren, eval() aktivieren, Dropout/BatchNorm korrekt behandeln. Das Modell ist dann für die Nutzung gedacht, nicht für weiteres Training.
  • Zu Größenordnungen: ~138 KB Modell, ~26k Parameter. Im Vergleich nannte sie „Whisper tiny“ mit 39 Mio. Parametern und geschätzten „zwei bis drei GB“.

Fazit: „From Sound to Sense“ als Blaupause für schlanke, integrierbare ML-Bausteine

Der Talk „From Sound to Sense“ von Sabine Hasenleithner (eurofunk Kappacher GmbH) zeigt, wie man mit wenig Ballast ein praxistaugliches Audiosystem aufsetzt – vom Datensatz über das Training bis zur Inferenz in einer kleinen Web-App. Die Kernbotschaft: Wenn das Problem gut geschnitten ist (kurze Befehle, klar definierte Klassen), liefern kleine, gut trainierte Modelle erstaunlich zuverlässige Ergebnisse. Für Leitstellen, in denen Geschwindigkeit, Robustheit und Integrationstauglichkeit zählen, ist das genau der richtige Ansatz.

Wer PyTorch und TorchAudio noch nicht in dieser Klarheit verknüpft hat, findet in diesem Walkthrough eine Lernkurve mit unmittelbarem Payoff: balancierte Daten, sauberes Audio-Frontend, reproduzierbares Training, diszipliniertes Deployment – und am Ende ein Modell, das tut, was es soll.

Weitere Tech Talks

Weitere Tech Lead Stories

Weitere Dev Stories