<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>
# Layout-Analyse für Tabellen-Dokumente: Zwischenbericht <!-- .element: class="centered width75" -->
_Verbund-Arbeitstreffen Smart-HEC 25.09.2020_ <!-- .element: class="centered width75" -->
Robert Sachunsky, Dr. Andreas Niekler <!-- .element: class="centered width75" -->
---
## Übersicht
- [Rekap.: Problemstellung](#/2)
- [Rekap.: Lösungsansatz](#/3)
- [Schwierigkeiten](#/4)
- [Status und Aussicht](#/5)
----
### Zeitplan
- Q4: Erste Beta-Version der KI-Logik ist entwickelt.
- Status ist ein funktionsfähige Version, die nun hinsichtlich der zu erkennenden Werte evaluiert und angepasst wird.
---
## Problemstellung (Heizkostenabrechnung)
- Abrechnugszeitraum
- Nutzungszeitraum
- ~~Postleitzahl~~
- Gebäudefläche
- Wohnungsfläche
- ~~Energieträger~~
- Verbrauch Energieträger (Anzahl)
- Verbrauch Energieträger (Einheit)
- Verbrauch Energieträger (Kosten)
- Verbrauchseinheiten des Gebäudes
- Verbrauchseinheiten der Wohnung
- Verbrauchseinheiten (Einheit)
- Verbrauch Warmwasser des Gebäudes
- Verbrauch Warmwasser der Wohnung
- Verbrauch Warmwasser (Einheit)
- Kosten des Kaltwassers für Warmwassererzeugung
- Heizkosten des Gebäudes für Raumwärme
- Heizkosten des Gebäudes für Warmwasser
- Anteil Grundkosten für Raumwärme
- Anteil Grundkosten für Warmwasser
<!-- .element: class="fragment" data-fragment-index="1" -->
externe Fallunterscheidungen _vorab_ → Entscheidungsbaum
<!-- .element: class="fragment" data-fragment-index="2" -->
- Ein-, Zwei-, Mehrfamilienhaus
- Haus-, Wohnungseigentümer, Mieter, Verwalter
- Zentralheizung, Etagenheizung, Nachtspeicher
- Keller, Warmwasserbereitung ...
<!-- .element: class="fragment" data-fragment-index="2" -->
interne Klassifikation _automatisch_:
<!-- .element: class="fragment" data-fragment-index="3" -->
- auf welcher Seite?
- welcher Messdienstleister?
- BFW
- Brunata
- Ista
- Kalo
- Minol
- Techem
- _Sonstige_
<!-- .element: class="fragment" data-fragment-index="3" -->
----
## Problemstellung (Heizkostenabrechnung)
Wie geht der Mensch vor?
<!-- .element: class="fragment" data-fragment-index="0" -->
<table><tr><td>Wohnfläche:</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>Anteil Grundkosten Heizung:</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>Verbrauchseinheiten (Gebäude):</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>Verbrauchseinheiten (Wohnung):</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>Heizkosten Gebäude (Raumwärme):</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>Verbrauch Energieträger (Anzahl):</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>Verbrauch Energieträger (Einheit):</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>Verbrauch Energieträger (Kosten):</td><td><img src="https://i.imgur.com/4wCtfz3.jpg" width="500"/></td></tr></table>
<!-- .element: class="fragment" data-fragment-index="8" -->
----
## Problemstellung (Heizkostenabrechnung)
### Herausforderungen → <span>Lösungsstrategien</span> <!-- .element: style="background-color:lightgreen" -->
- Verschränkung von visueller und textueller Information →
- _erst_ textuelle Klassifikation _dann_ visuelle Segmentierung <!-- .element: style="background-color:lightgreen" -->
- sehr komplexe Layouts →
- Pretraining auf Seitensegmentierung <!-- .element: style="background-color:lightgreen" -->
- Training auf echten Beispielen <!-- .element: style="background-color:lightgreen" -->
- randomisierte Augmentierung <!-- .element: style="background-color:lightgreen" -->
- hohe sprachliche Varianz →
- Pretraining mit Wortvektoren <!-- .element: style="background-color:lightgreen" -->
- Training auf großen Mengen Text <!-- .element: style="background-color:lightgreen" -->
- randomisierte Generierung von Varianten <!-- .element: style="background-color:lightgreen" -->
- redundante Einträge, aber auch mehrseitige Layouts →
- Augmentierung beim Training <!-- .element: style="background-color:lightgreen" -->
- Wertbedingungen bei Inferenz <!-- .element: style="background-color:lightgreen" -->
- Semantik (Addition, Subtraktion, Multiplikation, Division) →
- Plausibilisierung, Nachkorrektur <!-- .element: style="background-color:lightgreen" -->
---
## Lösungsansatz: partielle Layoutanalyse
- Grundidee: partielle Layoutanalyse einfacher, relevant nur ~20 Zahlenwerte
- _implizite_ Modellierung logischer Tabellenstruktur:
1. Freifeld-Zeilensegmentierung (regelbasiert) → Textzeilen
1. Standard-OCR Tesseract (CNN-LSTM) → Textzeilen+Text
1. textuelle Klassifikation (RNN?) → Textzeilen+Text+**Kontext**
1. visuelle Segmentierung ([Mask-RCNN](https://arxiv.org/abs/1703.06870)) auf Bild+Textzeilen+Kontext-Markierung → Kennwert-Markierung
1. Nachverarbeitung und Extraktion
----
## Lösungsansatz: partielle Layoutanalyse
### Objekterkennung/Instanzsegmentierung: Mask-RCNN (Standard)
- Multitask-Learning für Objekterkennung auf Bildern:
- Klassifikation
- Bounding-Box-Regression
- Pixelmaske innerhalb der BBox

----
## Lösungsansatz: partielle Layoutanalyse
### Objekterkennung/Instanzsegmentierung: Mask-RCNN (Erweiterungen)
- 1 Klasse pro Kennwert, aber Multitask-Learning über alle Klassen (Kennwerte)
- 2 zusätzliche Eingabe-Kanäle: Text vs. Nontext, Text vs. Kontext
- 1 zusätzlicher Ausgabe-Layer: Seiten-Klassifikation (welcher Messdienstleister); per Input-as-Output
----
## Lösungsansatz: partielle Layoutanalyse
### Datenbedarf und Groundtruth-Erstellung
- textuelle Varianten (Formulierungen) für Kontexte (Plaintext)
- Bilder annotiert mit Markierungen für jeden Kennwert:
- Kontext <!-- .element: style="background-color:magenta" -->
- Kennwert <!-- .element: style="background-color:cyan" -->
- Herausforderung: DL-Training braucht _große Mengen_ Daten
- automatische Vorverarbeitung mit OCR-D-Pipeline <!-- .element: style="background-color:lightgreen" -->
- manuelle Annotation mit LAREX (PAGE-XML) <!-- .element: style="background-color:lightgreen" -->
----
## Lösungsansatz: partielle Layoutanalyse
### Groundtruth-Erstellung
<table><tr><td><img src="https://i.imgur.com/KbLvnED.png" width="400"/></td><td><img src="https://i.imgur.com/4v7wosU.png" width="400"/><br/><img src="https://i.imgur.com/4v7wosU.png" width="400"/></td></tr></table>
<!-- .element: class="fragment" data-fragment-index="0" -->
|| <!-- .element: class="fragment" data-fragment-index="1" -->
----
## Lösungsansatz: partielle Layoutanalyse
### Reduktion des Datenbedarfs
- Bild-Augmentierung
- Modell-Transfer von Standardproblemen
 <!-- .element: class="fragment" data-fragment-index="0" -->
|||| <!-- .element: class="fragment" data-fragment-index="1" -->
|||| <!-- .element: class="fragment" data-fragment-index="2" -->
---
## Schwierigkeiten
### automatische Vorverarbeitung
OCR-D optimiert für saubere _Scans_ historischer Drucke
- Kontrast/Farbnormalisierung (neu)
- Roh-Entrauschung (neu)
- Deskewing (teilweise nicht robust)
- De-Keystoning/Dewarping (unbrauchbar)
----
## Schwierigkeiten
### automatische Vorverarbeitung
#### Deskewing: Robustheit

----
## Schwierigkeiten
### automatische Vorverarbeitung
#### Dewarping: Hintergrund/Ausleuchtung/Layout

----
## Schwierigkeiten
### LAREX / Annotations-Server
- Bugs bei Installation
- Bugs bei PAGE-Import/Export
- Bugs bei Darstellung
- Bugs bei Handling
----
## Schwierigkeiten
### Mask-RCNN / Training (1)
- Implementierung (Upstream) jetzt nicht mehr gepflegt
- Bugs in Batch-Generatoren (identische Bilder in allen Threads, Hängen bei unvollständigen Batches)
- GPU-Speicherbedarf auf Workstation, Multi-GPU / CPU-Oversubscription auf HPC-Cluster
- zusätzl. Eingabekanäle / Modelltransfer
- Augmentierung: Verallgemeinerung (Bild vs. Markierung vs. Annotation)
----
## Schwierigkeiten
### Mask-RCNN / Training (2)
- auf leeren Seiten: zufällige Proposals generieren (statt nichts), mit negativen Regionen auffüllen (statt nichts)
- Falschpositive: Hintergrund lernen durch saubere Unterscheidung zwischen Füll-Null und Klasse Null
- nur 1 Klasse auf einmal: inaktive Klassen in Zielfunktion korrekt unterdrücken (nicht unerlaubt klassifizierte Instanzen sondern Klassen-Anteil in Kreuzentropie)
- nur 1 Klasse auf einmal: auch bei Inferenz
----
## Schwierigkeiten
### Open-Source-ML allgemein
- Frameworks zum Maschinellen Lernen: sehr kurzlebig
- hohe Komplexität, viele Details, Korrektheit nur statistisch überprüfbar →
- riskant bei neuen Aufgaben / Daten
- erschwert zeitliche Planbarkeit
---
## Status und Aussicht
### Beispiele
----
## Status und Aussicht
### Experimente
- alles einmal durchtrainieren, dann kontinuierlich weiter evaluieren (mAP)
- Hyperparameter (Layer-Topologie, NMS-Schwellwerte und Konfidenzen, Optimierer, Regularisierung, Lernrate, Augmentierung)
- erst leichte Klassen (Datum, Kosten, Fläche), dann schwere (Verbrauch/Einheiten, Anteile)
- erst leichte Beispiele (Altdaten), dann schwere (Neudaten)
- erst homogene Layouts, dann generisch _Sonstige_ unter Mischung aller Daten
- Transfer nicht von Photoszenerie-Detektion, sondern von domänenspezifischen Modellen: PubLayNet-Seitensegmentierung trainieren
----
## Status und Aussicht
### Nächste Schritte
- Bootstrap/Konsolidierung Groundtruth
- weitere (komplexere) Kennwerte dazunehmen
- Seitenklassifikation (Messdienstleister) durch Erweiterung auf 4. Head-Layer; Trainingsmethode Input-as-Output
- Optimierung (v.a. Robustheit gegenüber schlechter Bildqualität, Rückweisung/Konfidenz)
- Textklassifikation aufbauen
- Laufzeit-Integration als OCR-D-Prozessor
- logisches Datenmodell zur wechselseitigen Plausibilisierung
- Deployment als Webservice (Bild→Kennwerte)
- Werkzeuge für Training kapseln und für Nachführung von weiterem GT verfügbar machen (mehr Daten / neue Klassen / neue Layouts)
- Publikation und Dokumentation
{"metaMigratedAt":"2023-06-15T13:10:32.532Z","metaMigratedFrom":"YAML","title":"Layout-Analyse für Tabellen – Zwischenbericht","breaks":false,"description":"Übersichtsfolien Verbund-Treffen Smart-HEC 25.09.2020","slideOptions":"{\"theme\":\"white\",\"slideNumber\":true}","contributors":"[{\"id\":\"c62f1b15-791a-47e1-8e4c-ab2ed00c04bc\",\"add\":10689,\"del\":9543}]"}