Repository navigation
Highlights
- New VLMs, loaded by model ID through
AnyPageParser: OXR-1.0 (SoMarkAI/OXR-1.0) and OvisOCR3 (ATH-MaaS/OvisOCR3). OXR-1.0 weights are under SoMark's OXR License, which adds commercial and hosted-API restrictions to Apache 2.0. oar indra: Indra OCR in the command-line tool, with CPU page workers and checkpoint downloads.oar parsenow runs on several devices (--device cuda:0,cuda:1).- Faster CUDA OCR: recognition reduces CTC predictions on the GPU and copies back only the winning index and confidence, making full CUDA pages 1.2–1.5× faster on an RTX A4000, with byte-identical OCR output.
- PP-FormulaNet on CUDA no longer runs out of memory on long formulas after earlier pages: memory-pattern replay is now off by default for it, and peak VRAM in the structure pipeline drops from about 16 GB to 5–9 GB, with identical formula output.
- Many smaller speedups that keep output byte-identical: parallel exact detection resizes, a one-pass SIMD CTC argmax, borrowed page images and heatmaps in text detection, and less copying and recomputation in the VLM decoders (shared rotary tables, reused masks and KV scratch, batched token readback, no eager GQA cache copies).
- Reference alignment: smart_resize rounding and the spotting LANCZOS upscale now match the reference implementations, and alignment tests cover Xiaomi-OCR, MinerU2.5, TeleOCR and PaddleOCR-VL.
What's Changed
- fix(vl): match the reference smart_resize rounding and spotting LANCZOS upscale by @GreatV in #234
- test(vl): add reference alignment tests for Xiaomi-OCR, MinerU2.5, TeleOCR and PaddleOCR-VL by @GreatV in #235
- feat(vl): add OXR-1.0 support by @GreatV in #236
- feat(vl): add OvisOCR3 support by @GreatV in #237
- refactor(vl): share rotary embedding and patch-merger helpers by @GreatV in #239
- feat(cli): run oar parse on several devices by @GreatV in #238
- feat(indra): read pages in parallel and document CUDA use by @GreatV in #240
- perf(vl): reuse jina-ocr vision position tables by @GreatV in #246
- perf(vl): normalize images straight into merge-grouped patches by @GreatV in #244
- perf(core): find the CTC argmax in one SIMD pass by @GreatV in #242
- perf(core): build XY-cut projections from interval endpoints by @GreatV in #241
- perf(core): borrow page images and DB heatmaps in text detection by @GreatV in #243
- perf(vl): read back batched PaddleOCR-VL tokens once per step by @GreatV in #245
- perf(indra): copy language-model arrays only for gated lines by @GreatV in #247
- perf(sdar): reuse per-layer transient KV scratch by @GreatV in #248
- perf(indra): sum deskew rows while warping by @GreatV in #249
- feat(cli): add Indra OCR with page workers and checkpoint downloads by @GreatV in #250
- perf(vl): select penalized TeleOCR greedy tokens on CUDA by @GreatV in #251
- perf(layout): extract only the first detector output by @GreatV in #252
- perf(vl): prepare shared rotary tensors and decode masks once by @GreatV in #253
- perf(youtu): retain MLA keys and latents in F32 by @GreatV in #255
- perf(oxr): interpolate position tables by patch in parallel by @GreatV in #254
- test(vl): fix CUDA self-tests and stabilize the layout example summary by @GreatV in #256
- perf(vl): avoid eager GQA cache-history copies by @GreatV in #259
- perf(jina): share relative-position gathers across attention heads by @GreatV in #258
- perf(core): parallelize exact RGB detection resizes by @GreatV in #257
- perf(core): reduce CUDA CTC predictions on the device before readback by @GreatV in #260
- fix(formula): disable CUDA memory pattern replay for PP-FormulaNet by default by @GreatV in #261
- build: bump version to 0.10.2 by @GreatV in #262
Full Changelog: v0.10.1...v0.10.2