ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Surya OCR 微调实战:一条命令把识别准确率拉满

Surya OCR 微调实战:一条命令把识别准确率拉满 Surya OCR 微调实战一条命令把识别准确率拉满【免费下载链接】suryaOCR, layout analysis, reading order, table recognition in 90 languages项目地址: https://gitcode.com/GitHub_Trending/su/surya合同扫描件里的「2」全被认成了「Z」你盯着屏幕看了十秒才反应过来——预训练模型不认你们公司的字体。这恰好是 Surya 要解决的问题90 多种语言的 OCR、版面分析与表格识别且预训练模型支持按自己的数据微调。下面把完整微调流程走一遍不绕弯子。搞懂 Surya判断值不值得花时间微调Surya 是一个 6.5 亿参数的 OCR 工具包一条链路覆盖文本行检测、带阅读顺序的版面分析、文字识别和表格结构识别识别侧支持 90 多种语言。它随仓库交付的是预训练权重对通用印刷文档开箱就能用但一旦换成公司自研字体、老旧扫描件或行业术语错误率就会肉眼可见地涨上来。场景直接用预训练微调之后内部文档自研字体、术语「2/Z」「0/O」高频混淆术语被拆错错误率明显下降术语输出稳定多语言混合文档小语种偶发漏字、串码90 语言表现均衡判断标准很简单输入和模型的训练分布一致就别折腾输入特殊就花一次微调的时间把它拉平。把环境和数据一次备齐环境部分三行完事。仓库里带着uv.lock直接用 uv 同步依赖版本锁定可复现不用自己拼环境git clone https://gitcode.com/GitHub_Trending/su/surya cd surya uv sync --group dev--group dev会装上datasets这类数据处理依赖微调跑数据要用到。数据是重头戏。微调数据集走 Hugging Face Datasets 格式每条样本就两个字段{image: 包含文本的图像, text: 发票合计1,280.50}官方示例数据集datalab-to/ocr_finetune_example可以当模板照着它的字段结构把自己的样本灌进去微调时用--dataset_name指过去即可。数量上有个经验区间下限 1000 张低于这个数提升不稳定上限看收益几千张之后边际收益明显变平别为了凑数硬扩。质量优先于数量——标注文本必须和线上真实输入的字体、语言、版式分布一致拿一批干净漂亮的图去微调线上喂进来的是模糊扫描件那这次微调等于白跑。一条命令跑通微调训练全部训练逻辑收在surya/scripts/finetune_ocr.py里内部基于 Hugging Face Transformers 的 Trainer数据类、整理器、训练循环都已封装好你只需要把参数指对python surya/scripts/finetune_ocr.py \ --pretrained_checkpoint_path 预训练模型路径 \ --dataset_name datalab-to/ocr_finetune_example \ --output_dir ./fine_tuned_model \ --num_train_epochs 3 \ --per_device_train_batch_size 8 \ --learning_rate 2e-5 \ --logging_steps 100 --save_steps 500参数怎么选参数默认值什么时候该动它--dataset_name官方示例数据集必改换成你自己的数据这是最重要的旋钮--num_train_epochs10小数据集约 1000 张降到 3~5防止过拟合--per_device_train_batch_size8显存爆了就减半--learning_rate2e-5loss 震荡不收敛就降到 1e-5--save_steps500磁盘紧张时拉大少存中间 checkpoint几条实操提示只想先验证流程能跑通把数据集换成自己抽的 200 张图--num_train_epochs设 3跑完看 loss 有没有正常下降再上全量显存不够先砍 batch size 减半别同时改学习率一次只引入一个变量想中途换数据或续训直接加载./fine_tuned_model里最新的 checkpoint 接着跑训练过程中你会看到每 100 步一行 loss 日志前期掉得快、中期进入平台期每 500 步落一个 checkpoint。如果 loss 出现 NaN 或持续上下抖先停掉查学习率和标注数据别怀疑显卡。验收结果、排查问题、部署上线先看指标仓库里benchmark/recognition.py的基准脚本能按语言算准确率和字符错误率用同一套评测集分别跑微调和微调前的模型做对照——只看你目标语言上的提升幅度总体平均分没有参考意义。效果不达预期时按这个顺序查标注文本和线上输入是否一致字体、清晰度、语言比例有没有漂移学习率是否过大loss 后期反弹通常是训过头了降低学习率或减少 epoch后处理开关是否打开surya/recognition/postprocessing.py里的truncate_repetitions截断重复文本、cleanup_math清理数学公式、fix_unbalanced_tags修复不平衡标签公式和特殊格式场景建议全开评测集和训练集是否重叠重叠的分数一律作废重测⚠️ 容易踩的坑语言比例失衡数据里 90% 是中文微调完英语和小语种会明显掉点抽样时按线上语言分布分层拿示例数据交差官方示例集只验证流程真实提升必须换自己的数据才谈得上显存规划6.5 亿参数模型 batch8 已经比较吃显存小显存机器先减半再跑部署不复杂把--pretrained_checkpoint_path指向训练产出的./fine_tuned_model目录就能接进surya_ocr命令或 Python API 直接使用评测数字达标即可上线。【免费下载链接】suryaOCR, layout analysis, reading order, table recognition in 90 languages项目地址: https://gitcode.com/GitHub_Trending/su/surya创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表