<style>
/* reduce from default 48px: */
.reveal {
font-size: 24px;
text-align: left;
}
.reveal .slides {
text-align: left;
}
/* change from default gray-on-black: */
.hljs {
color: #005;
background: #fff;
}
/* prevent invisible fragments from occupying space: */
.fragment.visible:not(.current-fragment) {
display: none;
height:0px;
line-height: 0px;
font-size: 0px;
}
/* increase font size in diagrams: */
.label {
font-size: 24px;
font-weight: bold;
}
/* increase maximum width of code blocks: */
.reveal pre code {
max-width: 1000px;
max-height: 1000px;
}
/* remove black border from images: */
.reveal section img {
border: 0;
}
.reveal pre.mermaid {
width: 100% !important;
}
.reveal svg {
max-height: 600px;
}
.reveal .scaled-flowchart-td pre.mermaid {
width: 100% !important;
/* why? float: left; */
}
.reveal .scaled-flowchart-td svg {
max-width: 100% !important;
}
.reveal .scaled-flowchart-td svg g.node,
.reveal .scaled-flowchart-td svg g.label,
.reveal .scaled-flowchart-td svg foreignObject {
width: 100% !important;
}
.reveal .scaled-flowchart-td p {
clear:both;
}
.reveal .centered {
text-align: center
}
.reveal .width75 {
max-width: 75%;
}
</style>
# Aufbau Layout-Workbench: Zwischenbericht <!-- .element: class="centered width75" -->
Robert Sachunsky <!-- .element: class="centered width75" -->
Stuttgart, 27. Februar 2020
---
## Übersicht
- [Planung: Rückblick](#/2)
- [Ergebnisse](#/3)
- [Probleme](#/4)
- [Planung: Vorschau](#/5)
- [Ideen](#/6)
---
## Planung: Rückblick
1. Aufbau Baseline:
- CLI-Toolchain mit OCR-D
- erster Workflow
- Visualisierung
2. Aufbau GT-Erzeugung
- passender Workflow für Beispiel-Daten
(ohne hist. OCR, mit Tabellen-OLR)
- <!-- .element: style="color:gray" --> GUI zur manuellen Annotation
- Korrektur (Grobklassifikation)
- Erweiterung (Feinklassifikation)
- <!-- .element: style="color:gray" --> Support bei Annotierung
3. Optimierung regelbas. OLR
- Vermeidung häufiger Fehler
- <!-- .element: style="color:gray" --> automatische Nachkorrektur für übrige Fehler
4. <!-- .element: style="color:gray" --> OLR-Evaluierung
5. Aufbau datengetr. OLR
- Training NN-Grobsegmentierung
- <!-- .element: style="color:gray" --> Training Textklassifikation
- <!-- .element: style="color:gray" --> Training NN-Feinsegmentierung
---
## Ergebnisse
### 1. Basis-Toolchain OCR-D
- einfache CLI-Installation per Docker,
transparenter Build (Stuprogit, `ocrd_all`),
Dokumentation (`README.md` und ff.)
- Werkzeug für Daten-Import
- Visualisierung mit PageViewer
- Workflow und GT für historische Drucke (als Smoke-Test)
----
## Ergebnisse
### 2. Aufbau GT-Erzeugung
- erster Workflow für Gutachten-Beispiele (Tesseract-basiert):
[binarize-page-olena-sauvola-segment-tesseract-ocropy-ocr-tesseract-deu.mk](https://stuprogit.iao.fraunhofer.de/layout-workbench/layout-workbench/raw/4abe3497f4425ff5c644ef124b49667a347b7067/binarize-page-olena-sauvola-segment-tesseract-ocropy-ocr-tesseract-deu.mk)
----
## Ergebnisse
### 2. Aufbau GT-Erzeugung
- <!-- .element: style="color:red" --> noch nicht: gute Tabellen-OLR
- Tesseract: `StructuredTable`
|||
<!-- .element: style="color:darkred" -->
- Tabula etc.
----
## Ergebnisse
### 2. Aufbau GT-Erzeugung
- <!-- .element: style="color:red" --> noch nicht: Nachbearbeitung/Annotierung
- <!-- .element: style="color:darkred" --> LAREX (Wunschkandidat) z.Zt. nicht installierbar
 <!-- .element: class="fragment" data-fragment-index="0" -->
- <!-- .element: class="fragment" data-fragment-index="1" --> mögl. Ausweich-Varianten: OCR4all, Aletheia

----
## Ergebnisse
### 3. Optimierung regelbas. OLR
- Vermeidung häufiger Fehler
- überlappende BBoxes: Filtern/Verschmelzen redundanter Textregionen, Clipping von Nachbarn
- besserer Umgang mit Linien
- Parameter: Padding, DPI
- <!-- .element: style="color:darkred" --> Tesseract-Debugging
- <!-- .element: style="color:red" --> noch nicht: automatische Nachkorrektur für übrige Fehler
----
## Ergebnisse
### 5. Aufbau datengetr. OLR
- Training NN-Grobsegmentierung:
- mit Mask-RCNN
 <!-- .element: class="fragment" data-fragment-index="0" -->
- auf hist. Struktur-GT von OCR-D
|||| <!-- .element: class="fragment" data-fragment-index="1" -->
- auf hist. Struktur-GT von OCR-D <!-- .element: class="fragment" data-fragment-index="2" -->
- auf mod. Struktur-GT PubLayNet
 <!-- .element: class="fragment" data-fragment-index="2" -->
---
## Probleme
#### Tesseract-Baseline:
- Tabellenerkennung zu schlecht:
- ohne Linien / viel Zwischenraum: meist nur als Textregionen
- allgemein: oft überdehnt und/oder fraktioniert
- Tabellenstruktur ungeeignet:
- meist ganze Spalten als Zellen
- Textregionen mit größerem Zeilenabstand: meist fraktioniert
- OCR-Fehler:
- Diplopie
- Zeichensatz ("ı" vs "i")
- Kästchen/Kreuze
----
## Probleme
#### NN-Grobsegmentierung auf OCR-D-GT:
- Mask-RCNN skaliert auf feste Bildgröße, aber:
- inhomogene Daten (Buch / Zeitung, DPI)
- falsche Metadaten (DPI)
- <!-- .element: style="color:white" --> partielle Annotation
#### NN-Grobsegmentierung auf PubLayNet-GT:
- suboptimales Schema:
- ohne Kopf-/Fußzeile
- Überschrift/Aufzählung als Grobklasse
- fehlende Feinklassen (Titel/Abschnitts-Überschrift, Abb./Tab.-Überschrift, Fußnote, Autor)
---
## Planung: Vorschau
1. <!-- .element: style="color:gray" --> Aufbau Baseline:
- CLI-Toolchain mit OCR-D
- erster Workflow
- Visualisierung
2. Aufbau GT-Erzeugung
- <!-- .element: style="color:gray" --> passender Workflow für Beispiel-Daten
(ohne hist. OCR, mit Tabellen-OLR)
- GUI zur manuellen Annotation
- Korrektur (Grobklassifikation)
- Erweiterung (Feinklassifikation)
- Support bei Annotierung
3. <!-- .element: style="color:gray" --> Optimierung regelbas. OLR
- Vermeidung häufiger Fehler
- automatische Nachkorrektur für übrige Fehler
4. OLR-Evaluierung
5. Aufbau datengetr. OLR
- Training NN-Grobsegmentierung
- Training Textklassifikation
- Training NN-Feinsegmentierung
---
## Ideen
1. Vorstufe für manuelle Annotation nicht durch Tesseract,
sondern NN-Grobsegmentierung von PubLayNet/PubTabNet
2. spezifisches Modell für Text-Nachkorrektur trainieren (Diplopie, “ı”)
3. komplementärer Ansatz für NN-OLR: partielles Extraktionsmodell...
----
## Ideen
### geplanter Ansatz für NN-OLR: komplette Layoutanalyse / modular
- Grundidee: trennbare Teilprobleme
- _explizite_ Modellierung logischer Tabellenstruktur:
1. visuelle Grob-Segmentierung/Klassifizierung (Mask-RCNN):
- für Regionen (1 Maske pro Region, Klassen: Bild/Text/Tabelle/...)
- für Tabellen-Zellen (1 Maske pro Zelle, 1 Klasse)
2. Zeilen-Segmentierung in Regionen/Zellen
3. Zeilen-OCR
4. Textklassifikation
5. visuelle Fein-Klassifizierung:
- Textregionen: Fließtext, Überschrift, Seitenzahl, Adresse...
- Adresse: Anschrift, Absender, Kontakt...
- Tabelle: Kopf vs Zelle (links-rechts, oben-unten)
- Bild, Graphik, Logo, Handschrift, Stempel...
6. Erkennung der Baum/Graph-Struktur der Tabellen-/Textregionen
7. regelbasierte Extraktion
----
## Ideen
### alternativer Ansatz für NN-OLR: partielle Layoutanalyse / monolithisch
- Grundidee: partielle Layoutanalyse einfacher für Informationsextraktion
- _implizite_ Modellierung logischer Tabellenstruktur:
1. Zeilen-Segmentierung frei/sparse
2. Zeilen-OCR
3. vektorielle Textrepräsentation mit klassen-spezifischen Modellen
4. visuelle Segmentierung/Klassifizierung ([Mask-RCNN](https://arxiv.org/abs/1703.06870) oder [DecompNet](https://arxiv.org/abs/1511.06449)):
- direkt (1 Maske/Klasse pro _Information_)
- Überlagerung von Bild-Rohdaten mit Textvektoren
5. OCR und Extraktion
----
## Ideen
### alternativer Ansatz für NN-OLR: partielle Layoutanalyse / monolithisch
<table><tr><td>Beispiele:</td><td><img src="https://i.imgur.com/Q8V7ps3.jpg" width="500"/></td></tr></table>
<!-- .element: class="fragment" data-fragment-index="1" -->
<table><tr><td>Beispiele:</td><td><img src="https://i.imgur.com/76LzLdR.jpg" width="500"/></td></tr></table>
<!-- .element: class="fragment" data-fragment-index="2" -->
<table><tr><td>Beispiele:</td><td><img src="https://i.imgur.com/chN9Goq.jpg" width="500"/></td></tr></table>
<!-- .element: class="fragment" data-fragment-index="3" -->
<table><tr><td>Beispiele:</td><td><img src="https://i.imgur.com/T3JCXuF.jpg" width="500"/></td></tr></table>
<!-- .element: class="fragment" data-fragment-index="4" -->
<table><tr><td>Beispiele:</td><td><img src="https://i.imgur.com/L16Zk5k.jpg" width="500"/></td></tr></table>
<!-- .element: class="fragment" data-fragment-index="5" -->
<table><tr><td>Beispiele:</td><td><img src="https://i.imgur.com/Frffi3O.jpg" width="500"/></td></tr></table>
<!-- .element: class="fragment" data-fragment-index="6" -->
<table><tr><td>Beispiele:</td><td><img src="https://i.imgur.com/vVefq5f.jpg" width="500"/></td></tr></table>
<!-- .element: class="fragment" data-fragment-index="7" -->
<table><tr><td>Beispiele:</td><td><img src="https://i.imgur.com/4wCtfz3.jpg" width="500"/></td></tr></table>
<!-- .element: class="fragment" data-fragment-index="8" -->
----
## Ideen
### Vergleich Daten-Bedarf NN-OLR
#### GT für geplanten (modularen) Ansatz:
- vollständige Annotation von Layout und Struktur (PAGE-XML):
- Regionen/Zellen (Polygon-Koordinaten und Klasse/Unterklasse)
- Zeilen (Polygon-Koordinaten)
- Textinhalt
→ aufwendig (v.a. wenn vollständig manuell erstellt)
#### GT für alternativen (partiellen) Ansatz:
- Bilder mit Einfärbungen für jede Klasse (Multi-layer TIFF):
- Kontext <!-- .element: style="background-color:magenta" -->
- Kennwert <!-- .element: style="background-color:cyan" -->
- textuelle Varianten (Formulierungen) für Kontexte (Plaintext)
→ speziell
{"metaMigratedAt":"2023-06-15T04:41:52.867Z","metaMigratedFrom":"YAML","title":"LW-Zwischenbericht","breaks":false,"description":"Zwischenbericht Phase 1","slideOptions":"{\"theme\":\"white\",\"slideNumber\":true}","contributors":"[{\"id\":\"c62f1b15-791a-47e1-8e4c-ab2ed00c04bc\",\"add\":22630,\"del\":11659}]"}