🚀 用于法语的TrOCR模型
本项目为法语场景训练了TrOCR模型,解决了TrOCR尚未发布法语版本的问题,为法语的光学字符识别提供了可用方案。
🚀 快速开始
TrOCR尚未发布法语版本,因此我们为了概念验证(PoC)的目的训练了一个法语模型。基于此模型,建议收集更多数据以进行第一阶段的额外训练,或者进行第二阶段的微调。
它是论文 TrOCR: Transformer-based Optical Character Recognition with Pre-trained Models 中介绍的 英文TrOCR模型 的一个特殊案例,该论文由Li等人撰写,并首次在 此仓库 中发布。
得益于 daekun-ml 和 Niels Rogge,他们的教程和代码使我们能够发布此模型。
✨ 主要特性
- 针对法语进行训练,为法语的光学字符识别提供支持。
- 基于已有的英文TrOCR模型架构进行改进。
📦 安装指南
文档未提及具体安装步骤,可参考作者的GitHub仓库:https://github.com/agombert/trocr-base-printed-fr/
💻 使用示例
基础用法
from transformers import TrOCRProcessor, VisionEncoderDecoderModel, AutoTokenizer
import requests
from io import BytesIO
from PIL import Image
processor = TrOCRProcessor.from_pretrained("microsoft/trocr-base-handwritten")
model = VisionEncoderDecoderModel.from_pretrained("agomberto/trocr-base-printed-fr")
tokenizer = AutoTokenizer.from_pretrained("agomberto/trocr-base-printed-fr")
url = "https://github.com/agombert/trocr-base-printed-fr/blob/main/sample_imgs/0.jpg"
response = requests.get(url)
img = Image.open(BytesIO(response.content))
pixel_values = processor(img, return_tensors="pt").pixel_values
generated_ids = model.generate(pixel_values, max_length=32)
generated_text = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
print(generated_text)
📚 详细文档
数据收集
文本数据
我们通过从以下数据集随机采样,创建了约72.3万个示例的训练数据:
我们收集了每个数据集的部分数据,然后随机切割句子以收集最终的训练集。
图像数据
图像数据是使用TrOCR论文中介绍的TextRecognitionDataGenerator(https://github.com/Belval/TextRecognitionDataGenerator)生成的。
以下是生成图像的代码片段:
python3 ./trdg/run.py -i ocr_dataset_poc.txt -w 5 -t {num_cores} -f 64 -l ko -c {num_samples} -na 2 --output_dir {dataset_dir}
模型训练
基础模型
编码器模型使用了 facebook/deit-base-distilled-patch16-384
,解码器模型使用了 camembert-base
。这比从 microsoft/trocr-base-stage1
开始训练权重更容易。
参数
我们使用了启发式参数,没有进行单独的超参数调优。
- 学习率 = 4e-5
- 训练轮数 = 25
- 混合精度训练(fp16) = True
- 最大长度 = 32
开发集结果
对于开发集,我们得到了以下结果:
- 测试集大小:7.2万个示例
- 字符错误率(CER):0.13
- 单词错误率(WER):0.26
- 验证损失:0.424
🔧 技术细节
本项目基于TrOCR模型架构,针对法语场景进行了定制化训练。在数据收集阶段,通过整合多个公开数据集的文本数据,并使用TextRecognitionDataGenerator生成图像数据。在模型训练方面,选择了合适的编码器和解码器模型,并使用启发式参数进行训练,最终在开发集上取得了一定的效果。
📄 许可证
本项目采用MIT许可证。