NetraOCR-1.0
единый OCR на 1,27B для Indic-скриптов и рукописных таблиц
NetraOCR-1.0 — мультимодальная OCR-модель от dipankar500 на 1 273 967 936 параметров, построенная на Qwen3.5-0.8B с гибридной архитектурой Gated-DeltaNet + full attention. Она объединяет IndicOCR и OvisOCR3 в один чекпоинт через Branch-Train-MiX и Dual Interleaved Vision Token Fusion.
✨ Ключевые особенности
- 👁 Два замороженных vision-энкодера: OvisOCR3 ViT + merger и IndicOCR ViT + merger; токены чередуются с 2-frame M-RoPE.
- 💻 24-слойный декодер: 18 слоёв linear-attention GatedDeltaNet и 6 слоёв full attention.
- ⚪ В каждом слое FFN — soft-routed MoE с двумя замороженными экспертами (IndicOCR и OvisOCR3) и обучаемым роутером.
- 📓 Единый словарь на 303 101 токен: 248 070 токенов OvisOCR3/Qwen3.5 и 55 031 токен чистых Indic-скриптов.
- 🔨 Режим two-pass region-crop: split_page_regions() режет плотные рукописные страницы на горизонтальные полосы перед area_clamp.
🖱 Пример
import torch
from PIL import Image
from modeling_netra import NetraForConditionalGeneration
from processing_netra import NetraProcessor, area_clamp
model = NetraForConditionalGeneration.from_pretrained("dipankar500/NetraOCR-1.0", torch_dtype=torch.bfloat16).cuda().eval()
proc = NetraProcessor.from_pretrained("dipankar500/NetraOCR-1.0", frames=2)
batch = {k: v.cuda() for k, v in proc([proc.prompt("Extract all text from the image.")], [area_clamp(Image.open("sample.png").convert("RGB"))]).items()}
out = model.generate(**batch, max_new_tokens=512, do_sample=False)
Подробнее
Параметров — 1 273 967 936; база — Qwen3.5-0.8B.ViT-бэкбоны обоих энкодеров полностью заморожены, обучаются MLP-мерджеры и роутеры.
Код использует CUDA и torch.bfloat16; данных о VRAM и бенчмарках в карточке нет.








Комментарии