|
Download README.md from epplea/Bar-JEPA: direct link, hf CLI and curl.
- Browser
- Download file 6.72 kB
-
https://huggingface.co/epplea/Bar-JEPA/resolve/main/README.md
- Command line
-
hf download hf://epplea/Bar-JEPA/README.md
-
curl -L -o README.md https://huggingface.co/epplea/Bar-JEPA/resolve/main/README.md
6.72 kB
| base_model: | |
| - facebook/ijepa_vith16_1k | |
| datasets: | |
| - dralois/Bar-JEPA | |
| language: | |
| - en | |
| library_name: pytorch | |
| license: cc-by-nc-4.0 | |
| metrics: | |
| - f1 | |
| - accuracy | |
| - precision | |
| - recall | |
| pipeline_tag: keypoint-detection | |
| tags: | |
| - bar-chart | |
| - chart-understanding | |
| - document-ai | |
| - ijepa | |
| - vit | |
| - synthetic | |
| - keypoint-detection | |
| - self-supervised | |
| model-index: | |
| - name: Bar-JEPA (kp-cl-arp-ctt-ft) | |
| results: | |
| - task: | |
| type: keypoint-detection | |
| name: Bar Chart Value Extraction | |
| dataset: | |
| name: UB PMC (real-world) | |
| type: real-world | |
| metrics: | |
| - type: f1 | |
| value: 0.785 | |
| name: Bar Keypoint F1 | |
| - type: f1 | |
| value: 0.842 | |
| name: Tick Keypoint F1 | |
| - type: accuracy | |
| value: 0.499 | |
| name: Value Accuracy (ε=0.05) | |
| - type: accuracy | |
| value: 0.365 | |
| name: Value Accuracy (ε=0.02) | |
| - task: | |
| type: keypoint-detection | |
| name: Bar Chart Value Extraction | |
| dataset: | |
| name: Synthetic (100 held-out charts) | |
| type: dralois/Bar-JEPA | |
| metrics: | |
| - type: f1 | |
| value: 0.961 | |
| name: Bar Keypoint F1 | |
| - type: f1 | |
| value: 0.951 | |
| name: Tick Keypoint F1 | |
| - type: accuracy | |
| value: 0.792 | |
| name: Value Accuracy (ε=0.05) | |
| - type: accuracy | |
| value: 0.657 | |
| name: Value Accuracy (ε=0.02) | |
| # Bar-JEPA | |
| Per-bar numerical value recovery from vertical bar chart images. A self-supervised I-JEPA encoder (ViT-H, finetuned on synthetic bar charts) produces feature maps consumed by a lightweight keypoint decoder. The decoder outputs heatmaps for bar corners, value-axis ticks and the coordinate origin, which are post-processed with NMS, OCR and RANSAC regression to recover numerical bar values. | |
| **Paper:** [*Bar-JEPA: Extracting Values from Bar Chart with Joint-Embedding Predictive Architecture*](https://huggingface.co/papers/2608.06062) — Poonam, Epple & Ropinski, Ulm University (ICDAR 2026). | |
| **Code:** [github.com/dralois/Bar-JEPA](https://github.com/dralois/Bar-JEPA) | |
| ## Pipeline | |
| ``` | |
| Image → variable-resolution patch extraction (≤256 patches, 14 px) | |
| → frozen I-JEPA ViT-H encoder | |
| → classic decoder (2× deconv-BN-ReLU + 1×1 conv, 32 keypoint channels) | |
| → origin / classification / regression heatmap heads | |
| → NMS + PaddleOCR + RANSAC → bar values | |
| ``` | |
| The encoder is frozen during decoder training. Variable-resolution inputs follow the Pix2Struct aspect-ratio-preserving scaling strategy. | |
| ## Checkpoints | |
| Download checkpoints and place them in `./output/`. The ViT-H base checkpoint (`IN1K-vit.h.14-300e.pth.tar`) must also be present there before encoder finetuning. | |
| | File | Description | | |
| |---|---| | |
| | `kp-cl-arp-ctt-ft-latest.pth.tar` | Classic decoder, ARP encoder + Chart-to-Text FT, UB PMC finetuned (**best**) | | |
| | `kp-cl-arp-ft-latest.pth.tar` | Classic decoder, ARP encoder, UB PMC finetuned | | |
| | `kp-cl-noarp-ft-latest.pth.tar` | Classic decoder, fixed-resolution encoder, UB PMC finetuned | | |
| | `kp-cl-vanilla-ft-latest.pth.tar` | Classic decoder, vanilla ImageNet-only encoder, UB PMC finetuned | | |
| | `kp-spl-arp-ft-latest.pth.tar` | Simple decoder, ARP encoder, UB PMC finetuned | | |
| ## Usage | |
| All tasks go through `bar-jepa/main.py`. Requires [pixi](https://pixi.sh) or PyTorch ≥ 2.3 + PaddleOCR. | |
| ```bash | |
| # Setup | |
| pixi install | |
| # or: pip install -e ".[torch]" && pip install paddlepaddle paddleocr | |
| ``` | |
| **Encoder finetuning:** | |
| ```bash | |
| python bar-jepa/main.py \ | |
| --mode finetune \ | |
| --fname bar-jepa/configs/charts/vith14_arp.yaml \ | |
| --devices cuda:0 | |
| ``` | |
| **Decoder training (pretraining → UB PMC finetuning):** | |
| ```bash | |
| python bar-jepa/main.py --mode decoder \ | |
| --fname bar-jepa/configs/keypoint/classic_arp.yaml --devices cuda:0 | |
| python bar-jepa/main.py --mode decoder \ | |
| --fname bar-jepa/configs/keypoint/classic_arp.yaml --devices cuda:0 \ | |
| --override meta.do_finetune=true data.root_path=./UBPMC data.is_ubpmc=true | |
| ``` | |
| **Evaluation:** | |
| ```bash | |
| python bar-jepa/main.py --mode eval \ | |
| --fname bar-jepa/configs/eval/classic_arp.yaml --devices cuda:0 | |
| # Run all five configurations at once: | |
| python scripts/run_all_evals.py | |
| ``` | |
| ## Training | |
| **Encoder finetuning** — self-supervised I-JEPA objective on 100k synthetic bar charts. 50 epochs, AdamW, cosine LR 5×10⁻⁵ → 1×10⁻⁶ (6-epoch warm-up), cosine weight decay 0.02–0.04, effective batch size 40, 2× NVIDIA RTX A6000. Optional additional 25 epochs on 15k Chart-to-Text real-world charts. | |
| **Decoder training** — supervised keypoint regression on 17k synthetic charts. 50 epochs, AdamW, cosine LR 1×10⁻³ → 1×10⁻⁵ (3-epoch warm-up), cosine weight decay 0.04–0.1, batch size 1360, 1× NVIDIA RTX A6000. Finetuned for 30 more epochs on UB PMC / ICPR CHART-Infographics 2022 (1316 vertical bar charts). | |
| ## Performance | |
| Variable-resolution encoder (ARP), classic decoder, synthetic pretraining only: | |
| | Dataset | Bar F1 | Tick F1 | Acc (ε=0.05) | Acc (ε=0.02) | | |
| |---|---|---|---|---| | |
| | UB PMC (real-world) | 0.740 | 0.827 | 0.450 | 0.341 | | |
| | Synthetic (100 charts) | 0.956 | 0.940 | 0.778 | 0.629 | | |
| With additional Chart-to-Text real-world finetuning: | |
| | Dataset | Bar F1 | Tick F1 | Acc (ε=0.05) | Acc (ε=0.02) | | |
| |---|---|---|---|---| | |
| | UB PMC (real-world) | 0.785 | 0.842 | 0.499 | 0.365 | | |
| | Synthetic (100 charts) | 0.961 | 0.951 | 0.792 | 0.657 | | |
| Accuracy criterion: `|h_gt − h_pred| / h_gt ≤ ε` (same as Zhou et al. 2021). | |
| ## Dataset | |
| Training data at [`dralois/Bar-JEPA`](https://huggingface.co/datasets/dralois/Bar-JEPA). Download and place at `./data` (encoder, 100k) and `./data_decoder` (decoder, 17k), or generate from scratch: | |
| ```bash | |
| python bar-gen/generator.py --output ./data --count 100000 | |
| ``` | |
| | Config | Split | Samples | Local path | | |
| |---|---|---|---| | |
| | `encoder_training` | train / test | 100,000 / 100 | `./data` | | |
| | `decoder_training` | train / test | 17,000 / 3,400 | `./data_decoder` | | |
| | `pipeline_testing` | test | 100 | — | | |
| ## Limitations | |
| - Vertical bar charts only; no stacked bars, error bars or 3D effects. | |
| - OCR (PaddleOCR `latin_PP-OCRv5_mobile_rec`) is an external dependency for tick label reading. | |
| - Encoder operates in latent space only, making integration with multimodal language models non-trivial. | |
| ## Citation | |
| ```bibtex | |
| @inproceedings{poonam2026bar-jepa, | |
| title = {Bar-JEPA: Extracting Values from Bar Chart with Joint-Embedding Predictive Architecture}, | |
| author = {Poonam, Poonam and Epple, Alexander and Ropinski, Timo}, | |
| booktitle = {ICDAR}, | |
| year = {2026} | |
| } | |
| ``` | |
| ## License | |
| Model code is derived from [facebookresearch/ijepa](https://github.com/facebookresearch/ijepa) and licensed under the same terms. See [bar-jepa/LICENSE](https://github.com/dralois/Bar-JEPA/blob/main/bar-jepa/LICENSE). |