OvisOCR2 is a 0.8B end-to-end document-parsing VLM that tops the OmniDocBench leaderboard, outperforming pipeline OCR systems on real-world scanned medical documents with higher accuracy and efficiency.
What it is: ATH-MaaS/OvisOCR2 - a 0.8B document-parsing VLM post-trained from Qwen3.5-0.8B (SFT + RL + OPD), Apache 2.0, runs on vLLM 0.22.1. One prompt per page image -> complete markdown (HTML tables, LaTeX formulas, bbox stubs for figures). It scores 96.58 on OmniDocBench v1.6, and it's the first end-to-end model to top that leaderboard - everything above it until now was a pipeline. Why that matters: pipeline OCR (layout detector -> crop regions -> OCR each region -> reassemble) fails at the layout stage: if the detector misses a region, that text is silently gone. End-to-end has no layout stage to fail. It also means: one model, one serving stack, no glue config. My test: 827 real scanned documents vs a pipeline OCR I compared it against a GLM-OCR (0.9B pipeline) deployment on 827 real-world scanned medical letters (dense print, tables, faxes, terrible scans), scoring both against Gemini 3.5 Flash transcriptions as pseudo-ground-truth (word-level F1, ~780 docs with references): metric Pipeline (GLM-OCR) OvisOCR2 mean F1 0.908 0.947 median F1 0.942 0.971 p10 F1 (the tail!) 0.810 0.898 head-to-head wins 41 503 (236 ties) The tail is the story: Ovis's 10th percentile ~ the pipeline's median. Every doc where the pipeline lost badly was a layout-detector miss. Throughput on a single RTX 5090 (vLLM 0.22.1) 150 DPI renders, temperature 0, max_tokens 4096: concurrency pages/min p50 latency 8 304 1.6 s 16 427 2.2 s 32 590 3.0 s 64 550 5.7 s 96 535 8.7 s The elbow is cc=32 (~0.10 GPU-s/page). Past it, throughput declines and latency scales with queue depth. Where the limits are: single-request latency is decode-bound (~76% of page time; ~570 tok/s single-stream - classic small-model weight-read wall), but saturated throughput is prefill-bound: a page is ~2.3k image tokens vs ~600 output tokens, so ~4 of every 5 tokens the GPU touches are prefill. KV cache never crossed ~11% - VRAM is completely irrelevant for this model; a 16 GB card fits it fine, it'll just be proportionally slower (compute + bandwidth bound, not memory bound). DPI findings: 200->150 DPI = +50% throughput, zero F1 change (150 is free money). 100 DPI = another +30% but quality tail collapses in a nasty way: table cells fuse (dates merging with addresses, rowspan confusion). If your docs have tables that matter, don't go below 150. Gotchas (learned the hard way) Repetition loops (~0.5% of pages): greedy decode occasionally collapses into 1111111... / O O O O / emoji spam until the token cap. Deterministic, reproducible. Tested mitigations on the failing pages: frequency_penalty 0.3 fixed 5/5, presence_penalty 1.0 4/5, repetition_penalty 1.05-1.1 only 2/5 (!), temp 0.2 didn't help. Recipe: greedy first pass, detect (finish_reason=length OR degenerate tail), retry once with frequency_penalty 0.3. Don't put the penalty on the first pass - it distorts legitimately repetitive content (table columns). Cap max_tokens. One loop page decoding 16k tokens alone at the end of a batch = ~30 s straggler tail. My benchmark numbers swung 383->895 p/min on straggler placement alone until I capped at 4096 (normal pages top out ~800 output tokens; retry uncapped only if the tail is clean text, i.e. a genuinely long page). --mm-processor-cache-gb 0 for OCR workloads. Real pages are unique (0% hit rate), and if you benchmark with repeated images the cache warms up and hands you glorious fake numbers (I "measured" 1,000+ p/min before catching it at 100% MM cache hit). **ninja must be installed** or the --gdn-prefill-backend triton path dies at startup with a bare FileNotFoundError (the GDN linear-attention kernels JIT-compile). Launch command that survived all of the above: vllm serve ATH-MaaS/OvisOCR2 --gpu-memory-utilization 0.9 \ --max-model-len 32768 --gdn-prefill-backend triton \ --mm-processor-cache-gb 0 --disable-uvicorn-access-log Bottom line: on my corpus this 0.8B end-to-end model beat a tuned pipeline on accuracy (especially worst-case), at ~2-4x the per-GPU efficiency, with a dramatically simpler stack. The repetition loops are its one real vice and a detect-and-retry guard fully contains them. Pipeline OCR needs a very good reason now.
OvisOCR2 is a compact 0.8B end-to-end model for page-level document parsing, achieving state-of-the-art performance on OmniDocBench and PureDocBench benchmarks.
OvisOCR2 is a 0.8B parameter end-to-end document parsing model that converts document page images to Markdown, achieving state-of-the-art scores on public benchmarks through a combination of supervised fine-tuning, reinforcement learning, and model fusion.
OvisOCR2 is a new 0.8B end-to-end OCR model based on Qwen3.5-0.8B that converts full document pages directly into structured Markdown, including text, tables, formulas, and reading order. It achieves strong benchmark scores and is released under Apache 2.0 with vLLM support.
dots.ocr is a new lightweight 1.7B parameter multilingual vision-language model that achieves state-of-the-art performance on OmniDocBench, outperforming much larger models (72B+) at document parsing and OCR tasks.
The author tested the three tiers of PP-OCRv6 models and provided open-source tools for local deployment. They demonstrated performance comparisons of each model on OmniDocBench and real-world scenarios, emphasizing the advantages of lightweight specialized models for OCR tasks.