🚀 法语TrOCR基础手写体模型
本模型旨在解决法语手写文字识别的问题,基于TrOCR架构训练出适用于法语的模型,可用于光学字符识别任务,为法语手写文字的数字化提供了有效解决方案。
🚀 快速开始
模型概述
TrOCR的法语手写体版本尚未发布,因此我们为了概念验证(PoC)的目的训练了一个法语模型。基于此模型,建议收集更多数据对第一阶段进行额外训练,或在第二阶段进行微调。
该模型是论文 TrOCR: Transformer-based Optical Character Recognition with Pre-trained Models(作者:Li等人)中介绍的 英文大型手写trOCR模型 的一个特殊实例,该模型首次在 此仓库 中作为在 IAM数据集 上微调的TrOCR模型发布。我们与 Marie Beigelman 合作完成了此项目。
训练步骤
我们决定在两个数据集和一个生成数据集上分两步进行微调:
- 借助一份包含姓名、姓氏、职业、城市、数字的列表以及 文本数据生成器,我们生成了70000行数据。
a. 为了适应法语词汇和姓名,我们仅在这个数据集上训练了10个轮次。
- 我们在两个手写数据集上进行了20个轮次的微调:
a. 法国人口普查数据集(作者:Constum等人)。我们还在 Hugging Face Hub 上创建了一个数据集。
b. 一个即将发布的关于法国档案的数据集 - 11000行,已手动标注。
✨ 主要特性
- 专门为法语手写文字识别训练的模型。
- 基于TrOCR架构,结合图像Transformer编码器和文本Transformer解码器。
- 经过多轮次的微调,在特定数据集上有较好的表现。
📚 详细文档
模型描述
TrOCR模型是一个编码器 - 解码器模型,由一个图像Transformer作为编码器,一个文本Transformer作为解码器组成。图像编码器的权重初始化为BEiT的权重,而文本解码器的权重初始化为RoBERTa的权重。
图像以固定大小的图像块序列(分辨率为16x16)的形式输入到模型中,并进行线性嵌入。在将序列输入到Transformer编码器的各层之前,还会添加绝对位置嵌入。然后,Transformer文本解码器自回归地生成标记。
预期用途和限制
你可以使用该原始模型对单行文本图像进行光学字符识别(OCR)。
参数设置
我们使用了启发式参数,未进行单独的超参数调优:
- 学习率(learning_rate) = 4e-5
- 训练轮次(epochs) = 20
- 混合精度训练(fp16) = True
- 最大长度(max_length) = 64
- 批量大小(batch_size) = 128
- 训练/验证集划分(split train/dev):90/10
评估指标
验证集结果
- 验证集大小:来自法国人口普查数据集的700个示例 / 来自我们自己数据集的1600个示例
- 字符错误率(CER):0.0575
- 词错误率(WER):0.1651
- 损失(Loss):0.5768
测试集结果
- 测试集大小:来自法国人口普查数据集的730个示例 / 来自我们自己数据集的950个示例
- 字符错误率(CER):0.09417
- 词错误率(WER):0.23485
- 损失(Loss):0.8700
💻 使用示例
基础用法
from transformers import TrOCRProcessor, VisionEncoderDecoderModel, AutoTokenizer
from PIL import Image
import requests
from io import BytesIO
url = "https://github.com/agombert/trocr-base-printed-fr/blob/main/sample_imgs/5.jpg"
response = requests.get(url)
img = Image.open(BytesIO(response.content))
processor = TrOCRProcessor.from_pretrained('microsoft/trocr-large-handwritten')
model = VisionEncoderDecoderModel.from_pretrained('agomberto/trocr-large-handwritten-fr')
tokenizer = AutoTokenizer.from_pretrained('agomberto/trocr-large-handwritten-fr')
pixel_values = (processor(images=img, return_tensors="pt").pixel_values)
generated_ids = model.generate(pixel_values)
generated_text = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
📄 许可证
本项目采用MIT许可证。
BibTeX引用和引用信息
@miscellaneous{
author = {Arnault Gombert & Marie Beigelman},
title = {TrOCR in French: adapt to french archives},
year = {2023}
}