Skip to content

Latest commit

 

History

History
161 lines (114 loc) · 9.69 KB

README_CN.md

File metadata and controls

161 lines (114 loc) · 9.69 KB

English | 中文

LayoutXLM

LayoutXLM: Multimodal Pre-training for Multilingual Visually-rich Document Understanding

模型描述

LayoutXLM是LayoutLMv2[2]的多语言版本,与初版LayoutLM(图像embedding在fine-tune阶段融合)不同,LayoutXLM在预训练阶段就整合视觉信息,并利用Transformer架构学习文本和图像的跨模态交互信息。此外,受到1-D相对位置表征的启发,论文提出spatial-aware self-attention(空间感知自注意力)机制,对token pair进行2-D相对位置表征。与利用绝对2-D位置embedding建模文档布局不同的是,相对位置embedding能够清晰地为上下文空间建模提供更大的感受野。

如架构图(图 1)所示,LayoutXLM(LayoutLMv2)采用多模态Transformer架构作为backbone,backbone以文本、图像以及布局信息作为输入,建立深度跨模态交互。同时提出spatial-aware self-attention(空间感知自注意力)机制,使得模型能够更好地建模文档布局。

Text Embedding

以WordPiece对OCR文本序列进行tokenize,并将每个token标记为{[A], [B]}。然后,将[CLS]加到序列头,[SEP]加到文本段尾。额外的[PAD]token被添加到序列尾部,使得整个序列长度与最大序列长L相同。最终text embedding是三个embedding的和,其中token embedding代表token本身,1-D position embedding表示token索引,segment embedding用于区分不同文本段。

Visual Embedding

尽管所有需要的信息都在页面图像中,但模型很难通过单一的information-rich表征抓取其中的细节特征。因此,利用基于CNN的视觉encoder输出页面feature map,同时也能将页面图像转换为固定长度的序列。使用ResNeXt-FPN架构作为backbone,其参数可以通过反向传播训练。 对于给定的页面图像I,其被resize到224×224后进入visual backbone。之后输出的feature map通过average pooling到一个固定的尺寸:宽为W、高为H。之后将其flatten为W×H长度的visual embedding序列,并通过线性投影层将维度对齐text embedding。因为基于CNN的视觉backbone不能获取位置信息,所以还需加入1-D position embedding,这些position embedding与text embedding所共享。对于segment embedding,所有的visual token都被分配到[C]。

Layout Embedding

Layout embedding层是用于空间布局信息表征,这种表征来自OCR识别的轴对齐token bounding box,包括box的长宽和坐标。沿用LayoutLM的方法,将坐标标准化和离散化,使其取整至0到1000,并使用两个embedding层分别embed x轴和y轴的特征。给定一个标准化后的bounding box有xmin,xmax,ymin,ymax,wildth,height,layout embedding 层concat6个bounding box 特征,构建2-Dposition embedding也就是layout embedding。CNN支持局部转换,因此图像token embedding可以一一映射回原始图像,不重叠也不遗漏。因此在计算bounding box是时,visual token可以被划分到对应的网格中。而对于text embedding中的[CLS],[SEP]以及[PAD]特殊token,会附加全零的bounding box的feature。

Multi-modal Encoder with Spatial-Aware Self-Attention Mechanism

Encoder concat视觉embedding和文本embedding到一个统一的序列,并与layout embedding相加以混合空间信息。遵循Transformer架构,模型用一堆多头自注意力层构建了多模态encoder,而后面则是前馈网络。但是原始的自注意力方法只会抓取输入token之间的绝对位置关系。为了有效地建模文档布局中的局部不变性,有必要显示插入相对位置位置信息。因此我们提出spatial-aware self-attention(空间感知自注意力)机制,将其加入self-attention层。在原始的self-attention层得到的αij后。考虑到位置范围较大,因此建模语义相对位置和空间相对位置,作为偏置项以免加入过多的参数。用三个偏置分别代表可学习的1-D和2-D(x, y)相对位置偏置。这些偏置在每个注意力头是不同的,但在每一层是一致的。假设boudning box(xi,yi),算出其三个偏置项与αij相加得到自注意力map,最后按照Transformer的方式求出最终的注意力得分。 [1] [2]

图1. LayoutXLM(LayoutLMv2)架构图 [1]

评估结果

mindspore ascend driver firmware cann toolkit/kernel
2.3.1 24.1.RC2 7.3.0.1.231 8.0.RC2.beta1

根据我们的实验,在XFUND中文数据集上训练的(模型评估)结果如下:

在采用图模式的ascend 910*上实验结果,mindspore版本为2.3.1

模型名称 卡数 单卡批量大小 img/s hmean 配置 权重
LayoutXLM 1 8 73.26 90.34% yaml ckpt
VI-LayoutXLM 1 8 110.6 93.31% yaml ckpt

快速开始

环境及数据准备

安装

环境安装教程请参考MindOCR的 installation instruction.

数据集下载

这里使用XFUND数据集做为实验数据集。 XFUN数据集是微软提出的一个用于KIE任务的多语言数据集,共包含七个数据集,每个数据集包含149张训练集和50张验证集

分别为:ZH(中文)、JA(日语)、ES(西班牙)、FR(法语)、IT(意大利)、DE(德语)、PT(葡萄牙)

这里提供了经过预处理可以直接使用的中文数据集供大家下载。

mkdir train_data
cd train_data
wget https://download.mindspore.cn/toolkits/mindocr/vi-layoutxlm/XFUND.tar && tar -xf XFUND.tar
cd ..

数据集使用

解压文件后,数据文件夹结构如下:

  └─ zh_train/            训练集
      ├── image/          图片存放文件夹
      ├── train.json      标注信息
  └─ zh_val/              验证集
      ├── image/          图片存放文件夹
      ├── val.json        标注信息

该数据集的标注格式为

{
    "height": 3508, # 图像高度
    "width": 2480,  # 图像宽度
    "ocr_info": [
        {
            "text": "邮政地址:",  # 单个文本内容
            "label": "question", # 文本所属类别
            "bbox": [261, 802, 483, 859], # 单个文本框
            "id": 54,  # 文本索引
            "linking": [[54, 60]], # 当前文本和其他文本的关系 [question, answer]
            "words": []
        },
        {
            "text": "湖南省怀化市市辖区",
            "label": "answer",
            "bbox": [487, 810, 862, 859],
            "id": 60,
            "linking": [[54, 60]],
            "words": []
        }
    ]
}

模型评估

若要评估已训练模型的准确性,可以使用eval.py。请在yaml配置文件的eval部分将参数ckpt_load_path设置为模型checkpoint的文件路径,然后运行:

python tools/eval.py --config configs/kie/vi_layoutxlm/ser_vi_layoutxlm_xfund_zh.yaml

模型推理

若要使用已训练的模型进行推理,可使用tools/infer/text/predict_ser.py进行推理并将结果进行可视化展示。

python tools/infer/text/predict_ser.py --rec_algorithm CRNN_CH --image_dir {dir of images or path of image}

以中文表单的实体识别为例,使用脚本识别configs/kie/vi_layoutxlm/example.jpg表单中的实体,结果将默认存放在./inference_results文件夹内,也可以通过--draw_img_save_dir命令行参数自定义结果存储路径。

example.jpg

识别结果如图,图片保存为`inference_results/example_ser.jpg`:

example_ser.jpg

参考文献

[1] Yang Xu, Yiheng Xu, Tengchao Lv, Lei Cui, Furu Wei, Guoxin Wang, Yijuan Lu, Dinei Florencio, Cha Zhang, Wanxiang Che, Min Zhang, Lidong Zhou. LayoutLMv2: Multi-modal Pre-training for Visually-Rich Document Understanding. arXiv preprint arXiv:2012.14740, 2020.

[2] Yiheng Xu, Tengchao Lv, Lei Cui, Guoxin Wang, Yijuan Lu, Dinei Florencio, Cha Zhang, Furu Wei. LayoutXLM: Multimodal Pre-training for Multilingual Visually-rich Document Understanding. arXiv preprint arXiv:2104.08836, 2021.