Surya OCR 微调实战:一条命令跑通训练,8 个关键参数全解
【免费下载链接】suryaOCR, layout analysis, reading order, table recognition in 90+ languages项目地址: https://gitcode.com/GitHub_Trending/su/surya
Surya 是一个支持 90 多种语言的 OCR 工具包,文本检测、版面分析、文本识别、表格识别四项能力齐备。通用预训练模型在你的发票、手写单据、医学影像等特定领域上往往精度不够,用自己领域的图文数据做一次 Surya OCR 微调,就是最直接的补法。这篇实战带你把一次微调从头跑通并验证效果:一条命令启动训练,8 个参数各有明确作用,训练完用基准脚本核对指标。
环境与数据一次备齐 🛠️
本节把仓库、依赖、数据集三件事一次交代清楚,约 10 分钟完成。
先拿到代码并装好依赖:
git clone https://gitcode.com/GitHub_Trending/su/surya cd surya poetry install --with dev所有依赖都定义在 pyproject.toml 里,--with dev会额外安装开发依赖组,其中的datasets库专门用来加载和处理训练数据。
数据集必须是 HuggingFace Datasets 格式,且每条样本包含两个字段:
image:含文本的图像text:图像中对应的文本
不确定结构时,先照官方示例datalab-to/ocr_finetune_example的字段布局建自己的集,之后在训练命令里用--dataset_name换成你自己的即可。数据量与相关性两条底线,先记着:至少 1000 张图像,且标注内容要与目标场景高度相关。
一条命令跑通 Surya OCR 微调
环境就绪后,整次微调就是一条命令。以识别表单场景为例:
poetry run python surya/scripts/finetune_ocr.py \ --pretrained_checkpoint_path <预训练模型路径> \ --dataset_name <你的HF数据集名> \ --output_dir ./fine_tuned_model \ --num_train_epochs 10 \ --per_device_train_batch_size 8 \ --learning_rate 2e-5 \ --logging_steps 100 \ --save_steps 500每个参数的含义如下表,按需调整即可:
| 参数 | 含义 |
|---|---|
pretrained_checkpoint_path | 起点:预训练模型权重路径 |
dataset_name | 训练数据集,HF Datasets 名称或路径 |
output_dir | 训练产物(checkpoint 与最终权重)的保存位置 |
num_train_epochs | 完整遍历数据集的轮数,示例取 10 |
per_device_train_batch_size | 单卡批大小,显存不足就调小 |
learning_rate | 学习率,微调建议 2e-5 起步 |
logging_steps | 每多少步打印一次训练日志 |
save_steps | 每多少步落盘一个 checkpoint |
这次训练到底在做什么
finetune_ocr.py基于 HuggingFace Transformers 实现,内部由四块组成:
- 数据集类
SuryaOCRDataset:读取image/text样本并完成图像预处理 - 数据整理器
SuryaOCRDataCollator:把样本打包成形状规整的训练批次 load_model_and_processor:加载预训练权重与配套处理器main:解析命令行参数,初始化上述组件后交给Trainer启动训练
也就是说,数据怎么读、批次怎么拼、模型从哪加载,脚本都已固定,你只需要给对参数。
验证效果与打磨结果
训练跑完,打开benchmark/recognition.py里的基准脚本,对微调前后各评一次,重点盯两个指标:准确率和字符错误率。字符错误率降了,微调才算数。
如果输出里还有杂音,用surya/recognition/postprocessing.py里的三个后处理函数打磨,它们各管一类问题:
| 函数 | 处理的输出问题 |
|---|---|
truncate_repetitions | 截断重复生成的文本 |
cleanup_math | 清理数学公式的格式残留 |
fix_unbalanced_tags | 修复未闭合的标签 |
对包含数学公式或特殊格式的文档,这三步收益最直接。调好之后,模型可以落地到三类常见任务:文档数字化(纸质转可编辑文本)、多语言内容提取(90+ 语言文本抽取)、表格结构化识别(表格转结构化数据)。
快速参考卡
| 项目 | 建议值 / 位置 | 常见坑 |
|---|---|---|
| 安装命令 | poetry install --with dev | 漏装 dev 组,datasets库缺失 |
| 数据集格式 | HF Datasets,含image/text字段 | 字段名写错导致读取失败 |
| 示例数据集 | datalab-to/ocr_finetune_example | 结构照抄,内容必须换成自己领域的 |
| 数据量底线 | ≥ 1000 张图像 | 量太少或场景不符,调参也救不回来 |
| 学习率 | 2e-5 起步 | 过大导致训练不稳、指标回退 |
| 微调脚本 | surya/scripts/finetune_ocr.py | 依赖 HF Transformers,勿换推理入口运行 |
| 基准评估 | benchmark/recognition.py | 只跑一遍不前后对比,看不出提升幅度 |
| 后处理函数 | surya/recognition/postprocessing.py | 有重复/公式残留时再启用,别默认全开 |
微调本身到此收束:环境、数据、命令、验证四件事都过了,模型就能用。若训练或评估环节卡住,直接到仓库的 Issues 区提报问题,附上参数与报错即可。
【免费下载链接】suryaOCR, layout analysis, reading order, table recognition in 90+ languages项目地址: https://gitcode.com/GitHub_Trending/su/surya
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考