README_ch.md 20.5 KB
Newer Older
littletomatodonkey's avatar
fix  
littletomatodonkey 已提交
1 2
简体中文 | [English](README.md)

littletomatodonkey's avatar
fix  
littletomatodonkey 已提交
3 4
# 版面分析

U
user1018 已提交
5
- [1. 简介](#1-简介)
A
an1018 已提交
6 7 8 9 10 11 12 13 14
- [2. 快速开始](#2-快速开始)
- [3. 安装](#3-安装)
  - [3.1 安装PaddlePaddle](#31-安装paddlepaddle)
  - [3.2 安装PaddleDetection](#32-安装paddledetection)
- [4. 数据准备](#4-数据准备)
  - [4.1 英文数据集](#41-英文数据集)
  - [4.2 更多数据集](#42-更多数据集)
- [5. 开始训练](#5-开始训练)
  - [5.1 启动训练](#51-启动训练)
M
MissPenguin 已提交
15
  - [5.2 FGD蒸馏训练](#52-fgd蒸馏训练)
A
an1018 已提交
16 17 18 19 20 21
- [6. 模型评估与预测](#6-模型评估与预测)
  - [6.1 指标评估](#61-指标评估)
  - [6.2 测试版面分析结果](#62-测试版面分析结果)
- [7 模型导出与预测](#7-模型导出与预测)
  - [7.1 模型导出](#71-模型导出)
  - [7.2 模型推理](#72-模型推理)
U
user1018 已提交
22 23 24

## 1. 简介

U
user1018 已提交
25
版面分析指的是对图片形式的文档进行区域划分,定位其中的关键区域,如文字、标题、表格、图片等。版面分析算法基于[PaddleDetection](https://github.com/PaddlePaddle/PaddleDetection)的轻量模型PP-PicoDet进行开发,包含英文、中文、表格版面分析3类模型。其中,英文模型支持Text、Title、Tale、Figure、List5类区域的检测,中文模型支持Text、Title、Figure、Figure caption、Table、Table caption、Header、Footer、Reference、Equation10类区域的检测,表格版面分析支持Table区域的检测,版面分析效果如下图所示:
U
user1018 已提交
26 27 28 29

<div align="center">
    <img src="../docs/layout/layout.png" width="800">
</div>
M
MissPenguin 已提交
30

A
an1018 已提交
31
## 2. 快速开始
U
user1018 已提交
32

A
an1018 已提交
33
PP-Structure目前提供了中文、英文、表格三类文档版面分析模型,模型链接见 [models_list](../docs/models_list.md#1-版面分析模型)。也提供了whl包的形式方便快速使用,详见 [quickstart](../docs/quickstart.md)
U
user1018 已提交
34 35


M
MissPenguin 已提交
36
## 3. 安装
U
user1018 已提交
37

A
an1018 已提交
38
### 3.1. 安装PaddlePaddle
U
user1018 已提交
39 40

- **(1) 安装PaddlePaddle**
W
WenmuZhou 已提交
41

W
WenmuZhou 已提交
42
```bash
U
user1018 已提交
43 44 45
python3 -m pip install --upgrade pip

# GPU安装
A
an1018 已提交
46
python3 -m pip install "paddlepaddle-gpu>=2.3" -i https://mirror.baidu.com/pypi/simple
U
user1018 已提交
47 48

# CPU安装
A
an1018 已提交
49
python3 -m pip install "paddlepaddle>=2.3" -i https://mirror.baidu.com/pypi/simple
W
WenmuZhou 已提交
50
```
U
user1018 已提交
51
更多需求,请参照[安装文档](https://www.paddlepaddle.org.cn/install/quick)中的说明进行操作。
W
WenmuZhou 已提交
52

A
an1018 已提交
53
### 3.2. 安装PaddleDetection
W
WenmuZhou 已提交
54

U
user1018 已提交
55
- **(1)下载PaddleDetection源码**
W
WenmuZhou 已提交
56

U
user1018 已提交
57 58 59
```bash
git clone https://github.com/PaddlePaddle/PaddleDetection.git
```
W
WenmuZhou 已提交
60

A
an1018 已提交
61
- **(2)安装其他依赖**
W
WenmuZhou 已提交
62

U
user1018 已提交
63 64 65
```bash
cd PaddleDetection
python3 -m pip install -r requirements.txt
W
WenmuZhou 已提交
66 67
```

A
an1018 已提交
68
## 4. 数据准备
W
WenmuZhou 已提交
69

U
user1018 已提交
70 71
如果希望直接体验预测过程,可以跳过数据准备,下载我们提供的预训练模型。

A
an1018 已提交
72
### 4.1. 英文数据集
U
user1018 已提交
73 74

下载文档分析数据集[PubLayNet](https://developer.ibm.com/exchanges/data/all/publaynet/)(数据集96G),包含5个类:`{0: "Text", 1: "Title", 2: "List", 3:"Table", 4:"Figure"}`
G
grasswolfs 已提交
75

U
user1018 已提交
76 77 78 79 80 81
```
# 下载数据
wget https://dax-cdn.cdn.appdomain.cloud/dax-publaynet/1.0.0/publaynet.tar.gz
# 解压数据
tar -xvf publaynet.tar.gz
```
G
grasswolfs 已提交
82

U
user1018 已提交
83
解压之后的**目录结构:**
W
WenmuZhou 已提交
84

U
user1018 已提交
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
```
|-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
     | ...
```
W
WenmuZhou 已提交
102

U
user1018 已提交
103
**数据分布:**
W
WenmuZhou 已提交
104

U
user1018 已提交
105 106 107 108 109 110 111
| File or Folder | Description    | num     |
| :------------- | :------------- | ------- |
| `train/`       | 训练集图片     | 335,703 |
| `val/`         | 验证集图片     | 11,245  |
| `test/`        | 测试集图片     | 11,405  |
| `train.json`   | 训练集标注文件 | -       |
| `val.json`     | 验证集标注文件 | -       |
W
WenmuZhou 已提交
112

U
user1018 已提交
113
**标注格式:**
W
WenmuZhou 已提交
114

U
user1018 已提交
115
json文件包含所有图像的标注,数据以字典嵌套的方式存放,包含以下key:
W
WenmuZhou 已提交
116

U
user1018 已提交
117
- info,表示标注文件info。
W
WenmuZhou 已提交
118

U
user1018 已提交
119
- licenses,表示标注文件licenses。
W
WenmuZhou 已提交
120

U
user1018 已提交
121
- images,表示标注文件中图像信息列表,每个元素是一张图像的信息。如下为其中一张图像的信息:
W
WenmuZhou 已提交
122

U
user1018 已提交
123 124 125 126 127 128 129 130
  ```
  {
      'file_name': 'PMC4055390_00006.jpg',    # file_name
      'height': 601,                      # image height
      'width': 792,                       # image width
      'id': 341427                        # image id
  }
  ```
W
WenmuZhou 已提交
131

U
user1018 已提交
132
- annotations,表示标注文件中目标物体的标注信息列表,每个元素是一个目标物体的标注信息。如下为其中一个目标物体的标注信息:
W
WenmuZhou 已提交
133

U
user1018 已提交
134 135
  ```
  {
A
an1018 已提交
136

U
user1018 已提交
137 138 139 140 141 142 143 144 145 146
      '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
  }
  ```

A
an1018 已提交
147
### 4.2. 更多数据集
U
user1018 已提交
148 149 150 151 152 153 154

我们提供了CDLA(中文版面分析)、TableBank(表格版面分析)等数据集的下连接,处理为上述标注文件json格式,即可以按相同方式进行训练。

| dataset                                                      | 简介                                                         |
| ------------------------------------------------------------ | ------------------------------------------------------------ |
| [cTDaR2019_cTDaR](https://cndplab-founder.github.io/cTDaR2019/) | 用于表格检测(TRACKA)和表格识别(TRACKB)。图片类型包含历史数据集(以cTDaR_t0开头,如cTDaR_t00872.jpg)和现代数据集(以cTDaR_t1开头,cTDaR_t10482.jpg)。 |
| [IIIT-AR-13K](http://cvit.iiit.ac.in/usodi/iiitar13k.php)    | 手动注释公开的年度报告中的图形或页面而构建的数据集,包含5类:table, figure, natural image, logo, and signature |
U
user1018 已提交
155
| [CDLA](https://github.com/buptlihang/CDLA)                   | 中文文档版面分析数据集,面向中文文献类(论文)场景,包含10类:Text、Title、Figure、Figure caption、Table、Table caption、Header、Footer、Reference、Equation |
U
user1018 已提交
156 157 158 159
| [TableBank](https://github.com/doc-analysis/TableBank)       | 用于表格检测和识别大型数据集,包含Word和Latex2种文档格式     |
| [DocBank](https://github.com/doc-analysis/DocBank)           | 使用弱监督方法构建的大规模数据集(500K文档页面),用于文档布局分析,包含12类:Author、Caption、Date、Equation、Figure、Footer、List、Paragraph、Reference、Section、Table、Title |


A
an1018 已提交
160
## 5. 开始训练
U
user1018 已提交
161 162 163

提供了训练脚本、评估脚本和预测脚本,本节将以PubLayNet预训练模型为例进行讲解。

U
user1018 已提交
164
如果不希望训练,直接体验后面的模型评估、预测、动转静、推理的流程,可以下载提供的预训练模型(PubLayNet数据集),并跳过5.1和5.2。
W
WenmuZhou 已提交
165

U
user1018 已提交
166 167 168
```
mkdir pretrained_model
cd pretrained_model
A
an1018 已提交
169 170 171 172
# 下载PubLayNet预训练模型(直接体验模型评估、预测、动转静)
wget https://paddleocr.bj.bcebos.com/ppstructure/models/layout/picodet_lcnet_x1_0_fgd_layout.pdparams
# 下载PubLaynet推理模型(直接体验模型推理)
wget https://paddleocr.bj.bcebos.com/ppstructure/models/layout/picodet_lcnet_x1_0_fgd_layout_infer.tar
W
WenmuZhou 已提交
173 174
```

A
an1018 已提交
175
如果测试图片为中文,可以下载中文CDLA数据集的预训练模型,识别10类文档区域:Table、Figure、Figure caption、Table、Table caption、Header、Footer、Reference、Equation,在[版面分析模型](../docs/models_list.md)中下载`picodet_lcnet_x1_0_fgd_layout_cdla`模型的训练模型和推理模型。如果只检测图片中的表格区域,可以下载表格数据集的预训练模型,在[版面分析模型](../docs/models_list.md)中下载`picodet_lcnet_x1_0_fgd_layout_table`模型的训练模型和推理模型。
A
an1018 已提交
176

A
an1018 已提交
177
### 5.1. 启动训练
U
user1018 已提交
178

U
user1018 已提交
179
使用PaddleDetection[版面分析配置文件](https://github.com/PaddlePaddle/PaddleDetection/tree/release/2.5/configs/picodet/legacy_model/application/layout_analysis)启动训练
U
user1018 已提交
180 181 182 183

* 修改配置文件

如果你希望训练自己的数据集,需要修改配置文件中的数据配置、类别数。
W
WenmuZhou 已提交
184 185


A
an1018 已提交
186
`configs/picodet/legacy_model/application/layout_analysis/picodet_lcnet_x1_0_layout.yml` 为例,修改的内容如下所示。
W
WenmuZhou 已提交
187

U
user1018 已提交
188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224
```yaml
metric: COCO
# 类别数
num_classes: 5

TrainDataset:
  !COCODataSet
    # 修改为你自己的训练数据目录
    image_dir: train
    # 修改为你自己的训练数据标签文件
    anno_path: train.json
    # 修改为你自己的训练数据根目录
    dataset_dir: /root/publaynet/
    data_fields: ['image', 'gt_bbox', 'gt_class', 'is_crowd']

EvalDataset:
  !COCODataSet
    # 修改为你自己的验证数据目录
    image_dir: val
    # 修改为你自己的验证数据标签文件
    anno_path: val.json
    # 修改为你自己的验证数据根目录
    dataset_dir: /root/publaynet/

TestDataset:
  !ImageFolder
    # 修改为你自己的测试数据标签文件
    anno_path: /root/publaynet/val.json
```

* 开始训练,在训练时,会默认下载PP-PicoDet预训练模型,这里无需预先下载。

```bash
# GPU训练 支持单卡,多卡训练
# 训练日志会自动保存到 log 目录中

# 单卡训练
A
an1018 已提交
225
export CUDA_VISIBLE_DEVICES=0
U
user1018 已提交
226
python3 tools/train.py \
A
an1018 已提交
227 228
    -c configs/picodet/legacy_model/application/layout_analysis/picodet_lcnet_x1_0_layout.yml \
    --eval
U
user1018 已提交
229 230

# 多卡训练,通过--gpus参数指定卡号
A
an1018 已提交
231
export CUDA_VISIBLE_DEVICES=0,1,2,3
U
user1018 已提交
232
python3 -m paddle.distributed.launch --gpus '0,1,2,3'  tools/train.py \
A
an1018 已提交
233 234
    -c configs/picodet/legacy_model/application/layout_analysis/picodet_lcnet_x1_0_layout.yml \
    --eval
U
user1018 已提交
235 236
```

A
an1018 已提交
237 238
**注意:**如果训练时显存out memory,将TrainReader中batch_size调小,同时LearningRate中base_lr等比例减小。发布的config均由8卡训练得到,如果改变GPU卡数为1,那么base_lr需要减小8倍。

U
user1018 已提交
239 240 241 242 243 244 245 246 247 248 249 250 251 252
正常启动训练后,会看到以下log输出:

```
[08/15 04:02:30] ppdet.utils.checkpoint INFO: Finish loading model weights: /root/.cache/paddle/weights/LCNet_x1_0_pretrained.pdparams
[08/15 04:02:46] ppdet.engine INFO: Epoch: [0] [   0/1929] learning_rate: 0.040000 loss_vfl: 1.216707 loss_bbox: 1.142163 loss_dfl: 0.544196 loss: 2.903065 eta: 17 days, 13:50:26 batch_cost: 15.7452 data_cost: 2.9112 ips: 1.5243 images/s
[08/15 04:03:19] ppdet.engine INFO: Epoch: [0] [  20/1929] learning_rate: 0.064000 loss_vfl: 1.180627 loss_bbox: 0.939552 loss_dfl: 0.442436 loss: 2.628206 eta: 2 days, 12:18:53 batch_cost: 1.5770 data_cost: 0.0008 ips: 15.2184 images/s
[08/15 04:03:47] ppdet.engine INFO: Epoch: [0] [  40/1929] learning_rate: 0.088000 loss_vfl: 0.543321 loss_bbox: 1.071401 loss_dfl: 0.457817 loss: 2.057003 eta: 2 days, 0:07:03 batch_cost: 1.3190 data_cost: 0.0007 ips: 18.1954 images/s
[08/15 04:04:12] ppdet.engine INFO: Epoch: [0] [  60/1929] learning_rate: 0.112000 loss_vfl: 0.630989 loss_bbox: 0.859183 loss_dfl: 0.384702 loss: 1.883143 eta: 1 day, 19:01:29 batch_cost: 1.2177 data_cost: 0.0006 ips: 19.7087 images/s
```

- `--eval`表示训练的同时,进行评估, 评估过程中默认将最佳模型,保存为 `output/picodet_lcnet_x1_0_layout/best_accuracy`

**注意,预测/评估时的配置文件请务必与训练一致。**

A
an1018 已提交
253
### 5.2. FGD蒸馏训练
U
user1018 已提交
254 255 256 257 258 259

PaddleDetection支持了基于FGD([Focal and Global Knowledge Distillation for Detectors](https://arxiv.org/abs/2111.11837v1))蒸馏的目标检测模型训练过程,FGD蒸馏分为两个部分`Focal``Global``Focal`蒸馏分离图像的前景和背景,让学生模型分别关注教师模型的前景和背景部分特征的关键像素;`Global`蒸馏部分重建不同像素之间的关系并将其从教师转移到学生,以补偿`Focal`蒸馏中丢失的全局信息。

更换数据集,修改【TODO】配置中的数据配置、类别数,具体可以参考4.1。启动训练:

```bash
A
an1018 已提交
260 261 262
# 单卡训练
export CUDA_VISIBLE_DEVICES=0
python3 tools/train.py \
A
an1018 已提交
263 264 265
    -c configs/picodet/legacy_model/application/layout_analysis/picodet_lcnet_x1_0_layout.yml \
    --slim_config configs/picodet/legacy_model/application/layout_analysis/picodet_lcnet_x2_5_layout.yml \
    --eval
U
user1018 已提交
266
```
W
WenmuZhou 已提交
267

U
user1018 已提交
268 269
- `-c`: 指定模型配置文件。
- `--slim_config`: 指定压缩策略配置文件。
W
WenmuZhou 已提交
270

A
an1018 已提交
271
## 6. 模型评估与预测
W
WenmuZhou 已提交
272

A
an1018 已提交
273
### 6.1. 指标评估
W
WenmuZhou 已提交
274

A
an1018 已提交
275
训练中模型参数默认保存在`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` 设置。
U
user1018 已提交
276 277 278 279

```bash
# GPU 评估, weights 为待测权重
python3 tools/eval.py \
A
an1018 已提交
280 281
    -c configs/picodet/legacy_model/application/layout_analysis/picodet_lcnet_x1_0_layout.yml \
    -o weights=./output/picodet_lcnet_x1_0_layout/best_model
U
user1018 已提交
282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302
```

会输出以下信息,打印出mAP、AP0.5等信息。

```py
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.935
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.979
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.956
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.404
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.782
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.969
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.539
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.938
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.949
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.495
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.818
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.978
[08/15 07:07:09] ppdet.engine INFO: Total sample number: 11245, averge FPS: 24.405059207157436
[08/15 07:07:09] ppdet.engine INFO: Best test bbox ap is 0.935.
```

A
an1018 已提交
303
若使用**提供的预训练模型进行评估**,或使用**FGD蒸馏训练的模型**,更换`weights`模型路径,执行如下命令进行评估:
U
user1018 已提交
304 305 306

```
python3 tools/eval.py \
A
an1018 已提交
307 308 309
    -c configs/picodet/legacy_model/application/layout_analysis/picodet_lcnet_x1_0_layout.yml \
    --slim_config configs/picodet/legacy_model/application/layout_analysis/picodet_lcnet_x2_5_layout.yml \
    -o weights=output/picodet_lcnet_x2_5_layout/best_model
U
user1018 已提交
310 311 312 313 314 315
```

- `-c`: 指定模型配置文件。
- `--slim_config`: 指定蒸馏策略配置文件。
- `-o weights`: 指定蒸馏算法训好的模型路径。

A
an1018 已提交
316
### 6.2 测试版面分析结果
U
user1018 已提交
317 318


A
an1018 已提交
319
预测使用的配置文件必须与训练一致,如您通过 `python3 tools/train.py -c configs/picodet/legacy_model/application/layout_analysis/picodet_lcnet_x1_0_layout.yml` 完成了模型的训练过程。
U
user1018 已提交
320

A
an1018 已提交
321
使用 PaddleDetection 训练好的模型,您可以使用如下命令进行模型预测。
U
user1018 已提交
322 323 324

```bash
python3 tools/infer.py \
A
an1018 已提交
325
    -c configs/picodet/legacy_model/application/layout_analysis/picodet_lcnet_x1_0_layout.yml \
U
user1018 已提交
326 327 328
    -o weights='output/picodet_lcnet_x1_0_layout/best_model.pdparams' \
    --infer_img='docs/images/layout.jpg' \
    --output_dir=output_dir/ \
A
an1018 已提交
329
    --draw_threshold=0.5
U
user1018 已提交
330 331 332 333 334 335
```

- `--infer_img`: 推理单张图片,也可以通过`--infer_dir`推理文件中的所有图片。
- `--output_dir`: 指定可视化结果保存路径。
- `--draw_threshold`:指定绘制结果框的NMS阈值。

A
an1018 已提交
336
若使用**提供的预训练模型进行预测**,或使用**FGD蒸馏训练的模型**,更换`weights`模型路径,执行如下命令进行预测:
U
user1018 已提交
337 338 339

```
python3 tools/infer.py \
A
an1018 已提交
340 341 342 343 344 345
    -c configs/picodet/legacy_model/application/layout_analysis/picodet_lcnet_x1_0_layout.yml \
    --slim_config configs/picodet/legacy_model/application/layout_analysis/picodet_lcnet_x2_5_layout.yml \
    -o weights='output/picodet_lcnet_x2_5_layout/best_model.pdparams' \
    --infer_img='docs/images/layout.jpg' \
    --output_dir=output_dir/ \
    --draw_threshold=0.5
U
user1018 已提交
346 347 348
```


A
an1018 已提交
349
## 7. 模型导出与预测
U
user1018 已提交
350 351


A
an1018 已提交
352
### 7.1 模型导出
U
user1018 已提交
353 354 355 356 357 358 359

inference 模型(`paddle.jit.save`保存的模型) 一般是模型训练,把模型结构和模型参数保存在文件中的固化模型,多用于预测部署场景。 训练过程中保存的模型是checkpoints模型,保存的只有模型的参数,多用于恢复训练等。 与checkpoints模型相比,inference 模型会额外保存模型的结构信息,在预测部署、加速推理上性能优越,灵活方便,适合于实际系统集成。

版面分析模型转inference模型步骤如下:

```bash
python3 tools/export_model.py \
A
an1018 已提交
360 361 362
    -c configs/picodet/legacy_model/application/layout_analysis/picodet_lcnet_x1_0_layout.yml \
    -o weights=output/picodet_lcnet_x1_0_layout/best_model \
    --output_dir=output_inference/
U
user1018 已提交
363 364 365 366 367 368 369 370 371 372 373 374 375 376
```

* 如无需导出后处理,请指定:`-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模型的模型结构文件
```

A
an1018 已提交
377
若使用**提供的预训练模型转Inference模型**,或使用**FGD蒸馏训练的模型**,更换`weights`模型路径,模型转inference模型步骤如下:
U
user1018 已提交
378 379 380

```bash
python3 tools/export_model.py \
A
an1018 已提交
381 382 383 384
    -c configs/picodet/legacy_model/application/layout_analysis/picodet_lcnet_x1_0_layout.yml \
    --slim_config configs/picodet/legacy_model/application/layout_analysis/picodet_lcnet_x2_5_layout.yml \
    -o weights=./output/picodet_lcnet_x2_5_layout/best_model \
    --output_dir=output_inference/
U
user1018 已提交
385 386 387 388
```



A
an1018 已提交
389
### 7.2 模型推理
U
user1018 已提交
390

A
an1018 已提交
391
若使用**提供的推理训练模型推理**,或使用**FGD蒸馏训练的模型**,更换`model_dir`推理模型路径,执行如下命令进行推理:
U
user1018 已提交
392 393 394

```bash
python3 deploy/python/infer.py \
A
an1018 已提交
395 396 397
    --model_dir=output_inference/picodet_lcnet_x1_0_layout/ \
    --image_file=docs/images/layout.jpg \
    --device=CPU
U
user1018 已提交
398 399 400 401 402 403 404 405 406 407
```

- --device:指定GPU、CPU设备

模型推理完成,会看到以下log输出

```
------------------------------------------
-----------  Model Configuration -----------
Model Arch: PicoDet
A
an1018 已提交
408
Transform Order:
U
user1018 已提交
409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469
--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表示后处理耗时

可视化版面结果如下图所示

<div align="center">
    <img src="../docs/layout/layout_res.jpg" width="800">
</div>



## 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}
}
```