"vscode:/vscode.git/clone" did not exist on "8def6786150e4e637cc827bf730356b3f2d32892"
train_layoutparser_model.md 7.31 KB
Newer Older
grasswolfs's avatar
grasswolfs committed
1
# Training layout-parse
WenmuZhou's avatar
WenmuZhou committed
2

grasswolfs's avatar
grasswolfs committed
3
[1. Installation](#Installation)
WenmuZhou's avatar
WenmuZhou committed
4

grasswolfs's avatar
grasswolfs committed
5
[1.1 Requirements](#Requirements)
WenmuZhou's avatar
WenmuZhou committed
6

grasswolfs's avatar
grasswolfs committed
7
[1.2 Install PaddleDetection](#Install PaddleDetection)
WenmuZhou's avatar
WenmuZhou committed
8

grasswolfs's avatar
grasswolfs committed
9
[2.  Data preparation](#Data preparation)
WenmuZhou's avatar
WenmuZhou committed
10

grasswolfs's avatar
grasswolfs committed
11
[3. Configuration](#Configuration)
WenmuZhou's avatar
WenmuZhou committed
12

grasswolfs's avatar
grasswolfs committed
13
[4. Training](#Training)
WenmuZhou's avatar
WenmuZhou committed
14

grasswolfs's avatar
grasswolfs committed
15
[5. Prediction](#Prediction)
WenmuZhou's avatar
WenmuZhou committed
16

grasswolfs's avatar
grasswolfs committed
17
[6. Deployment](#Deployment)
WenmuZhou's avatar
WenmuZhou committed
18

grasswolfs's avatar
grasswolfs committed
19
[6.1 Export model](#Export model)
WenmuZhou's avatar
WenmuZhou committed
20

grasswolfs's avatar
grasswolfs committed
21
[6.2 Inference](#Inference)  
WenmuZhou's avatar
WenmuZhou committed
22

grasswolfs's avatar
grasswolfs committed
23
<a name="Installation"></a>
WenmuZhou's avatar
WenmuZhou committed
24

grasswolfs's avatar
grasswolfs committed
25
## 1.  Installation
WenmuZhou's avatar
WenmuZhou committed
26

grasswolfs's avatar
grasswolfs committed
27
<a name="Requirements"></a>
WenmuZhou's avatar
WenmuZhou committed
28

grasswolfs's avatar
grasswolfs committed
29
### 1.1 Requirements
WenmuZhou's avatar
WenmuZhou committed
30
31
32
33
34
35
36
37

- PaddlePaddle 2.1
- OS 64 bit
- Python 3(3.5.1+/3.6/3.7/3.8/3.9),64 bit
- pip/pip3(9.0.1+), 64 bit
- CUDA >= 10.1
- cuDNN >= 7.6

grasswolfs's avatar
grasswolfs committed
38
<a name="Install PaddleDetection"></a>
WenmuZhou's avatar
WenmuZhou committed
39

grasswolfs's avatar
grasswolfs committed
40
### 1.2 Install PaddleDetection
WenmuZhou's avatar
WenmuZhou committed
41
42

```bash
grasswolfs's avatar
grasswolfs committed
43
# Clone PaddleDetection repository
WenmuZhou's avatar
WenmuZhou committed
44
45
46
47
cd <path/to/clone/PaddleDetection>
git clone https://github.com/PaddlePaddle/PaddleDetection.git

cd PaddleDetection
grasswolfs's avatar
grasswolfs committed
48
# Install other dependencies
WenmuZhou's avatar
WenmuZhou committed
49
50
51
pip install -r requirements.txt
```

grasswolfs's avatar
grasswolfs committed
52
For more installation tutorials, please refer to: [Install doc](https://github.com/PaddlePaddle/PaddleDetection/blob/release/2.1/docs/tutorials/INSTALL_cn.md)
WenmuZhou's avatar
WenmuZhou committed
53

grasswolfs's avatar
grasswolfs committed
54
<a name="Data preparation"></a>
WenmuZhou's avatar
WenmuZhou committed
55

grasswolfs's avatar
grasswolfs committed
56
## 2. Data preparation
WenmuZhou's avatar
WenmuZhou committed
57

grasswolfs's avatar
grasswolfs committed
58
Download the [PubLayNet](https://github.com/ibm-aur-nlp/PubLayNet) dataset
WenmuZhou's avatar
WenmuZhou committed
59
60
61
62

```bash
cd PaddleDetection/dataset/
mkdir publaynet
grasswolfs's avatar
grasswolfs committed
63
# execute the command,download PubLayNet
WenmuZhou's avatar
WenmuZhou committed
64
wget -O publaynet.tar.gz https://dax-cdn.cdn.appdomain.cloud/dax-publaynet/1.0.0/publaynet.tar.gz?_ga=2.104193024.1076900768.1622560733-649911202.1622560733
grasswolfs's avatar
grasswolfs committed
65
# unpack
WenmuZhou's avatar
WenmuZhou committed
66
67
68
tar -xvf publaynet.tar.gz
```

grasswolfs's avatar
grasswolfs committed
69
PubLayNet directory structure after decompressing :
WenmuZhou's avatar
WenmuZhou committed
70
71
72
73
74
75

| File or Folder | Description                                      | num     |
| :------------- | :----------------------------------------------- | ------- |
| `train/`       | Images in the training subset                    | 335,703 |
| `val/`         | Images in the validation subset                  | 11,245  |
| `test/`        | Images in the testing subset                     | 11,405  |
grasswolfs's avatar
grasswolfs committed
76
77
78
79
| `train.json`   | Annotations for training images                  |  1       |
| `val.json`     | Annotations for validation images                |  1       |
| `LICENSE.txt`  | Plaintext version of the CDLA-Permissive license |   1      |
| `README.txt`   | Text file with the file names and description    |   1      |
WenmuZhou's avatar
WenmuZhou committed
80

grasswolfs's avatar
grasswolfs committed
81
For other datasets,please refer to [the PrepareDataSet]((https://github.com/PaddlePaddle/PaddleDetection/blob/release/2.1/docs/tutorials/PrepareDataSet.md) )
WenmuZhou's avatar
WenmuZhou committed
82

grasswolfs's avatar
grasswolfs committed
83
<a name="Configuration"></a>
WenmuZhou's avatar
WenmuZhou committed
84

grasswolfs's avatar
grasswolfs committed
85
## 3. Configuration
WenmuZhou's avatar
WenmuZhou committed
86

grasswolfs's avatar
grasswolfs committed
87
We use the  `configs/ppyolo/ppyolov2_r50vd_dcn_365e_coco.yml` configuration for training,the configuration file is as follows
WenmuZhou's avatar
WenmuZhou committed
88

WenmuZhou's avatar
WenmuZhou committed
89
90
91
92
93
94
95
96
97
98
99
100
```bash
_BASE_: [
  '../datasets/coco_detection.yml',
  '../runtime.yml',
  './_base_/ppyolov2_r50vd_dcn.yml',
  './_base_/optimizer_365e.yml',
  './_base_/ppyolov2_reader.yml',
]

snapshot_epoch: 8
weights: output/ppyolov2_r50vd_dcn_365e_coco/model_final
```
grasswolfs's avatar
grasswolfs committed
101
The `ppyolov2_r50vd_dcn_365e_coco.yml` configuration depends on other configuration files, in this case:
WenmuZhou's avatar
WenmuZhou committed
102

grasswolfs's avatar
grasswolfs committed
103
- coco_detection.yml:mainly explains the path of training data and verification data
WenmuZhou's avatar
WenmuZhou committed
104

grasswolfs's avatar
grasswolfs committed
105
- runtime.yml:mainly describes the common parameters, such as whether to use the GPU and how many epoch to save model etc.
WenmuZhou's avatar
WenmuZhou committed
106

grasswolfs's avatar
grasswolfs committed
107
- optimizer_365e.yml:mainly explains the learning rate and optimizer configuration
WenmuZhou's avatar
WenmuZhou committed
108

grasswolfs's avatar
grasswolfs committed
109
- ppyolov2_r50vd_dcn.yml:mainly describes the model and the  network
WenmuZhou's avatar
WenmuZhou committed
110

grasswolfs's avatar
grasswolfs committed
111
- ppyolov2_reader.yml:mainly describes the configuration of data readers, such as batch size and number of concurrent loading child processes, and also includes post preprocessing, such as resize and data augmention etc.
WenmuZhou's avatar
WenmuZhou committed
112
113


grasswolfs's avatar
grasswolfs committed
114
Modify the preceding files, such as the dataset path and batch size etc.
WenmuZhou's avatar
WenmuZhou committed
115

grasswolfs's avatar
grasswolfs committed
116
<a name="Training"></a>
WenmuZhou's avatar
WenmuZhou committed
117

grasswolfs's avatar
grasswolfs committed
118
## 4. Training
WenmuZhou's avatar
WenmuZhou committed
119

grasswolfs's avatar
grasswolfs committed
120
PaddleDetection provides single-card/multi-card training mode to meet various training needs of users:
WenmuZhou's avatar
WenmuZhou committed
121

grasswolfs's avatar
grasswolfs committed
122
* GPU single card training
WenmuZhou's avatar
WenmuZhou committed
123
124

```bash
grasswolfs's avatar
grasswolfs committed
125
export CUDA_VISIBLE_DEVICES=0 #Don't need to run this command on Windows and Mac
WenmuZhou's avatar
WenmuZhou committed
126
127
128
python tools/train.py -c configs/ppyolo/ppyolov2_r50vd_dcn_365e_coco.yml
```

grasswolfs's avatar
grasswolfs committed
129
* GPU multi-card training
WenmuZhou's avatar
WenmuZhou committed
130
131
132
133
134
135

```bash
export CUDA_VISIBLE_DEVICES=0,1,2,3
python -m paddle.distributed.launch --gpus 0,1,2,3 tools/train.py -c configs/ppyolo/ppyolov2_r50vd_dcn_365e_coco.yml --eval
```

grasswolfs's avatar
grasswolfs committed
136
--eval: training while verifying
WenmuZhou's avatar
WenmuZhou committed
137

grasswolfs's avatar
grasswolfs committed
138
* Model recovery training
WenmuZhou's avatar
WenmuZhou committed
139

grasswolfs's avatar
grasswolfs committed
140
During the daily training, if training is interrupted due to some reasons, you can use the -r command to resume the training:
WenmuZhou's avatar
WenmuZhou committed
141
142
143

```bash
export CUDA_VISIBLE_DEVICES=0,1,2,3
WenmuZhou's avatar
fix doc  
WenmuZhou committed
144
python -m paddle.distributed.launch --gpus 0,1,2,3 tools/train.py -c configs/ppyolo/ppyolov2_r50vd_dcn_365e_coco.yml --eval -r output/ppyolov2_r50vd_dcn_365e_coco/10000
WenmuZhou's avatar
WenmuZhou committed
145
146
```

grasswolfs's avatar
grasswolfs committed
147
Note: If you encounter "`Out of memory error`" , try reducing `batch_size` in the `ppyolov2_reader.yml`  file
WenmuZhou's avatar
WenmuZhou committed
148

grasswolfs's avatar
grasswolfs committed
149
prediction<a name="Prediction"></a>
WenmuZhou's avatar
WenmuZhou committed
150

grasswolfs's avatar
grasswolfs committed
151
## 5. Prediction
WenmuZhou's avatar
WenmuZhou committed
152

grasswolfs's avatar
grasswolfs committed
153
Set parameters and use PaddleDetection to predict:
WenmuZhou's avatar
WenmuZhou committed
154
155
156

```bash
export CUDA_VISIBLE_DEVICES=0
WenmuZhou's avatar
fix doc  
WenmuZhou committed
157
python tools/infer.py -c configs/ppyolo/ppyolov2_r50vd_dcn_365e_coco.yml --infer_img=images/paper-image.jpg --output_dir=infer_output/ --draw_threshold=0.5 -o weights=output/ppyolov2_r50vd_dcn_365e_coco/model_final --use_vdl=Ture
WenmuZhou's avatar
WenmuZhou committed
158
159
```

grasswolfs's avatar
grasswolfs committed
160
`--draw_threshold` is an optional parameter. According to the calculation of [NMS](https://ieeexplore.ieee.org/document/1699659), different threshold will produce different results, ` keep_top_k ` represent  the maximum amount of output target, the default value is 10. You can set different value according to your own actual situation。
WenmuZhou's avatar
WenmuZhou committed
161

grasswolfs's avatar
grasswolfs committed
162
<a name="Deployment"></a>
WenmuZhou's avatar
WenmuZhou committed
163

grasswolfs's avatar
grasswolfs committed
164
## 6. Deployment
WenmuZhou's avatar
WenmuZhou committed
165

grasswolfs's avatar
grasswolfs committed
166
Use your trained model in Layout Parser
WenmuZhou's avatar
WenmuZhou committed
167

grasswolfs's avatar
grasswolfs committed
168
<a name="Export model"></a>
WenmuZhou's avatar
WenmuZhou committed
169

grasswolfs's avatar
grasswolfs committed
170
### 6.1 Export model
WenmuZhou's avatar
WenmuZhou committed
171

grasswolfs's avatar
grasswolfs committed
172
n the process of model training, the model file saved contains the process of forward prediction and back propagation. In the actual industrial deployment, there is no need for back propagation. Therefore, the model should be translated into the model format required by the deployment. The `tools/export_model.py` script is provided in PaddleDetection to export the model.
WenmuZhou's avatar
WenmuZhou committed
173

grasswolfs's avatar
grasswolfs committed
174
The exported model name defaults to `model.*`, Layout Parser's code model is `inference.*`, So change [PaddleDetection/ppdet/engine/trainer. Py ](https://github.com/PaddlePaddle/PaddleDetection/blob/b87a1ea86fa18ce69e44a17ad1b49c1326f19ff9/ppdet/engine/trainer.py# L512) (click on the link to see the detailed line of code), change 'model' to 'inference'.
WenmuZhou's avatar
WenmuZhou committed
175

grasswolfs's avatar
grasswolfs committed
176
Execute the script to export model:
WenmuZhou's avatar
WenmuZhou committed
177
178

```bash
WenmuZhou's avatar
fix doc  
WenmuZhou committed
179
python tools/export_model.py -c configs/ppyolo/ppyolov2_r50vd_dcn_365e_coco.yml --output_dir=./inference -o weights=output/ppyolov2_r50vd_dcn_365e_coco/model_final.pdparams
WenmuZhou's avatar
WenmuZhou committed
180
181
```

grasswolfs's avatar
grasswolfs committed
182
The prediction model is exported to `inference/ppyolov2_r50vd_dcn_365e_coco` ,including:`infer_cfg.yml`(prediction not required), `inference.pdiparams`, `inference.pdiparams.info`,`inference.pdmodel`
WenmuZhou's avatar
WenmuZhou committed
183

grasswolfs's avatar
grasswolfs committed
184
More model export tutorials, please refer to:[EXPORT_MODEL](https://github.com/PaddlePaddle/PaddleDetection/blob/release/2.1/deploy/EXPORT_MODEL.md)
WenmuZhou's avatar
WenmuZhou committed
185

grasswolfs's avatar
grasswolfs committed
186
<a name="Inference"></a>
WenmuZhou's avatar
WenmuZhou committed
187

grasswolfs's avatar
grasswolfs committed
188
### 6.2 Inference
WenmuZhou's avatar
WenmuZhou committed
189

grasswolfs's avatar
grasswolfs committed
190
`model_path` represent  the trained model path, and layoutparser is used to predict:
WenmuZhou's avatar
WenmuZhou committed
191
192
193

```bash
import layoutparser as lp
WenmuZhou's avatar
fix doc  
WenmuZhou committed
194
model = lp.PaddleDetectionLayoutModel(model_path="inference/ppyolov2_r50vd_dcn_365e_coco", threshold=0.5,label_map={0: "Text", 1: "Title", 2: "List", 3:"Table", 4:"Figure"},enforce_cpu=True,enable_mkldnn=True)
WenmuZhou's avatar
WenmuZhou committed
195
196
197
198
199
200
```



***

grasswolfs's avatar
grasswolfs committed
201
More PaddleDetection training tutorials,please reference:[PaddleDetection Training](https://github.com/PaddlePaddle/PaddleDetection/blob/release/2.1/docs/tutorials/GETTING_STARTED_cn.md)
WenmuZhou's avatar
WenmuZhou committed
202
203

***