许可协议: cc-by-nc-4.0
推理: 不支持
基础模型: naver-clova-ix/donut-base
标签:
- donut
- 图像转文本
- 视觉
模型索引:
- 名称: donut-receipts-extract
结果:
- 任务:
类型: 图像转文本
名称: 图像转文本
指标:
- 类型: 损失值
值: 0.326069
- 类型: 准确率
值: 0.895219
名称: 准确率
- 类型: 字符错误率(CER)
值: 0.158358
名称: CER
- 类型: 词错误率(WER)
值: 1.673989
名称: WER
- 类型: 编辑距离
值: 0.145293
名称: 编辑距离
指标:
- 字符错误率(CER)
- 词错误率(WER)
- 准确率
数据集:
- AdamCodd/donut-receipts
管道标签: 图像转文本
额外授权提示: "如需获取此模型访问权限,请发送邮件至adamcoddml@gmail.com并简要描述您的项目或应用场景。未提供相关信息的请求将不予考虑,且在任何情况下均不会授予访问权限。"
额外授权字段:
公司/大学: 文本
国家: 国家
Donut收据提取模型
Donut模型由Geewok等人在论文《无需OCR的文档理解Transformer》中提出,并首次发布于该代码库。
=== 版本2 ===
本模型基于改进版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>
。
由于采用双倍分辨率处理收据图像并使用更优质数据集,V2版本性能显著优于V1。但受限于训练数据量(约1100张收据)的多样性不足,仍有改进空间,这将是未来版本的重点优化方向。
=== 版本1 ===
本模型是基于donut基础模型在AdamCodd/donut-receipts数据集上微调的收据文本提取专用模型。
评估集表现:
- 损失值: 0.498843
- 编辑距离: 0.198315
- 字符错误率(CER): 0.213929
- 词错误率(WER): 7.634032
- 平均准确率: 0.843472
模型架构
Donut由视觉编码器(Swin Transformer)和文本解码器(BART)组成。编码器将图像编码为嵌入张量(形状为batch_size, seq_len, hidden_size),解码器基于编码结果自回归生成文本。

使用方法
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 加载并预处理图像(图像路径: str, processor):
"""
加载图像并进行模型预处理
"""
image = Image.open(图像路径).convert("RGB")
pixel_values = processor(image, return_tensors="pt").pixel_values
return pixel_values
def 从图像生成文本(model, 图像路径: str, processor, device):
"""
使用训练模型从图像生成文本
"""
pixel_values = 加载并预处理图像(图像路径, processor)
pixel_values = pixel_values.to(device)
model.eval()
with torch.no_grad():
task_prompt = "<s_receipt>"
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
)
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()
decoded_text = processor.token2json(decoded_text)
return decoded_text
image_path = "您的图片路径"
extracted_text = 从图像生成文本(model, image_path, processor, device)
print("提取文本:", extracted_text)
更多代码示例参见文档。
适用范围与限制
本微调模型专为收据文本提取设计,在其他类型文档上可能表现不佳。由于训练数据集仍存在较多错误(后续需重新训练改进),当前性能尚未达到最优。
训练超参数
训练采用以下超参数:
- 学习率: 3e-05
- 训练批大小: 2
- 评估批大小: 4
- 随机种子: 42
- 优化器: AdamW (betas=(0.9,0.999), epsilon=1e-08
- 学习率调度器类型: 线性
- 学习率预热步数: 300
- 训练轮数: 35
- 权重衰减: 0.01
框架版本
- Transformers 4.36.2
- Datasets 2.16.1
- Tokenizers 0.15.0
- Evaluate 0.4.1
支持请访问我的Ko-fi。
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}
}