> · 7 мин

Unlimited-OCR — Baidu взяла идею DeepSeek OCR, починила её главный потолок и обогнала оригинал

Unlimited-OCR — Baidu взяла идею DeepSeek OCR, починила её главный потолок и обогнала оригинал

Осенью DeepSeek показала фокус, от которого у инженеров поехала крыша: страницу документа можно не «читать» токен за токеном, а сжать в горстку визуальных токенов и скормить модели как картинку. В десять раз меньше токенов на ту же страницу. Звучало как чит. Но потолок был: KV-кэш всё равно рос с длиной вывода, и на многостраничных документах всё упиралось в память и контекст.

22 июня Baidu выложила Unlimited-OCR и закрыла ровно эту дыру. 3 миллиарда параметров (500 миллионов активных), MIT-лицензия, и главное: KV-кэш больше не растёт. Сорок страниц за один проход, а память стоит на месте.

TL;DR: Unlimited-OCR от Baidu — open-source OCR-модель на 3B (500M активных, MoE), которая парсит 40+ страниц за один forward pass в окне 32K. Фишка тут в Reference Sliding Window Attention (R-SWA): декодер держит только 128 последних токенов плюс полный визуальный референс, поэтому KV-кэш постоянный. По замерам Baidu бьёт DeepSeek OCR на OmniDocBench v1.5 на 6+ пунктов (93.23 против 87.01). Репо на GitHub уже собрало 6.8K звёзд.

В чём, собственно, трюк

Обычный VLM при распознавании документа ведёт себя как генеративная модель: каждый новый токен видит всё, что сгенерировано раньше. KV-кэш растёт линейно с длиной вывода. Распарси одну страницу, и всё нормально. Закинь сорок, и кэш разбухает, латентность ползёт вверх, память кончается. Поэтому DeepSeek OCR при всей гениальности компрессии всё равно жевал документы постранично.

R-SWA выкидывает это ограничение. Декодер держит скользящее окно из 128 последних токенов и при этом сохраняет полный доступ к визуальному референсу (сжатым токенам страниц). Текстовый контекст ограничен, а картинка целиком нет. KV-кэш становится константным независимо от того, парсите вы одну страницу или сорок. Память не двигается. Вот за счёт чего «one-shot long-horizon parsing» из названия вообще возможен.

Энкодер при этом унаследован от DeepSeek-OCR: связка SAM + CLIP (тот самый DeepEncoder), которая сжимает страницу примерно в 16 раз. Новое здесь именно в декодере.

Unlimited-OCR парсит многостраничный документ за один проход

Цифры и сколько им верить

По замерам Baidu на OmniDocBench v1.5 картина такая:

  • Unlimited-OCR — 93.23 общий балл
  • DeepSeek-OCR — 87.01 (та самая база, от которой форкнулись)
  • Qwen3-VL 235B — 89.15 (модель в 78 раз больше по параметрам)

В деталях разрыв ещё нагляднее: text edit distance 0.038 против 0.073 у DeepSeek (вдвое меньше ошибок), формулы по CDM 92.61 против 83.37, таблицы по TEDS 90.93 против 84.97. На свежем OmniDocBench v1.6 это 93.92, текущий SOTA. По скорости Baidu заявляет +12.7% TPS и до +35% на длинных выводах в 6000 токенов.

Теперь важное: все эти числа дала сама Baidu. Независимого аудита на OmniDocBench пока нет. И когда CodeSOTA прогнала слепые тесты на сложных, замусоренных документах, Mistral OCR выигрывал примерно в 72% случаев. На чистых структурированных PDF Unlimited-OCR блистает, а на факсовом качестве и шуме всё не так однозначно. Держите это в голове, прежде чем выкидывать текущий пайплайн.

Запускаем за пять минут

Модель лежит на HuggingFace, весит 6.78 ГБ в BF16 и заводится через обычный transformers:

from transformers import AutoModel, AutoTokenizer
import torch

name = "baidu/Unlimited-OCR"
tokenizer = AutoTokenizer.from_pretrained(name, trust_remote_code=True)
model = AutoModel.from_pretrained(
    name, trust_remote_code=True, use_safetensors=True,
    torch_dtype=torch.bfloat16,
).eval().cuda()

# одиночная плотная страница, максимум деталей — режим gundam
model.infer(tokenizer, prompt="<image>document parsing.",
    image_file="page.jpg", output_path="out/",
    base_size=1024, image_size=640, crop_mode=True, max_length=32768)

На выходе получаете Markdown с сохранённым порядком чтения, таблицы в HTML, формулы в LaTeX, при желании bbox-координаты для разметки. Обратите внимание на trust_remote_code=True: вы запускаете кастомный код модели прямо с Hub, так что для продакшена сначала загляните, что там внутри. Для нагрузки есть SGLang-сервер с OpenAI-совместимым эндпоинтом, для машины без видеокарты годятся GGUF-кванты на 2–5 ГБ, но на CPU инференс медленный.

Один момент про режимы. Base (1024×1024) пакует несколько страниц в один проход, это и есть то самое многостраничное чудо. Gundam работает с динамическим разрешением на одной странице и вытягивает мелкий шрифт. Одновременно «и батч страниц, и максимальная детализация» не бывает: выбираете под задачу.

А кто это вообще написал

Технический директор проекта подписан только как «YY». Китайская пресса почти сразу предположила, что это Вэй Хаожань, человек, который в одиночку построил всю OCR-линию DeepSeek, включая архитектуру DeepEncoder. Из DeepSeek он ушёл, когда в апреле вышла V4, и куда именно, не сообщалось. Если догадка верна, почти бесшовная преемственность между Unlimited-OCR и DeepSeek OCR перестаёт быть загадкой: автор просто продолжил свою же работу под новым флагом.

Подводные камни

32K всё ещё потолок. KV-кэш константный, да, но префилл (сами визуальные токены страниц) в окно 32K по-прежнему упирается. Сорок страниц — это для разреженной вёрстки. Натолкаете плотных таблиц и мелкого текста, и реальный лимит просядет. «Unlimited» в названии про память декодера, а не про бесконечный вход.

Нет confidence-скоринга. Модель не говорит, в каких полях она не уверена. Для счетов и накладных, где ошибка в цифре стоит денег, это больно: вы не получаете сигнала «вот тут перепроверь руками».

Языков меньше, чем кажется. Заявлено 40+ языков с упором на CJK (китайский, японский, корейский). У Mistral OCR их 170. Если у вас документы на длинном хвосте языков, Unlimited-OCR может спотыкаться.

Бенчмарки вендорские. Повторюсь, потому что это критично: SOTA-числа на OmniDocBench от Baidu, без независимой проверки. А в слепых тестах на грязных сканах Mistral пока впереди.

Альтернативы

  • DeepSeek-OCR — та самая база, которую Unlimited-OCR форкнула и обошла на ~6 пунктов. Open-weight, более обкатанная сообществом. Берите, если хотите «оригинал» и не гонитесь за многостраничным проходом.
  • Mistral OCR 4 — не open-weight, только API. Зато 170 языков, корпоративные SLA, аудит-логи и победа в слепых тестах на тяжёлых документах. Вариант «заплатить за страницу и не держать инфраструктуру».
  • Surya OCR 2 — всего 650M параметров, заточена под слабое железо и edge. Если вам нужен OCR на ноутбуке или в мобильном сценарии, а не SOTA-точность, Surya логичнее.

Вердикт

Если вы строите self-hosted пайплайн на чистых структурированных документах (счета, научные статьи, таблицы), особенно с CJK, и хотите парсить целые документы за один проход на одной 12–24 ГБ видеокарте под MIT, ставьте сегодня: выигрыш в памяти и скорости реальный. Если вам нужны 170 языков, confidence-скоринг из коробки или максимальная точность на факсовом мусоре, берите Mistral и не мучайтесь. А SOTA-числа держите под подозрением, пока кто-то независимый не перепроверит OmniDocBench: на сложных сканах слепые тесты пока голосуют за конкурента.

Как попробовать

  1. Поставьте окружение: pip install torch torchvision transformers pillow einops pymupdf (питон 3.12, CUDA 12.x).
  2. Стяните baidu/Unlimited-OCR с HuggingFace и прогоните сниппет выше на одной странице PDF в режиме gundam, убедитесь, что Markdown на выходе адекватный.
  3. Для многостраничного парсинга переключитесь в base-режим (base_size=1024, crop_mode=True) и закиньте документ целиком.
  4. Нужна пропускная способность — поднимите SGLang-сервер из репозитория и дёргайте через OpenAI-совместимый эндпоинт. Без GPU берите GGUF-квант и llama.cpp, но real-time не ждите.
  5. Перед продакшеном прогоните свои реальные документы рядом с DeepSeek-OCR или Mistral: бенчмарки вендорские, а ваши данные единственный честный тест.

Весь код, веса и примеры лежат в репозитории github.com/baidu/Unlimited-OCR.

$ ls ./related/

Похожие статьи

gpt-56-leak-goblins.md
GPT-5.6 нашли в логах Codex — утечка, ставки на Polymarket и гоблины, из-за которых OpenAI торопится
> · 9 мин

GPT-5.6 нашли в логах Codex — утечка, ставки на Polymarket и гоблины, из-за которых OpenAI торопится

Security-исследователь нашёл gpt-5.6 в rollout-логах Codex, Polymarket даёт 82% на релиз до 30 июня. Разбираем, что реально известно о новой модели OpenAI, при чём тут гоблины с приростом +3881% и почему июнь столкнёт лбами сразу три лаборатории.

llm openai leak ai-models
nvidia-cosmos-3-open-omni-model.md
NVIDIA Cosmos 3 — первая полностью открытая omni-модель, которая рассуждает о физике и сама генерирует мир для роботов
> · 7 мин

NVIDIA Cosmos 3 — первая полностью открытая omni-модель, которая рассуждает о физике и сама генерирует мир для роботов

NVIDIA выложила Cosmos 3 — первую полностью открытую omni-модель, которая в одном стеке рассуждает о физике и сама генерирует видео, звук и действия для роботов, беспилотников и складского видео-анализа. Разбираем архитектуру из двух башен, версии Nano 8B и Super 32B, 6 открытых датасетов, лицензию с поводком и зачем NVIDIA раздаёт фронтир бесплатно.

ai open-source multimodal nvidia
claude-opus-48-dynamic-workflows.md
Claude Opus 4.8 — Anthropic переписал Bun на Rust за 11 дней. И ещё четыре фичи, которые меняют день разработчика
> · 9 мин

Claude Opus 4.8 — Anthropic переписал Bun на Rust за 11 дней. И ещё четыре фичи, которые меняют день разработчика

Anthropic выпустил Claude Opus 4.8 — апгрейд по цене 4.7. Динамические workflow в Claude Code (Bun переписан на Rust за 11 дней), fast mode в три раза дешевле и effort-control в UI claude.ai.

ai agents llm claude
subscribe.sh

$ cat /dev/blog/updates

> Свежие заметки о программировании,

> DevOps и AI — прямо в мессенджер

./subscribe