Das Kohonen-Modell und deren Realisierung im Programm

Das eigentliche Kohonennetz wird in der KohonenNetz-Klasse des Programms realisiert. Als Hilfsklasse dient die Klasse NeuroVektor , die im wesentlichen ein Neuron der Feature-Map darstellt. Für die Speicherung und Zuordnung der für das Netz benötigten Eingabe- und Ausgabevektoren einer Person dient die Klasse MusterSpeicher. Sie verwendet zusätzlich zwei weitere Klassen, die Person-Klasse und die Eingabe-Klasse. Die Personen-Klasse wird zur Speicherung aller notwendigen Personendaten, wie Name, Identifikationsmuster oder ein Farbwert für Netzausgaben verwendet. Die Eingabe-Klasse enthält im wesentlichen einen Eingabevektor (erzeugt von der Bildverarbeitung), einen eindeutigen Namen für das Muster (im Projekt der Dateiname des Bildes) und einen Wert, der angibt ob das Muster zum lernen verwendet werden soll, also im Netz "gespeichert" werden soll.

Aufbau der Kohonen-Feature-Map ...

Eine Kohonen-Feature-Map ist im Prinzip aufgebaut wie ein zweischichtiger Musterassoziator. Von einer Eingabeschicht wird Aktivation ausgebreitet hin zu einer i.d.R. zweidimensionalen Ausgabeschicht, die die eigentliche selbstorganisierende Karte darstellt. Dabei sind die Neuronen der Kartenschicht wechselseitig mit jedem Neuron verbunden. Innerhalb der Kartenschicht ist jedes Neuron j eindeutig durch seine Koordinaten x und y bestimmt.

Im FingerPrint - Projekt wurde das Prinzip der Feature-Map übernommen und mit zwei Schichten realisiert, der Eingabe- und der Ausgabeschicht. An den n Eingabeneuronen der Eingabeschicht wird das externe Eingabesignal x = (x1, ..., xn) angelegt, wobei es sich hier um einen berechneten Merkmalsvektor eines Fingerabdrucks handelt. An jedes Neuron der Karte führen daher n Eingabefasern die Aktivation der Eingabeschicht heran. Dies bedeutet, das jedes Neuron der Eingabeschicht die Daten aller Merkmale eines Fingerabdrucks erhält und diese jeweils einzelnen bewerten muß. Somit ist die Dimension eines Eingabevektors identisch mit der Dimension des Gewichtsvektors eines Neurons der Kartenschicht.

... und deren Realisierung im Programm

Die Klasse KohonenNetz implementiert das zweischichtige Netz. Es besteht aus zwei zweidimensionalen Feldern, der Feature-Map (m_FeatureMap[][]) und der Output-Map (m_OutputMap[][]). Für das Projekt wurde ein ausreichende Dimensionierung der Ein- und Ausgabeschicht mit 50x50 Neuronen gewählt. Jedes Neuron in der Feature-Map wird durch eine NeuroVektor - Klasse Repräsentiert. Ein NeuroVektor enthält lediglich eine Anzahl von Gewichtswerten, die später beim Lernen angepaßt werden. Die Dimension der NeuroVektoren ist abhängig von der Anzahl der Eingabesignale und somit von dem Ergebnis der Bildverarbeitung. Da diese pro Fingerabdruck 722 Merkmale definiert, umfaßt die Dimension des NeuroVektors für aller Neuronen in der Eingabeschicht 722 Elemente. Bei einer Neuronenanzahl von 50x50 =2500 und einem Merkmals - Wertebereich von einem Byte benötigt die Eingabeschicht also 50x50x722=1,805 Millionen Elemente (also immerhin stolze 1,7Mbyte).

Die Ausgabeschicht, die ebenfalls aus NeuroVektoren besteht, speichert in den Gewichten ihrer 50x50 Neuronen die Ausgabewerte. Die Dimension eines solchen Ausgabevektors beträgt lediglich 16 Gewichte. Anhand dieses 16 stelligen Bytearrays wird später eine Person identifiziert, indem dieses Array mit den ebenfalls 16 stelligen Idetifikationsmustern verglichen wird. Die Person, dessen Muster am besten mit dem Ausgabevektor übereinstimmt hat das Rennen gemacht und wird als Ergebnis erkannt.

Home