SVM-Wettbewerbe



Als Praxisanteil am Seminar Mustererkennung mit Support-Vektor-Maschinen (SVM) im WS 01/02 und WS 02/03 sind einige Wettbewerbe entstanden, die nicht nur auf diese Veranstaltung begrenzt sind. Es werden jederzeit Lösungen auch von nicht-Seminarteilnehmern angenommen. Die besten Resultate werden auf dieser Seite aktuell gehalten.

Von den Seminarteilnehmern wird eine Bearbeitung der ersten und einer der beiden komplexeren übrigen Aufgaben erwartet. Die verschiedenen Implementationen werden am Semesterende gegeneinander evaluiert bzgl. Erkennungsleistung auf vorher unbekannten Testdatensätzen.


Aufgabe 1: SVM-Training

Problemstellung: Um etwas Übung im Umgang mit SVM zu bekommen, soll eine abstrakte Aufgabe mit Support Vektor Maschinen gelöst werden. Gegeben werden ein Lerndatensatz aus vektoriellen Daten zu einem 3-Klassenproblem in ASCII-Format. Es soll ein Programm geschrieben werden, das aus diesen Daten versucht, deren Regularität bestmöglich zu erfassen, und Klassifikationen durchführen kann. Das Format der Daten ist denkbar einfach: Jede Zeile repräsentiert ein Lern-Beispiel, d.h. eine Klassennummer 1-3 mit folgenden 64 Fliesskommazahlen, die den Beispielvektor darstellen. Es sollen Experimente mit verschiedenen Kernen, verschiedenen Trainings- und Kernparametern durchgeführt und dokumentiert werden. Hieraus können Erkenntnisse über Einfluß dieser Komponenten gewonnen bzw. bestätigt werden

Spezifikation des Klassifikators: Das Endprogramm soll ein unter Windows, SGI-Irix oder Linux ausführbares Programm sein, das eine Datei mit analoger Struktur des Lerndatensatzes als Eingabe bekommt, (die Klassennummern werden allesamt unbekannt==0 sein) und eine Liste von erkannten Klassen ausgibt. Die Eingabe in das Programm soll über die Standardeingabe der Shell erfolgen, die Ausgabe entsprechend auf die Standardausgabe. Mögliche Aufrufe eines solchen Programms  myclassifier sollen folgende sein:

    cat testfile.vec | ./myclassifier

    cat testfile.vec | ./myclassifier > results.txt

In diesen beiden Beispielen wird eine Daten-Datei nach stdout geschrieben, dies als Standardeingabe des Klassifikators genommen. Im ersten Fall geschieht die Ausgabe der erkannten Klassen einfach in die Shell, im zweiten Fall wird sie in eine Ergebisdatei umgelenkt und ermöglicht so spätere Auswertung der Klassifikationsergebnisse.



Aufgabe 2: Buchstaben-Erkennung

Problemstellung: Erzeugt wurde ein Datensatz von handgeschriebenen Groß-Buchstaben. Dieser wurde zufällig in zwei Teilmengen zerlegt, die eine hiervon als Lerndatensatz deklariert, die zweite wird als spätere Testbasis zurückgehalten. Der Lerndatensatz wird den Teilnehmern zur Verfügung gestellt. Auf Basis dieses 'Rohmaterials' ist jeweils ein Programm zu schreiben, das nach einem spezifizierten Ein- und Ausgabe-Schema neue Buchstaben klassifizieren kann. Durch Kopplung einer zur Verfügung gestellten 'Eingabe'-GUI mit den jeweiligen Lösungsimplementationen entsteht am Ende ein vorführbarer Buchstabenerkenner.

Durch zusätzliche Datengeneration, beliebig intelligente Vorverarbeitung des Rohmaterials, oder beliebig ausgeklügelten Klassifikator bestehen zahlreiche Möglichkeiten, den eigenen Klassifikator problemspezifisch zu optimieren. Die Wahl von Support-Vektor-Maschinen ist sehr erfolgversprechend, andere Klassifikatoren sind jedoch auch erlaubt. Implementationen von SVM stehen zur Verfügung.

Spezifikation des Klassifikators: Das Endprogramm soll wieder ein unter Windows, SGI-Irix oder Linux ausführbares Programm sein, das Beschreibungen einer Reihe zu klassifizierender Großbuchstaben im unten definierten ASCII-Format übergeben bekommt, und die erkannten Zeichen 'A' bis 'Z' ausgibt. Die Eingabe in das Programm soll über die Standardeingabe der Shell erfolgen, die Ausgabe entsprechend auf die Standardausgabe. Mögliche Aufrufe eines solchen Programms  myclassifier sollen zum einen die unter Aufgabe 1 angeführten Varianten umfassen, andererseits jedoch auch Koppelung mit vor-, bzw. hintergeschalteten Programmen ermöglichen:

    cat zeichenliste.acd | ./myclassifier

    cat zeichen1.acd zeichen2.acd | ./myclassifier > results.txt

    letterpainter | ./myclassifier | ./output_result

Im letzten Fall wird ein zur Verfügung gestelltes Editierprogramm mit dem Klassifikator gekoppelt, wodurch eine Online-Demo zur Buchstabenklassifikation entsteht. Selbstverständlich kann noch ein weiteres Programm in die Sequenz angehängt werden, welches kompliziertere Ausgabe-Operationen der einkommenden Buchstabensequenz durchführt, z.B. Darstellung eines Fensters mit eingeblendetem Buchstaben, Sprachausgabe des Zeichens etc. Hierzu ist eine Spezifikation der Ausgabe des Klassifikators notwendig: Es soll pro klassifiziertes Sample der geschätzte Großbuchstabe nach stdout ausgegeben werden.

Diese Datentransfermethode wurde gewählt, um möglichst viel Freiheit in der Wahl der Programmiersprache zu gestatten und gleichzeitig "Modularität" zu erreichen, wie durch die drei Beispiele illustriert wird.

Datenformat: Für die kompakte Darstellung eines handgeschriebenen Zeichens bietet sich eine Codierung basierend auf den Streckenzügen des Zeichens an. Eine einfache ASCII-basierte Auflistung dieser Streckenzüge soll als Datenformat dienen. Eine detailliertere Beschreibung des ACD-Formats (ASCII-Character-Description) mit Beispielen steht zur Verfügung.

Bisherige Resultate:

Rang Testfehlerrate Teilnehmer Datum
1. 1.43% Bhaskara Reddy Poluru 25.3.2003
2. 1.68% Claus Bahlmann 4.3.2002
3. 2.94% Nicolai Mallig 14.2.2002
4. 3.22% Niels Landwehr 13.2.2002



Aufgabe 3: Blütenpollen-Erkennung

Problemstellung: Erzeugt wurde ein Datensatz aus Mikroskopaufnahmen von Blütenpollen. Die unterschiedlich großen Bilder liegen im PGM-Bildformat vor. Pro Probe wurde ein Durchlicht- und Fluoreszenzbild aufgenommen, deren Pixel korrespondieren. Dieser Datensatz wurde zufällig in zwei Teilmengen zerlegt, die eine hiervon als Lerndatensatz deklariert, die zweite wird als spätere Testbasis zurückgehalten. Der Lerndatensatz wird den Teilnehmern zur Verfügung gestellt. Auf Basis dieses 'Rohmaterials' ist jeweils ein Programm zu schreiben, das nach einem spezifizierten Ein- und Ausgabe-Schema neue Pollenbilder klassifizieren kann.
Die Trainingsbilder haben folgende Struktur: obj_fl_01932_0_tr.pgm
Die Fünfstellige Nummer ist der Index der Probe, anschließend folgt die 1 oder 2-stellige Klassennummer (0 = kein Pollen,3 = Erle (Alnus),7 = Hasel (Corylus), 33 = Taxus (Eibe) ), hierauf folgt ein Kürzel für Durchlicht- (tr) oder Fluoreszenzaufnahme (fl).

Durch zusätzliche Datengeneration, beliebig intelligente Vorverarbeitung des Rohmaterials, oder beliebig ausgeklügelten Klassifikator bestehen zahlreiche Möglichkeiten, den eigenen Klassifikator problemspezifisch zu optimieren. Die Wahl von Support-Vektor-Maschinen ist sehr erfolgversprechend, andere Klassifikatoren sind jedoch auch erlaubt. Implementationen von SVM stehen zur Verfügung.

Spezifikation des Klassifikators: Das Endprogramm soll wieder ein unter Windows, SGI-Irix oder Linux ausführbares Programm sein, das als Kommandozeilenparameter einen Verzeichnisnamen übergeben bekommt, und die hierin liegenden PGM-Bildpaare (*_tr.pgm und *_fl.pgm) alphabetisch sortiert klassifiziert. Die Ausgabe soll in die Standardausgabe der Shell erfolgen und jeweils zeilenweise die Bezeichnung einer Probe (Bildname ohne _tr.pgm) gefolgt von dem Code der geschätzten Pollensorte enthalten. Mögliche Aufrufe eines solchen Programms  myclassifier sollen zum Beispiel folgende umfassen:

    ./myclassifier ../sample_dir

    ./myclassifier sample_dir > results.txt

Durch diese Spezifikation ist freie Wahl der Programmiersprache möglich.

Datenformat: Die Bilder der Pollen liegen im einfach handhabbaren PGM-Format vor. Eine genaue Spezifikation dieses Formats ist z.B. über die Linux-Manpages (man pgm) oder in zahlreichen Quellen im Internet einsehbar.

Bisherige Resultate:

Rang Testfehlerrate Teilnehmer Datum
1. 2.94% Klaus Peschke 24.3.2003
2. 4.56% Thorsten Schmidt 14.2.2003
3. 6.77% Janis Fehr 14.2.2003


Programmiersprache: Die Wahl der Programmiersprache ist frei, solange sie Standardeingabe aus der Shell und Standardausgabe in die Shell nach angegebener Spezifikation erlaubt, und die Programme via Kommandozeile aufrufbar sind. Die Plattform sollte entweder Windows, SGI-Irix oder Linux sein.

Software:

Daten/Tools:

Abgabe: Abgabe der Programme zwecks Lauffähigkeit/Vorabtest der Implementationen bitte bis Ende der vorletzten Vorlesungswoche beim Betreuer. In der letzten Seminarsitzung werden die Implementationen von den Teilnehmern kurz vorgestellt und anschließend ihre Erkennungsleistung auf unbekannten Testdatensätzen gegeneinander verglichen.

Betreuer: Bernard Haasdonk
Email: haasdonk@informatik.uni-freiburg.de
WWW: www.informatik.uni-freiburg.de/~lmb/
Telefon: 203 8274 oder -8260 (Sekr.)


Zurück zu den Lehrveranstaltungen

Albert-Ludwigs-Universität Freiburg, Institut für Informatik, Lehrstuhl für Mustererkennung und Bildverarbeitung,
Bernard Haasdonk

Zuletzt aktualisiert am 10. Sep. 2002, 16:33h