PDF-Extract-Kit

在这里插入图片描述


一、关于 PDF-Extract-Kit


整体介绍

PDF文档中包含大量知识信息,然而提取高质量的PDF内容并非易事。为此,我们将PDF内容提取工作进行拆解:

  • 布局检测:使用LayoutLMv3模型进行区域检测,如图像表格,标题,文本等;
  • 公式检测:使用YOLOv8进行公式检测,包含行内公式行间公式
  • 公式识别:使用UniMERNet进行公式识别;
  • 光学字符识别:使用PaddleOCR进行文本识别;

注意: 由于文档类型的多样性,现有开源的布局检测和公式检测很难处理多样性的PDF文档,为此我们内容采集多样性数据进行标注和训练,使得在各类文档上取得精准的检测效果,细节参考布局检测公式检测部分。对于公式识别,UniMERNet方法可以媲美商业软件,在各种类型公式识别上均匀很高的质量。对于OCR,我们采用PaddleOCR,对中英文OCR效果不错。


PDF内容提取框架如下图所示

在这里插入图片描述


PDF-Extract-Kit输出格式

{
    "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包含的类型如下:

{0: 'title',              # 标题
 1: 'plain text',         # 文本
 2: 'abandon',            # 包括页眉页脚页码和页面注释
 3: 'figure',             # 图片
 4: 'figure_caption',     # 图片描述
 5: 'table',              # 表格
 6: 'table_caption',      # 表格描述
 7: 'table_footnote',     # 表格注释
 8: 'isolate_formula',    # 行间公式(这个是layout的行间公式,优先级低于149: 'formula_caption',    # 行间公式的标号

 13: 'inline_formula',    # 行内公式
 14: 'isolated_formula',  # 行间公式
 15: 'ocr_text'}              # ocr识别结果

效果展示

结合多样性PDF文档标注,我们训练了鲁棒的布局检测公式检测模型。在论文、教材、研报、财报等多样性的PDF文档上,我们的pipeline都能得到准确的提取结果,对于扫描模糊、水印等情况也有较高鲁棒性。


在这里插入图片描述


二、评测指标

现有开源模型多基于Arxiv论文类型数据进行训练,面对多样性的PDF文档,提前质量远不能达到实用需求。相比之下,我们的模型经过多样化数据训练,可以适应各种类型文档提取。

评测代码及详细信息请看这里


1、布局检测

我们与现有的开源Layout检测模型做了对比,包括DocXchainSurya360LayoutAnalysis的两个模型。而LayoutLMv3-SFT指的是我们在LayoutLMv3-base-chinese预训练权重的基础上进一步做了SFT训练后的模型。论文验证集由402张论文页面构成,教材验证集由587张不同来源的教材页面构成。

模型论文验证集教材验证集
mAPAP50AR50mAPAP50AR50
DocXchain52.869.577.334.950.163.5
Surya24.239.466.113.923.349.9
360LayoutAnalysis-Paper37.753.659.820.731.343.6
360LayoutAnalysis-Report35.146.955.925.433.745.1
LayoutLMv3-SFT77.693.395.567.982.787.9

2、公式检测

我们与开源的模型Pix2Text-MFD做了对比。另外,YOLOv8-Trained是我们在YOLOv8l模型的基础上训练后的权重。论文验证集由255张论文页面构成,多源验证集由789张不同来源的页面构成,包括教材、书籍等。

模型论文验证集多源验证集
AP50AR50AP50AR50
Pix2Text-MFD60.164.658.962.8
YOLOv8-Trained87.789.982.487.3

3、公式识别

在这里插入图片描述


公式识别我们使用的是 UniMERNet 的权重,没有进一步的SFT训练,其精度验证结果可以在其GitHub页面获取。


三、安装

Windows :在Windows环境下使用PDF-Extract-Kit
macOS : 在macOS系统使用PDF-Extract-Kit

以下以Linux 为例:

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

安装完环境后,可能会遇到一些版本冲突导致版本变更,如果遇到了版本相关的报错,可以尝试下面的命令重新安装指定版本的库。

pip install pillow==8.4.0

除了版本冲突外,可能还会遇到torch无法调用的错误,可以先把下面的库卸载,然后重新安装cuda12和cudnn。

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:

git lfs install

2、从 Hugging Face 下载模型

git lfs clone https://huggingface.co/wanderkid/PDF-Extract-Kit

确保在克隆过程中启用了Git LFS,以便正确下载所有大文件。


3、从 ModelScope 下载模型


SDK 下载
# First, install the ModelScope library using pip:
pip install modelscope

# 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 下载
git clone https://www.modelscope.cn/wanderkid/PDF-Extract-Kit.git

将模型文件 放在这里:

./
├── 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

五、运行提取脚本

python pdf_extract.py --pdf data/pdfs/ocr_1.pdf

相关参数解释:

  • --pdf 待处理的pdf文件,如果传入一个文件夹,则会处理文件夹下的所有pdf文件。
  • --output 处理结果保存的路径,默认是"output"
  • --vis 是否对结果可视化,是则会把检测的结果可视化出来,主要是检测框和类别
  • --render 是否把识别得的结果渲染出来,包括公式的latex代码,以及普通文本,都会渲染出来放在检测框中。注意:此过程非常耗时,另外也需要提前安装xelateximagemagic

本项目专注使用模型对多样性文档进行高质量内容提取,不涉及提取后内容拼接成新文档,如PDF转Markdown。如果有此类需求,请参考我们另一个Github项目: MinerU


六、其它


待办事项

  • 表格解析:开发能够将表格图像转换成对应的LaTeX/Markdown格式源码的功能。
  • 化学方程式检测:实现对化学方程式的自动检测。
  • 化学方程式/图解识别:开发识别并解析化学方程式的模型。
  • 阅读顺序排序模型:构建模型以确定文档中文本的正确阅读顺序。

PDF-Extract-Kit 旨在提供高质量PDF文件的提取能力。我们鼓励社区提出具体且有价值的需求,并欢迎大家共同参与,以不断改进PDF-Extract-Kit工具,推动科研及产业发展。


协议

本仓库的代码依照 Apache-2.0 协议开源。

使用模型权重时,请遵循对应的模型协议:LayoutLMv3 / UniMERNet / YOLOv8 / PaddleOCR.


致谢


2024-07-21(日)

### YOLOv8 模型文件存储位置分析 在使用 Ultralytics 提供的 YOLOv8 工具时,模型文件通常可以保存到指定目录或者默认目录中。如果希望将 `yolo_v8_ft.pt` 文件存放在 `/tmp/models/MFD/YOLO/` 路径下,则可以通过调整代码中的参数实现。 以下是具体方法: #### 修改模型保存路径 通过设置 `save_dir` 参数来定义模型保存的位置。例如,在训练过程中,可以直接传递该参数给 `.train()` 方法[^1]。 ```python from ultralytics import YOLO # 定义模型 model = YOLO('yolov8n.yaml').load('yolov8n.pt') # 设置自定义保存路径 results = model.train( data='/path/to/fall.yaml', # 数据配置文件路径 epochs=100, # 训练轮次 imgsz=640, # 图像尺寸 save_dir='/tmp/models/MFD/YOLO/' # 自定义保存路径 ) ``` 上述代码会将生成的日志、权重等文件统一放置于 `/tmp/models/MFD/YOLO/` 下。 #### 验证模型文件是否存在 完成训练后,可通过以下命令验证目标路径下的文件是否已创建成功: ```bash ls /tmp/models/MFD/YOLO/ ``` 正常情况下,应该能看到类似以下结构的内容: - 权重文件(如 `yolo_v8_ft.pt`) - 日志记录(如 `results.csv` 和 TensorBoard 文件) #### 使用预训练模型预测 当需要加载特定路径下的模型进行推理时,可直接传入完整路径作为参数[^3]。例如: ```python from ultralytics import YOLO # 加载自定义路径下的模型 model = YOLO('/tmp/models/MFD/YOLO/yolo_v8_ft.pt') # 执行预测 results = model.predict(source='ultralytics/assets/bus.jpg') ``` 此操作能够确保模型从指定路径加载,而非依赖默认路径。 --- ### 注意事项 1. **权限问题**:确保程序运行用户具有对 `/tmp/models/MFD/YOLO/` 的读写权限。 2. **路径有效性**:确认所有涉及的路径均有效且存在,必要时需提前创建相关目录。 3. **环境一致性**:不同操作系统可能影响路径分隔符处理方式,请根据实际需求调整路径字符串格式。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

富婆E

请我喝杯伯爵奶茶~!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值