<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 ![](https://i.imgur.com/9S04bJf.png =600x) ---- ## 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" --> |![](https://i.imgur.com/aVKph6b.png)| <!-- .element: class="fragment" data-fragment-index="1" --> ---- ## Lösungsansatz: partielle Layoutanalyse ### Reduktion des Datenbedarfs - Bild-Augmentierung - Modell-Transfer von Standardproblemen ![](https://i.imgur.com/4DoBAaP.png) <!-- .element: class="fragment" data-fragment-index="0" --> |![](https://files.gitter.im/ocrd-segment/community/dKdZ/raw_varnhagen_rahel03_1834_OCR-D-IMG-CROP_0019.pred.png =300x)|![](https://files.gitter.im/ocrd-segment/community/PYdG/raw_siemens_abhandlungen_1881_OCR-D-IMG-CROP_0013.pred.png =300x)|![](https://files.gitter.im/ocrd-segment/community/zXkn/raw_siebold_suesswasserfische_1863_OCR-D-IMG-CROP_0011.pred.png =300x)| <!-- .element: class="fragment" data-fragment-index="1" --> |![](https://files.gitter.im/ocrd-segment/community/ngYN/PMC2999828_00004.pred.png =300x)|![](https://files.gitter.im/ocrd-segment/community/WlP6/PMC3270436_00001.pred.png =300x)|![](https://user-content.gitter-static.net/a24035ee255f2476eb538f1a36dcdae6cdf78cab/68747470733a2f2f66696c65732e6769747465722e696d2f6f6372642d7365676d656e742f636f6d6d756e6974792f6341314b2f7468756d622f504d43333031343637365f30303030312e707265642e706e67 =300x)| <!-- .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 ![](https://i.imgur.com/X6HE323.png =400x) ---- ## Schwierigkeiten ### automatische Vorverarbeitung #### Dewarping: Hintergrund/Ausleuchtung/Layout ![](https://i.imgur.com/g5eHW21.jpg =400x) ---- ## 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}]"}
    680 views