"...git@developer.sourcefind.cn:cnjsdfcy/simbricks.git" did not exist on "274f06bfaae0ede60403c580ce491a9aa2a7635d"
README.md 6.08 KB
Newer Older
dcuai's avatar
dcuai committed
1
# mPLUG-DocOwl
wanglch's avatar
wanglch committed
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42

mPLUG-DocOwl 1.5 是阿里巴巴mPLUG团队在多模态文档图片理解领域的最新开源工作,在10个文档理解benchmark上达到最优效果,5个数据集上提升超过10个点,部分数据集上超过智谱17.3B的CogAgent,在DocVQA上达到82.2的效果。

## 论文

- [mPLUG-DocOwl 1.5: Unified Structure Learning for OCR-free Document Understanding](https://arxiv.org/abs/2403.12895)

## 模型结构

DocOwl 1.5强调文档图片理解中对于“文档结构”理解的重要性,提出对于所有文字信息丰富的图片进行统一的结构学习。DocOwl 1.5延续该团队前序工作DocOwl以及UReader处理高分辨率文档图片的方式,采用一个形状适应的切图模块将高分辨率图片切为多个大小一致的子图。为了更好的将图片的文字布局信息传递给LLM,同时避免在处理高分辨率文档图片时视觉特征过长,DocOwl 1.5提出来一个基于卷积的连接结构H-Reducer,其在水平方向上混合4个视觉特征,模型结构如下图所示。


<div align="center">
    <img src="./assets/model_strcuture.png">
</div>

## 算法原理

为了进行统一的文档结构学习,该工作基于开源数据集构建了一个全面的结构化解析数据集DocStruct4M。对于文档图片或者网页截图,主要采用空格和换行表示文字布局;对于表格,其改进的Markdown语法既能表示跨行跨列,又相比html缩减了大量标签;对于图表,同样采用markdown来表示其数学特征,并且限定数值的有效位以保证其在图片中视觉可见;对于自然图,采用描述加上ocr文本的形式。

<div align=center>
    <img src="./assets/model_theory.png">
</div>


## 环境配置
### Docker(方法一)
[光源](https://www.sourcefind.cn/#/service-details)拉取docker镜像的地址与使用步骤

```
docker pull image.sourcefind.cn:5000/dcu/admin/base/pytorch:2.1.0-ubuntu20.04-dtk24.04.1-py3.10

docker run -it -v /path/your_code_data/:/path/your_code_data/ -v /opt/hyhal/:/opt/hyhal/:ro --shm-size=64G --privileged=true --device=/dev/kfd --device=/dev/dri/ --group-add video --name mplug-doclocal <your imageID> bash

cd /path/your_code_data/

pip install -r requirements.txt -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
```

### Dockerfile(方法二)
```
dcuai's avatar
dcuai committed
43
cd /path/your_code_data/
wanglch's avatar
wanglch committed
44
45
46
47
48
49
50

docker build --no-cache -t mplug-doclocal:latest .

docker run --shm-size=64G --name mplug-doclocal -v /opt/hyhal:/opt/hyhal:ro --privileged=true --device=/dev/kfd --device=/dev/dri/ --group-add video -v /path/your_code_data/:/path/your_code_data/ -it mplug-doclocal bash
```
### Anaconda(方法三)

chenzk's avatar
chenzk committed
51
关于本项目DCU显卡所需的特殊深度学习库可从[光合](https://developer.sourcefind.cn/tool/)开发者社区下载安装。
wanglch's avatar
wanglch committed
52
```
dcuai's avatar
dcuai committed
53
54
DTK驱动:dtk24.04.1
python:3.10
wanglch's avatar
wanglch committed
55
56
57
58
torch:2.1
torchvision: 0.16.0
deepspped: 0.12.3
```
dcuai's avatar
dcuai committed
59
`Tips:以上dtk驱动、python、torch等DCU相关工具版本需要严格一一对应`
wanglch's avatar
wanglch committed
60

chenzk's avatar
chenzk committed
61
关于本项目DCU显卡所需的特殊深度学习库可从[光合](https://developer.sourcefind.cn/tool/)开发者社区下载安装。
wanglch's avatar
wanglch committed
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
```
conda create -n mplug-doclocal python=3.10

conda activate mplug-doclocal

cd /path/your_code_data/

pip install -r requirements.txt -i http://mirrors.aliyun.com/pypi/simple
```

## 数据集

迷你数据集 [mini DocLocal4K](./DocLocal4K/mini_imges.jsonl) 

完整[DocLocal4K](https://www.modelscope.cn/datasets/iic/DocLocal4K)数据集下载路径

预训练需要准备你的训练数据,需要将所有样本放到一个列表中并存入json文件中。每个样本对应一个字典,包含以下信息,示例如下所示:用于正常训练的完整数据集请按此目录结构进行制备:

```
{"image": ["./imgs/DUE_Benchmark/DocVQA/pngs/xnbl0037_1.png"], "messages": [{"role": "user", "content": "<|image|>what is the date mentioned in this letter?"}, {"role": "assistant", "content": "1/8/93"}], "task_name": "qa_sft", "dataset_name": "DocVQA"}
```
dcuai's avatar
dcuai committed
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
数据集目录结构如下:
```
 ── DocLocal4K
    │   ├── imgs
    │   │         ├── ChartQA
    │   │         │
    │   │         ├── DUE_Benchmark
    │   │         │    
    │   │         ├── TextVQA
    │   │         │    
    │   │         └── VisualMRC
    │   ├── dataset_infos.json
    │   ├── mini_imges.jsonl
    │   ├── text_grounding.jsonl   
    │   ├── text_recognition.jsonl
    │   └── README.md           
```
wanglch's avatar
wanglch committed
100
101

## 训练
dcuai's avatar
dcuai committed
102
根据实际情况在脚本中修相关路径,快速测试data_path可使用./DocLocal4K/mini_imges.jsonl,整体测试可选./DocLocal4K/text_recognition.jsonl、./DocLocal4K/text_grounding.jsonl
wanglch's avatar
wanglch committed
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140

--deepspeed

--model_name_or_path

--data_path

--image_folder

--output_dir


### 单机多卡

```
sh finetune_docowl_lora_dcu.sh
```

## 推理

### 单机单卡

 mPLUG-DocOwl 1.5 对英文文档表现优异,中文后续优化。
 
若出现以下报错,点击Regenerate后尝试:

`NETWORK ERROR DUE TO HIGH TRAFFIC. PLEASE REGENERATE OR REFRESH THIS PAGE.`

### 指令问答

```
python docowl_infer.py
```

## result

### 指令问答

dcuai's avatar
dcuai committed
141
142
143
144
145
146
147
148
149
150
```
image: './image/pic.jpg'
query: '详细描述这张图片'
answer: 'christmas decorations in a store window <ocr> 1 </ocr>'
```
```
image: './image/car.jpg'
query: '详细描述这张图片'
answer: 'A blue license plate with the characters <ocr> A KC087 </ocr>'
```
wanglch's avatar
wanglch committed
151
152
153
154
155
156
157
158
159
160
161
162
### 精度
测试数据: [mini DocLocal4K](./DocLocal4K/mini_imges.jsonl),使用的加速卡:K100/A800。

| device | train_loss | 
| :------: | :------: |  
| K100*2 | 10.3234 |
| A800*2 | 10.3188 |


## 应用场景

### 算法类别
dcuai's avatar
dcuai committed
163
`OCR`
wanglch's avatar
wanglch committed
164
165
166
167
168
169
170
171

### 热点应用行业
`金融,教育,政府,交通`

## 预训练权重
- [iic/DocOwl1.5-Omni](https://www.modelscope.cn/models/iic/DocOwl1.5-Omni/)

## 源码仓库及问题反馈
dcuai's avatar
dcuai committed
172
- http://developer.sourcefind.cn/codes/modelzoo/mplug-docowl_pytorch.git
wanglch's avatar
wanglch committed
173
174

## 参考资料
wanglch's avatar
wanglch committed
175

wanglch's avatar
wanglch committed
176
177
178
179
- [iic/DocOwl1.5-Omni 魔搭](https://www.modelscope.cn/models/iic/DocOwl1.5-Omni/)

- [mPLUG-DocOwl 1.5 github](https://github.com/X-PLUG/mPLUG-DocOwl/tree/main/DocOwl1.5)