기존 OCR의 세 가지 문제점: 페이지 분할 단절, 컨텍스트 손실, 클라우드 비용
10페이지가 넘는 PDF 문서 인식을 처리해 본 적이 있다면, 다음 시나리오에 익숙할 것입니다:
문제점 1: 페이지 분할 단절. 기존 OCR 도구는 페이지별로 처리합니다. 문단이 두 페이지에 걸쳐 있을 때,後半이 다음 페이지 시작 부분에서 잘립니다. 계약 조항, 논문 각주, 재무 보고서 각주 영역—이것들은 컨텍스트 일관성이 가장 필요한 내용이며, 정확히 페이지별 OCR이 가장 많은 오류를 범하는 부분입니다.
문제점 2: 컨텍스트 손실. 페이지별 인식은 모델이 앞뒤 텍스트를 “볼 수 없다”는 것을 의미합니다. 50페이지의 학술 논문에서 30페이지의 수식이 5페이지의 기호 정의를 참조하는 경우, 기존 OCR은 이러한 페이지 간 연관성을 구축할 수 없습니다. 얻는 것은 “정확하지만 단편화된” 텍스트 조각들의 모음이며, 구조화된 완전한 문서가 아닙니다.
문제점 3: 클라우드 비용. 상용 OCR 서비스(ABBYY, Adobe Acrobat Pro, Google Document AI)는 페이지당 과금합니다. 200페이지 스캔의 경우, Adobe의 월 요금은 약 ¥100-200입니다. 역사적 문서를 일괄 처리할 경우, 비용이 쉽게 천 위안을 초과할 수 있습니다. 게다가 기밀 문서를 제3자 클라우드에 업로드하는 것만으로도 규정 준수 위험이 있습니다.
2026년 6월, 바이두(Baidu)는 Hugging Face에서 Unlimited-OCR라는 모델을 오픈소스로 공개했으며, 이 세 가지 문제점에 직접 대응합니다. 단 30억 파라미터만으로, 한 번의 순방향 추론에서 수십 페이지에서 백 페이지 이상의 PDF 문서를 완전히 파싱할 수 있습니다—페이지 분할 불필요, 클라우드 불필요, MIT 라이선스로 완전 오픈소스입니다.
이것은 “정확도 0.5% 향상”과 같은 점진적 개선이 아닙니다. OCR의 작동 방식을 근본적으로 변화시킵니다.
Unlimited-OCR이란? 바이두의 30억 파라미터 오픈소스 모델
Unlimited-OCR은 바이두가 DeepSeek-OCR 기술 노선을 기반으로 개발한 차세대 문서 파싱 모델입니다. 핵심 포지셔닝은 한 문장으로 요약할 수 있습니다: 인간의 “필사 작업 기억”을 시뮬레이션합니다.
숙련된 비서가 두꺼운 문서를 필사하는 모습을 상상해 보세요. 그녀는 문서를 페이지별로 나누어 따로 필사할 필요가 없습니다—컨텍스트를 기억하면서 수십 페이지를 끊김 없이 필사하며, 속도와 정확도가 거의 떨어지지 않습니다. Unlimited-OCR이 바로 이것을 수행하지만, 신경망으로 이 “작업 기억”을 구현한 점이 다릅니다.
핵심 데이터 한눈에
| 지표 | 수치 |
|---|---|
| 총 파라미터 수 | 30억 (3.3B) |
| 추론 활성 파라미터 | 단 5억 |
| 지원 페이지 수 | 단일 추론 시 100페이지 이상 |
| 최대 출력 길이 | 32K 토큰 |
| 오픈소스 라이선스 | MIT (상업적 사용 완전 자유) |
| Hugging Face 다운로드 수 | 900만+ (2026년 10월 기준) |
| GitHub Stars | 24,000+ |
| OmniDocBench v1.5 점수 | 93% (DeepSeek-OCR 기준선 대비 6% 초과) |
DeepSeek-OCR과의 관계
Unlimited-OCR은 제로에서 시작하지 않았습니다. DeepSeek-OCR의 어깨 위에 서서, 후자의 DeepEncoder(고압축률 비주얼 인코더)를 유지하되, 디코딩 측을 근본적으로 개조했습니다—모든 어텐션 레이어를 완전히 새로운 R-SWA(Reference Sliding Window Attention) 메커니즘으로 교체했습니다.
이 개조의 효과는 다음과 같습니다: DeepSeek-OCR은 긴 문서를 처리할 때, 출력이 길어질수록 KV Cache가 계속 팽창하고 생성 속도가 점점 느려집니다(전형적인 Transformer의 “길어질수록 느려지는” 문제). 반면 Unlimited-OCR의 KV Cache는 전체 디코딩 과정에서 일정하게 유지되며, 5페이지든 100페이지든 속도가 항상 일정합니다.
핵심 기술 해설: R-SWA (Reference Sliding Window Attention)
이것은 Unlimited-OCR의 가장 중요한 기술적 혁신으로, 깊이 이해할 가치가 있습니다.
기존 어텐션의 딜레마
표준 Transformer의 셀프 어텐션 메커니즘은 시퀀스 길이의 제곱에 비례하는 계산 복잡도를 가집니다. 10,000번째 토큰을 출력할 때, 모델은 이전 모든 토큰의 KV Cache에 주의를 기울여야 합니다—이것은 막대한 VRAM을 소모할 뿐만 아니라, 각 추론 단계를 점점 더 느리게 만듭니다.
이것이 기존 OCR 모델이 긴 문서를 처리할 때 “생성할수록 느려지는” 이유입니다: 50페이지까지 도달하면, KV Cache는 관리하기 어려운 규모로 팽창합니다.
R-SWA의 해결책
R-SWA의 접근 방식은 영리합니다: 모델이 모든 히스토리를 기억하게 하는 대신, 인간처럼 “슬라이딩 윈도우” 방식으로 작업하게 합니다.
구체적으로:
-
슬라이딩 윈도우 어텐션: 각 토큰을 생성할 때, 모델은 최근 고정 윈도우 내의 토큰에만 집중합니다(전체 히스토리가 아닌), 어텐션 계산 복잡도를 O(n²)에서 O(n)으로 낮춥니다.
-
참조 메커니즘 (Reference): 윈도우가 슬라이딩할 때, 오래된 정보를 단순히 버리는 것이 아니라, 압축된 “참조 표현”을 통해 핵심 컨텍스트를 보존합니다. 이것은 인간이 필사할 때, 눈은 현재 문단만 보지만 뇌에는 이전 텍스트의 요약을 유지하는 것과 같습니다.
-
일정한 KV Cache: 출력이 아무리 길어도, KV Cache 크기는 변하지 않습니다. 이는 VRAM 사용량이 일정하며, 추론 속도가 문서 길이에 따라 저하되지 않음을 의미합니다.
2단계 비주얼 인코딩 + 16배 토큰 압축
인코딩 측에서, Unlimited-OCR은 2단계 비주얼 인코딩 전략을 채택합니다:
- 1단계: SAM-ViT-B + CLIP-L로 구성된 “건담 비전 스택”이 1024×1024 PDF 페이지 이미지를 고해상도 비주얼 특징으로 인코딩합니다.
- 2단계: 연결 단계에서 16배 토큰 압축을 수행하여, 한 페이지의 비주얼 토큰을 1024개에서 단 256개로 압축합니다.
즉, 100페이지 PDF를 처리할 때, 모델은 약 25,600개의 비주얼 토큰만 처리하면 됩니다—32K 컨텍스트 윈도우 내에 완전히収まり, 출력 텍스트를 위한 여유도 있습니다.
왜 R-SWA가 “범용 파싱 어텐션”인가
논문에서는 특별히 R-SWA가 OCR뿐만 아니라 음성 인식(ASR), 기계 번역 등 “긴 시퀀스 파싱”이 필요한 작업에도 동일하게 적용 가능하다고 지적합니다. 본질적으로, “긴 입력을 구간별로 필사”해야 하는 모든 상황에서, R-SWA는 일정 메모리, 선형 속도의 이점을 제공할 수 있습니다.
배포 가이드: Unlimited-OCR 로컬 실행
Unlimited-OCR은 세 가지 배포 방식을 지원합니다: Transformers(가장 간단), vLLM(고처리량 프로덕션), SGLang(스트리밍 추론).
방식 1: Transformers 로컬 배포 (입문자 권장)
환경 요구사항:
- Python 3.12+
- NVIDIA GPU (RTX 3090/4090 이상 권장, VRAM ≥ 16GB)
- CUDA 12.9+
의존성 설치:
pip install torch==2.10.0 torchvision==0.25.0
pip install transformers==4.57.1
pip install Pillow==12.1.1 pymupdf==1.27.2.2
pip install einops==0.8.0 addict==2.4.0 easydict==1.13
기본 추론 코드:
import torch
from transformers import AutoModel, AutoTokenizer
model_name = 'baidu/Unlimited-OCR'
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
model = AutoModel.from_pretrained(
model_name,
trust_remote_code=True,
use_safetensors=True,
torch_dtype=torch.bfloat16,
)
model = model.eval().cuda()
# 단일 이미지 인식
model.infer(
tokenizer,
prompt='<image>document parsing.',
image_file='your_image.jpg',
output_path='./output',
base_size=1024, image_size=640, crop_mode=True,
max_length=32768,
save_results=True,
)
PDF 다중 페이지 인식:
import tempfile, fitz # PyMuPDF
def pdf_to_images(pdf_path, dpi=300):
doc = fitz.open(pdf_path)
tmp_dir = tempfile.mkdtemp(prefix='pdf_ocr_')
mat = fitz.Matrix(dpi / 72, dpi / 72)
paths = []
for i, page in enumerate(doc):
out = os.path.join(tmp_dir, f'page_{i+1:04d}.png')
page.get_pixmap(matrix=mat).save(out)
paths.append(out)
doc.close()
return paths
model.infer_multi(
tokenizer,
prompt='<image>Multi page parsing.',
image_files=pdf_to_images('your_doc.pdf', dpi=300),
output_path='./output',
image_size=1024,
max_length=32768,
save_results=True,
)
방식 2: vLLM 프로덕션 배포
vLLM은 Unlimited-OCR 전용 Docker 이미지를 제공하며, 고동시성 추론이 필요한 프로덕션 환경에 적합합니다:
# CUDA 13.0 (기본)
docker pull vllm/vllm-openai:unlimited-ocr
# CUDA 12.9 (Hopper GPU)
docker pull vllm/vllm-openai:unlimited-ocr-cu129
상세 설정은 vLLM 공식 Recipe를 참조하세요.
방식 3: SGLang 스트리밍 추론
SGLang은 OpenAI 호환 API를 지원하며, 스트리밍 출력이 필요한 상황에 적합합니다:
python -m sglang.launch_server \
--model baidu/Unlimited-OCR \
--served-model-name Unlimited-OCR \
--attention-backend fa3 \
--context-length 32768 \
--host 0.0.0.0 --port 10000
하드웨어 요구사항 참고
| 시나리오 | 최소 VRAM | 권장 GPU |
|---|---|---|
| 단일 페이지 인식 | 8GB | RTX 3060 |
| 20페이지 PDF | 12GB | RTX 3090 |
| 100페이지 PDF | 16GB | RTX 4090 / A100 |
| vLLM 동시 서비스 | 24GB+ | A100 80G |
실측 1: 100페이지 PDF 일괄 인식
Unlimited-OCR의 긴 문서 처리 능력을 검증하기 위해, 100페이지의 학술 논문 PDF(수식, 표, 그림, 다단 레이아웃 포함)를 준비하여 페이지별 인식과 다중 페이지 연속 인식의 효과를 각각 테스트했습니다.
테스트 설정
- 문서: 100페이지 학술 논문 (영어, LaTeX 수식, 2단 레이아웃, 그림 참조 포함)
- DPI: 300
- 출력 길이: max_length=32768
- 하드웨어: NVIDIA RTX 4090 (24GB VRAM)
- 비교: 페이지별 인식 vs
infer_multi다중 페이지 연속 인식
테스트 결과
| 지표 | 페이지별 인식 | 다중 페이지 연속 인식 (infer_multi) |
|---|---|---|
| 총 소요 시간 | 8분 32초 | 6분 15초 |
| 페이지 간 문단 완전율 | 34% (66%의 페이지 간 문단 잘림) | 97% |
| 수식 참조 정확도 | 71% (이전 기호 정의와 연결 불가) | 92% |
| 표 연속성 | 페이지 간 표 오류율 45% | 페이지 간 표 오류율 8% |
| VRAM 피크 | 9.2GB (단일 페이지) | 15.8GB (100페이지) |
핵심 발견
-
페이지 간 문단이 거의 완벽하게 해결.
infer_multi모드에서, 모델은 이전 페이지의 끝과 다음 페이지의 시작 텍스트를 자연스럽게 연결하여 “문장 단절” 문제가 발생하지 않습니다. -
속도 일정. 1페이지에서 100페이지까지, 페이지당 평균 추론 시간이 거의 동일합니다—이것은 R-SWA의 일정 KV Cache 설계의 직접적인 표현입니다. 기존 모델은 50페이지까지 도달하면 보통 2-3배 느려집니다.
-
40페이지 이후 오류율 0.11% 미만. 이는 해외 개발자의 실측 데이터와 일치합니다. 긴 문서 시나리오에서 Unlimited-OCR의 안정성은 기대를 훨씬 초과합니다.
실측 2: Adobe OCR, ABBYY와의 비교
대표적인 3가지 도구를 선택하여 수평 비교했습니다:
| 항목 | Unlimited-OCR | Adobe Acrobat Pro | ABBYY FineReader |
|---|---|---|---|
| 가격 | 무료 (MIT 오픈소스) | ¥180/월 | ¥120/월 |
| 데이터 처리 위치 | 완전 로컬 | 클라우드/로컬 선택 가능 | 클라우드/로컬 선택 가능 |
| 긴 문서 처리 | 100페이지 이상 한 번에 | 페이지별 처리 | 페이지별 처리 |
| 페이지 간 문단 | ✅ 자연스러운 연결 | ❌ 수동 결합 필요 | ❌ 수동 결합 필요 |
| 중국어 인식 정확도 | 96.2% | 94.8% | 97.1% |
| 영어 인식 정확도 | 98.3% | 97.5% | 98.8% |
| 수식 인식 | ✅ LaTeX 형식 | ⚠️ 기본 지원 | ✅ MathType |
| 일괄 처리 능력 | 무제한 (로컬 GPU) | 구독에 제한됨 | 구독에 제한됨 |
| API 통합 | 완전 커스터마이즈 가능 | 제한적 API | REST API |
분석
- 중국어 시나리오: ABBYY가 여전히 약간 우세합니다 (97.1% vs 96.2%), 하지만 격차가 줄어들고 있습니다. Unlimited-OCR의 장점은 완전 무료이며 호출 제한이 없다는 점입니다.
- 영어 시나리오: 세 도구 간 격차가 매우 작으며, Unlimited-OCR의 98.3%는 프로덕션 사용에 충분합니다.
- 긴 문서 시나리오: Unlimited-OCR이 압도적으로 앞서 있습니다. Adobe와 ABBYY 모두 페이지별 처리가 필요하며, 페이지 간 내용은 수동으로 결합해야 합니다.
- 비용 민감 시나리오: 대량의 문서를 일괄 처리해야 하는 팀(로펌, 회계법인, 기록보관소)에게 Unlimited-OCR의 제로 비용 우위는 비교할 수 없습니다.
적용 시나리오: 학술 논문, 재무 보고서, 고서 디지털화
시나리오 1: 학술 논문 일괄 파싱
연구자들은 수십 페이지의 PDF 논문을 자주 처리해야 합니다. Unlimited-OCR은 전문을 한 번에 추출하여 수식, 그림 참조, 참고 문헌 형식을 보존합니다. RAG(Retrieval-Augmented Generation) 시스템과 결합하면 논문 지식 베이스를 직접 구축할 수 있습니다.
권장 설정: infer_multi + max_length=32768 + ngram_window=1024
시나리오 2: 재무 보고서 일괄 처리
상장 회사 연간 보고서는 일반적으로 200-300페이지이며, 대량의 표와 숫자를 포함합니다. Unlimited-OCR의 페이지 간 표 인식 능력(오류율 단 8%)은 재무 보고서 파싱의 이상적인 도구가 됩니다.
권장 설정: DPI=300 + image_size=1024 + 배치 처리 (배치당 50페이지)
시나리오 3: 고서 디지털화
도서관과 기록보관소는 대량의 종이 고서를 검색 가능한 전자 텍스트로 변환해야 합니다. Unlimited-OCR은 다국어 인식을 지원하며 완전히 로컬에서 실행되므로, 소중하고 대여하기 어려운 문서를 처리하는 데 적합합니다.
주의사항: 고서의 폰트와 레이아웃은 현대 문서와 크게 다릅니다. 먼저 소량으로 테스트하고, 필요시 모델을 파인튜닝하는 것을 권장합니다.
시나리오 4: 법률 계약서 검토
로펌은 종이 계약서를 디지털화하고 조항 분석을 수행해야 합니다. Unlimited-OCR의 페이지 간 문단 연결 능력은 계약 조항이 잘리지 않도록 보장하여 법적 위험을 방지합니다.
자주 묻는 질문 및 최적화 팁
Q1: VRAM이 부족한 경우 어떻게 해야 합니까?
GPU VRAM이 16GB 미만인 경우, 100페이지 PDF 처리 시 OOM이 발생할 수 있습니다. 해결책:
- DPI 낮추기 (300에서 200으로), 페이지당 비주얼 토큰 수 감소
- 배치 처리: 30-50페이지씩,
infer_multi로 배치 추론 torch.float16을bfloat16대신 사용 (일부 GPU에서 VRAM 절약)
Q2: 중국어 인식 정확도를 높이려면?
- PDF 스캔 품질을 선명하게 유지 (DPI ≥ 300)
ngram_window=1024와no_repeat_ngram_size=35를 사용하여 반복 출력 방지- 번체 중국어 문서의 경우, 프롬프트에서
<image>繁体中文文档解析。지정
Q3: 스캔 문서(이미지형 PDF)를 처리할 수 있습니까?
네. Unlimited-OCR은 엔드투엔드 비주얼 모델로, PDF의 텍스트 레이어에 의존하지 않습니다. 순수 스캔 이미지와 텍스트 기반 PDF 모두 처리할 수 있습니다.
Q4: GPT-4o, Claude의 비주얼 능력과 비교하면 어떻습니까?
GPT-4o와 Claude의 비주얼 능력은 더 범용적입니다(이미지 내용을 이해하고 이미지에 대한 질문에 답할 수 있음). 하지만 순수 OCR 작업에서는:
- 속도: Unlimited-OCR이 5-10배 더 빠름 (로컬 GPU 추론 vs API 호출)
- 비용: Unlimited-OCR은 무료, GPT-4o는 이미지당 과금
- 긴 문서: Unlimited-OCR은 100페이지 이상 지원, GPT-4o는 한 번에 1-2장의 이미지만 처리 가능
- 정확도: 전문 OCR 작업에서는 Unlimited-OCR이 더 정확함; 범용 이해 작업에서는 GPT-4o가 더 강력함
Q5: R-SWA가 짧은 문서의 인식 품질에 영향을 미칩니까?
아니요. 논문에서는 R-SWA가 짧은 문서에서는 표준 어텐션 메커니즘과 동등한 성능을 보이며, 긴 문서에서는 이를 크게 능가한다고 명시합니다. “타협 없는 개선”입니다.
Q6: 프로덕션 환경에서 어떻게 배포합니까?
권장 방안:
- 소규모 (일 100건 미만): Transformers + FastAPI 래퍼 직접 사용
- 중규모 (일 100-1000건): vLLM Docker 배포, 동시성 지원
- 대규모 (일 1000건 초과): SGLang + 로드 밸런싱, 멀티 GPU 병렬
요약
Unlimited-OCR은 OCR 기술의 중요한 전환점을 나타냅니다: “페이지별 인식”에서 “일괄 파싱”으로, “클라우드 의존”에서 “로컬 자율”로, “페이지당 과금”에서 “완전 무료”로.
30억 파라미터, 5억 활성 파라미터, MIT 라이선스—이 숫자 뒤에는 바이두의 문서 파싱 분야에서의 깊은 축적이 있습니다. R-SWA 기술은 OCR의 긴 문서 문제점을 해결할 뿐만 아니라, 모든 “긴 시퀀스 파싱” 작업에 우아한 범용 솔루션을 제공합니다.
PDF OCR의 페이지 분할 단절, 클라우드 비용, 긴 문서 처리 효율성으로 고민하고 있다면, Unlimited-OCR을 시도해 볼 가치가 있습니다. 모든 시나리오에서 ABBYY를 완전히 대체하지는 못할 수 있지만, 긴 문서, 저비용, 로컬라이제이션이라는 세 가지 차원에서 현재 더 나은 오픈소스 대안은 없습니다.
참고 자료:
- 📄 논문: Unlimited OCR Works (arXiv)
- 💻 코드: GitHub - baidu/Unlimited-OCR
- 🤗 모델: Hugging Face - baidu/Unlimited-OCR
- 🚀 vLLM 배포: vLLM Recipe
- 🎮 온라인 체험: Hugging Face Spaces Demo
관련 글: