Donut Receipts Extract
基于Donut架构的收据文本提取专用模型,通过视觉编码器和文本解码器实现无需OCR的文档理解
下载量 66
发布时间 : 1/28/2024
模型简介
该模型专门用于从收据图像中提取结构化文本信息,采用Swin Transformer视觉编码器和BART文本解码器架构,支持端到端的收据信息识别与提取。
模型特点
无需OCR的文档理解
直接处理图像输入,无需传统OCR预处理步骤即可提取文本信息
双分辨率处理
V2版本采用双倍分辨率处理收据图像,显著提升识别精度
结构化输出
自动生成JSON格式的结构化数据,包含收据关键字段(如金额、电话、折扣等)
改进的数据集
基于去重并人工校正的数据集训练,相比V1版本性能显著提升
模型能力
收据图像识别
文本信息提取
结构化数据生成
多字段联合解析
使用案例
零售与财务
电子收据归档
自动提取纸质收据的金额、日期等关键信息
准确率89.5%,字符错误率15.8%
费用报销系统
识别员工提交的收据图像并自动填充报销表单
支持<s_total>、<s_date>等12个关键字段提取
🚀 Donut-receipts-extract
Donut-receipts-extract 是一个基于 Donut 模型的微调模型,专门用于从收据中高效提取文本信息。它在特定数据集上进行训练和优化,在收据文本提取任务上取得了较好的效果。
🚀 快速开始
环境准备
确保你已经安装了必要的库,如 torch
、transformers
等。
代码示例
import torch
import re
from PIL import Image
from transformers import DonutProcessor, VisionEncoderDecoderModel
device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')
processor = DonutProcessor.from_pretrained("AdamCodd/donut-receipts-extract")
model = VisionEncoderDecoderModel.from_pretrained("AdamCodd/donut-receipts-extract")
model.to(device)
def load_and_preprocess_image(image_path: str, processor):
"""
Load an image and preprocess it for the model.
"""
image = Image.open(image_path).convert("RGB")
pixel_values = processor(image, return_tensors="pt").pixel_values
return pixel_values
def generate_text_from_image(model, image_path: str, processor, device):
"""
Generate text from an image using the trained model.
"""
# Load and preprocess the image
pixel_values = load_and_preprocess_image(image_path, processor)
pixel_values = pixel_values.to(device)
# Generate output using model
model.eval()
with torch.no_grad():
task_prompt = "<s_receipt>" # <s_cord-v2> for v1
decoder_input_ids = processor.tokenizer(task_prompt, add_special_tokens=False, return_tensors="pt").input_ids
decoder_input_ids = decoder_input_ids.to(device)
generated_outputs = model.generate(
pixel_values,
decoder_input_ids=decoder_input_ids,
max_length=model.decoder.config.max_position_embeddings,
pad_token_id=processor.tokenizer.pad_token_id,
eos_token_id=processor.tokenizer.eos_token_id,
early_stopping=True,
bad_words_ids=[[processor.tokenizer.unk_token_id]],
return_dict_in_generate=True
)
# Decode generated output
decoded_text = processor.batch_decode(generated_outputs.sequences)[0]
decoded_text = decoded_text.replace(processor.tokenizer.eos_token, "").replace(processor.tokenizer.pad_token, "")
decoded_text = re.sub(r"<.*?>", "", decoded_text, count=1).strip() # remove first task start token
decoded_text = processor.token2json(decoded_text)
return decoded_text
# Example usage
image_path = "path_to_your_image" # Replace with your image path
extracted_text = generate_text_from_image(model, image_path, processor, device)
print("Extracted Text:", extracted_text)
更多代码示例请参考 文档。
✨ 主要特性
- 模型架构:Donut 模型由视觉编码器(Swin Transformer)和文本解码器(BART)组成。给定一张图像,编码器先将图像编码为嵌入张量,然后解码器根据编码器的编码自回归地生成文本。
- 版本更新:V2 版本在改进后的数据集上进行了重新训练,数据集经过去重和手动修正,性能优于 V1 版本。
- 特定任务优化:该微调模型专门为从收据中提取文本而设计。
📚 详细文档
版本说明
V2 版本
- 数据集:在改进后的 AdamCodd/donut-receipts 数据集上重新训练(去重、手动修正)。
- 许可证:V2 模型的新许可证为 cc-by-nc-4.0。如需商业使用权,请联系(adamcoddml@gmail.com)。同时,V1 模型仍可在 MIT 许可证下使用(在 v1 分支下)。
- 评估结果:
- 损失:0.326069
- 编辑距离:0.145293
- CER:0.158358
- WER:1.673989
- 平均准确率:0.895219
- F1:0.977897
- 任务提示变更:V2 的任务提示已更改为
<s_receipt>
(V1 为<s_cord-v2>
)。新增了两个键<s_svc>
和<s_discount>
,<s_telephone>
重命名为<s_phone>
。
V1 版本
- 微调基础:该模型是在 donut 基础模型 上针对 AdamCodd/donut-receipts 数据集进行微调的。
- 评估结果:
- 损失:0.498843
- 编辑距离:0.198315
- CER:0.213929
- WER:7.634032
- 平均准确率:0.843472
预期用途和局限性
- 预期用途:该微调模型专门用于从收据中提取文本,在其他类型的文档上可能无法达到最佳性能。
- 局限性:使用的数据集仍不理想(仍存在许多错误),因此该模型需要在以后重新训练以提高其性能。
训练超参数
- 学习率:3e-05
- 训练批次大小:2
- 评估批次大小:4
- 随机种子:42
- 优化器:AdamW,β=(0.9, 0.999),ε=1e-08
- 学习率调度器类型:线性
- 学习率调度器热身步数:300
- 训练轮数:35
- 权重衰减:0.01
框架版本
- Transformers 4.36.2
- Datasets 2.16.1
- Tokenizers 0.15.0
- Evaluate 0.4.1
🔧 技术细节
模型信息
属性 | 详情 |
---|---|
模型类型 | Donut 微调模型 |
基础模型 | naver-clova-ix/donut-base |
训练数据 | AdamCodd/donut-receipts |
评估指标
指标 | 值 |
---|---|
损失 | 0.326069(V2);0.498843(V1) |
编辑距离 | 0.145293(V2);0.198315(V1) |
CER | 0.158358(V2);0.213929(V1) |
WER | 1.673989(V2);7.634032(V1) |
平均准确率 | 0.895219(V2);0.843472(V1) |
F1 | 0.977897(V2) |
📄 许可证
本项目 V2 版本采用 cc-by-nc-4.0 许可证。如需商业使用权,请联系(adamcoddml@gmail.com)。V1 版本采用 MIT 许可证(在 v1 分支下)。
BibTeX 引用
@article{DBLP:journals/corr/abs-2111-15664,
author = {Geewook Kim and
Teakgyu Hong and
Moonbin Yim and
Jinyoung Park and
Jinyeong Yim and
Wonseok Hwang and
Sangdoo Yun and
Dongyoon Han and
Seunghyun Park},
title = {Donut: Document Understanding Transformer without {OCR}},
journal = {CoRR},
volume = {abs/2111.15664},
year = {2021},
url = {https://arxiv.org/abs/2111.15664},
eprinttype = {arXiv},
eprint = {2111.15664},
timestamp = {Thu, 02 Dec 2021 10:50:44 +0100},
biburl = {https://dblp.org/rec/journals/corr/abs-2111-15664.bib},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
⚠️ 重要提示
要访问此模型,请发送电子邮件至 adamcoddml@gmail.com,并简要描述你的项目或应用。未提供此信息的请求将不予考虑,且在任何情况下都不会授予访问权限。
如果你想支持作者,可以点击 这里。
Clip Vit Large Patch14
CLIP是由OpenAI开发的视觉-语言模型,通过对比学习将图像和文本映射到共享的嵌入空间,支持零样本图像分类
图像生成文本
C
openai
44.7M
1,710
Clip Vit Base Patch32
CLIP是由OpenAI开发的多模态模型,能够理解图像和文本之间的关系,支持零样本图像分类任务。
图像生成文本
C
openai
14.0M
666
Siglip So400m Patch14 384
Apache-2.0
SigLIP是基于WebLi数据集预训练的视觉语言模型,采用改进的sigmoid损失函数,优化了图像-文本匹配任务。
图像生成文本
Transformers

S
google
6.1M
526
Clip Vit Base Patch16
CLIP是由OpenAI开发的多模态模型,通过对比学习将图像和文本映射到共享的嵌入空间,实现零样本图像分类能力。
图像生成文本
C
openai
4.6M
119
Blip Image Captioning Base
Bsd-3-clause
BLIP是一个先进的视觉-语言预训练模型,擅长图像描述生成任务,支持条件式和非条件式文本生成。
图像生成文本
Transformers

B
Salesforce
2.8M
688
Blip Image Captioning Large
Bsd-3-clause
BLIP是一个统一的视觉-语言预训练框架,擅长图像描述生成任务,支持条件式和无条件式图像描述生成。
图像生成文本
Transformers

B
Salesforce
2.5M
1,312
Openvla 7b
MIT
OpenVLA 7B是一个基于Open X-Embodiment数据集训练的开源视觉-语言-动作模型,能够根据语言指令和摄像头图像生成机器人动作。
图像生成文本
Transformers 英语

O
openvla
1.7M
108
Llava V1.5 7b
LLaVA 是一款开源多模态聊天机器人,基于 LLaMA/Vicuna 微调,支持图文交互。
图像生成文本
Transformers

L
liuhaotian
1.4M
448
Vit Gpt2 Image Captioning
Apache-2.0
这是一个基于ViT和GPT2架构的图像描述生成模型,能够为输入图像生成自然语言描述。
图像生成文本
Transformers

V
nlpconnect
939.88k
887
Blip2 Opt 2.7b
MIT
BLIP-2是一个视觉语言模型,结合了图像编码器和大型语言模型,用于图像到文本的生成任务。
图像生成文本
Transformers 英语

B
Salesforce
867.78k
359
精选推荐AI模型
Llama 3 Typhoon V1.5x 8b Instruct
专为泰语设计的80亿参数指令模型,性能媲美GPT-3.5-turbo,优化了应用场景、检索增强生成、受限生成和推理任务
大型语言模型
Transformers 支持多种语言

L
scb10x
3,269
16
Cadet Tiny
Openrail
Cadet-Tiny是一个基于SODA数据集训练的超小型对话模型,专为边缘设备推理设计,体积仅为Cosmo-3B模型的2%左右。
对话系统
Transformers 英语

C
ToddGoldfarb
2,691
6
Roberta Base Chinese Extractive Qa
基于RoBERTa架构的中文抽取式问答模型,适用于从给定文本中提取答案的任务。
问答系统 中文
R
uer
2,694
98