OCR

1. Allgemeines

Beim vorliegenden Programm handelt es sich um einen Simulator für Neuronale Netze. Das gesamte System wurde unter Delphi entwickelt. Simuliert werden können Feed-Forward-Netzwerke mit 2 bis 10 Schichten. Alle Neuronen einer Schicht sind mit allen Neuronen (ausser natürlich dem Bias) der nächsten Schicht verbunden. Intern wird mit Werten von 0 bis 1 für die Neuronenaktivität und Werten zwischen -1 und 1 für die Verbindungsgewichte gerechnet. Als Lernfunktion wird stets "Backpropagation-Momentum" verwendet. Als Aktivierungsfunktion dient die sigmoide Funktion 1/(1+exp(-net)).

Alle Schichten (ausser der Output-Schicht) besitzen immer ein Bias. Als Zusatzfunktion ist eine OCR-Buchstabenerkennung implementiert. 

Beim Überführen des gemalten (64x64) Musters in die 15x15-Matrix, welche an das Netz angelegt wird, werden folgende Schritte durchgeführt:

1.      Grenzen feststellen, in welchem Bereich der Zeichenfläche tatsächlich gemalt wurde.

2.      Skalierung auf die komplette 64x64 große Zeichenfläche, die „aspect-ratio“ wird dabei beibehalten.

3.      Zerlegung in 6x6 grosse Blöcke, die sich zu je 2 Pixel an jeder Seite mit dem Nachbarfeld überlappen

4.      Der Mittelwert der 36 Felder dieser Blöcke wird in die 15x15-Matrix überführt und dann an das Netz angelegt.

 2. Bedienung

2.1. Erstellen des Netzes

 

Zuerst gibt man die gewünschte Anzahl der Layer an. Der Wert darf zwischen 2 und 10 liegen. Anschliessend betätigt man den "New Net" Button. Alternativ kann man auch ein abgespeichertes Netz laden, dann entfällt der nächste Schritt.

Danach wählt man aus, ob man ein einfaches Feed-Forward-Netz simulieren oder OCR betreiben will. Zusätzlich gibt man in der Tabelle die Anzahl der Neuronen in jedem Layer (ohne Bias) an, beginnend mit dem Input-Layer. Bei OCR muss der Input-Layer 225 und der Output-Layer 26 Neuronen besitzen. Diese Werte werden automatisch eingestellt, wenn der OCR-Mode ausgewählt ist. Anschliessend betätigt man den "Next"-Button um die zu lernenden Muster festzulegen.

 

Man kann auch ein gespeichertes Netz laden, welches dann ohne weiteres Lernen getestet werden kann. Möchte man ein geladenes Netz weiter trainieren, muss man nach dem Laden des Netzes auch einen Mustersatz eingeben bzw. laden.

2.2. Mustereingabe

2.2.1. Mustereingabe für Simple-Mode

 

Man kann mittels dem "New Patternset"-Button einen neuen Mustersatz erstellen oder mit "Open" einen gespeicherten Satz laden und erweitern. Mit "Add Pattern" wird ein neues Muster an den Mustersatz angehängt. Das aktuell ausgewählte Muster kann im Edit-Feld geändert werden. 

Im  Raster wird die aktuelle Neuronen-Belegung für das ausgewählte Muster angezeigt (weiss=deaktiviert; schwarz=aktiviert). Links des roten Trennstrich befinden sich die Neuronen der Input-Schicht und rechts die der Output-Schicht. Die Aktivierung der einzelnen Neuronen kann durch Mausklicks in das Raster geändert werden.

 

2.2.2. Mustereingabe für OCR-Mode

 

Man kann mittels dem "New Patternset"-Button einen neuen Mustersatz erstellen oder mit "Open OCR" einen gespeicherten Satz laden und erweitern. 

Mit "Add Letter" wird ein weiteres Muster zum Mustersatz hingefügt. Die Nummer des aktuell gewählten Musters und den damit realisierten Buchstaben werden im Edit-Feld angezeigt und können dort geändert werden. Im linken Image-Feld kann dann das Muster gemalt werden. Mit "Clear" kann man das Fenster löschen, wenn man das Muster erneut malen möchte. Wenn der realisierte Buchstabe angegeben ist, kann man mit dem "Prepare+Add"-Button die Muster-Buchstabe-Kombination in den Mustersatz übernehmen. Dabei findet zunächst eine Vorbehandlung des eingegebenen Musters statt.

 

 

Im 1. Schritt dieser Vorbehandlung wird das Muster auf die maximal mögliche Größe gezoomt, dabei wird die Aspect-Ratio, also das Höhe-Breite-Verhältnis beibehalten. Im 2. Schritt wird das gezoomte Muster in, sich leicht überlappende, 15x15 rezeptive Felder unterteilt. Der Farb-Mittelwerte der einzelnen Pixel in jedem rezeptiven Feld wird berechnet und diese 225 Werte bilden dann die Aktivierung der Neuronen für die Input-Schicht. Diese Belegung wird auch noch mal dargestellt.

 

2.2.3. Muster speichern

Mit dem "Save Pattern"-Button kann der aktuelle Mustersatz abgespeichert werden. Um die Dateien später besser unterscheiden zu können, sollte jede Muster-Datei des "Simple-Mode" die Endung ".pat" erhalten. Für die Muster-Datei des "OCR-Mode" ist die Endung ".ocr" vorgesehen.

Zur Speichertechnik: 

Bei Mustern des "Simple-Mode" wird die Belegung der Input-Schicht, sowie die Soll-Belegung der Output-Schicht gespeichert. Diese Werte werden beim Laden eines Musters direkt für das Trainieren benutzt. Bei Mustern des "OCR-Mode" wird jedoch das gezeichnete Muster nach dem Zoomen gespeichert. Damit besteht später noch die Möglichkeit, sich die gezeichneten Muster noch einmal anzusehen. Der Nachteil liegt jedoch in der höheren Dateigrösse.

2.3. Netz trainieren

Hat man die Muster geladen bzw. eingegeben, kann das Netz damit trainiert werden.

 

Man gibt dazu zunächst eine Lernrate (default=0,2) und ein Momentum (default=0) an. Desweiteren wird ein Noise-Faktor zwischen 0 und 1 angegeben. Dieser gibt an, wie stark die Muster beim Berechnen der Quadratfehlersummen verrauscht werden. Das Lernen kann in 1er-, 10er-, 100er-, 1 000er-, 10 000er- oder 100 000er-Schritten erfolgen. Nach jeweils 10 Schritten wird die Quadratfehlersumme berechnet und die Fehlerkurve aktualisiert. Das Lernen lässt sich jederzeit mit dem „Stop“-Button abbrechen.

Oder man gibt die gewünschte "Ziel-Quadratfehlersumme" an und betätigt den "To Error"-Button. Nach jeweils 10 Schritten wird geprüft, ob der gewünschte Fehler unterschritten ist. Danach wird das Lernen fortgesetzt oder abgebrochen. Das Muster, welches im jeweiligen Lernschritt benutzt wird, wird zufällig ausgewählt. Mit dem "R"-Button kann man die Verbindungen zwischen den Neuronen mit zufälligen Werten initialisieren.

 

2.4. Trainiertes Netz testen

2.4.1. Simple-Mode

Im "Simple-Mode" sehen wir rechts unten das trainierte Netz. Die oberste Schicht ist die Input-Schicht, die unterste ist die Output-Schicht. Die Farbe der Neuronen zeigt den Aktivierungszustand an. Ein graues Neuron ist deaktiviert bzw. nur schwach aktiv. Je grüner das Neuron ist, desto stärker ist seine Aktivierung. Mit der Farbe der Verbindungslinien ist die Gewichtung der Verbindung angedeutet (grün=stark positiv; rot=stark negativ; grau=etwa 0).

Durch Anklicken der Neuronen in der Input-Schicht, kann der Benutzer die Aktivierung zwischen aktiv und deaktiv wechseln. Nach jeder Änderung werden automatisch die Neuronenaktivierungen für alle anderen Schichten berechnet und die Anzeige aktualisiert.

 

2.4.2. OCR-Mode

Zum Testen des trainierten Netzes im OCR-Mode, kann der Benutzer, ähnlich wie beim Erstellen der Muster zum Lernen, in ein Image-Feld ein Muster malen. Die Weiterbehandlung mit zoomen, unterteilen in rezeptive Felder und berechnen der Neuronenaktivierung erfolgt nach Klicken auf den "OCR"-Button. Die Neuronen werden schichtenweise berechnet, anschliessend wird im Diagramm angezeigt, wie stark die Neuronen der Output-Schicht aktiviert sind. Jedes Neuron steht für einen Buchstaben von a-z. Der Buchstabe mit der grössten Aktivierung wird hervorgehoben.

 

2.5. Netze laden und speichern

Man kann das Netz für den späteren Gebrauch auch abspeichern. Als Dateiendung sollte ".net" verwendet werden.

3. Download

Download der ausführbaren Dateien inkl. Testnetze und Testmuster

neurosim.zip

Kompletter Download inkl. Delphi-Sourcecode

neurosim_all.zip