Acoustic Word-Recognizer

Tutorial

 

 

Anhand dieses Beispielprojektes wird das Erstellen und Trainieren eines Netzes mit dem Acoustic Word-Recognizer vorgeführt.

Als erstes muss überlegt werden welche Wörter das Netz lernen soll. In diesem Beispiel werden die Ziffern "Eins", "Zwei" und "Drei" dem Netz beigebracht. Dazu müssen als erstes die Trainingsdaten erstellt werden. Das kann mit jedem beliebigen Ton-Aufnahmeprogramm durchgeführt werden, welches die akustischen Daten im Wave-Format speichern kann.
Die Länge einer Aufnahme muss ungefähr eine Sekunde betragen. Längere Aufnahmen werden von AWR nach einer Sekunde abgeschnitten, kürzere Aufnahmen werden mit Stille aufgefüllt. Das Format der Wave-Datei muss eine Samplingrate von 22050 Hz, eine Datenbreite von 8 Bit und in Mono vorliegen.
Das Format des Namens der Wave-Datei besteht aus der Bezeichnung des Wortes, wie sie in AWR angegeben werden soll, gefolgt von einer aufsteigenden zweistelligen Nummer, beginnend von 00 bis maximal 99, für jedes Muster des Wortes. Die Nummer ist von der Bezeichnung durch einen Unterstrich getrennt. Im Beispielprojekt werden für jedes Wort 10 Muster angelegt.

eins_00.wav zwei_00.wav drei_00.wav
eins_01.wav zwei_01.wav drei_01.wav
eins_02.wav zwei_02.wav drei_02.wav
 . . .  . . .  . . .
eins_09.wav zwei_09.wav drei_09.wav

Jetzt wird das Netz erstellt. Dazu werden im Dialog "Projekt verwalten" die Grunddaten des Netzes eingegeben.
In der Gruppe "Erkennungsleistung" werden die Fähigkeiten des Netzes spezifiziert. Das sind die Anzahl der zu lernenden Wörter, 3 im Beispiel, die Anzahl der Frequenzstützpunkte pro Wort, 32 im Beispiel, und die zu lernenden Wörter selbst. Die Anzahl der Frequenzstützpunkte gibt an, wie hoch die Auflösung des aufgenommenen Frequenzspektrum ist. Bei einer Samplingrate von 22050 Hz beträgt das Spektrum weniger als 11025 Hz. Die Mindestanzahl ist 3, da der erste und letzte Wert wegen des Rechteckfenster-Effektes abgeschnitten wird.
Als nächstes werden in der Gruppe "Kohonen - Netz" die Parameter für das Kohonennetz eingegeben. Da die Anzahl der Eingabeneuronen programmintern von der Anzahl der Frequenzstützpunkte abgeleitet wird, muss nur noch die Größe der Ausgabekarte spezifiziert werden. Dies geschieht über die Angabe der Neuronenanzahl in horizontaler und vertikaler Richtung. Im Beispiel beträgt sie jeweils 5.
Zuletzt müssen noch die Werte für das Backpropagationnetz eingegeben werden. Die Anzahl der Eingabeneuronen wird hier wieder programmintern von der Anzahl der Ausgabeneuronen des Kohonennetz abgeleitet. Genauso ist die Anzahl der Ausgabeneuronen von der Anzahl der zu lernenden Wörter abgeleitet, für jedes Wort ein Neuron. Somit müssen nur noch die versteckten Schichten spezifiziert werden. Als erstes wird die Anzahl der versteckten Schichten angegeben, im Beispiel 3, dann die Anzahl der Neuronen pro Schicht, beginnend mit der ersten nach der Eingabeschicht, das sind im Beispiel jeweils 10.
Das folgende Bild zeigt den Dialog, nach dem alle Parameter eingegeben wurden.

Jetzt kann der Button "Projekt erstellen" gedrückt werden um die Netze und alle anderen notwendigen Strukturen zu erstellen. Um das Projekt später nicht noch einmal erstellen zu müssen, oder wenn man verschiedene Projekte erstellen will, kann es über den Button "Projekt speichern" gespeichert werden. Im Beispiel bekommt das Projekt den Namen "ziffern".

Hierbei werden für jedes Projekt 3 Dateien im ASCII-Textformat angelegt. Die Namen der Dateien entsprechen dem Projektnamen. Die Endungen werden in der folgenden Tabelle erklärt.

ziffern.awr Hier werden die gelernten Wörter gespeichert.
ziffern.bkp Hier werden die Parameter des Backpropagationnetz, sowie die Werte der Verbindungsgewichte der Neuronen gespeichert.
ziffern.koh Hier werden die Parameter des Kohonennetz, sowie die Werte der Verbindungsgewichte der Neuronen gespeichert.

Ein vorhandenes Projekt kann über den Button "Projekt laden" wieder geöffnet werden.

Zum Speichern und Laden arbeitet man nur mit der Datei mit der Endung *.awr, die anderen Dateien werden automatisch bearbeitet.

Nachdem die Netze erstellt wurden, kann man sie nun trainieren. Das geschieht über den Dialog "Netz trainieren".
Als erstes muss die Anzahl der Muster pro Wort, die vorher angelegt wurden, angegeben werden. Das sind im Beispiel jeweils 10. Danach wird über den Button "Trainingsdaten laden" das Verzeichnis ausgewählt, in dem die Wave-Dateien gespeichert wurden.

Durch die Auswahl einer beliebigen Musterdatei ist das Verzeichnis ausgewählt und kann geöffnet werden. Das Programm liest jetzt alle Musterdateien automatisch ein und führt für jede Datei die Fouriertransformation durch. Die so ermittelten Frequenzdaten werden dann in einem Feld abgelegt und stehen nun für den Lernprozess zur Verfügung.
Jetzt müssen die Lernparameter für das Kohonennetz eingegeben werden. Als erstes werden die Startwerte für die Verbindungsgewichte zufällig initialisiert. Dazu muss vorher die Unter- und Obergrenze des Bereiches festgelegt werden in dem die Startwerte liegen können. Im Beispiel wurde dazu 0 für die Untergrenze und 30 für die Obergrenze gewählt. Durch betätigen des Button "Gewichte initialisieren" werden die Startwerte festgestellt.
Die Gewichte können aber auch durch zufällig ausgewählte Trainingsvektoren initialisiert werden. Dazu müssen die Werte für Unter- und Obergrenze auf 0 stehen.
Nun müssen noch die Lernrate, im Beispiel 0.4, der Anpassungsradius, im Beispiel 5, und die Zahl der Lernschritte, im Beispiel 1000, festgelegt werden. Der Anpassungsradius sollte höchstens die maximale Ausdehnung das Netzes betragen und muss mindestens 1 sein. Bei einer Größe von 1 werden nur die Gewichte des Winnerneurons verändert. Die optimalen Werte für die Parameter können nur durch Probieren herausgefunden werden.
Nachdem alle Werte eingegeben wurden kann der Lernvorgang durch den Button "Netz trainieren" aktiviert werden. Der Lernfortschritt wird im Feld Lernstatus und mit der Fortschrittsanzeige angegeben.
Nach dem Training des Kohonennetz kann nun das Backpropagationnetz trainiert werden. Dazu müssen die Lernparameter äquivalent zum Kohonennetz definiert und initialisiert werden. Die Werte des Beispiels betragen -1 für die Gewicht-Untergrenze, 1 für die Gewicht-Obergrenze, 0.3 für die Lernrate, 0.9 für das Momentum und 10000 Lernschritte.
Im folgenden Bild sieht man nochmal den komplette Dialog mit allen Angaben.

Nach dem Training der Netze kann das fertige Projekt wieder im Dialog "Projekt verwalten" gespeichert werden.

Jetzt kann die Leistung des Netzes im Dialog "Erkennen" überprüft werden. Dazu wird zuerst eine Wave-Datei geöffnet, aus der das Netz ein Wort erkennen soll. Dies geschieht über den Button "WAVE-Datei öffnen", wie es im folgenden Bild demonstriert wird.

Der Name der geöffneten Wave-Datei wird zur Kontrolle im Feld "geöffnete WAVE-Datei" angezeigt.
Nachdem eine Wave-Datei geöffnet wurde kann mit dem Button "Erkennen" der Erkennvorgang angestoßen werden. Das vom Netz erkannte Wort wird dann im Feld "erkanntes Wort" angezeigt. Zur akustischen Kontrolle wird der Inhalt der Wave-Datei auch abgespielt.
Um die Ausgabe der Netze überprüfen zu können, kann die entsprechende Checkbox "Ausgabe des Kohonennetz anzeigen" bzw. "Ausgabe des Backpropagationnetz anzeigen" ausgewählt werden. Dann wird für jedes Netz ein Fenster geöffnet in dem die aktiven Neuronen durch "X" und die inaktiven Neuronen durch "O" markiert sind, wie in den folgenden Bildern zu sehen ist.

Im folgenden Bild ist nochmal der komplette Dialog "Erkennen" aus dem Beispiel zu sehen.

 

Das ist alles was notwendig ist um mit AWR ein Neuronales Netz zur Erkennung von Wörtern zu erstellen.
Auf diese Weise können beliebige Projekte mit den verschiedensten Parametereinstellungen erstellt werden.

Viel Spaß beim Experimentieren.

 

(zum Anfang)    (zur Homepage)

 


Jens Fiedler, 22. November 2001