🚀 甜甜圈(Donut)印度KYC文档识别模型
甜甜圈(Donut)是一个端到端的视觉文档理解(VDU)模型,可用于全面理解文档图像。它能对印度KYC文档进行内容读取、分类,还能检测文档的方向和颜色模式。
🚀 快速开始
推理示例
from transformers import DonutProcessor, VisionEncoderDecoderModel
import re
import cv2
import json
import torch
from tqdm.auto import tqdm
import numpy as np
from donut import JSONParseEvaluator
processor = DonutProcessor.from_pretrained("sourinkarmakar/kyc_v1-donut-demo")
model = VisionEncoderDecoderModel.from_pretrained("sourinkarmakar/kyc_v1-donut-demo")
dataset = glob.glob(os.path.join(basepath, "unseen_samples/*"))
output_list = []
for idx, sample in tqdm(enumerate(dataset), total=len(dataset)):
img = cv2.imread(sample)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
pixel_values = processor(img, return_tensors="pt").pixel_values
pixel_values = pixel_values.to(device)
task_prompt = "<s_cord-v2>"
decoder_input_ids = processor.tokenizer(task_prompt, add_special_tokens=False, return_tensors="pt").input_ids
decoder_input_ids = decoder_input_ids.to(device)
outputs = model.generate(
pixel_values,
decoder_input_ids=decoder_input_ids,
max_length=model.decoder.config.max_position_embeddings,
early_stopping=True,
pad_token_id=processor.tokenizer.pad_token_id,
eos_token_id=processor.tokenizer.eos_token_id,
use_cache=True,
num_beams=1,
bad_words_ids=[[processor.tokenizer.unk_token_id]],
return_dict_in_generate=True,
)
seq = processor.batch_decode(outputs.sequences)[0]
seq = seq.replace(processor.tokenizer.eos_token, "").replace(processor.tokenizer.pad_token, "")
seq = re.sub(r"<.*?>", "", seq, count=1).strip()
seq = processor.token2json(seq)
output_list.append(seq)
print(output_list)
✨ 主要特性
- 端到端设计:甜甜圈(Donut)是一个端到端的视觉文档理解(VDU)模型,无需依赖OCR相关模块。
- 简单架构:由基于Transformer的视觉编码器和文本解码器模块组成,易于进行端到端训练。
- 多任务处理:能够对印度KYC文档(如Aadhar、PAN和Voter)进行内容分类和读取,还能检测文档的方向和颜色模式。
📦 安装指南
使用此模型需要安装transformers
和donut-python
库,可使用以下命令进行安装:
pip install transformers
pip install -q donut-python
📚 详细文档
模型描述
甜甜圈(Donut)是一个用于文档图像通用理解的端到端(即独立的)VDU模型。其架构相当简单,由基于Transformer的视觉编码器和文本解码器模块组成。甜甜圈不依赖任何与OCR功能相关的模块,而是使用视觉编码器从给定的文档图像中提取特征。随后的文本解码器将提取的特征映射到子词标记序列,以构建所需的结构化格式(例如JSON)。每个模型组件都基于Transformer,因此该模型可以轻松地进行端到端训练。

预期用途和局限性
此模型经过训练,用于读取印度KYC文档的内容。它可以对Aadhar、PAN和Voter文档进行分类和内容读取,还能检测文档的方向以及文档是彩色还是黑白。输入的文档可以是任意方向。
模型需要提供质量较好的图像(以便内容可读)。由于该模型是在有限的数据上进行训练的,因此性能可能不是非常理想。在未来的版本中,将使用更多的图像,并添加更多类型的KYC文档。
训练数据
对于v1版本,使用了一个自定义数据集进行训练,大约使用了283张图像,其中199张用于训练,42张用于验证,42张用于测试。在199张训练图像中,使用了57张Aadhar样本、57张PAN样本和85张Voter样本。
性能
当前的性能如下:
- 总体准确率 = 74 %
- Aadhar = 49 %(需要检查准确率较低的原因)
- PAN = 94 %
- Voter = 76 %
🔧 技术细节
甜甜圈(Donut)模型由基于Transformer的视觉编码器和文本解码器组成。视觉编码器用于从文档图像中提取特征,文本解码器将这些特征映射到子词标记序列,以构建所需的结构化格式(如JSON)。模型的每个组件都基于Transformer,因此可以轻松地进行端到端训练。
📄 许可证
文档未提及相关许可证信息。
📦 模型信息
属性 |
详情 |
模型类型 |
甜甜圈(Donut)端到端VDU模型 |
训练数据 |
自定义数据集,包含约283张印度KYC文档图像(Aadhar、PAN和Voter) |
⚠️ 重要提示
模型需要提供质量较好的图像(以便内容可读)。由于该模型是在有限的数据上进行训练的,因此性能可能不是非常理想。
💡 使用建议
可以在未来版本中增加训练图像的数量,并添加更多类型的KYC文档,以提高模型的性能。