|
|
Auf dieser Seite wird der geplante Einsatz von Machine Learning zur automatisierten Erkennung bzw. Klassifizierung der Wappentypen (aus Workpackage 2) beschrieben.
|
|
|
|
|
|
Inhalt:
|
|
|
|
|
|
[TOC]
|
|
|
|
|
|
# Zusammenstellen der Groundtruth #
|
|
|
|
|
|
Basierend auf der Übersicht (siehe [hier](Wappensupralibros-und-Machine-Learning/%C3%9Cbersicht-der-Wappentypen)) wird ein [Datenset für Training und Validierung](https://labs.onb.ac.at/gitlab/bed/bed-general/-/blob/main/Groundtruth/BE_GT.csv) zusammengestellt. Dabei werden die 4 folgenden Kategorien unterschieden, die Zahl in Klammern bezeichnet die Anzahl der Bilder in der jeweiligen Kategorie:
|
|
|
- Wappentypus A (121)
|
|
|
- Wappentypus B (200)
|
|
|
- Wappentypus C (47)
|
|
|
- Kein Wappen (473)
|
|
|
|
|
|
Es konnten für den Wappentypus C nicht mehr als 47 Beispiele gefunden werden, optimal wären mehr als 100.
|
|
|
|
|
|
Zusätzlich wird ein weiteres Groundtruth Datenset erstellt, welches auf den selben Dateien basiert wie das erste, allerdings nur einen rechteckigen Ausschnitt der originalen Bilddateien beinhaltet. Die Wahl des Ausschnitts wurde durch eine statistische Analyse der bounding boxes (dt. Hüllkörper) um die Supralibros bestimmt. Dazu wurden manuell bounding boxes von 79 zufällig ausgewählten Einbänden mit Wappen (mit GIMP) abgemessen und deren Höhe und Breite aufgezeichnet, siehe [hier](https://labs.onb.ac.at/gitlab/bed/bed-general/-/blob/main/Groundtruth/bounding_boxes.csv) für die Rohdaten. Aus den Rohdaten wurden die normierte Höhe und Breite (relativ zur gesamten Höhe und Breite des Einbands) ermittelt. In der folgenden Grafik sind diese bounding boxes und ihre Mittelpunkte sowie das uniform für den Ausschnitt zu verwendende Rechteck aufgetragen:
|
|
|
|
|
|
<div align="center">
|
|
|
|
|
|
<figure>
|
|
|
<img src="uploads/8c01e3068ba0e75cf3c6019009be73ba/bounding_boxes.png" width="450">
|
|
|
<figcaption>Abbildung 1: Ermittelte bounding boxes (in hellrot) um Wappen auf Einbänden aus dem Groundtruth Datenset, zusammen mit ihren Mittelpunkten (blaue Kreuze). Das in dunkelrot und fett eingezeichnete Rechteck wurde durch Mittelung über alle Mittelpunkte bestimmt (und ist sehr nah bei (0.5, 0.5) verortet). Seine Höhe (0.44) und Breite (0.54) ist das 97%-Quantil aller aufgezeichneten Höhen und Breiten. Das Seitenverhältnis der Grafik ist an das typische Seitenverhältnis 3:2 eines Einbands angelehnt.</figcaption>
|
|
|
</figure>
|
|
|
</div>
|
|
|
|
|
|
Die zwei so gebildeten Groundtruth Datensets können mittels des Skripts [download_groundtruth.py](https://labs.onb.ac.at/gitlab/bed/bed-general/-/blob/main/Skripte/download_groundtruth.py) heruntergeladen werden. Zusätzlich sollen die beiden Datensets durch *Augmentation* (zufälliges Rotieren, Verschieben, Zoomen) vor dem Training verbessert werden.
|
|
|
|
|
|
# Auswahl des Modells und Training #
|
|
|
|
|
|
Es soll ein CNN verwendet werden ähnlich zur vorigen Anwendung im [classifying-eugeniana](https://labs.onb.ac.at/gitlab/labs-team/classifying-eugeniana) Projekt (ähnliche Anzahl an Schichten und trainierbaren Parametern), allerdings nicht als binärer Klassifikator sondern mit der Unterscheidung in die oben genannten 4 Kategorien und der Ausgabe einer Wahrscheinlichkeit für jede Kategorie.
|
|
|
|
|
|
Es sollen zunächst zwei Netzwerke auf den Groundtruth Datensets trainiert werden. Die Datensets bestehen jeweils aus 841 Bildern, davon werden 673 für Training und 168 für Validierung verwendet. Siehe Abbildung 2 für einen Auszug von 20 Bildern der Trainingsdaten des ausgeschnittenen Datensets.
|
|
|
|
|
|
<figure>
|
|
|
<img src="uploads/training/bed_training_data_augmented.png">
|
|
|
<figcaption>Abbildung 2: Auszug der Trainingsdaten aus dem Groundtruth Datenset der ausgeschnittenen Bilder. Zur Verbesserung der Allgemeinheit der Daten wurden diese augmentiert mittels zufälliger Rotation, Zoom und Translation.</figcaption>
|
|
|
</figure>
|
|
|
|
|
|
## Details zum Netzwerk ##
|
|
|
|
|
|
Die Struktur des Netzwerks ist aus dem folgenden Code ersichtlich:
|
|
|
|
|
|
```python
|
|
|
model = Sequential([
|
|
|
Conv2D(16, 3, padding='same', activation='relu', input_shape=(img_height, img_width, 3)),
|
|
|
MaxPooling2D(),
|
|
|
Conv2D(32, 3, padding='same', activation='relu'),
|
|
|
MaxPooling2D(),
|
|
|
Conv2D(64, 3, padding='same', activation='relu'),
|
|
|
MaxPooling2D(),
|
|
|
Dropout(0.2),
|
|
|
Flatten(),
|
|
|
Dense(512, activation='relu'),
|
|
|
Dense(num_classes)
|
|
|
])
|
|
|
```
|
|
|
|
|
|
Es ist somit (bis auf die zusätzliche Dropout-Schicht und die Anzahl der Ausgabeparameter) sehr ähnlich zum bereits verwendeten Netzwerk des classifying-eugeniana Projekts.
|
|
|
|
|
|
## Einstellung der Parameter des Trainings ##
|
|
|
|
|
|
Je nach Anpassung der Parameter wird eine Genauigkeit von 90% bis 97% auf dem Validierungs-Set erreicht. Durch geringfügige Änderungen einiger Parameter verändert sich allerdings die Performanz relativ stark und es sollten robustere Werte für die Parameter gefunden werden, die eine konsistent hohe Performanz ermöglichen.
|
|
|
|
|
|
Weiterhin soll durch Evaluation der Vorhersagen auf dem Validierungs-Set eine entsprechende Anpassung der Trainingsdaten, beispielsweise eine weitere Augmentation stattfinden. Der Parameter der Dropout Schicht (welcher Prozentsatz der Neuronen herausgefiltert wird) ist ebenfalls ein zu optimierender Bestandteil unserer Überlegungen.
|
|
|
|
|
|
Hier ist eine Auflistung der im Training einzustellenden Parameter:
|
|
|
- Stapelgröße (batch size)
|
|
|
- Pixelanzahl je Bild (image width/height)
|
|
|
- Lernrate (learning rate) und eventueller Zerfall dieser
|
|
|
- Anzahl der Durchläufe (epochs) beim Training
|
|
|
- Faktor der Dropout-Schicht (Prozentsatz der zu vernachlässigenden Neuronen)
|
|
|
- Intervallgröße der zufällig gewählten Augmentationsparameter der Trainingsdaten: Rotation, Zoom, Translation (+ eventuelles Bildrauschen/Kontrastveränderung)
|
|
|
|
|
|
Ebenso ist die Verwendung des Kreuzvalidierungsverfahren geplant, um eine Abhängigkeit von der speziellen Wahl der Trainings- und Validierungsdaten zu vermeiden.
|
|
|
|
|
|
Für ein Subset der aufgelisteten Parameter ist eine Hyperparameteroptimierung geplant, welche beispielsweise über Rastersuche, Zufallssuche, Bayessche Optimierung, etc durchgeführt wird.
|
|
|
|
|
|
# Anwendung auf den vollen ABO-Korpus und BE-Teilmenge #
|
|
|
|
|
|
Zum einen möchten wir das Modell auf den kompletten ABO-Korpus (unter Einschränkung der Veröffentlichung von 1501–1736) anwenden sowie auf alle BE-Signaturen. Dabei sollen die Ergebnisse im ersten Fall verglichen werden mit denen von [classifying-eugeniana](https://labs.onb.ac.at/gitlab/labs-team/classifying-eugeniana), um eine Verbesserung des Modells bestätigen zu können. Im zweiten Fall soll untersucht werden, wie viele der BE-Signaturen ein Wappensupralibros haben und wie viele nicht. |