File size: 9,418 Bytes
f8f0a81 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 | ---
license: mit
base_model: rednote-hilab/dots.ocr
base_model_relation: quantized
library_name: hipfire
pipeline_tag: image-text-to-text
language:
- en
- zh
- multilingual
tags:
- hipfire
- quantized
- ocr
- document-parse
- layout
- table
- formula
- vlm
- qwen2-vl
- dots.ocr
---
# hipfire-dots.ocr
> **License:** MIT, under the upstream
> [dots.ocr License Agreement](LICENSE) (copied verbatim from
> [rednote-hilab/dots.ocr](https://huggingface.co/rednote-hilab/dots.ocr)). The
> Agreement sits on top of the MIT license; where the two conflict, **MIT
> prevails** (Agreement Β§1.6). This is a quantized derivative of a model created
> and released by **rednote / Xiaohongshu**
> ([Xingyin Information Technology (Shanghai) Co., Ltd.](https://huggingface.co/rednote-hilab));
> all upstream attribution and license terms apply. **Built with dots.ocr.**
[hipfire](https://github.com/Kaden-Schutt/hipfire)-native **Q8** quantization of
[rednote-hilab/dots.ocr](https://huggingface.co/rednote-hilab/dots.ocr) β a
multilingual document **layout-parsing** vision-language model that unifies
layout detection and content recognition in a single VLM while preserving
reading order. Despite a compact 1.7B-parameter LLM foundation, dots.ocr is
state-of-the-art on [OmniDocBench](https://github.com/opendatalab/OmniDocBench).
The `.hfq` file runs with the [hipfire](https://github.com/Kaden-Schutt/hipfire)
inference engine β a Rust + HIP/ROCm-direct runtime for AMD RDNA GPUs with no
Python in the hot path (Ollama-style UX). It is hipfire's **HFQ container
format** (`HFQM`-magic manifest): **not** GGUF or safetensors, and it will **not**
load in `llama.cpp` or `transformers`. All weights are stored at **Q8** and
dequantized to f32 on the fly inside the GEMV kernels.
dots.ocr is a first-class supported architecture in hipfire's registry
("Qwen2-VL-family layout-extraction VLM β image β structured OCR"; bring-your-own
via `hipfire quantize`).
## Files
| File | Quant | Size | sha256 |
|------|-------|------|--------|
| `dots-ocr.q8.hfq` | Q8 (all tensors) | 4.42 GB | `eec256b1β¦b6f5b268` |
### HFQ header β embedded architecture / config
The `HFQM` manifest carries the full dots.ocr config, tokenizer, and generation
config verbatim from the upstream checkpoint:
- **architecture:** `dots_ocr` (`DotsOCRForCausalLM`) β Qwen2-VL family
- **LLM:** 28 layers, hidden 1536, 12 attention heads / 2 KV heads (GQA),
intermediate 8960, vocab 151936, RoPE ΞΈ = 1e6, max position 131072, SwiGLU
- **Vision tower:** 42 layers, embed_dim 1536, 12 heads, patch 14,
spatial-merge 2, 3-channel; optimal under ~11.3M px
- **generation:** `eos_token_id` = `[151643, 151673]`, `max_length` 32768
- **source dtype:** bfloat16 β re-quantized to Q8
## About dots.ocr
**dots.ocr** is a powerful, multilingual document parser that unifies layout
detection and content recognition within a single vision-language model while
maintaining good reading order. Despite its compact 1.7B-parameter LLM
foundation, it achieves state-of-the-art (SOTA) performance.
1. **Powerful Performance:** dots.ocr achieves SOTA for text, tables, and reading
order on OmniDocBench, while delivering formula recognition comparable to much
larger models like Doubao-1.5 and Gemini 2.5-Pro.
2. **Multilingual Support:** robust parsing for low-resource languages, with
decisive advantages across both layout detection and content recognition on
dots.ocr's in-house 100-language benchmark.
3. **Unified and Simple Architecture:** a single VLM is far more streamlined than
conventional multi-model pipelines. Switching tasks is just changing the input
prompt β competitive with dedicated detectors like DocLayout-YOLO.
4. **Efficient and Fast:** built on a compact 1.7B LLM, it is faster than larger
foundation-based parsers.
### Performance highlights (upstream dots.ocr, bfloat16)
> These are the upstream model's published numbers. See the
> [original card](https://huggingface.co/rednote-hilab/dots.ocr) and the
> [dots.ocr repo](https://github.com/rednote-hilab/dots.ocr) for the full
> benchmark tables (OmniDocBench, dots.ocr-bench, olmOCR-bench, layout
> detection).
**OmniDocBench β end-to-end** (Edit distance β is better; TEDS β is better).
Lower is better except Table TEDS.
| Method | Overall Edit β (EN / ZH) | Text Edit β (EN / ZH) | Table TEDS β (EN / ZH) | Read Order Edit β (EN / ZH) |
|---|---|---|---|---|
| MinerU 2 | 0.139 / 0.240 | 0.047 / 0.109 | 82.5 / 79.0 | 0.069 / 0.118 |
| MonkeyOCR-pro-3B | 0.138 / 0.206 | 0.067 / 0.107 | 81.5 / 87.5 | 0.100 / 0.185 |
| Mistral OCR | 0.268 / 0.439 | 0.072 / 0.325 | 75.8 / 63.6 | 0.083 / 0.284 |
| Gemini 2.5-Pro | 0.148 / 0.212 | 0.055 / 0.168 | 85.8 / 86.4 | 0.049 / 0.121 |
| doubao-1.5-thinking-vision-pro | 0.140 / 0.162 | 0.043 / 0.085 | 83.3 / **89.3** | 0.058 / 0.094 |
| **dots.ocr** | **0.125 / 0.160** | **0.032 / 0.066** | **88.6 / 89.0** | **0.040 / 0.067** |
dots.ocr also leads **olmOCR-bench** overall (**79.1 Β± 1.0**, best on Tables
88.3, Multi-column 82.4, Base 99.5) and **dots.ocr-bench** (100 languages,
Overall Edit **0.177**), and its layout-detection-only mode reaches
**F1@IoU .50 = 0.930** overall.
## Usage (hipfire)
```bash
# install hipfire (Linux + ROCm 6+)
curl -L https://raw.githubusercontent.com/Kaden-Schutt/hipfire/master/scripts/install.sh | bash
# download this Q8 file directly
hf download hipfire-models/hipfire-dots.ocr dots-ocr.q8.hfq --local-dir ~/.hipfire/models
# serve it (OpenAI-compatible HTTP API on 0.0.0.0:11435)
hipfire serve --model ~/.hipfire/models/dots-ocr.q8.hfq
# or one-shot an image
hipfire run --model dots-ocr.q8.hfq --image page.png --prompt "$(cat prompt.txt)"
```
### Layout-parsing prompt
dots.ocr is prompt-driven β the same VLM does full parse, detection-only,
text-only, or grounding-OCR depending on the input prompt. The default
"parse all" prompt (see the upstream
[prompts.py](https://github.com/rednote-hilab/dots.ocr/blob/master/dots_ocr/utils/prompts.py))
asks for one JSON object with each layout element's bbox, category, and text:
```
Please output the layout information from the PDF image, including each layout
element's bbox, its category, and the corresponding text content within the bbox.
1. Bbox format: [x1, y1, x2, y2]
2. Layout Categories: ['Caption','Footnote','Formula','List-item','Page-footer',
'Page-header','Picture','Section-header','Table','Text','Title'].
3. Text Extraction & Formatting Rules:
- Picture: omit the text field.
- Formula: format its text as LaTeX.
- Table: format its text as HTML.
- All Others (Text, Title, etc.): format their text as Markdown.
4. Constraints:
- The output text must be the original text from the image, with no translation.
- All layout elements must be sorted according to human reading order.
5. Final Output: The entire output must be a single JSON object.
```
Switch tasks by swapping the prompt: `prompt_layout_only_en` (detection only),
`prompt_ocr` (text only, skipping headers/footers), or `prompt_grounding_ocr`
(parse a single bbox).
## Quantization & validation
Quantized from the upstream bfloat16 safetensors to **Q8** (8-bit per-tensor)
through hipfire's `hipfire quantize` path; weights are stored at Q8 and
dequantized to f32 inside the GEMV kernels β the math is f32, the bit-width is a
storage/bandwidth dial. The upstream tokenizer, `chat_template`, config, and
generation config are embedded in the `HFQM` manifest.
architecture `dots_ocr` in the hipfire HFQ header.
## Limitations (from the upstream card)
- **Complex elements:** not yet perfect on high-complexity tables and formula
extraction; pictures in documents are currently not parsed.
- **Parsing failures:** may fail when the character-to-pixel ratio is very high
(enlarge the image, or raise PDF DPI β 200 is recommended; the model is optimal
under ~11.3M px). Runs of special characters (`...`, `___`) can cause output to
repeat β in that case switch to `prompt_layout_only_en`, `prompt_ocr`, or
`prompt_grounding_ocr`.
- **Throughput:** despite the 1.7B LLM, not yet optimized for high-throughput
bulk-PDF processing.
## Citation
If you use this work, please cite the original dots.ocr model and team:
```
@misc{dotsocr,
title = {dots.ocr: Multilingual Document Layout Parsing in a Single Vision-Language Model},
author = {rednote-hilab},
year = {2025},
url = {https://huggingface.co/rednote-hilab/dots.ocr}
}
```
## License & attribution
This repository distributes a **quantized Derivative Work** of
[rednote-hilab/dots.ocr](https://huggingface.co/rednote-hilab/dots.ocr). The
model is Β© **Xingyin Information Technology (Shanghai) Co., Ltd.** and is
licensed under the [dots.ocr License Agreement](LICENSE) (MIT-based; copied
verbatim into this repo from the upstream repository).
**Modification notice:** the upstream bfloat16 safetensors weights were
re-quantized into hipfire's Q8 / HFQ container format, and the upstream
tokenizer / chat template / config were embedded into the HFQ metadata. No other
changes to the model. Per the Agreement Β§7, redistribution includes a copy of the
Agreement and retains all attribution notices; modified-weight releases should
display **"Built with dots.ocr."**
hipfire itself is dual-licensed MIT / Apache-2.0 β see the
[hipfire repo](https://github.com/Kaden-Schutt/hipfire).
|