Donut模型-图像文本阅读以及下游任务的多模态大模型

目录

一、简单介绍

二、Donut的结构

三、预训练的任务

3.1 任务描述

3.2 预训练任务数据集

四、下游任务

4.1 分类任务

4.1.1 任务描述

4.1.2 任务数据集

4.1.2.1 RVL-CDIP数据集

4.2 文档信息抽取任务

4.2.1 任务描述

4.2.2任务数据集

4.2.2.1 CORD数据集

4.2.2.2 Train Ticket数据集

4.2.2.3 名片数据集

4.2.2.4 票据数据

4.2.3 评估指标

4.3  文档问答

五、代码相关

五、实际应用的效果展示

预训练任务效果

火车票提取任务


一、简单介绍

OCR-free Document Understanding Transformer

github地址 GitHub - clovaai/donut: Official Implementation of OCR-free Document Understanding Transformer (Donut) and Synthetic Document Generator (SynthDoG), ECCV 2022

hugging face上的基础模型地址 naver-clova-ix/donut-base · Hugging Face

参考的知乎专栏

Donut:不用OCR中间过程也能理解图片文档 - 知乎

传统的文档理解Visual Document Understanding (VDU) 的步骤如下

简单概括就是:

1. 一个OCR文本提取器,提取到文本信息,文本框坐标信息;

2. 将原始图片编码得到编码后的图片embedding,将文本序列编码得到token sequence embedding,将文本框的位置信息归一化之后进行位置编码得到position embedding;

3. 通过transformer的架构将这些embedding结合起来进行下游任务的训练。

donut相比于传统的方式,直接用给一个E2E的模型取代解耦的OCR+下游语言模型。时间上更快,准确率也更高。

二、Donut的结构

结构很简单,一个视觉编码器和一个NLP的语言解码器构成。编码器和解码器都是基于Transformer的。在本文中作者采用swin-Transformer作为视觉的编码器,(swin_transformer代码地址https://github.com/huggingface/pytorch-image-models/blob/v0.6.13/timm/models/swin_transformer.py)因为效果最好。

编码器和解码器:

编码器。视觉编码器将输入文档图像x∈RH×W×C转换为一组嵌入向量{zi|zi∈Rd,1≤i≤n},其中n是特征图大小或图像块数量,d是编码器的潜在向量的维度。请注意,CNN基础模型[17]或Transformer基础模型[9,40]可以作为编码器网络使用。在本研究中,我们使用Swin Transformer [40],因为在我们的文档解析初步研究中,它表现出最佳的性能。Swin Transformer首先将输入图像x切分成非重叠的块。Swin Transformer块,由一个移位窗口为基础的多头自注意力模块和一个两层的MLP组成,应用于这些块。然后,在每个阶段都应用了块合并层到块令牌上。最后的Swin Transformer块的输出{z}被输入到下一个文本解码器中。

解码器。给定{z},文本解码器生成一个令牌序列(yi)mi=1,其中yi∈Rv是第i个令牌的独热向量,v是令牌词汇表的大小,m是超参数。我们使用BART [33]作为解码器架构。具体来说,我们使用公开可用的预训练的多语言BART模型[38]的权重来初始化解码器模型权重。

(编码器和解码器的介绍完全来自知乎专栏——Donut:不用OCR中间过程也能理解图片文档 - 知乎  )

三、预训练的任务

3.1 任务描述

模型需要学习识别图片上的文字内容,并且是按照人类的阅读习惯(从左到右,从上到下),训练的对象是每个输出token,训练的条件是参考图片以及前面时刻的输出内容,训练目标是最小化交叉熵损失函数。这个任务可以看成给一个伪OCR任务。

当编码器学习完成之后,可以得到图片的视觉编码信息为sequence len为H*W,dim=C的embedding,其中的HW为进经过SWIN Transformer经过16倍下采样之后的长宽(一般是4层下采样,但是不排除其他配置的可能)。将这个视觉编码信息作为解码器的attention层,通过解码器微调学习文字的理解。在本文中,将所有的预训练任务和下游任务(分类,问答,结构化)都转换为一个json序列的预测问题。比如对于分类问题,模型被训练输出[START class][memo][END class],这个可以在后面被转换为 JSON {“class”:“memo”}.

预训练采用teacher-forcing scheme策略。这种策略简单的说,就是采用GT作为前面时刻的输出,也就是当前时刻的输入。而不是采用模型预测的前面时刻的输出。在测试阶段,模型通过一个给定的prompt输出一个token序列。在实验中,对于每个特定的下游任务,采用特殊的新的token作为prompt。具体的token可以参考上面的图3.

图E的左上角介绍了teaching-force的训练策略,右上角是推理阶段。可以看到推理阶段,t时刻的输入是t-1时刻的输出。

右下角介绍了输出格式,然后通过某种特定的转换,变为json的格式࿰

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值