AE3-TL
Page-level table extraction that gets more tables exactly right. AE3-TL finds every table on a PDF page and rebuilds it cell for cell: rows, columns, merged cells, headers and text, with each caption and footer attached to the right table.
It is the new state of the art on the PubTables-v2 page-level benchmark, first on all six metrics. At 32M parameters it runs on a single GPU or a CPU through ONNX, and it is free and open under Apache 2.0, including for commercial use.
| 73.7% of tables reproduced exactly | vs 64.5% for POTATR, the previous best, and 35.2% for Gemini 3.1 Pro |
| 26% fewer tables with any error | than POTATR, across all 9,047 test tables |
| 59% vs 40% exact on the densest pages | the bigger the table, the bigger the lead |
| 80,808 pages an hour on one A10 GPU | 1.73Γ POTATR on the same GPU; about $30 per million pages |
What it does
Input: a rendered PDF page, plus the page's words with their positions (from the PDF's text layer).
Output: every table on the page, each with:
- its grid of cells, including cells that span several rows or columns
- column headers and row structure
- the text of every cell
- its caption and footer, linked to the right table even when a page has several
AE3-TL reads structure from the image and text from the PDF's own words, so the text in each cell is exactly what the document contains, with no OCR errors. It is built for digital PDFs: reports, filings, papers and statements that have a text layer.
Results
Full method and analysis are in the paper. All scores are on the PubTables-v2 Single Pages test set (7,680 pages, 9,047 tables), with the dataset's own words, scored by Kensho's unchanged POTATR scorer v0.2.0. The other rows come from the POTATR paper (Smock et al., DAS 2026).
To make the comparison like for like, we re-ran POTATR from its released weights through the same pipeline. Our re-run matches the paper's POTATR + DT row to within 0.0022 on every metric.
At a glance
| AE3-TL | POTATR (re-run) | Best MLLM (Gemini 3.1 Pro) | |
|---|---|---|---|
| Exact match, content | 0.737 | 0.645 | 0.352 |
| Exact match, topology | 0.796 | 0.701 | 0.635 |
| GriTS-Con | 0.977 | 0.965 | 0.942 |
| TEDS | 0.965 | 0.952 | 0.925 |
| Footer text F1 | 0.985 | 0.979 | β |
| Caption text F1 | 0.977 | 0.981 | 0.977 |
| Pages per hour, one GPU | 80,808 | 46,753 | 393 (API) |
| Cost per million pages | $30 | $52 | $15,000 |
Gemini reads the page image only, as in the paper; AE3-TL and POTATR also use the page's words. The cost figures use the paper's pricing: $2.45 per GPU-hour, and list API prices for the MLLMs.
The denser the page, the bigger the lead
On simple pages AE3-TL and POTATR are close. As tables grow, POTATR's exact-match rate falls away faster: on pages with more than 250 cells, AE3-TL gets 59% of tables exactly right against 40%, a 1.48Γ lead.
| Cells per page | Tables | Exact match, POTATR | Exact match, AE3-TL | Gain |
|---|---|---|---|---|
| 1β20 | 631 | 0.854 | 0.865 | +1.1 |
| 21β40 | 1,313 | 0.828 | 0.848 | +2.0 |
| 41β70 | 1,776 | 0.735 | 0.797 | +6.1 |
| 71β100 | 1,478 | 0.664 | 0.746 | +8.2 |
| 101β150 | 1,631 | 0.553 | 0.649 | +9.6 |
| 151β200 | 1,086 | 0.488 | 0.647 | +15.9 |
| 201β250 | 530 | 0.464 | 0.602 | +13.8 |
| More than 250 | 602 | 0.400 | 0.591 | +19.1 |
Gain in percentage points of exact match (content). The per-bin figures come from an earlier scoring run of the same weights, before a final fix to word handling; the overall figures elsewhere on this page are from the final run.
Density bins: GriTS-Con and TEDS
| Cells per page | Pages | Tables | GriTS-Con, POTATR | GriTS-Con, AE3-TL | TEDS, POTATR | TEDS, AE3-TL |
|---|---|---|---|---|---|---|
| 1β20 | 625 | 631 | 0.9617 | 0.9656 | 0.9579 | 0.9600 |
| 21β40 | 1,243 | 1,313 | 0.9734 | 0.9747 | 0.9662 | 0.9664 |
| 41β70 | 1,570 | 1,776 | 0.9717 | 0.9790 | 0.9589 | 0.9696 |
| 71β100 | 1,232 | 1,478 | 0.9722 | 0.9817 | 0.9555 | 0.9686 |
| 101β150 | 1,329 | 1,631 | 0.9663 | 0.9792 | 0.9480 | 0.9672 |
| 151β200 | 848 | 1,086 | 0.9644 | 0.9764 | 0.9422 | 0.9641 |
| 201β250 | 401 | 530 | 0.9650 | 0.9788 | 0.9411 | 0.9659 |
| More than 250 | 432 | 602 | 0.9500 | 0.9696 | 0.9188 | 0.9535 |
AE3-TL leads in every bin on every metric.
Statistical significance
AE3-TL minus our POTATR re-run, on the same pages. The 95% intervals come from a paired page bootstrap (2,000 resamples, seed 20261028). Every interval is above zero.
| GriTS-Top | GriTS-Con | Exact (topology) | Exact (content) | TEDS-S | TEDS |
|---|---|---|---|---|---|
| +0.0114 [+0.0098, +0.0131] | +0.0122 [+0.0104, +0.0140] | +0.0948 [+0.0860, +0.1030] | +0.0920 [+0.0836, +0.0999] | +0.0126 [+0.0107, +0.0147] | +0.0138 [+0.0116, +0.0160] |
Full benchmark table: all models (paper Table 2)
| Model | GriTS-Top | GriTS-Con | Acc-Top | Acc-Con | TEDS-S | TEDS |
|---|---|---|---|---|---|---|
| SmolDocling-256M | 0.2502 | 0.2177 | 0.2800 | 0.0298 | 0.5980 | 0.5250 |
| GraniteDocling-258M | 0.7252 | 0.6670 | 0.3794 | 0.0829 | 0.6685 | 0.6155 |
| Qwen2.5-VL-3b | 0.4672 | 0.3803 | 0.3651 | 0.0619 | 0.2859 | 0.2632 |
| Granite-Vision-3.2-2b | 0.8015 | 0.7480 | 0.4245 | 0.0331 | 0.8665 | 0.8092 |
| DeepSeek-OCR | 0.8629 | 0.8207 | 0.6184 | 0.1671 | 0.7996 | 0.7639 |
| DeepSeek-OCR 2 | 0.8839 | 0.8386 | 0.5258 | 0.1120 | 0.7688 | 0.7263 |
| dots.ocr | 0.9241 | 0.8991 | 0.6425 | 0.1872 | 0.9168 | 0.8743 |
| Claude Opus 4.6 | 0.9146 | 0.9106 | 0.4934 | 0.2713 | 0.9073 | 0.8945 |
| GPT-5.4 | 0.9208 | 0.9102 | 0.5461 | 0.2074 | 0.9084 | 0.8874 |
| Gemini 3.1 Pro | 0.9500 | 0.9418 | 0.6348 | 0.3524 | 0.9392 | 0.9250 |
| POTATR + EasyOCR | 0.9555 | 0.7819 | 0.6595 | 0.0022 | 0.9468 | 0.8162 |
| POTATR + PaddleOCR | 0.9607 | 0.8758 | 0.6915 | 0.0074 | 0.9528 | 0.8759 |
| POTATR + docTR | 0.9601 | 0.8799 | 0.6707 | 0.0683 | 0.9500 | 0.8952 |
| POTATR + DT | 0.9665 | 0.9636 | 0.6992 | 0.6454 | 0.9565 | 0.9502 |
| POTATR + DT (our re-run) β‘ | 0.9674 | 0.9647 | 0.7013 | 0.6447 | 0.9577 | 0.9516 |
| AE3-TL + DT β‘ | 0.9788 | 0.9769 | 0.7962 | 0.7367 | 0.9703 | 0.9654 |
β‘ Our runs. DT = the dataset's own words. Image-only models read the page image without the document's words, as in the paper.
Caption and footer text (paper Table 3, plus a footer column)
Character-level LCS F1, with precision (P) and recall (R).
| Model | Caption F1 | Caption P | Caption R | Footer F1 |
|---|---|---|---|---|
| Claude Opus 4.6 | 0.9611 | 0.9866 | 0.9370 | β |
| GPT-5.4 | 0.9658 | 0.9743 | 0.9575 | β |
| Gemini 3.1 Pro | 0.9774 | 0.9882 | 0.9669 | β |
| POTATR + EasyOCR | 0.9789 | 0.9830 | 0.9749 | β |
| POTATR + PaddleOCR | 0.9764 | 0.9799 | 0.9728 | β |
| POTATR + docTR | 0.9786 | 0.9828 | 0.9744 | β |
| POTATR + DT | 0.9781 | 0.9817 | 0.9746 | β |
| POTATR + DT (our re-run) β‘ | 0.9807 | 0.9824 | 0.9790 | 0.9793 |
| AE3-TL + DT β‘ | 0.9766 | 0.9756 | 0.9776 | 0.9849 |
β‘ Our runs, using the scorer's @con table key. The paper does not publish footer scores.
Speed and cost (paper Table 4)
| Model | Parameters | Pages per hour | Cost per 1M pages |
|---|---|---|---|
| Claude Opus 4.6 | β | 244 | $36,680 |
| GPT-5.4 | β | 326 | $16,800 |
| Gemini 3.1 Pro | β | 393 | $15,000 |
| Qwen2.5-VL-3b | 3B | 386 | $6,336 |
| dots.ocr | 3B | 572 | $4,281 |
| DeepSeek-OCR 2 | 3B | 1,201 | $2,038 |
| SmolDocling-256M | 256M | 1,247 | $1,963 |
| GraniteDocling-258M | 258M | 1,847 | $1,325 |
| POTATR (paper, A10G) | 29M | 52,031 | $47 |
| POTATR (our re-run, A10) β‘ | 29M | 46,753 | $52 |
| AE3-TL (A10) β‘ | 32M | 80,808 | $30 |
β‘ One NVIDIA A10, batch size 1, timed at Kensho's boundary: model forward pass plus post-processing, file reading excluded. Priced at the paper's $2.45 per GPU-hour. The paper measured POTATR on an A10G, so we compare against our own A10 re-run.
Model details
| Architecture | D-FINE-L detector with an HGNetv2-B4 backbone, plus a relation head that links captions and footers to their tables |
| Parameters | 31,638,457 |
| Initialisation | ImageNet backbone only: no pretrained detector and no pretrained table model (POTATR starts from TATR-v1.1-Pub) |
| Training | 28 crop-level epochs on PubTables-1M, then 11 page-level epochs on PubTables-v2 Single Pages (10 for structure, 1 for caption and footer linking), on 8Γ H100 |
| Release | v3, epoch 1, EMA weights |
| Format | ONNX opset 17, fp32, as two graphs: the page model and the relation head |
Files
| File | sha256 |
|---|---|
| Checkpoint | 47000f3b785b65c4685e283e266ed67be0eccc2018abef8b183e5f903e34f48c |
| Page model (ONNX) | 91f5183a8b4a2df2afc80992c89cc6df30456bb6d5a7dfa19d2cb26414cfdcff |
| Relation head (ONNX) | 5867fa72915d47b03942b94f0ab4d73946a7543790e95560882536e9f94011c7 |
How to use
AE3-TL runs in three steps:
- Page model. Detects tables, rows, columns, spanning cells and headers.
- Relation head. Decides which caption and footer belong to which table.
- Post-processing (included in the kit). Turns the detections and the page's words into finished tables with cells, spans, text, captions and footers.
USAGE.md walks through the full pipeline, including the "For best results" settings.
Model inputs and outputs
| Graph | Inputs | Outputs |
|---|---|---|
| Page model | images: float32 [batch, 3, 768, 768], RGB scaled to 0β1 |
logits [batch, 300, 16], boxes [batch, 300, 4] (normalised cx, cy, w, h), query_embeddings, encoder_indices |
| Relation head | query_embeddings, pairs [n, 2] |
edge_logits [n] |
Running the page model
import numpy as np
import onnxruntime as ort
session = ort.InferenceSession(
"ae3-tl-page.onnx",
providers=["CUDAExecutionProvider", "CPUExecutionProvider"],
)
# One page rendered to RGB, prepared as described in USAGE.md:
# float32, shape [1, 3, 768, 768], values in 0..1
image = np.zeros((1, 3, 768, 768), dtype=np.float32)
names = [o.name for o in session.get_outputs()]
outputs = dict(zip(names, session.run(None, {"images": image})))
print(outputs["logits"].shape) # (1, 300, 16)
print(outputs["boxes"].shape) # (1, 300, 4)
Verify your download
sha256sum ae3-tl-page.onnx ae3-tl-relation.onnx
The hashes should match the table above.
Intended use and limitations
Good for: extracting tables at scale from digital PDFs (financial reports, filings, research papers, statements) where the text layer is available, including privately on your own hardware.
Know before you use it:
- Digital PDFs only, as evaluated. All results use the document's own words. Scanned pages need OCR first. The POTATR + OCR rows above show how much OCR errors can cost on this benchmark; we have not yet measured AE3-TL with OCR.
- Trained and tested on scientific articles. PubTables-v2 is built from PubMed Central papers. We expect the gains to carry over to financial and business documents, but have not yet benchmarked them.
- Captions are on a par, not ahead. Caption text F1 is 0.977 against POTATR's 0.981. Footer text F1 is higher (0.985 against 0.979).
- One training run. The confidence intervals cover variation across test pages, not across training seeds.
- Check before relying on outputs. Like any extraction model it makes mistakes, more often on very dense tables. Review the output before relying on it for decisions.
Licence and credits
AE3-TL's weights and code are released under the Apache License 2.0. You can use, modify and redistribute them, including commercially, provided you keep the licence and the notices below.
AE3-TL builds on the following open work. Thank you to their authors.
| Component | Licence |
|---|---|
| D-FINE and RT-DETR (detector architecture) | Apache-2.0 |
| Table Transformer (post-processing) | MIT |
Kensho's extract_text_inside_bbox and extract_text_from_spans, copied unchanged from POTATR |
MIT |
| PubTables-1M and PubTables-v2 (training and evaluation data) | CDLA-Permissive-2.0 |
Citation
If you use AE3-TL, please cite the paper:
@misc{khan2026ae3tl,
title = {AE3-TL: Faster and More Exact Page-Level Table Extraction with a Real-Time Detection Transformer},
author = {Khan, Usman},
year = {2026},
publisher = {APEXE3},
howpublished = {\url{https://github.com/apexe3/ae3-table-extract/blob/main/AE3-TL_2026.pdf}}
}
AE3-TL is evaluated against, and builds on:
- Peng et al. D-FINE: Redefine Regression Task in DETRs as Fine-grained Distribution Refinement. ICLR 2025.
- Smock et al. PubTables-1M: Towards Comprehensive Table Extraction From Unstructured Documents. CVPR 2022.
- Smock et al. PubTables-v2. 2025.
- Smock et al. POTATR. DAS 2026.
Contact
Built by APEXE3. For questions, help deploying AE3-TL privately at scale, or a hosted API, contact labs@apexe3.com.
Model v3, epoch 1, EMA weights. Card updated November 2026.
- Downloads last month
- -

