README.md 9.3 KB
Newer Older
文幕地方's avatar
文幕地方 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
- [文档视觉问答(DOC-VQA)](#文档视觉问答doc-vqa)
  - [1. 简介](#1-简介)
  - [2. 性能](#2-性能)
  - [3. 效果演示](#3-效果演示)
    - [3.1 SER](#31-ser)
    - [3.2 RE](#32-re)
  - [4. 安装](#4-安装)
    - [4.1 安装依赖](#41-安装依赖)
    - [4.2 安装PaddleOCR(包含 PP-OCR 和 VQA)](#42-安装paddleocr包含-pp-ocr-和-vqa)
  - [5. 使用](#5-使用)
    - [5.1 数据和预训练模型准备](#51-数据和预训练模型准备)
    - [5.2 SER](#52-ser)
    - [5.3 RE](#53-re)
  - [6. 参考链接](#6-参考链接)


文幕地方's avatar
add re  
文幕地方 已提交
17
# 文档视觉问答(DOC-VQA)
littletomatodonkey's avatar
littletomatodonkey 已提交
18

文幕地方's avatar
文幕地方 已提交
19 20 21 22
<a name="1"></a>

## 1. 简介

文幕地方's avatar
文幕地方 已提交
23
VQA指视觉问答,主要针对图像内容进行提问和回答,DOC-VQA是VQA任务中的一种,DOC-VQA主要针对文本图像的文字内容提出问题。
文幕地方's avatar
add re  
文幕地方 已提交
24 25 26 27

PP-Structure 里的 DOC-VQA算法基于PaddleNLP自然语言处理算法库进行开发。

主要特性如下:
littletomatodonkey's avatar
littletomatodonkey 已提交
28 29

- 集成[LayoutXLM](https://arxiv.org/pdf/2104.08836.pdf)模型以及PP-OCR预测引擎。
文幕地方's avatar
文幕地方 已提交
30 31
- 支持基于多模态方法的语义实体识别 (Semantic Entity Recognition, SER) 以及关系抽取 (Relation Extraction, RE) 任务。基于 SER 任务,可以完成对图像中的文本识别与分类;基于 RE 任务,可以完成对图象中的文本内容的关系提取,如判断问题对(pair)。
- 支持SER任务和RE任务的自定义训练。
文幕地方's avatar
add re  
文幕地方 已提交
32 33
- 支持OCR+SER的端到端系统预测与评估。
- 支持OCR+SER+RE的端到端系统预测。
littletomatodonkey's avatar
littletomatodonkey 已提交
34 35 36 37 38


本项目是 [LayoutXLM: Multimodal Pre-training for Multilingual Visually-rich Document Understanding](https://arxiv.org/pdf/2104.08836.pdf) 在 Paddle 2.2上的开源实现,
包含了在 [XFUND数据集](https://github.com/doc-analysis/XFUND) 上的微调代码。

文幕地方's avatar
文幕地方 已提交
39 40 41
<a name="2"></a>

## 2. 性能
文幕地方's avatar
add re  
文幕地方 已提交
42

文幕地方's avatar
文幕地方 已提交
43
我们在 [XFUN](https://github.com/doc-analysis/XFUND) 的中文数据集上对算法进行了评估,性能如下
文幕地方's avatar
add re  
文幕地方 已提交
44

45
| 模型 | 任务 | hmean | 模型下载地址 |
文幕地方's avatar
文幕地方 已提交
46
|:---:|:---:|:---:| :---:|
47
| LayoutXLM | SER | 0.9038 | [链接](https://paddleocr.bj.bcebos.com/pplayout/ser_LayoutXLM_xfun_zh.tar) |
文幕地方's avatar
文幕地方 已提交
48 49
| LayoutXLM | RE | 0.7483 | [链接](https://paddleocr.bj.bcebos.com/pplayout/re_LayoutXLM_xfun_zh.tar) |
| LayoutLMv2 | SER | 0.8544 | [链接](https://paddleocr.bj.bcebos.com/pplayout/ser_LayoutLMv2_xfun_zh.tar)
文幕地方's avatar
文幕地方 已提交
50
| LayoutLMv2 | RE | 0.6777 | [链接](https://paddleocr.bj.bcebos.com/pplayout/re_LayoutLMv2_xfun_zh.tar) |
51
| LayoutLM | SER | 0.7731 | [链接](https://paddleocr.bj.bcebos.com/pplayout/ser_LayoutLM_xfun_zh.tar) |
文幕地方's avatar
add re  
文幕地方 已提交
52

文幕地方's avatar
文幕地方 已提交
53
<a name="3"></a>
文幕地方's avatar
add re  
文幕地方 已提交
54

文幕地方's avatar
文幕地方 已提交
55
## 3. 效果演示
littletomatodonkey's avatar
littletomatodonkey 已提交
56 57 58

**注意:** 测试图片来源于XFUN数据集。

文幕地方's avatar
文幕地方 已提交
59 60 61
<a name="31"></a>

### 3.1 SER
littletomatodonkey's avatar
littletomatodonkey 已提交
62

文幕地方's avatar
文幕地方 已提交
63
![](../../doc/vqa/result_ser/zh_val_0_ser.jpg) | ![](../../doc/vqa/result_ser/zh_val_42_ser.jpg)
文幕地方's avatar
add re  
文幕地方 已提交
64
---|---
littletomatodonkey's avatar
littletomatodonkey 已提交
65

文幕地方's avatar
add re  
文幕地方 已提交
66
图中不同颜色的框表示不同的类别,对于XFUN数据集,有`QUESTION`, `ANSWER`, `HEADER` 3种类别
littletomatodonkey's avatar
littletomatodonkey 已提交
67

文幕地方's avatar
add re  
文幕地方 已提交
68 69 70
* 深紫色:HEADER
* 浅紫色:QUESTION
* 军绿色:ANSWER
littletomatodonkey's avatar
littletomatodonkey 已提交
71

文幕地方's avatar
add re  
文幕地方 已提交
72
在OCR检测框的左上方也标出了对应的类别和OCR识别结果。
littletomatodonkey's avatar
littletomatodonkey 已提交
73

文幕地方's avatar
文幕地方 已提交
74
<a name="32"></a>
littletomatodonkey's avatar
littletomatodonkey 已提交
75

文幕地方's avatar
文幕地方 已提交
76
### 3.2 RE
littletomatodonkey's avatar
littletomatodonkey 已提交
77

文幕地方's avatar
文幕地方 已提交
78
![](../../doc/vqa/result_re/zh_val_21_re.jpg) | ![](../../doc/vqa/result_re/zh_val_40_re.jpg)
文幕地方's avatar
add re  
文幕地方 已提交
79
---|---
littletomatodonkey's avatar
littletomatodonkey 已提交
80 81


文幕地方's avatar
add re  
文幕地方 已提交
82
图中红色框表示问题,蓝色框表示答案,问题和答案之间使用绿色线连接。在OCR检测框的左上方也标出了对应的类别和OCR识别结果。
littletomatodonkey's avatar
littletomatodonkey 已提交
83

文幕地方's avatar
文幕地方 已提交
84
<a name="4"></a>
文幕地方's avatar
add re  
文幕地方 已提交
85

文幕地方's avatar
文幕地方 已提交
86
## 4. 安装
文幕地方's avatar
add re  
文幕地方 已提交
87

文幕地方's avatar
文幕地方 已提交
88 89 90
<a name="41"></a>

### 4.1 安装依赖
littletomatodonkey's avatar
littletomatodonkey 已提交
91 92 93 94

- **(1) 安装PaddlePaddle**

```bash
文幕地方's avatar
文幕地方 已提交
95
python3 -m pip install --upgrade pip
littletomatodonkey's avatar
littletomatodonkey 已提交
96 97

# GPU安装
98
python3 -m pip install "paddlepaddle-gpu>=2.2" -i https://mirror.baidu.com/pypi/simple
littletomatodonkey's avatar
littletomatodonkey 已提交
99 100

# CPU安装
101
python3 -m pip install "paddlepaddle>=2.2" -i https://mirror.baidu.com/pypi/simple
littletomatodonkey's avatar
littletomatodonkey 已提交
102 103 104 105

```
更多需求,请参照[安装文档](https://www.paddlepaddle.org.cn/install/quick)中的说明进行操作。

文幕地方's avatar
文幕地方 已提交
106
<a name="42"></a>
littletomatodonkey's avatar
littletomatodonkey 已提交
107

文幕地方's avatar
文幕地方 已提交
108
### 4.2 安装PaddleOCR(包含 PP-OCR 和 VQA)
littletomatodonkey's avatar
littletomatodonkey 已提交
109 110 111 112

- **(1)pip快速安装PaddleOCR whl包(仅预测)**

```bash
113
python3 -m pip install paddleocr
littletomatodonkey's avatar
littletomatodonkey 已提交
114 115
```

littletomatodonkey's avatar
littletomatodonkey 已提交
116
- **(2)下载VQA源码(预测+训练)**
littletomatodonkey's avatar
littletomatodonkey 已提交
117 118 119 120 121 122 123 124 125 126

```bash
【推荐】git clone https://github.com/PaddlePaddle/PaddleOCR

# 如果因为网络问题无法pull成功,也可选择使用码云上的托管:
git clone https://gitee.com/paddlepaddle/PaddleOCR

# 注:码云托管代码可能无法实时同步本github项目更新,存在3~5天延时,请优先使用推荐方式。
```

127
- **(3)安装VQA的`requirements`**
littletomatodonkey's avatar
littletomatodonkey 已提交
128 129

```bash
130
python3 -m pip install -r ppstructure/vqa/requirements.txt
littletomatodonkey's avatar
littletomatodonkey 已提交
131
```
文幕地方's avatar
文幕地方 已提交
132
<a name="5"></a>
littletomatodonkey's avatar
littletomatodonkey 已提交
133

文幕地方's avatar
文幕地方 已提交
134
## 5. 使用
littletomatodonkey's avatar
littletomatodonkey 已提交
135

文幕地方's avatar
文幕地方 已提交
136
<a name="51"></a>
littletomatodonkey's avatar
littletomatodonkey 已提交
137

文幕地方's avatar
文幕地方 已提交
138
### 5.1 数据和预训练模型准备
littletomatodonkey's avatar
littletomatodonkey 已提交
139

140 141 142 143
如果希望直接体验预测过程,可以下载我们提供的预训练模型,跳过训练过程,直接预测即可。

* 下载处理好的数据集

littletomatodonkey's avatar
littletomatodonkey 已提交
144 145 146 147 148 149 150 151 152
处理好的XFUN中文数据集下载地址:[https://paddleocr.bj.bcebos.com/dataset/XFUND.tar](https://paddleocr.bj.bcebos.com/dataset/XFUND.tar)


下载并解压该数据集,解压后将数据集放置在当前目录下。

```shell
wget https://paddleocr.bj.bcebos.com/dataset/XFUND.tar
```

153
* 转换数据集
littletomatodonkey's avatar
littletomatodonkey 已提交
154

155
若需进行其他XFUN数据集的训练,可使用下面的命令进行数据集的转换
littletomatodonkey's avatar
littletomatodonkey 已提交
156

157 158 159
```bash
python3 ppstructure/vqa/helper/trans_xfun_data.py --ori_gt_path=path/to/json_path --output_path=path/to/save_path
```
littletomatodonkey's avatar
littletomatodonkey 已提交
160

文幕地方's avatar
文幕地方 已提交
161 162 163
<a name="52"></a>

### 5.2 SER
littletomatodonkey's avatar
littletomatodonkey 已提交
164

165 166 167 168 169 170
启动训练之前,需要修改下面的四个字段

1. `Train.dataset.data_dir`:指向训练集图片存放目录
2. `Train.dataset.label_file_list`:指向训练集标注文件
3. `Eval.dataset.data_dir`:指指向验证集图片存放目录
4. `Eval.dataset.label_file_list`:指向验证集标注文件
littletomatodonkey's avatar
littletomatodonkey 已提交
171

172
* 启动训练
littletomatodonkey's avatar
littletomatodonkey 已提交
173
```shell
174
CUDA_VISIBLE_DEVICES=0 python3 tools/train.py -c configs/vqa/ser/layoutxlm.yml
littletomatodonkey's avatar
littletomatodonkey 已提交
175 176
```

177 178
最终会打印出`precision`, `recall`, `hmean`等指标。
`./output/ser_layoutxlm/`文件夹中会保存训练日志,最优的模型和最新epoch的模型。
littletomatodonkey's avatar
littletomatodonkey 已提交
179

Z
zhoujun 已提交
180 181
* 恢复训练

182 183
恢复训练需要将之前训练好的模型所在文件夹路径赋值给 `Architecture.Backbone.checkpoints` 字段。

Z
zhoujun 已提交
184
```shell
185
CUDA_VISIBLE_DEVICES=0 python3 tools/train.py -c configs/vqa/ser/layoutxlm.yml -o Architecture.Backbone.checkpoints=path/to/model_dir
Z
zhoujun 已提交
186 187 188 189
```

* 评估

190
评估需要将待评估的模型所在文件夹路径赋值给 `Architecture.Backbone.checkpoints` 字段。
littletomatodonkey's avatar
littletomatodonkey 已提交
191 192

```shell
193
CUDA_VISIBLE_DEVICES=0 python3 tools/eval.py -c configs/vqa/ser/layoutxlm.yml -o Architecture.Backbone.checkpoints=path/to/model_dir
littletomatodonkey's avatar
littletomatodonkey 已提交
194
```
195
最终会打印出`precision`, `recall`, `hmean`等指标
littletomatodonkey's avatar
littletomatodonkey 已提交
196

197
* 使用`OCR引擎 + SER`串联预测
littletomatodonkey's avatar
littletomatodonkey 已提交
198

199
使用如下命令即可完成`OCR引擎 + SER`的串联预测
littletomatodonkey's avatar
littletomatodonkey 已提交
200 201

```shell
文幕地方's avatar
文幕地方 已提交
202
CUDA_VISIBLE_DEVICES=0 python3 tools/infer_vqa_token_ser.py -c configs/vqa/ser/layoutxlm.yml  -o Architecture.Backbone.checkpoints=PP-Layout_v1.0_ser_pretrained/ Global.infer_img=doc/vqa/input/zh_val_42.jpg
littletomatodonkey's avatar
littletomatodonkey 已提交
203 204
```

205 206
最终会在`config.Global.save_res_path`字段所配置的目录下保存预测结果可视化图像以及预测结果文本文件,预测结果文本文件名为`infer_results.txt`

littletomatodonkey's avatar
littletomatodonkey 已提交
207 208
*`OCR引擎 + SER`预测系统进行端到端评估

209 210
首先使用 `tools/infer_vqa_token_ser.py` 脚本完成数据集的预测,然后使用下面的命令进行评估。

littletomatodonkey's avatar
littletomatodonkey 已提交
211 212
```shell
export CUDA_VISIBLE_DEVICES=0
文幕地方's avatar
文幕地方 已提交
213
python3 helper/eval_with_label_end2end.py --gt_json_path XFUND/zh_val/xfun_normalize_val.json  --pred_json_path output_res/infer_results.txt
littletomatodonkey's avatar
littletomatodonkey 已提交
214 215
```

文幕地方's avatar
文幕地方 已提交
216
<a name="53"></a>
littletomatodonkey's avatar
littletomatodonkey 已提交
217

文幕地方's avatar
文幕地方 已提交
218
### 5.3 RE
littletomatodonkey's avatar
littletomatodonkey 已提交
219

文幕地方's avatar
add re  
文幕地方 已提交
220
* 启动训练
littletomatodonkey's avatar
littletomatodonkey 已提交
221

222
启动训练之前,需要修改下面的四个字段
文幕地方's avatar
add re  
文幕地方 已提交
223

224 225 226 227
1. `Train.dataset.data_dir`:指向训练集图片存放目录
2. `Train.dataset.label_file_list`:指向训练集标注文件
3. `Eval.dataset.data_dir`:指指向验证集图片存放目录
4. `Eval.dataset.label_file_list`:指向验证集标注文件
Z
zhoujun 已提交
228 229

```shell
230
CUDA_VISIBLE_DEVICES=0 python3 tools/train.py -c configs/vqa/re/layoutxlm.yml
Z
zhoujun 已提交
231 232
```

233 234 235 236 237 238
最终会打印出`precision`, `recall`, `hmean`等指标。
`./output/re_layoutxlm/`文件夹中会保存训练日志,最优的模型和最新epoch的模型。

* 恢复训练

恢复训练需要将之前训练好的模型所在文件夹路径赋值给 `Architecture.Backbone.checkpoints` 字段。
文幕地方's avatar
add re  
文幕地方 已提交
239

Z
zhoujun 已提交
240
```shell
241
CUDA_VISIBLE_DEVICES=0 python3 tools/train.py -c configs/vqa/re/layoutxlm.yml -o Architecture.Backbone.checkpoints=path/to/model_dir
Z
zhoujun 已提交
242 243
```

244
* 评估
Z
zhoujun 已提交
245

246
评估需要将待评估的模型所在文件夹路径赋值给 `Architecture.Backbone.checkpoints` 字段。
文幕地方's avatar
add re  
文幕地方 已提交
247 248

```shell
249
CUDA_VISIBLE_DEVICES=0 python3 tools/eval.py -c configs/vqa/re/layoutxlm.yml -o Architecture.Backbone.checkpoints=path/to/model_dir
文幕地方's avatar
add re  
文幕地方 已提交
250
```
251
最终会打印出`precision`, `recall`, `hmean`等指标
文幕地方's avatar
add re  
文幕地方 已提交
252

253
* 使用`OCR引擎 + SER + RE`串联预测
文幕地方's avatar
add re  
文幕地方 已提交
254

255
使用如下命令即可完成`OCR引擎 + SER + RE`的串联预测
文幕地方's avatar
add re  
文幕地方 已提交
256 257
```shell
export CUDA_VISIBLE_DEVICES=0
文幕地方's avatar
文幕地方 已提交
258
python3 tools/infer_vqa_token_ser_re.py -c configs/vqa/re/layoutxlm.yml -o Architecture.Backbone.checkpoints=PP-Layout_v1.0_re_pretrained/ Global.infer_img=doc/vqa/input/zh_val_21.jpg -c_ser configs/vqa/ser/layoutxlm.yml -o_ser Architecture.Backbone.checkpoints=PP-Layout_v1.0_ser_pretrained/
文幕地方's avatar
add re  
文幕地方 已提交
259
```
littletomatodonkey's avatar
littletomatodonkey 已提交
260

261 262
最终会在`config.Global.save_res_path`字段所配置的目录下保存预测结果可视化图像以及预测结果文本文件,预测结果文本文件名为`infer_results.txt`

文幕地方's avatar
文幕地方 已提交
263
<a name="6"></a>
264

文幕地方's avatar
文幕地方 已提交
265
## 6. 参考链接
littletomatodonkey's avatar
littletomatodonkey 已提交
266 267 268 269

- LayoutXLM: Multimodal Pre-training for Multilingual Visually-rich Document Understanding, https://arxiv.org/pdf/2104.08836.pdf
- microsoft/unilm/layoutxlm, https://github.com/microsoft/unilm/tree/master/layoutxlm
- XFUND dataset, https://github.com/doc-analysis/XFUND