<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 h3 {
text-transform: none;
}
.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>
# Robuste und performante Verfahren für die Layoutanalyse in OCR-D
## Beitrag SLUB
(Auftakttreffen)
_Robert Sachunsky, Kay-Michael Würzner, Erik Sommer_ ![slub-logo](https://www.slub-dresden.de/typo3conf/ext/slub_template/Resources/Public/Images/slublogo.svg =200x)
27.3.2024 : https://hackmd.io/@bertsky/ocrd-layout-kick-off
---
## Motivation
- Optical Layout Recognition (OLR):
_conditio sine qua non_ für "gute" Texterkennung (OCR)
- Durchbruch mit Paradigmenwechsel zu _Deep-Learning_-Ansätzen:
| | *in OCR* | *in OLR* |
| --- | --- | --- |
| *Forschung* | seit ~2009 | seit ~2015 |
| *Anwendung* | seit ~2016 | seit ~2018? |
- noch fehlen:
- Anwendungsreife (Genauigkeit, Robustheit, Performanz)
- Lückenschluß Trainingsdaten, Standardmodelle
- adäquate Evaluierung
---
## Ausgangslage
### OLR in OCR-D nach Phase 2 (und 3):
- Modulprojekte:
- DFKI
→ unbrauchbar (bis auf Cropping)
- Uni Würzburg
→ unbrauchbar
- Community-Entwicklungen:
- [_Tesseract_](https://github.com/OCR-D/ocrd_tesserocr) und [_Ocropus_](https://github.com/cisocrgroup/ocrd_cis) (heuristisch-regelbasiert)
→ je nach Material und Parametrierung
- [_Kraken_](https://github.com/OCR-D/ocrd_kraken) (Deep-Learning)
→ eher Handschrift / einfache Layouts
- [_Detectron2_](https://github.com/bertsky/ocrd_detectron2) (Deep-Learning)
→ je nach Material, aber bisher eher keine robusten historischen Modelle, ohne Zeilensegmentierung, keine ReadingOrder
- [_Eynollah_](https://github.com/qurator-spk/eynollah) (Deep-Learning)
→ relativ robust, sehr langsam, nicht modular
---
## Ausgangslage
### Fazit:
- [aufwendige Workflow-Anpassung an jew. Material](https://digi.ub.uni-heidelberg.de/diglitData/v/ocrd-segmenter.pdf)
- teilweise prohibitiv langsam oder schlecht
- schwer vorhersagbar, meist nicht nachtrainierbar
---
## Vorarbeiten SLUB: regelbasierte OLR
- [ocrd_tesserocr](https://github.com/OCR-D/ocrd_tesserocr) – Tesseract-Wrapper
(und viele Versuche, mehr aus der Tesseract-API zu holen bzw. Bugs in Tesseract zu eliminieren)
- `find_staves`, `find_tables`
- `block_polygons`, `shrink_polygons`
- `sparse_text`, `padding`, page→table→region→line
- [ocrd_cis](https://github.com/cisocrgroup/ocrd_cis/pull/87) – Ocropy1-Weiterentwicklung
- OpenCV statt SciPy, viele Bugfixes
- deutlich bessere Polygonalisierung und Text-Bild-Trennung
- Baseline-Extraktion/Applikation
- eigene Seitensegmentierung (RXYC)
- auch Resegmentierung, Clipping
- viel Optimierungspotential
- wichtigste Lehren:
- oft Regressionen → testgetriebene Entwicklung!
- viele Parameter → empirische Optimierung
---
## Vorarbeiten SLUB: Workflow-Experimente
- [ocrd_segment](https://github.com/OCR-D/ocrd_segment) – OLR-Werkzeuge
- Formatkonvertierung (Segmentmasken, COCO, PAGE)
- robuste Polygon-Verarbeitung ("Shapely-Frontend")
- repair: (semantische) PAGE-Validierung und -Korrektur
- repair/"plausibilize": Segmentkonflikte auflösen ("hierarchische NMS")
- repair/"sanitize": Hüllkontur der Vg-Pixel
- project: Hüllkontur der Kind-Segmente
- zus. mit ocropy-resegment: Layout-Nachverarbeitung
- viele manuell optimierte OCRD-Workflows (u.a. für Zeitungen)
- Vgl. mit [AWS Textract](https://github.com/slub/textract2page)
---
## Vorarbeiten SLUB: DL-OLR
- [DL-Hackathon 2019](https://hackmd.io/@FKFH0M1sR2SdJZwK5U8Cfg/H1e4Y4eNH#/) – Pixelclassifier vs. Instanzsegmentierung (erste Erfahrungen)
- [ocrd_segment:maskrcnn-cli](https://github.com/OCR-D/ocrd_segment/blob/maskrcnn-cli) – Experimente mit [Mask R-CNN](https://github.com/bertsky/Mask_RCNN) auf DTA-GT (1000 S.), Publaynet etc.
- ebd. – Weiterentwicklung: zus. Eingabemaske als **textuelle Kontextmarkierung** (für Adressen, [Formulare](https://hackmd.io/@bertsky/BJdhylVVU#/6/2))
- [ocrd_detectron2](https://github.com/bertsky/ocrd_detectron2) – Wrapper für [Detectron2](https://github.com/facebookresearch/detectron2)
- alle verfügbaren NW-Architekturen (u.a. Mask R-CNN)
- einheitl. Nachverarbeitung: NMS, CC-Morphologie
- konfigurierbare Klassen-Typ-Zuordnung
- vorkonfigurierte öffentliche [Modelle](https://github.com/bertsky/ocrd_detectron2#models)
- inkrementelle Segmentierung, Spezialmodelle und inaktive Klassen
- **keine** Zeilensegmentierung / ReadingOrder
---
## Vorarbeiten SLUB: HPC
- Datenhaltung (Archiv - Projekt - Scratch)
- Installation/Toolchains
- Job-Skripte (Array+Chain)
- Ressourcen-Abschätzung
- Ressourcen-Monitoring
---
## Kooperation SCADS.AI
Unterstützungszusage für
- Beratung neuronale Modellierung
- Datenrepräsentation, Zielfunktion
- Netztopologie, Trainingsregime
- Beratung Code-Optimierung
- Betriebsmitteleffizienz (v.a. GPU)
- Nebenläufigkeit (v.a. GPU)
- Beratung Deployment auf HPC-Cluster
- Datenhaltung
- Installation, Toolchains, Container
- Job-Scripting
- Ressourcen-Abschätzung
---
## Vorarbeiten SLUB: Struktur-GT
- DTA/1000 mit Qualitätsproblemen (und zu wenig)...
- Reparatur-Workflows...
||||
| --- | --- | --- |
|![](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)|
---
## Vorarbeiten SLUB:
- PubLayNet, DocLayNet, TableBank, DocBank, ReadingBank etc.
→ zu homogen/modern
|||
| --- | --- |
|![](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)|
---
## Vorarbeiten SLUB: Evaluierung
- [Diskussion zu Metriken](https://github.com/OCR-D/ocrd_segment/wiki/SegmentationEvaluation)...
- [ocrd-segment-evaluate | page-segment-evaluate](https://github.com/OCR-D/ocrd_segment/blob/master/ocrd_segment/evaluate.py):
- effiziente IoU-Berechnung: `pycocotools.cocoeval`
- Matching, Metriken, Aggregation: eigener Code, denn
- Alignment von pycocotools [inadäquat](https://github.com/cocodataset/cocoapi/issues/564)
- n:m statt nur 1:1
- auch FN/FP (bzw. Recall/Precision)
- auch Instanz- statt nur Pixel-Metriken
- auch Maße für Über-/Untersegmentierung
- Micro-averaging, relative Maße
- Optionen: Zeilen/Regionen, mit/ohne Klassen, Vordergrund/alles
- noch **nicht**: _Allowable_ Split / Merge (PRImA)
- [PRImA-Layout-Eval](https://github.com/PRImA-Research-Lab/prima-layout-eval):
_partielle_ Quellen, Doku, Zusage von C. Clausner zur Mithilfe
---
## Ideen SLUB (1)
- ocrd-segment: [Template-basierte Analyse](https://github.com/OCR-D/ocrd_segment/wiki/TemplateDrivenSegmentation), [Notebook von @hnesk](https://github.com/hnesk/ocr-experiments)
- eigene(s) Detectron2-Modell(e) für Regionen
(Mask-RCNN Panoptic; evtl. Spezialmodelle)
- eigenes Kraken-Modell für Zeilen
(aber Handschrift _und_ Print in allen Varianten; nur auf Regionen-Ebene, damit robust und modular)
---
## Ideen SLUB (2)
- ocrd-segment-evaluate ausbauen
→ Arbeit an GT mit OCR-Workflows
- Werkzeuge für Phänomenologie und Exploration
→ dynamische Qualitätsabschätzung ohne GT
- Binarisierung: CC-Statistik
- Layout: ?
---
## Ideen SLUB (3)
- [trainierbare ReadingOrder](https://github.com/lquirosd/Order_Relation_Operator)?
- Wrapper für [Origami](https://github.com/bertsky/ocrd_origami)?
- Wrapper für [Pero-OCR](https://github.com/DCGM/pero-ocr)?
- Experimente mit [Laypa](https://github.com/stefanklut/laypa)?
- [Artikelseparierung](https://github.com/CITlabRostock/citlab-article-separation-new)?
---
## Ziele
* Problemklassen in den VD
- identifizieren (Merkmale, Abgrenzung)
- quantifizieren (Häufigkeit, Schwierigkeit)
- priorisieren
* Ground-Truth-Daten
- für Training, für Evaluierung – gemeinsame Referenz für Experimente
- prüfen, aufbereiten, harmonisieren, erstellen
- Erstellung mit eigenen Werkzeugen leichter, konsistenter
* OLR-Modelle und -Werkzeuge
- weiterentwickeln, optimieren, kombinieren
* OLR-Evaluation
- Methoden, Metriken bereitstellen
- anwenden und auswerten
* Integration in OCR-D
- modulare, effiziente, robuste Prozessoren
- Implikationen für Spezifikation und Workflows
---
## Planung
|Arbeitspaket|SBB|SLUB|ZPD
|---|---|---|---
|1: Projektmanagement|2|1|1
|2: Anforderungsanalyse|3|6|2
|3: Datenbereitstellung|3|1|9
|4: Entwicklung|12|8|4
|5: Evaluation|2|6|2
|6: Integration|2|2|0
<br/>
- AP 2 priorisieren, da Abhängikeit der Partner
- möglichst früh AP4 dazunehmen, Anteil steigt schrittweise
- AP2 schrittweise übergehend in AP5
- AP6 nebenläufig, aber vermutlich mehr Aufwände als erhofft (Erbschaft Phase III)
- OCR-D → SLUB ?
- GPU → SBB ?
---
## Planung
![aps](https://hackmd.io/_uploads/B1RVU3lJC.png)
- Entwicklung im Spiralmodell, mögl. frühzeitig Train-Eval-Loop?
- monatliche Hackathons zu einzelnen Tools, um Entwicklungskultur zu fördern?
{"title":"Robuste und performante Verfahren für die Layoutanalyse in OCR-D","slideOptions":"{\"theme\":\"white\",\"slideNumber\":true}","description":"(Vorschau DFG-Projekt)","contributors":"[{\"id\":\"c62f1b15-791a-47e1-8e4c-ab2ed00c04bc\",\"add\":13959,\"del\":3131}]"}