# 表格结构模型训练与评估
表格识别流程中包含三个模型:表格结构预测模型,单行文本检测模型,单行文本识别模型。我们目前对表格结构预测模型进行了训练。
官方文档:[表格识别](https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.7/ppstructure/table/README_ch.md)
## 准备数据集
请参考:[数据集准备](./prepare_data.md)
## 准备环境
克隆 PaddleOCR 仓库,进入仓库目录:
```bash
git clone --depth 1 https://github.com/PaddlePaddle/PaddleOCR.git
cd PaddleOCR
```
PaddleOCR 训练数据的默认存储路径是 `PaddleOCR/train_data`。我们将数据集下载到本地后,可以拷贝数据集或创建软链接到对应目录:
```bash
cp -r /path/to/table-dataset ./train_data/table-dataset
# 或者
ln -sf /path/to/table-dataset ./train_data/table-dataset
```
请将我们的训练脚本 [table_model.sh](./scripts/table_model.sh) 拷贝至 `PaddleOCR/` 路径下。
PaddleOCR 对训练过程做了模块化,如果要训练不同的模型,我们只需要在脚本开头更换配置文件。
## 表格结构预测模型训练与评估
### 训练
以我们目前使用的 SLANet 模型为例(官方文档:[表格识别模型](https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.7/ppstructure/docs/models_list.md#22-%E8%A1%A8%E6%A0%BC%E8%AF%86%E5%88%AB%E6%A8%A1%E5%9E%8B),配置文件:[SLANet_ch.yml](https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.7/configs/table/SLANet_ch.yml)),修改配置文件如下:
```bash
$ cat configs/table/SLANet_ch.yml
Global:
use_gpu: True
# 修改训练轮数
epoch_num: 400
# 修改为实际的预训练模型文件
pretrained_model: ./pretrain_models/ch_ppstructure_mobile_v2.0_SLANet_train/best_accuracy
...
Optimizer:
name: Adam
beta1: 0.9
beta2: 0.999
clip_norm: 5.0
lr:
# 修改学习率
learning_rate: 0.001
...
Train:
dataset:
name: PubTabDataSet
# 修改为实际训练集的目录
data_dir: train_data/table-dataset/artificial
# 修改为实际训练集的标签文件
label_file_list: [train_data/table-dataset/artificial/train.txt]
...
Eval:
dataset:
name: PubTabDataSet
# 修改为实际验证集的目录
data_dir: train_data/table-dataset/artificial/
# 修改为实际验证集的标签文件
label_file_list: [train_data/table-dataset/artificial/test.txt]
...
```
其中,学习率 `learning_rate` (记为`lr`) 需要按运行时 `GPU卡数` (记为`GPU_number`) 和 `batch_size_per_card` (记为`batch_size`) 进行调整,公式为:
**lrnew = lrdefault \* (batch_sizenew \* GPU_numbernew) / (batch_sizedefault \* GPU_numberdefault)**
PaddleOCR 默认的配置文件对应 **batch_sizedefault=8**,**GPU_numberdefault=8**。
更详细的参数调整说明,请参考官方文档:[模型微调](https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.7/doc/doc_ch/finetune.md)。更详细的配置项含义,请参考官方文档:[配置文件内容与生成](https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.7/doc/doc_ch/config.md)。
训练模型:
```bash
# 单卡训练
./table_model.sh train
# 多卡训练
./table_model.sh train_distr
```
导出模型:
```bash
./table_model.sh export
```
使用导出的模型推理:
```bash
./table_model.sh infer
```
更详细的模型训练,推理,部署说明请参考:[官方文档](https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.7/doc/doc_ch/table_recognition.md)
### 评估
请参考官方文档的[评估方法](https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.7/doc/doc_ch/table_recognition.md#3-%E6%A8%A1%E5%9E%8B%E8%AF%84%E4%BC%B0%E4%B8%8E%E9%A2%84%E6%B5%8B)。