🚀 法語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}
}