如何为Donut(Document Understanding Transformer)准备自定义训练数据?
训练Donut模型的训练数据创建指南
Donut模型的训练核心是文档图像+结构化JSON标注的配对样本,以下是具体的创建步骤和规范:
一、明确任务与标注结构
先确定你的具体任务(如表单提取、发票识别、文档分类),不同任务对应不同的标注结构:
- 文档分类:标注仅需包含类别信息,示例:
{"category": "增值税发票"} - 表单/票据提取:标注需包含键值对形式的字段信息,示例:
{ "invoice": { "发票编号": "INV-2024-0001", "开票日期": "2024-05-20", "合计金额": "¥1280.50", "销售方": "XX科技有限公司" } }
二、图像数据准备
- 收集覆盖不同场景的文档图像:包括不同扫描质量(清晰/模糊)、字体类型、布局样式、背景干扰的样本,尽量贴近实际应用场景。
- 统一图像规格:缩放到模型要求的输入尺寸(如Donut-base默认1920×1920),保证图像清晰,避免过度曝光、扭曲。
三、标注规范要点
- 标注必须为合法JSON格式,且结构要与训练时的prompt前缀匹配(比如训练表单任务会用
<s_invoice>作为前缀,标注要对应任务结构)。 - 只保留任务相关信息:比如提取发票字段时,无需标注页眉、页脚等无关内容。
- 保持标注一致性:相同字段的命名要统一(避免“发票号”和“发票编号”混用),数值格式、日期格式也要统一。
四、数据集组织方式
推荐采用如下目录结构,方便模型加载:
your_dataset/ ├── train/ │ ├── images/ │ │ ├── img_001.jpg │ │ ├── img_002.png │ │ └── ... │ └── annotations/ │ ├── img_001.json │ ├── img_002.json │ └── ... └── validation/ ├── images/ └── annotations/
也可以用CSV文件关联图像路径与标注,示例:
image_path,annotation train/images/img_001.jpg,"{""invoice"": {""发票编号"": ""INV-2024-0001"", ...}}"
五、高效标注工具与技巧
- 手动标注工具:LabelStudio、VGG Image Annotator(VIA),支持图像标注并直接导出JSON格式。
- 半自动标注:用预训练Donut模型对未标注图像批量生成预测结果,再人工修正,大幅提升标注效率。
- 参考开源数据集:可以参考Donut官方用到的FUNSD、RVL-CDIP等数据集,学习标注格式,也可直接用于微调。
六、额外注意事项
- 小样本场景下,可通过图像增强(旋转、缩放、添加轻微噪声)扩充数据集,提升模型泛化能力。
- 验证集要与训练集分布一致,避免场景偏差导致评估结果失真。
内容的提问来源于stack exchange,提问作者Vikas Kumar
相关产品推荐
相关产品推荐

