文章目录
一、关于 PDF-Extract-Kit
- github : https://github.com/opendatalab/PDF-Extract-Kit/blob/main/README-zh_CN.md
- Models 🤗Hugging Face : https://huggingface.co/wanderkid/PDF-Extract-Kit
- ModelScope : https://www.modelscope.cn/models/wanderkid/PDF-Extract-Kit
- MinerU:基于PDF-Extract-Kit的高效文档内容提取工具
https://github.com/opendatalab/MinerU - Discord : https://discord.gg/AsQMhuMN | WeChat : https://r.vansin.top/?r=MinerU
整体介绍
PDF文档中包含大量知识信息,然而提取高质量的PDF内容并非易事。为此,我们将PDF内容提取工作进行拆解:
- 布局检测:使用LayoutLMv3模型进行区域检测,如
图像
,表格
,标题
,文本
等; - 公式检测:使用YOLOv8进行公式检测,包含
行内公式
和行间公式
; - 公式识别:使用UniMERNet进行公式识别;
- 光学字符识别:使用PaddleOCR进行文本识别;
注意: 由于文档类型的多样性,现有开源的布局检测和公式检测很难处理多样性的PDF文档,为此我们内容采集多样性数据进行标注和训练,使得在各类文档上取得精准的检测效果,细节参考布局检测和公式检测部分。对于公式识别,UniMERNet方法可以媲美商业软件,在各种类型公式识别上均匀很高的质量。对于OCR,我们采用PaddleOCR,对中英文OCR效果不错。
PDF内容提取框架如下图所示
PDF-Extract-Kit输出格式
shell
{
"layout_dets": [ # 页中的元素
{
"category_id": 0, # 类别编号, 0~9,13~15
"poly": [
136.0, # 坐标为图片坐标,需要转换回pdf坐标, 顺序是 左上-右上-右下-左下的x,y坐标
781.0,
340.0,
781.0,
340.0,
806.0,
136.0,
806.0
],
"score": 0.69, # 置信度
"latex": '' # 公式识别的结果,只有13,14有内容,其他为空,另外15是ocr的结果,这个key会换成text
},
...
],
"page_info": { # 页信息:提取bbox时的分辨率大小,如果有缩放可以基于该信息进行对齐
"page_no": 0, # 页数
"height": 1684, # 页高
"width": 1200 # 页宽
}
}
中category_id包含的类型如下:
json
{0: 'title', # 标题
1: 'plain text', # 文本
2: 'abandon', # 包括页眉页脚页码和页面注释
3: 'figure', # 图片
4: 'figure_caption', # 图片描述
5: 'table', # 表格
6: 'table_caption', # 表格描述
7: 'table_footnote', # 表格注释
8: 'isolate_formula', # 行间公式(这个是layout的行间公式,优先级低于14)
9: 'formula_caption', # 行间公式的标号
13: 'inline_formula', # 行内公式
14: 'isolated_formula', # 行间公式
15: 'ocr_text'} # ocr识别结果
效果展示
结合多样性PDF文档标注,我们训练了鲁棒的布局检测
和公式检测
模型。在论文、教材、研报、财报等多样性的PDF文档上,我们的pipeline都能得到准确的提取结果,对于扫描模糊、水印等情况也有较高鲁棒性。
二、评测指标
现有开源模型多基于Arxiv论文类型数据进行训练,面对多样性的PDF文档,提前质量远不能达到实用需求。相比之下,我们的模型经过多样化数据训练,可以适应各种类型文档提取。
评测代码及详细信息请看这里。
1、布局检测
我们与现有的开源Layout检测模型做了对比,包括DocXchain、Surya、360LayoutAnalysis的两个模型。而LayoutLMv3-SFT指的是我们在LayoutLMv3-base-chinese预训练权重的基础上进一步做了SFT训练后的模型。论文验证集由402张论文页面构成,教材验证集由587张不同来源的教材页面构成。
模型 | 论文验证集 | 教材验证集 | ||||
---|---|---|---|---|---|---|
mAP | AP50 | AR50 | mAP | AP50 | AR50 | |
DocXchain | 52.8 | 69.5 | 77.3 | 34.9 | 50.1 | 63.5 |
Surya | 24.2 | 39.4 | 66.1 | 13.9 | 23.3 | 49.9 |
360LayoutAnalysis-Paper | 37.7 | 53.6 | 59.8 | 20.7 | 31.3 | 43.6 |
360LayoutAnalysis-Report | 35.1 | 46.9 | 55.9 | 25.4 | 33.7 | 45.1 |
LayoutLMv3-SFT | 77.6 | 93.3 | 95.5 | 67.9 | 82.7 | 87.9 |
2、公式检测
我们与开源的模型Pix2Text-MFD做了对比。另外,YOLOv8-Trained是我们在YOLOv8l模型的基础上训练后的权重。论文验证集由255张论文页面构成,多源验证集由789张不同来源的页面构成,包括教材、书籍等。
模型 | 论文验证集 | 多源验证集 | ||
---|---|---|---|---|
AP50 | AR50 | AP50 | AR50 | |
Pix2Text-MFD | 60.1 | 64.6 | 58.9 | 62.8 |
YOLOv8-Trained | 87.7 | 89.9 | 82.4 | 87.3 |
3、公式识别
公式识别我们使用的是 UniMERNet 的权重,没有进一步的SFT训练,其精度验证结果可以在其GitHub页面获取。
三、安装
Windows :在Windows环境下使用PDF-Extract-Kit。
macOS : 在macOS系统使用PDF-Extract-Kit。
以下以Linux 为例:
shell
conda create -n pipeline python=3.10
pip install -r requirements.txt
pip install --extra-index-url https://miropsota.github.io/torch_packages_builder detectron2==0.6+pt2.3.1cu121
安装完环境后,可能会遇到一些版本冲突导致版本变更,如果遇到了版本相关的报错,可以尝试下面的命令重新安装指定版本的库。
shell
pip install pillow==8.4.0
除了版本冲突外,可能还会遇到torch无法调用的错误,可以先把下面的库卸载,然后重新安装cuda12和cudnn。
shell
pip uninstall nvidia-cusparse-cu12
参考模型下载 下载所需模型权重
四、模型下载
https://github.com/opendatalab/PDF-Extract-Kit/blob/main/models/README.md
1、安装 Git LFS
Before you begin, make sure Git Large File Storage (Git LFS) is installed on your system. Install it using the following command:
shell
git lfs install
2、从 Hugging Face 下载模型
shell
git lfs clone https://huggingface.co/wanderkid/PDF-Extract-Kit
确保在克隆过程中启用了Git LFS,以便正确下载所有大文件。
3、从 ModelScope 下载模型
SDK 下载
shell
# First, install the ModelScope library using pip:
pip install modelscope
shell
# Use the following Python code to download the model using the ModelScope SDK:
from modelscope import snapshot_download
model_dir = snapshot_download('wanderkid/PDF-Extract-Kit')
Git 下载
shell
git clone https://www.modelscope.cn/wanderkid/PDF-Extract-Kit.git
将模型文件 放在这里:
shell
./
├── Layout
│ ├── config.json
│ └── model_final.pth
├── MFD
│ └── weights.pt
├── MFR
│ └── UniMERNet
│ ├── config.json
│ ├── preprocessor_config.json
│ ├── pytorch_model.bin
│ ├── README.md
│ ├── tokenizer_config.json
│ └── tokenizer.json
└── README.md
五、运行提取脚本
shell
python pdf_extract.py --pdf data/pdfs/ocr_1.pdf
相关参数解释:
--pdf
待处理的pdf文件,如果传入一个文件夹,则会处理文件夹下的所有pdf文件。--output
处理结果保存的路径,默认是"output"--vis
是否对结果可视化,是则会把检测的结果可视化出来,主要是检测框和类别--render
是否把识别得的结果渲染出来,包括公式的latex代码,以及普通文本,都会渲染出来放在检测框中。注意:此过程非常耗时,另外也需要提前安装xelatex
和imagemagic
。
本项目专注使用模型对
多样性
文档进行高质量
内容提取,不涉及提取后内容拼接成新文档,如PDF转Markdown。如果有此类需求,请参考我们另一个Github项目: MinerU
六、其它
待办事项
- 表格解析:开发能够将表格图像转换成对应的LaTeX/Markdown格式源码的功能。
- 化学方程式检测:实现对化学方程式的自动检测。
- 化学方程式/图解识别:开发识别并解析化学方程式的模型。
- 阅读顺序排序模型:构建模型以确定文档中文本的正确阅读顺序。
PDF-Extract-Kit 旨在提供高质量PDF文件的提取能力。我们鼓励社区提出具体且有价值的需求,并欢迎大家共同参与,以不断改进PDF-Extract-Kit工具,推动科研及产业发展。
协议
本仓库的代码依照 Apache-2.0 协议开源。
使用模型权重时,请遵循对应的模型协议:LayoutLMv3 / UniMERNet / YOLOv8 / PaddleOCR.
致谢
- LayoutLMv3: 布局检测模型
- UniMERNet: 公式识别模型
- YOLOv8: 公式检测模型
- PaddleOCR: OCR模型
2024-07-21(日)