readme.md 10.3 KB
Newer Older
LDOUBLEV's avatar
LDOUBLEV committed
1

MissPenguin's avatar
refine  
MissPenguin committed
2
# 飞桨训推一体认证(TIPC)
LDOUBLEV's avatar
LDOUBLEV committed
3

MissPenguin's avatar
MissPenguin committed
4
5
## 1. 简介

MissPenguin's avatar
MissPenguin committed
6
飞桨除了基本的模型训练和预测,还提供了支持多端多平台的高性能推理部署工具。本文档提供了PaddleOCR中所有模型的飞桨训推一体认证 (Training and Inference Pipeline Certification(TIPC)) 信息和测试工具,方便用户查阅每种模型的训练推理部署打通情况,并可以进行一键测试。
LDOUBLEV's avatar
LDOUBLEV committed
7

MissPenguin's avatar
MissPenguin committed
8
<div align="center">
MissPenguin's avatar
MissPenguin committed
9
    <img src="docs/guide.png" width="1000">
MissPenguin's avatar
MissPenguin committed
10
</div>
LDOUBLEV's avatar
LDOUBLEV committed
11

MissPenguin's avatar
MissPenguin committed
12
13
## 2. 汇总信息

MissPenguin's avatar
MissPenguin committed
14
打通情况汇总如下,已填写的部分表示可以使用本工具进行一键测试,未填写的表示正在支持中。
LDOUBLEV's avatar
LDOUBLEV committed
15

MissPenguin's avatar
MissPenguin committed
16
**字段说明:**
MissPenguin's avatar
MissPenguin committed
17
- 基础训练预测:包括模型训练、Paddle Inference Python预测。
MissPenguin's avatar
MissPenguin committed
18
- 更多训练方式:包括多机多卡、混合精度。
MissPenguin's avatar
MissPenguin committed
19
20
21
- 模型压缩:包括裁剪、离线/在线量化、蒸馏。
- 其他预测部署:包括Paddle Inference C++预测、Paddle Serving部署、Paddle-Lite部署等。

MissPenguin's avatar
MissPenguin committed
22
23
24
更详细的mkldnn、Tensorrt等预测加速相关功能的支持情况可以查看各测试工具的[更多教程](#more)

| 算法论文 | 模型名称 | 模型类型 | 基础<br>训练预测 | 更多<br>训练方式 | 模型压缩 |  其他预测部署  |
MissPenguin's avatar
MissPenguin committed
25
| :--- | :--- |  :----:  | :--------: |  :----  |   :----  |   :----  |
26
27
28
29
| DB     |ch_ppocr_mobile_v2.0_det | 检测  | 支持 | 多机多卡 <br> 混合精度 | - | Paddle Inference: C++ <br> Paddle Serving: Python, C++ <br> Paddle-Lite: <br> (1) ARM CPU(C++) |
| DB     |ch_ppocr_mobile_v2.0_det_FPGM | 检测  | 支持 | 多机多卡 <br> 混合精度 | FPGM裁剪 | Paddle Inference: C++ <br> Paddle Serving: Python, C++ <br> Paddle-Lite: <br> (1) ARM CPU(C++) |
| DB     |ch_ppocr_mobile_v2.0_det_PACT | 检测  | 支持 | 多机多卡 <br> 混合精度 | PACT量化 | Paddle Inference: C++ <br> Paddle Serving: Python, C++ <br> Paddle-Lite: <br> (1) ARM CPU(C++) |
| DB     |ch_ppocr_mobile_v2.0_det_KL | 检测  | 支持 | 多机多卡 <br> 混合精度 | 离线量化| Paddle Inference: C++ <br> Paddle Serving: Python, C++ <br> Paddle-Lite: <br> (1) ARM CPU(C++) |
MissPenguin's avatar
fix  
MissPenguin committed
30
| DB     |ch_ppocr_server_v2.0_det | 检测  | 支持 | 多机多卡 <br> 混合精度 | - | Paddle Inference: C++ <br> Paddle Serving: Python, C++ |
MissPenguin's avatar
MissPenguin committed
31
| DB     |ch_PP-OCRv2_det          | 检测  |
32
| CRNN   |ch_ppocr_mobile_v2.0_rec | 识别  | 支持 | 多机多卡 <br> 混合精度 | - | Paddle Inference: C++ <br> Paddle Serving: Python, C++ <br> Paddle-Lite: <br> (1) ARM CPU(C++) |
MissPenguin's avatar
fix  
MissPenguin committed
33
| CRNN   |ch_ppocr_server_v2.0_rec | 识别  | 支持 | 多机多卡 <br> 混合精度 | - | Paddle Inference: C++ <br> Paddle Serving: Python, C++ |
MissPenguin's avatar
MissPenguin committed
34
| CRNN   |ch_PP-OCRv2_rec          | 识别  |
MissPenguin's avatar
MissPenguin committed
35
| PP-OCR |ch_ppocr_mobile_v2.0 | 检测+识别  | 支持 | 多机多卡 <br> 混合精度 | - | Paddle Inference: C++ <br> Paddle Serving: Python, C++ <br> Paddle-Lite: <br> (1) ARM CPU(C++) |
MissPenguin's avatar
fix  
MissPenguin committed
36
| PP-OCR |ch_ppocr_server_v2.0 | 检测+识别  | 支持 | 多机多卡 <br> 混合精度 | - | Paddle Inference: C++ <br> Paddle Serving: Python, C++ |
MissPenguin's avatar
MissPenguin committed
37
|PP-OCRv2|ch_PP-OCRv2 | 检测+识别  |
MissPenguin's avatar
MissPenguin committed
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
| DB     |det_mv3_db_v2.0                | 检测  |
| DB     |det_r50_vd_db_v2.0             | 检测  |
| EAST   |det_mv3_east_v2.0              | 检测  |
| EAST   |det_r50_vd_east_v2.0           | 检测  |
| PSENet |det_mv3_pse_v2.0               | 检测  |
| PSENet |det_r50_vd_pse_v2.0            | 检测  |
| SAST   |det_r50_vd_sast_totaltext_v2.0 | 检测  |
| Rosetta|rec_mv3_none_none_ctc_v2.0     | 识别  |
| Rosetta|rec_r34_vd_none_none_ctc_v2.0  | 识别  |
| CRNN   |rec_mv3_none_bilstm_ctc_v2.0   | 识别  |
| CRNN   |rec_r34_vd_none_bilstm_ctc_v2.0| 识别  |
| StarNet|rec_mv3_tps_bilstm_ctc_v2.0    | 识别  |
| StarNet|rec_r34_vd_tps_bilstm_ctc_v2.0 | 识别  |
| RARE   |rec_mv3_tps_bilstm_att_v2.0    | 识别  |
| RARE   |rec_r34_vd_tps_bilstm_att_v2.0 | 识别  |
| SRN    |rec_r50fpn_vd_none_srn         | 识别  |
| NRTR   |rec_mtb_nrtr                   | 识别  |
| SAR    |rec_r31_sar                    | 识别  |
| PGNet  |rec_r34_vd_none_none_ctc_v2.0  | 端到端|
MissPenguin's avatar
MissPenguin committed
57
58


MissPenguin's avatar
MissPenguin committed
59

MissPenguin's avatar
fix  
MissPenguin committed
60
## 3. 测试工具简介
MissPenguin's avatar
MissPenguin committed
61
### 目录介绍
LDOUBLEV's avatar
LDOUBLEV committed
62

MissPenguin's avatar
MissPenguin committed
63
```shell
MissPenguin's avatar
MissPenguin committed
64
test_tipc/
MissPenguin's avatar
MissPenguin committed
65
├── configs/  # 配置文件目录
MissPenguin's avatar
fix  
MissPenguin committed
66
67
    ├── ch_ppocr_mobile_v2.0_det    # ch_ppocr_mobile_v2.0_det模型的测试配置文件目录
        ├── train_infer_python.txt      # 测试Linux上python训练预测(基础训练预测)的配置文件
MissPenguin's avatar
MissPenguin committed
68
69
70
71
        ├── model_linux_gpu_normal_normal_infer_cpp_linux_gpu_cpu.txt     # 测试Linux上c++预测的配置文件
        ├── model_linux_gpu_normal_normal_infer_python_jetson.txt         # 测试Jetson上python预测的配置文件
        ├── train_linux_gpu_fleet_amp_infer_python_linux_gpu_cpu.txt      # 测试Linux上多机多卡、混合精度训练和python预测的配置文件
        ├── ...  
MissPenguin's avatar
fix  
MissPenguin committed
72
    ├── ch_ppocr_server_v2.0_det               # ch_ppocr_server_v2.0_det模型的测试配置文件目录
MissPenguin's avatar
MissPenguin committed
73
        ├── ...  
MissPenguin's avatar
fix  
MissPenguin committed
74
    ├── ch_ppocr_mobile_v2.0_rec               # ch_ppocr_mobile_v2.0_rec模型的测试配置文件目录
MissPenguin's avatar
MissPenguin committed
75
        ├── ...  
MissPenguin's avatar
fix  
MissPenguin committed
76
    ├── ch_ppocr_server_v2.0_det               # ch_ppocr_server_v2.0_det模型的测试配置文件目录
MissPenguin's avatar
MissPenguin committed
77
78
        ├── ...  
    ├── ...  
MissPenguin's avatar
MissPenguin committed
79
├── results/   # 预先保存的预测结果,用于和实际预测结果进行精读比对
MissPenguin's avatar
fix  
MissPenguin committed
80
81
82
83
	├── python_ppocr_det_mobile_results_fp32.txt           # 预存的mobile版ppocr检测模型python预测fp32精度的结果
	├── python_ppocr_det_mobile_results_fp16.txt           # 预存的mobile版ppocr检测模型python预测fp16精度的结果
	├── cpp_ppocr_det_mobile_results_fp32.txt       # 预存的mobile版ppocr检测模型c++预测的fp32精度的结果
	├── cpp_ppocr_det_mobile_results_fp16.txt       # 预存的mobile版ppocr检测模型c++预测的fp16精度的结果
MissPenguin's avatar
MissPenguin committed
84
	├── ...
MissPenguin's avatar
MissPenguin committed
85
86
87
88
├── prepare.sh                        # 完成test_*.sh运行所需要的数据和模型下载
├── test_train_inference_python.sh    # 测试python训练预测的主程序
├── test_inference_cpp.sh             # 测试c++预测的主程序
├── test_serving.sh                   # 测试serving部署预测的主程序
MissPenguin's avatar
refine  
MissPenguin committed
89
├── test_lite_arm_cpu_cpp.sh          # 测试lite在arm_cpu上部署的C++预测的主程序
MissPenguin's avatar
MissPenguin committed
90
91
├── compare_results.py                # 用于对比log中的预测结果与results中的预存结果精度误差是否在限定范围内
└── readme.md                         # 使用文档
MissPenguin's avatar
MissPenguin committed
92
```
LDOUBLEV's avatar
LDOUBLEV committed
93

MissPenguin's avatar
refine  
MissPenguin committed
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
### 测试流程概述

使用本工具,可以测试不同功能的支持情况,以及预测结果是否对齐,测试流程概括如下:
<div align="center">
    <img src="docs/test.png" width="800">
</div>

1. 运行prepare.sh准备测试所需数据和模型;
2. 运行要测试的功能对应的测试脚本`test_*.sh`,产出log,由log可以看到不同配置是否运行成功;
3.`compare_results.py`对比log中的预测结果和预存在results目录下的结果,判断预测精度是否符合预期(在误差范围内)。

测试单项功能仅需两行命令,如需测试不同模型/功能,替换配置文件即可,命令格式如下:
```shell
# 功能:准备数据
# 格式:bash + 运行脚本 + 参数1: 配置文件选择 + 参数2: 模式选择
bash test_tipc/prepare.sh  configs/[model_name]/[params_file_name]  [Mode]

# 功能:运行测试
# 格式:bash + 运行脚本 + 参数1: 配置文件选择 + 参数2: 模式选择
bash test_tipc/test_train_inference_python.sh configs/[model_name]/[params_file_name]  [Mode]
```

例如,测试基本训练预测功能的`lite_train_lite_infer`模式,运行:
```shell
# 准备数据
bash test_tipc/prepare.sh ./test_tipc/configs/ch_ppocr_mobile_v2.0_det/train_infer_python.txt 'lite_train_lite_infer'
# 运行测试
bash test_tipc/test_train_inference_python.sh ./test_tipc/configs/ch_ppocr_mobile_v2.0_det/train_infer_python.txt 'lite_train_lite_infer'
```  

MissPenguin's avatar
MissPenguin committed
124
### 配置文件命名规范
MissPenguin's avatar
fix  
MissPenguin committed
125
`configs`目录下,**按模型名称划分为子目录**,子目录中存放所有该模型测试需要用到的配置文件,配置文件的命名遵循如下规范:
MissPenguin's avatar
MissPenguin committed
126

MissPenguin's avatar
fix  
MissPenguin committed
127
1. 基础训练预测配置简单命名为:`train_infer_python.txt`,表示**Linux环境下单机、不使用混合精度训练+python预测**,其完整命名对应`train_linux_gpu_normal_normal_infer_python_linux_gpu_cpu.txt`,由于本配置文件使用频率较高,这里进行了名称简化。
MissPenguin's avatar
MissPenguin committed
128

MissPenguin's avatar
fix  
MissPenguin committed
129
2. 其他带训练配置命名格式为:`train_训练硬件环境(linux_gpu/linux_dcu/…)_是否多机(fleet/normal)_是否混合精度(amp/normal)_预测模式(infer/lite/serving/js)_语言(cpp/python/java)_预测硬件环境(linux_gpu/mac/jetson/opencl_arm_gpu/...).txt`。如,linux gpu下多机多卡+混合精度链条测试对应配置 `train_linux_gpu_fleet_amp_infer_python_linux_gpu_cpu.txt`,linux dcu下基础训练预测对应配置 `train_linux_dcu_normal_normal_infer_python_linux_dcu.txt`
MissPenguin's avatar
MissPenguin committed
130

MissPenguin's avatar
MissPenguin committed
131
3. 仅预测的配置(如serving、lite等)命名格式:`model_训练硬件环境(linux_gpu/linux_dcu/…)_是否多机(fleet/normal)_是否混合精度(amp/normal)_(infer/lite/serving/js)_语言(cpp/python/java)_预测硬件环境(linux_gpu/mac/jetson/opencl_arm_gpu/...).txt`,即,与2相比,仅第一个字段从train换为model,测试时模型直接下载获取,这里的“训练硬件环境”表示所测试的模型是在哪种环境下训练得到的。
MissPenguin's avatar
MissPenguin committed
132

MissPenguin's avatar
fix  
MissPenguin committed
133
根据上述命名规范,可以直接从子目录名称和配置文件名找到需要测试的场景和功能对应的配置文件。
MissPenguin's avatar
MissPenguin committed
134

DanielYang's avatar
DanielYang committed
135

MissPenguin's avatar
MissPenguin committed
136
<a name="more"></a>
MissPenguin's avatar
refine  
MissPenguin committed
137
## 4. 开始测试
MissPenguin's avatar
fix  
MissPenguin committed
138
各功能测试中涉及混合精度、裁剪、量化等训练相关,及mkldnn、Tensorrt等多种预测相关参数配置,请点击下方相应链接了解更多细节和使用教程:  
MissPenguin's avatar
refine  
MissPenguin committed
139
140
141
142
143
- [test_train_inference_python 使用](docs/test_train_inference_python.md) :测试基于Python的模型训练、评估、推理等基本功能,包括裁剪、量化、蒸馏。 
- [test_inference_cpp 使用](docs/test_inference_cpp.md):测试基于C++的模型推理。
- [test_serving 使用](docs/test_serving.md):测试基于Paddle Serving的服务化部署功能。
- [test_lite_arm_cpu_cpp 使用](docs/test_lite_arm_cpu_cpp.md):测试基于Paddle-Lite的ARM CPU端c++预测部署功能。
- [test_paddle2onnx 使用](docs/test_paddle2onnx.md):测试Paddle2ONNX的模型转化功能,并验证正确性。