版面分析¶
1. 简介¶
版面分析指的是对图片形式的文档进行区域划分,定位其中的关键区域,如文字、标题、表格、图片等。版面分析算法基于PaddleDetection的轻量模型PP-PicoDet进行开发,包含英文、中文、表格版面分析3类模型。其中,英文模型支持Text、Title、Tale、Figure、List5类区域的检测,中文模型支持Text、Title、Figure、Figure caption、Table、Table caption、Header、Footer、Reference、Equation10类区域的检测,表格版面分析支持Table区域的检测,版面分析效果如下图所示:
2. 快速开始¶
PP-Structure目前提供了中文、英文、表格三类文档版面分析模型,模型链接见 models_list。也提供了whl包的形式方便快速使用,详见 quickstart。
3. 安装¶
3.1. 安装PaddlePaddle¶
- (1) 安装PaddlePaddle
更多需求,请参照安装文档中的说明进行操作。
3.2. 安装PaddleDetection¶
- (1)下载PaddleDetection源码
- (2)安装其他依赖
4. 数据准备¶
如果希望直接体验预测过程,可以跳过数据准备,下载我们提供的预训练模型。
4.1. 英文数据集¶
下载文档分析数据集PubLayNet(数据集96G),包含5个类:{0: "Text", 1: "Title", 2: "List", 3:"Table", 4:"Figure"}
# 下载数据
wget https://dax-cdn.cdn.appdomain.cloud/dax-publaynet/1.0.0/publaynet.tar.gz
# 解压数据
tar -xvf publaynet.tar.gz
解压之后的目录结构:
|-publaynet
|- test
|- PMC1277013_00004.jpg
|- PMC1291385_00002.jpg
| ...
|- train.json
|- train
|- PMC1291385_00002.jpg
|- PMC1277013_00004.jpg
| ...
|- val.json
|- val
|- PMC538274_00004.jpg
|- PMC539300_00004.jpg
| ...
数据分布:
File or Folder | Description | num |
---|---|---|
train/ |
训练集图片 | 335,703 |
val/ |
验证集图片 | 11,245 |
test/ |
测试集图片 | 11,405 |
train.json |
训练集标注文件 | - |
val.json |
验证集标注文件 | - |
标注格式:
json文件包含所有图像的标注,数据以字典嵌套的方式存放,包含以下key:
-
info,表示标注文件info。
-
licenses,表示标注文件licenses。
-
images,表示标注文件中图像信息列表,每个元素是一张图像的信息。如下为其中一张图像的信息:
{
'file_name': 'PMC4055390_00006.jpg', # file_name
'height': 601, # image height
'width': 792, # image width
'id': 341427 # image id
}
- annotations,表示标注文件中目标物体的标注信息列表,每个元素是一个目标物体的标注信息。如下为其中一个目标物体的标注信息:
{
'segmentation': # 物体的分割标注
'area': 60518.099043117836, # 物体的区域面积
'iscrowd': 0, # iscrowd
'image_id': 341427, # image id
'bbox': [50.58, 490.86, 240.15, 252.16], # bbox [x1,y1,w,h]
'category_id': 1, # category_id
'id': 3322348 # image id
}
4.2. 更多数据集¶
我们提供了CDLA(中文版面分析)、TableBank(表格版面分析)等数据集的下连接,处理为上述标注文件json格式,即可以按相同方式进行训练。
dataset | 简介 |
---|---|
cTDaR2019_cTDaR | 用于表格检测(TRACKA)和表格识别(TRACKB)。图片类型包含历史数据集(以cTDaR_t0开头,如cTDaR_t00872.jpg)和现代数据集(以cTDaR_t1开头,cTDaR_t10482.jpg)。 |
IIIT-AR-13K | 手动注释公开的年度报告中的图形或页面而构建的数据集,包含5类:table, figure, natural image, logo, and signature |
CDLA | 中文文档版面分析数据集,面向中文文献类(论文)场景,包含10类:Text、Title、Figure、Figure caption、Table、Table caption、Header、Footer、Reference、Equation |
TableBank | 用于表格检测和识别大型数据集,包含Word和Latex2种文档格式 |
DocBank | 使用弱监督方法构建的大规模数据集(500K文档页面),用于文档布局分析,包含12类:Author、Caption、Date、Equation、Figure、Footer、List、Paragraph、Reference、Section、Table、Title |
5. 开始训练¶
提供了训练脚本、评估脚本和预测脚本,本节将以PubLayNet预训练模型为例进行讲解。
如果不希望训练,直接体验后面的模型评估、预测、动转静、推理的流程,可以下载提供的预训练模型(PubLayNet数据集),并跳过5.1和5.2。
如果测试图片为中文,可以下载中文CDLA数据集的预训练模型,识别10类文档区域:Table、Figure、Figure caption、Table、Table caption、Header、Footer、Reference、Equation,在版面分析模型中下载picodet_lcnet_x1_0_fgd_layout_cdla
模型的训练模型和推理模型。如果只检测图片中的表格区域,可以下载表格数据集的预训练模型,在版面分析模型中下载picodet_lcnet_x1_0_fgd_layout_table
模型的训练模型和推理模型。
5.1. 启动训练¶
使用PaddleDetection版面分析配置文件启动训练
- 修改配置文件
如果你希望训练自己的数据集,需要修改配置文件中的数据配置、类别数。
以configs/picodet/legacy_model/application/layout_analysis/picodet_lcnet_x1_0_layout.yml
为例,修改的内容如下所示。
- 开始训练,在训练时,会默认下载PP-PicoDet预训练模型,这里无需预先下载。
注意:如果训练时显存out memory,将TrainReader中batch_size调小,同时LearningRate中base_lr等比例减小。发布的config均由8卡训练得到,如果改变GPU卡数为1,那么base_lr需要减小8倍。
正常启动训练后,会看到以下log输出:
--eval
表示训练的同时,进行评估, 评估过程中默认将最佳模型,保存为output/picodet_lcnet_x1_0_layout/best_accuracy
。
注意,预测/评估时的配置文件请务必与训练一致。
5.2. FGD蒸馏训练¶
PaddleDetection支持了基于FGD(Focal and Global Knowledge Distillation for Detectors)蒸馏的目标检测模型训练过程,FGD蒸馏分为两个部分Focal
和Global
。Focal
蒸馏分离图像的前景和背景,让学生模型分别关注教师模型的前景和背景部分特征的关键像素;Global
蒸馏部分重建不同像素之间的关系并将其从教师转移到学生,以补偿Focal
蒸馏中丢失的全局信息。
更换数据集,修改【TODO】配置中的数据配置、类别数,具体可以参考4.1。启动训练:
-c
: 指定模型配置文件。--slim_config
: 指定压缩策略配置文件。
6. 模型评估与预测¶
6.1. 指标评估¶
训练中模型参数默认保存在output/picodet_lcnet_x1_0_layout
目录下。在评估指标时,需要设置weights
指向保存的参数文件。评估数据集可以通过 configs/picodet/legacy_model/application/layout_analysis/picodet_lcnet_x1_0_layout.yml
修改EvalDataset
中的 image_dir
、anno_path
和dataset_dir
设置。
会输出以下信息,打印出mAP、AP0.5等信息。
若使用提供的预训练模型进行评估,或使用FGD蒸馏训练的模型,更换weights
模型路径,执行如下命令进行评估:
-c
: 指定模型配置文件。--slim_config
: 指定蒸馏策略配置文件。-o weights
: 指定蒸馏算法训好的模型路径。
6.2 测试版面分析结果¶
预测使用的配置文件必须与训练一致,如您通过 python3 tools/train.py -c configs/picodet/legacy_model/application/layout_analysis/picodet_lcnet_x1_0_layout.yml
完成了模型的训练过程。
使用 PaddleDetection 训练好的模型,您可以使用如下命令进行模型预测。
--infer_img
: 推理单张图片,也可以通过--infer_dir
推理文件中的所有图片。--output_dir
: 指定可视化结果保存路径。--draw_threshold
:指定绘制结果框的NMS阈值。
若使用提供的预训练模型进行预测,或使用FGD蒸馏训练的模型,更换weights
模型路径,执行如下命令进行预测:
7. 模型导出与预测¶
7.1 模型导出¶
inference 模型(paddle.jit.save
保存的模型) 一般是模型训练,把模型结构和模型参数保存在文件中的固化模型,多用于预测部署场景。 训练过程中保存的模型是checkpoints模型,保存的只有模型的参数,多用于恢复训练等。 与checkpoints模型相比,inference 模型会额外保存模型的结构信息,在预测部署、加速推理上性能优越,灵活方便,适合于实际系统集成。
版面分析模型转inference模型步骤如下:
- 如无需导出后处理,请指定:
-o export.benchmark=True
(如果-o已出现过,此处删掉-o) - 如无需导出NMS,请指定:
-o export.nms=False
转换成功后,在目录下有三个文件:
output_inference/picodet_lcnet_x1_0_layout/
├── model.pdiparams # inference模型的参数文件
├── model.pdiparams.info # inference模型的参数信息,可忽略
└── model.pdmodel # inference模型的模型结构文件
若使用提供的预训练模型转Inference模型,或使用FGD蒸馏训练的模型,更换weights
模型路径,模型转inference模型步骤如下:
7.2 模型推理¶
若使用提供的推理训练模型推理,或使用FGD蒸馏训练的模型,更换model_dir
推理模型路径,执行如下命令进行推理:
- --device:指定GPU、CPU设备
模型推理完成,会看到以下log输出
------------------------------------------
----------- Model Configuration -----------
Model Arch: PicoDet
Transform Order:
--transform op: Resize
--transform op: NormalizeImage
--transform op: Permute
--transform op: PadStride
--------------------------------------------
class_id:0, confidence:0.9921, left_top:[20.18,35.66],right_bottom:[341.58,600.99]
class_id:0, confidence:0.9914, left_top:[19.77,611.42],right_bottom:[341.48,901.82]
class_id:0, confidence:0.9904, left_top:[369.36,375.10],right_bottom:[691.29,600.59]
class_id:0, confidence:0.9835, left_top:[369.60,608.60],right_bottom:[691.38,736.72]
class_id:0, confidence:0.9830, left_top:[369.58,805.38],right_bottom:[690.97,901.80]
class_id:0, confidence:0.9716, left_top:[383.68,271.44],right_bottom:[688.93,335.39]
class_id:0, confidence:0.9452, left_top:[370.82,34.48],right_bottom:[688.10,63.54]
class_id:1, confidence:0.8712, left_top:[370.84,771.03],right_bottom:[519.30,789.13]
class_id:3, confidence:0.9856, left_top:[371.28,67.85],right_bottom:[685.73,267.72]
save result to: output/layout.jpg
Test iter 0
------------------ Inference Time Info ----------------------
total_time(ms): 2196.0, img_num: 1
average latency time(ms): 2196.00, QPS: 0.455373
preprocess_time(ms): 2172.50, inference_time(ms): 11.90, postprocess_time(ms): 11.60
- Model:模型结构
- Transform Order:预处理操作
- class_id、confidence、left_top、right_bottom:分别表示类别id、置信度、左上角坐标、右下角坐标
- save result to:可视化版面分析结果保存路径,默认保存到
./output
文件夹 - Inference Time Info:推理时间,其中preprocess_time表示预处理耗时,inference_time表示模型预测耗时,postprocess_time表示后处理耗时
可视化版面结果如下图所示
Citations¶
@inproceedings{zhong2019publaynet,
title={PubLayNet: largest dataset ever for document layout analysis},
author={Zhong, Xu and Tang, Jianbin and Yepes, Antonio Jimeno},
booktitle={2019 International Conference on Document Analysis and Recognition (ICDAR)},
year={2019},
volume={},
number={},
pages={1015-1022},
doi={10.1109/ICDAR.2019.00166},
ISSN={1520-5363},
month={Sep.},
organization={IEEE}
}
@inproceedings{yang2022focal,
title={Focal and global knowledge distillation for detectors},
author={Yang, Zhendong and Li, Zhe and Jiang, Xiaohu and Gong, Yuan and Yuan, Zehuan and Zhao, Danpei and Yuan, Chun},
booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition},
pages={4643--4652},
year={2022}
}