未验证 提交 22ccdfbf 编写于 作者: S Shuangchi He 提交者: GitHub

[cherry-pick] Fix some typos from release/2.4 branch and merge. (#6114)

* [cherry-pick] Fix some typos from release/2.4 branch and merge.

* rm readme_en.md in deploy/cpp_infer/.

* Fix others typos.
上级 55d8af94
...@@ -1492,7 +1492,7 @@ class MainWindow(QMainWindow): ...@@ -1492,7 +1492,7 @@ class MainWindow(QMainWindow):
event.ignore() event.ignore()
else: else:
settings = self.settings settings = self.settings
# If it loads images from dir, don't load it at the begining # If it loads images from dir, don't load it at the beginning
if self.dirname is None: if self.dirname is None:
settings[SETTING_FILENAME] = self.filePath if self.filePath else '' settings[SETTING_FILENAME] = self.filePath if self.filePath else ''
else: else:
......
...@@ -104,7 +104,7 @@ opencv3/ ...@@ -104,7 +104,7 @@ opencv3/
tar -xf paddle_inference.tgz tar -xf paddle_inference.tgz
``` ```
Finally you will see the the folder of `paddle_inference/` in the current path. Finally you will see the folder of `paddle_inference/` in the current path.
#### 1.3.2 Compile the inference source code #### 1.3.2 Compile the inference source code
* If you want to get the latest Paddle inference library features, you can download the latest code from Paddle GitHub repository and compile the inference library from the source code. It is recommended to download the inference library with paddle version greater than or equal to 2.0.1. * If you want to get the latest Paddle inference library features, you can download the latest code from Paddle GitHub repository and compile the inference library from the source code. It is recommended to download the inference library with paddle version greater than or equal to 2.0.1.
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
- [2.3 运行demo](#23) - [2.3 运行demo](#23)
- [3. FAQ](#3) - [3. FAQ](#3)
本章节介绍PaddleOCR 模型的C++部署方法。C++在性能计算上优于Python,因此,在大多数CPU、GPU部署场景,多采用C++的部署方式,本节将介绍如何在Linux\Windows (CPU\GPU)环境下配置C++环境并完成PaddleOCR模型部署。 本章节介绍PaddleOCR 模型的C++部署方法。C++在性能计算上优于Python,因此,在大多数CPU、GPU部署场景,多采用C++的部署方式,本节将介绍如何在Linux\Windows (CPU\GPU)环境下配置C++环境并完成PaddleOCR模型部署。
<a name="1"></a> <a name="1"></a>
......
# PP-OCR Models Pruning # PP-OCR Models Pruning
Generally, a more complex model would achive better performance in the task, but it also leads to some redundancy in the model. Model Pruning is a technique that reduces this redundancy by removing the sub-models in the neural network model, so as to reduce model calculation complexity and improve model inference performance. Generally, a more complex model would achieve better performance in the task, but it also leads to some redundancy in the model. Model Pruning is a technique that reduces this redundancy by removing the sub-models in the neural network model, so as to reduce model calculation complexity and improve model inference performance.
This example uses PaddleSlim provided[APIs of Pruning](https://github.com/PaddlePaddle/PaddleSlim/tree/develop/docs/zh_cn/api_cn/dygraph/pruners) to compress the OCR model. This example uses PaddleSlim provided[APIs of Pruning](https://github.com/PaddlePaddle/PaddleSlim/tree/develop/docs/zh_cn/api_cn/dygraph/pruners) to compress the OCR model.
[PaddleSlim](https://github.com/PaddlePaddle/PaddleSlim), an open source library which integrates model pruning, quantization (including quantization training and offline quantization), distillation, neural network architecture search, and many other commonly used and leading model compression technique in the industry. [PaddleSlim](https://github.com/PaddlePaddle/PaddleSlim), an open source library which integrates model pruning, quantization (including quantization training and offline quantization), distillation, neural network architecture search, and many other commonly used and leading model compression technique in the industry.
......
...@@ -114,7 +114,7 @@ A: PGNet不需要字符级别的标注,NMS操作以及ROI操作。同时提出 ...@@ -114,7 +114,7 @@ A: PGNet不需要字符级别的标注,NMS操作以及ROI操作。同时提出
(3)端到端统计: (3)端到端统计:
端对端召回率:准确检测并正确识别文本行在全部标注文本行的占比; 端对端召回率:准确检测并正确识别文本行在全部标注文本行的占比;
端到端准确率:准确检测并正确识别文本行在 检测到的文本行数量 的占比; 端到端准确率:准确检测并正确识别文本行在 检测到的文本行数量 的占比;
准确检测的标准是检测框与标注框的IOU大于某个阈值,正确识别的检测框中的文本与标注的文本相同。 准确检测的标准是检测框与标注框的IOU大于某个阈值,正确识别的检测框中的文本与标注的文本相同。
<a name="15"></a> <a name="15"></a>
......
...@@ -296,7 +296,7 @@ Predicts of ./doc/imgs_words_en/word_336.png:('super', 0.9999073) ...@@ -296,7 +296,7 @@ Predicts of ./doc/imgs_words_en/word_336.png:('super', 0.9999073)
**注意**:由于上述模型是参考[DTRB](https://arxiv.org/abs/1904.01906)文本识别训练和评估流程,与超轻量级中文识别模型训练有两方面不同: **注意**:由于上述模型是参考[DTRB](https://arxiv.org/abs/1904.01906)文本识别训练和评估流程,与超轻量级中文识别模型训练有两方面不同:
- 训练时采用的图像分辨率不同,训练上述模型采用的图像分辨率是[3,32,100],而中文模型训练时,为了保证长文本的识别效果,训练时采用的图像分辨率是[3, 32, 320]。预测推理程序默认的形状参数是训练中文采用的图像分辨率,即[3, 32, 320]。因此,这里推理上述英文模型时,需要通过参数rec_image_shape设置识别图像的形状。 - 训练时采用的图像分辨率不同,训练上述模型采用的图像分辨率是[3,32,100],而中文模型训练时,为了保证长文本的识别效果,训练时采用的图像分辨率是[3, 32, 320]。预测推理程序默认的形状参数是训练中文采用的图像分辨率,即[3, 32, 320]。因此,这里推理上述英文模型时,需要通过参数rec_image_shape设置识别图像的形状。
- 字符列表,DTRB论文中实验只是针对26个小写英文本母和10个数字进行实验,总共36个字符。所有大小字符都转成了小写字符,不在上面列表的字符都忽略,认为是空格。因此这里没有输入字符字典,而是通过如下命令生成字典.因此在推理时需要设置参数rec_char_dict_path,指定为英文字典"./ppocr/utils/ic15_dict.txt"。 - 字符列表,DTRB论文中实验只是针对26个小写英文本母和10个数字进行实验,总共36个字符。所有大小字符都转成了小写字符,不在上面列表的字符都忽略,认为是空格。因此这里没有输入字符字典,而是通过如下命令生成字典.因此在推理时需要设置参数rec_char_dict_path,指定为英文字典"./ppocr/utils/ic15_dict.txt"。
......
...@@ -94,7 +94,7 @@ Predicts of ./doc/imgs_words_en/word_336.png:('super', 0.9999073) ...@@ -94,7 +94,7 @@ Predicts of ./doc/imgs_words_en/word_336.png:('super', 0.9999073)
**注意**:由于上述模型是参考[DTRB](https://arxiv.org/abs/1904.01906)文本识别训练和评估流程,与超轻量级中文识别模型训练有两方面不同: **注意**:由于上述模型是参考[DTRB](https://arxiv.org/abs/1904.01906)文本识别训练和评估流程,与超轻量级中文识别模型训练有两方面不同:
- 训练时采用的图像分辨率不同,训练上述模型采用的图像分辨率是[3,32,100],而中文模型训练时,为了保证长文本的识别效果,训练时采用的图像分辨率是[3, 32, 320]。预测推理程序默认的形状参数是训练中文采用的图像分辨率,即[3, 32, 320]。因此,这里推理上述英文模型时,需要通过参数rec_image_shape设置识别图像的形状。 - 训练时采用的图像分辨率不同,训练上述模型采用的图像分辨率是[3,32,100],而中文模型训练时,为了保证长文本的识别效果,训练时采用的图像分辨率是[3, 32, 320]。预测推理程序默认的形状参数是训练中文采用的图像分辨率,即[3, 32, 320]。因此,这里推理上述英文模型时,需要通过参数rec_image_shape设置识别图像的形状。
- 字符列表,DTRB论文中实验只是针对26个小写英文本母和10个数字进行实验,总共36个字符。所有大小字符都转成了小写字符,不在上面列表的字符都忽略,认为是空格。因此这里没有输入字符字典,而是通过如下命令生成字典.因此在推理时需要设置参数rec_char_dict_path,指定为英文字典"./ppocr/utils/ic15_dict.txt"。 - 字符列表,DTRB论文中实验只是针对26个小写英文本母和10个数字进行实验,总共36个字符。所有大小字符都转成了小写字符,不在上面列表的字符都忽略,认为是空格。因此这里没有输入字符字典,而是通过如下命令生成字典.因此在推理时需要设置参数rec_char_dict_path,指定为英文字典"./ppocr/utils/ic15_dict.txt"。
......
...@@ -78,23 +78,23 @@ python3 tools/infer_rec.py -c configs/rec/rec_resnet_stn_bilstm_att.yml -o Globa ...@@ -78,23 +78,23 @@ python3 tools/infer_rec.py -c configs/rec/rec_resnet_stn_bilstm_att.yml -o Globa
<a name="4-1"></a> <a name="4-1"></a>
### 4.1 Python推理 ### 4.1 Python推理
comming soon coming soon
<a name="4-2"></a> <a name="4-2"></a>
### 4.2 C++推理 ### 4.2 C++推理
comming soon coming soon
<a name="4-3"></a> <a name="4-3"></a>
### 4.3 Serving服务化部署 ### 4.3 Serving服务化部署
comming soon coming soon
<a name="4-4"></a> <a name="4-4"></a>
### 4.4 更多推理部署 ### 4.4 更多推理部署
comming soon coming soon
<a name="5"></a> <a name="5"></a>
## 5. FAQ ## 5. FAQ
......
...@@ -94,7 +94,7 @@ Predicts of ./doc/imgs_words_en/word_336.png:('super', 0.9999073) ...@@ -94,7 +94,7 @@ Predicts of ./doc/imgs_words_en/word_336.png:('super', 0.9999073)
**注意**:由于上述模型是参考[DTRB](https://arxiv.org/abs/1904.01906)文本识别训练和评估流程,与超轻量级中文识别模型训练有两方面不同: **注意**:由于上述模型是参考[DTRB](https://arxiv.org/abs/1904.01906)文本识别训练和评估流程,与超轻量级中文识别模型训练有两方面不同:
- 训练时采用的图像分辨率不同,训练上述模型采用的图像分辨率是[3,32,100],而中文模型训练时,为了保证长文本的识别效果,训练时采用的图像分辨率是[3, 32, 320]。预测推理程序默认的形状参数是训练中文采用的图像分辨率,即[3, 32, 320]。因此,这里推理上述英文模型时,需要通过参数rec_image_shape设置识别图像的形状。 - 训练时采用的图像分辨率不同,训练上述模型采用的图像分辨率是[3,32,100],而中文模型训练时,为了保证长文本的识别效果,训练时采用的图像分辨率是[3, 32, 320]。预测推理程序默认的形状参数是训练中文采用的图像分辨率,即[3, 32, 320]。因此,这里推理上述英文模型时,需要通过参数rec_image_shape设置识别图像的形状。
- 字符列表,DTRB论文中实验只是针对26个小写英文本母和10个数字进行实验,总共36个字符。所有大小字符都转成了小写字符,不在上面列表的字符都忽略,认为是空格。因此这里没有输入字符字典,而是通过如下命令生成字典.因此在推理时需要设置参数rec_char_dict_path,指定为英文字典"./ppocr/utils/ic15_dict.txt"。 - 字符列表,DTRB论文中实验只是针对26个小写英文本母和10个数字进行实验,总共36个字符。所有大小字符都转成了小写字符,不在上面列表的字符都忽略,认为是空格。因此这里没有输入字符字典,而是通过如下命令生成字典.因此在推理时需要设置参数rec_char_dict_path,指定为英文字典"./ppocr/utils/ic15_dict.txt"。
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
说明: 说明:
- 检测输入图像的长边尺寸是960。 - 检测输入图像的长边尺寸是960。
- 评估耗时阶段为图像预测耗时,不包括图像的预处理和后处理。 - 评估耗时阶段为图像预测耗时,不包括图像的预处理和后处理。
- `Intel至强6148`为服务器端CPU型号,测试中使用Intel MKL-DNN 加速。 - `Intel至强6148`为服务器端CPU型号,测试中使用Intel MKL-DNN 加速。
- `骁龙855`为移动端处理平台型号。 - `骁龙855`为移动端处理平台型号。
......
...@@ -94,7 +94,7 @@ ...@@ -94,7 +94,7 @@
| name | 网络loss类名 | CTCLoss | 目前支持`CTCLoss`,`DBLoss`,`ClsLoss` | | name | 网络loss类名 | CTCLoss | 目前支持`CTCLoss`,`DBLoss`,`ClsLoss` |
| balance_loss | DBLossloss中是否对正负样本数量进行均衡(使用OHEM) | True | \ | | balance_loss | DBLossloss中是否对正负样本数量进行均衡(使用OHEM) | True | \ |
| ohem_ratio | DBLossloss中的OHEM的负正样本比例 | 3 | \ | | ohem_ratio | DBLossloss中的OHEM的负正样本比例 | 3 | \ |
| main_loss_type | DBLossloss中shrink_map所采用的loss | DiceLoss | 支持`DiceLoss`,`BCELoss` | | main_loss_type | DBLossloss中shrink_map所采用的loss | DiceLoss | 支持`DiceLoss`,`BCELoss` |
| alpha | DBLossloss中shrink_map_loss的系数 | 5 | \ | | alpha | DBLossloss中shrink_map_loss的系数 | 5 | \ |
| beta | DBLossloss中threshold_map_loss的系数 | 10 | \ | | beta | DBLossloss中threshold_map_loss的系数 | 10 | \ |
......
<a name="0"></a> <a name="0"></a>
# 知识蒸馏 # 知识蒸馏
+ [知识蒸馏](#0) - [知识蒸馏](#知识蒸馏)
+ [1. 简介](#1) - [1. 简介](#1-简介)
- [1.1 知识蒸馏介绍](#11) - [1.1 知识蒸馏介绍](#11-知识蒸馏介绍)
- [1.2 PaddleOCR知识蒸馏简介](#12) - [1.2 PaddleOCR知识蒸馏简介](#12-paddleocr知识蒸馏简介)
+ [2. 配置文件解析](#2) - [2. 配置文件解析](#2-配置文件解析)
+ [2.1 识别配置文件解析](#21) - [2.1 识别配置文件解析](#21-识别配置文件解析)
- [2.1.1 模型结构](#211) - [2.1.1 模型结构](#211-模型结构)
- [2.1.2 损失函数](#212) - [2.1.2 损失函数](#212-损失函数)
- [2.1.3 后处理](#213) - [2.1.3 后处理](#213-后处理)
- [2.1.4 指标计算](#214) - [2.1.4 指标计算](#214-指标计算)
- [2.1.5 蒸馏模型微调](#215) - [2.1.5 蒸馏模型微调](#215-蒸馏模型微调)
+ [2.2 检测配置文件解析](#22) - [2.2 检测配置文件解析](#22-检测配置文件解析)
- [2.2.1 模型结构](#221) - [2.2.1 模型结构](#221-模型结构)
- [2.2.2 损失函数](#222) - [2.2.2 损失函数](#222-损失函数)
- [2.2.3 后处理](#223) - [2.2.3 后处理](#223-后处理)
- [2.2.4 蒸馏指标计算](#224) - [2.2.4 蒸馏指标计算](#224-蒸馏指标计算)
- [2.2.5 检测蒸馏模型Fine-tune](#225) - [2.2.5 检测蒸馏模型finetune](#225-检测蒸馏模型finetune)
<a name="1"></a> <a name="1"></a>
## 1. 简介 ## 1. 简介
...@@ -69,7 +69,7 @@ PaddleOCR中集成了知识蒸馏的算法,具体地,有以下几个主要 ...@@ -69,7 +69,7 @@ PaddleOCR中集成了知识蒸馏的算法,具体地,有以下几个主要
```yaml ```yaml
Architecture: Architecture:
model_type: &model_type "rec" # 模型类别,rec、det等,每个子网络的的模型相同 model_type: &model_type "rec" # 模型类别,rec、det等,每个子网络的模型类别都与
name: DistillationModel # 结构名称,蒸馏任务中,为DistillationModel,用于构建对应的结构 name: DistillationModel # 结构名称,蒸馏任务中,为DistillationModel,用于构建对应的结构
algorithm: Distillation # 算法名称 algorithm: Distillation # 算法名称
Models: # 模型,包含子网络的配置信息 Models: # 模型,包含子网络的配置信息
......
...@@ -3,31 +3,30 @@ ...@@ -3,31 +3,30 @@
本文提供了PaddleOCR文本识别任务的全流程指南,包括数据准备、模型训练、调优、评估、预测,各个阶段的详细说明: 本文提供了PaddleOCR文本识别任务的全流程指南,包括数据准备、模型训练、调优、评估、预测,各个阶段的详细说明:
- [1. 数据准备](#1-数据准备) - [1. 数据准备](#1-数据准备)
* [1.1 自定义数据集](#11-自定义数据集) - [1.1. 准备数据集](#11-准备数据集)
* [1.2 数据下载](#12-数据下载) - [1.2. 自定义数据集](#12-自定义数据集)
* [1.3 字典](#13-字典) - [1.3. 数据下载](#13-数据下载)
* [1.4 添加空格类别](#14-添加空格类别) - [1.4. 字典](#14-字典)
* [1.5 数据增强](#15-数据增强) - [1.5. 添加空格类别](#15-添加空格类别)
- [1.6. 数据增强](#16-数据增强)
- [2. 开始训练](#2-开始训练) - [2. 开始训练](#2-开始训练)
* [2.1 启动训练](#21-----) - [2.1. 启动训练](#21-启动训练)
* [2.2 断点训练](#22-----) - [2.2. 断点训练](#22-断点训练)
* [2.3 更换Backbone 训练](#23---backbone---) - [2.3. 更换Backbone 训练](#23-更换backbone-训练)
* [2.4 混合精度训练](#24---amp---) - [2.4. 混合精度训练](#24-混合精度训练)
* [2.5 分布式训练](#25---fleet---) - [2.5. 分布式训练](#25-分布式训练)
* [2.6 知识蒸馏训练](#26---distill---) - [2.6. 知识蒸馏训练](#26-知识蒸馏训练)
* [2.7 多语言模型训练](#27-多语言模型训练) - [2.7. 多语言模型训练](#27-多语言模型训练)
* [2.8 其他训练环境(Windows/macOS/Linux DCU)](#28---other---) - [2.8. 其他训练环境](#28-其他训练环境)
- [3. 模型评估与预测](#3--------) - [3. 模型评估与预测](#3-模型评估与预测)
* [3.1 指标评估](#31-----) - [3.1. 指标评估](#31-指标评估)
* [3.2 测试识别效果](#32-------) - [3.2. 测试识别效果](#32-测试识别效果)
- [4. 模型导出与预测](#4--------) - [4. 模型导出与预测](#4-模型导出与预测)
- [5. FAQ](#5-faq) - [5. FAQ](#5-faq)
<a name="1-数据准备"></a>
# 1. 数据准备 # 1. 数据准备
### 1.1 准备数据集 ## 1.1. 准备数据集
PaddleOCR 支持两种数据格式: PaddleOCR 支持两种数据格式:
- `lmdb` 用于训练以lmdb格式存储的数据集(LMDBDataSet); - `lmdb` 用于训练以lmdb格式存储的数据集(LMDBDataSet);
...@@ -42,8 +41,8 @@ ln -sf <path/to/dataset> <path/to/paddle_ocr>/train_data/dataset ...@@ -42,8 +41,8 @@ ln -sf <path/to/dataset> <path/to/paddle_ocr>/train_data/dataset
mklink /d <path/to/paddle_ocr>/train_data/dataset <path/to/dataset> mklink /d <path/to/paddle_ocr>/train_data/dataset <path/to/dataset>
``` ```
<a name="11-自定义数据集"></a> ## 1.2. 自定义数据集
## 1.1 自定义数据集
下面以通用数据集为例, 介绍如何准备数据集: 下面以通用数据集为例, 介绍如何准备数据集:
* 训练集 * 训练集
...@@ -98,8 +97,7 @@ train_data/rec/train/word_002.jpg 用科技让复杂的世界更简单 ...@@ -98,8 +97,7 @@ train_data/rec/train/word_002.jpg 用科技让复杂的世界更简单
| ... | ...
``` ```
<a name="12-数据下载"></a> ## 1.3. 数据下载
## 1.2 数据下载
- ICDAR2015 - ICDAR2015
...@@ -130,9 +128,7 @@ python gen_label.py --mode="rec" --input_path="{path/of/origin/label}" --output_ ...@@ -130,9 +128,7 @@ python gen_label.py --mode="rec" --input_path="{path/of/origin/label}" --output_
* [百度网盘](https://pan.baidu.com/s/1bS_u207Rm7YbY33wOECKDA) 提取码:frgi * [百度网盘](https://pan.baidu.com/s/1bS_u207Rm7YbY33wOECKDA) 提取码:frgi
* [google drive](https://drive.google.com/file/d/18cSWX7wXSy4G0tbKJ0d9PuIaiwRLHpjA/view) * [google drive](https://drive.google.com/file/d/18cSWX7wXSy4G0tbKJ0d9PuIaiwRLHpjA/view)
## 1.4. 字典
<a name="13-字典"></a>
## 1.3 字典
最后需要提供一个字典({word_dict_name}.txt),使模型在训练时,可以将所有出现的字符映射为字典的索引。 最后需要提供一个字典({word_dict_name}.txt),使模型在训练时,可以将所有出现的字符映射为字典的索引。
...@@ -175,13 +171,11 @@ PaddleOCR内置了一部分字典,可以按需使用。 ...@@ -175,13 +171,11 @@ PaddleOCR内置了一部分字典,可以按需使用。
如需自定义dic文件,请在 `configs/rec/PP-OCRv3/en_PP-OCRv3_rec.yml` 中添加 `character_dict_path` 字段, 指向您的字典路径。 如需自定义dic文件,请在 `configs/rec/PP-OCRv3/en_PP-OCRv3_rec.yml` 中添加 `character_dict_path` 字段, 指向您的字典路径。
<a name="支持空格"></a> ## 1.5. 添加空格类别
## 1.4 添加空格类别
如果希望支持识别"空格"类别, 请将yml文件中的 `use_space_char` 字段设置为 `True` 如果希望支持识别"空格"类别, 请将yml文件中的 `use_space_char` 字段设置为 `True`
<a name="数据增强"></a> ## 1.6. 数据增强
## 1.5 数据增强
PaddleOCR提供了多种数据增强方式,默认配置文件中已经添加了数据增广。 PaddleOCR提供了多种数据增强方式,默认配置文件中已经添加了数据增广。
...@@ -191,13 +185,11 @@ PaddleOCR提供了多种数据增强方式,默认配置文件中已经添加 ...@@ -191,13 +185,11 @@ PaddleOCR提供了多种数据增强方式,默认配置文件中已经添加
*由于OpenCV的兼容性问题,扰动操作暂时只支持Linux* *由于OpenCV的兼容性问题,扰动操作暂时只支持Linux*
<a name="开始训练"></a>
# 2. 开始训练 # 2. 开始训练
PaddleOCR提供了训练脚本、评估脚本和预测脚本,本节将以 PP-OCRv3 英文识别模型为例: PaddleOCR提供了训练脚本、评估脚本和预测脚本,本节将以 PP-OCRv3 英文识别模型为例:
<a name="启动训练"></a> ## 2.1. 启动训练
## 2.1 启动训练
首先下载pretrain model,您可以下载训练好的模型在 icdar2015 数据上进行finetune 首先下载pretrain model,您可以下载训练好的模型在 icdar2015 数据上进行finetune
...@@ -297,9 +289,7 @@ Eval: ...@@ -297,9 +289,7 @@ Eval:
``` ```
**注意,预测/评估时的配置文件请务必与训练一致。** **注意,预测/评估时的配置文件请务必与训练一致。**
## 2.2. 断点训练
<a name="断点训练"></a>
## 2.2 断点训练
如果训练程序中断,如果希望加载训练中断的模型从而恢复训练,可以通过指定Global.checkpoints指定要加载的模型路径: 如果训练程序中断,如果希望加载训练中断的模型从而恢复训练,可以通过指定Global.checkpoints指定要加载的模型路径:
```shell ```shell
...@@ -308,8 +298,7 @@ python3 tools/train.py -c configs/rec/PP-OCRv3/en_PP-OCRv3_rec.yml -o Global.che ...@@ -308,8 +298,7 @@ python3 tools/train.py -c configs/rec/PP-OCRv3/en_PP-OCRv3_rec.yml -o Global.che
**注意**`Global.checkpoints`的优先级高于`Global.pretrained_model`的优先级,即同时指定两个参数时,优先加载`Global.checkpoints`指定的模型,如果`Global.checkpoints`指定的模型路径有误,会加载`Global.pretrained_model`指定的模型。 **注意**`Global.checkpoints`的优先级高于`Global.pretrained_model`的优先级,即同时指定两个参数时,优先加载`Global.checkpoints`指定的模型,如果`Global.checkpoints`指定的模型路径有误,会加载`Global.pretrained_model`指定的模型。
<a name="23---backbone---"></a> ## 2.3. 更换Backbone 训练
## 2.3 更换Backbone 训练
PaddleOCR将网络划分为四部分,分别在[ppocr/modeling](../../ppocr/modeling)下。 进入网络的数据将按照顺序(transforms->backbones->necks->heads)依次通过这四个部分。 PaddleOCR将网络划分为四部分,分别在[ppocr/modeling](../../ppocr/modeling)下。 进入网络的数据将按照顺序(transforms->backbones->necks->heads)依次通过这四个部分。
...@@ -355,8 +344,7 @@ args1: args1 ...@@ -355,8 +344,7 @@ args1: args1
**注意**:如果要更换网络的其他模块,可以参考[文档](./add_new_algorithm.md) **注意**:如果要更换网络的其他模块,可以参考[文档](./add_new_algorithm.md)
<a name="24---amp---"></a> ## 2.4. 混合精度训练
## 2.4 混合精度训练
如果您想进一步加快训练速度,可以使用[自动混合精度训练](https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/01_paddle2.0_introduction/basic_concept/amp_cn.html), 以单机单卡为例,命令如下: 如果您想进一步加快训练速度,可以使用[自动混合精度训练](https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/01_paddle2.0_introduction/basic_concept/amp_cn.html), 以单机单卡为例,命令如下:
...@@ -366,8 +354,7 @@ python3 tools/train.py -c configs/rec/PP-OCRv3/en_PP-OCRv3_rec.yml \ ...@@ -366,8 +354,7 @@ python3 tools/train.py -c configs/rec/PP-OCRv3/en_PP-OCRv3_rec.yml \
Global.use_amp=True Global.scale_loss=1024.0 Global.use_dynamic_loss_scaling=True Global.use_amp=True Global.scale_loss=1024.0 Global.use_dynamic_loss_scaling=True
``` ```
<a name="26---fleet---"></a> ## 2.5. 分布式训练
## 2.5 分布式训练
多机多卡训练时,通过 `--ips` 参数设置使用的机器IP地址,通过 `--gpus` 参数设置使用的GPU ID: 多机多卡训练时,通过 `--ips` 参数设置使用的机器IP地址,通过 `--gpus` 参数设置使用的GPU ID:
...@@ -378,15 +365,11 @@ python3 -m paddle.distributed.launch --ips="xx.xx.xx.xx,xx.xx.xx.xx" --gpus '0,1 ...@@ -378,15 +365,11 @@ python3 -m paddle.distributed.launch --ips="xx.xx.xx.xx,xx.xx.xx.xx" --gpus '0,1
**注意:** 采用多机多卡训练时,需要替换上面命令中的ips值为您机器的地址,机器之间需要能够相互ping通。另外,训练时需要在多个机器上分别启动命令。查看机器ip地址的命令为`ifconfig`。 **注意:** 采用多机多卡训练时,需要替换上面命令中的ips值为您机器的地址,机器之间需要能够相互ping通。另外,训练时需要在多个机器上分别启动命令。查看机器ip地址的命令为`ifconfig`。
## 2.6. 知识蒸馏训练
<a name="26---distill---"></a>
## 2.6 知识蒸馏训练
PaddleOCR支持了基于知识蒸馏的文本识别模型训练过程,更多内容可以参考[知识蒸馏说明文档](./knowledge_distillation.md)。 PaddleOCR支持了基于知识蒸馏的文本识别模型训练过程,更多内容可以参考[知识蒸馏说明文档](./knowledge_distillation.md)。
## 2.7. 多语言模型训练
<a name="27-多语言模型训练"></a>
## 2.7 多语言模型训练
PaddleOCR目前已支持80种(除中文外)语种识别,`configs/rec/multi_languages` 路径下提供了一个多语言的配置文件模版: [rec_multi_language_lite_train.yml](../../configs/rec/multi_language/rec_multi_language_lite_train.yml)。 PaddleOCR目前已支持80种(除中文外)语种识别,`configs/rec/multi_languages` 路径下提供了一个多语言的配置文件模版: [rec_multi_language_lite_train.yml](../../configs/rec/multi_language/rec_multi_language_lite_train.yml)。
...@@ -442,8 +425,7 @@ Eval: ...@@ -442,8 +425,7 @@ Eval:
... ...
``` ```
<a name="28---other---"></a> ## 2.8. 其他训练环境
## 2.8 其他训练环境
- Windows GPU/CPU - Windows GPU/CPU
在Windows平台上与Linux平台略有不同: 在Windows平台上与Linux平台略有不同:
...@@ -456,12 +438,9 @@ Windows平台只支持`单卡`的训练与预测,指定GPU进行训练`set CUD ...@@ -456,12 +438,9 @@ Windows平台只支持`单卡`的训练与预测,指定GPU进行训练`set CUD
- Linux DCU - Linux DCU
DCU设备上运行需要设置环境变量 `export HIP_VISIBLE_DEVICES=0,1,2,3`,其余训练评估预测命令与Linux GPU完全相同。 DCU设备上运行需要设置环境变量 `export HIP_VISIBLE_DEVICES=0,1,2,3`,其余训练评估预测命令与Linux GPU完全相同。
<a name="3--------"></a>
# 3. 模型评估与预测 # 3. 模型评估与预测
<a name="31-----"></a> ## 3.1. 指标评估
## 3.1 指标评估
训练中模型参数默认保存在`Global.save_model_dir`目录下。在评估指标时,需要设置`Global.checkpoints`指向保存的参数文件。评估数据集可以通过 `configs/rec/PP-OCRv3/en_PP-OCRv3_rec.yml` 修改Eval中的 `label_file_path` 设置。 训练中模型参数默认保存在`Global.save_model_dir`目录下。在评估指标时,需要设置`Global.checkpoints`指向保存的参数文件。评估数据集可以通过 `configs/rec/PP-OCRv3/en_PP-OCRv3_rec.yml` 修改Eval中的 `label_file_path` 设置。
...@@ -471,14 +450,13 @@ DCU设备上运行需要设置环境变量 `export HIP_VISIBLE_DEVICES=0,1,2,3` ...@@ -471,14 +450,13 @@ DCU设备上运行需要设置环境变量 `export HIP_VISIBLE_DEVICES=0,1,2,3`
python3 -m paddle.distributed.launch --gpus '0' tools/eval.py -c configs/rec/PP-OCRv3/en_PP-OCRv3_rec.yml -o Global.checkpoints={path/to/weights}/best_accuracy python3 -m paddle.distributed.launch --gpus '0' tools/eval.py -c configs/rec/PP-OCRv3/en_PP-OCRv3_rec.yml -o Global.checkpoints={path/to/weights}/best_accuracy
``` ```
<a name="32-------"></a> ## 3.2. 测试识别效果
## 3.2 测试识别效果
使用 PaddleOCR 训练好的模型,可以通过以下脚本进行快速预测。 使用 PaddleOCR 训练好的模型,可以通过以下脚本进行快速预测。
默认预测图片存储在 `infer_img` 里,通过 `-o Global.checkpoints` 加载训练好的参数文件: 默认预测图片存储在 `infer_img` 里,通过 `-o Global.checkpoints` 加载训练好的参数文件:
根据配置文件中设置的 `save_model_dir` 和 `save_epoch_step` 字段,会有以下几种参数被保存下来: 根据配置文件中设置的 `save_model_dir` 和 `save_epoch_step` 字段,会有以下几种参数被保存下来:
``` ```
output/rec/ output/rec/
...@@ -531,8 +509,6 @@ infer_img: doc/imgs_words/ch/word_1.jpg ...@@ -531,8 +509,6 @@ infer_img: doc/imgs_words/ch/word_1.jpg
result: ('韩国小馆', 0.997218) result: ('韩国小馆', 0.997218)
``` ```
<a name="4--------"></a>
# 4. 模型导出与预测 # 4. 模型导出与预测
inference 模型(`paddle.jit.save`保存的模型) inference 模型(`paddle.jit.save`保存的模型)
...@@ -570,8 +546,6 @@ inference/en_PP-OCRv3_rec/ ...@@ -570,8 +546,6 @@ inference/en_PP-OCRv3_rec/
python3 tools/infer/predict_rec.py --image_dir="./doc/imgs_words_en/word_336.png" --rec_model_dir="./your inference model" --rec_image_shape="3, 48, 320" --rec_char_dict_path="your text dict path" python3 tools/infer/predict_rec.py --image_dir="./doc/imgs_words_en/word_336.png" --rec_model_dir="./your inference model" --rec_image_shape="3, 48, 320" --rec_char_dict_path="your text dict path"
``` ```
<a name="5-faq"></a>
# 5. FAQ # 5. FAQ
Q1: 训练模型转inference 模型之后预测效果不一致? Q1: 训练模型转inference 模型之后预测效果不一致?
......
...@@ -4,16 +4,16 @@ ...@@ -4,16 +4,16 @@
同时会简单介绍PaddleOCR模型训练数据的组成部分,以及如何在垂类场景中准备数据finetune模型。 同时会简单介绍PaddleOCR模型训练数据的组成部分,以及如何在垂类场景中准备数据finetune模型。
- [1.配置文件说明](#配置文件) - [1. 配置文件说明](#1-配置文件说明)
- [2. 基本概念](#基本概念) - [2. 基本概念](#2-基本概念)
* [2.1 学习率](#学习率) - [2.1 学习率](#21-学习率)
* [2.2 正则化](#正则化) - [2.2 正则化](#22-正则化)
* [2.3 评估指标](#评估指标) - [2.3 评估指标](#23-评估指标)
- [3. 数据与垂类场景](#数据与垂类场景) - [3. 数据与垂类场景](#3-数据与垂类场景)
* [3.1 训练数据](#训练数据) - [3.1 训练数据](#31-训练数据)
* [3.2 垂类场景](#垂类场景) - [3.2 垂类场景](#32-垂类场景)
* [3.3 自己构建数据集](#自己构建数据集) - [3.3 自己构建数据集](#33-自己构建数据集)
* [4. 常见问题](#常见问题) - [4. 常见问题](#4-常见问题)
<a name="配置文件"></a> <a name="配置文件"></a>
...@@ -68,7 +68,7 @@ Optimizer: ...@@ -68,7 +68,7 @@ Optimizer:
(2)识别阶段: 字符识别准确率,即正确识别的文本行占标注的文本行数量的比例,只有整行文本识别对才算正确识别。 (2)识别阶段: 字符识别准确率,即正确识别的文本行占标注的文本行数量的比例,只有整行文本识别对才算正确识别。
(3)端到端统计: 端对端召回率:准确检测并正确识别文本行在全部标注文本行的占比; 端到端准确率:准确检测并正确识别文本行在 检测到的文本行数量 的占比; 准确检测的标准是检测框与标注框的IOU大于某个阈值,正确识别的检测框中的文本与标注的文本相同。 (3)端到端统计: 端对端召回率:准确检测并正确识别文本行在全部标注文本行的占比; 端到端准确率:准确检测并正确识别文本行在 检测到的文本行数量 的占比; 准确检测的标准是检测框与标注框的IOU大于某个阈值,正确识别的检测框中的文本与标注的文本相同。
<a name="数据与垂类场景"></a> <a name="数据与垂类场景"></a>
......
# Text Recognition # Text Recognition
- [1. Data Preparation](#DATA_PREPARATION) - [1. Data Preparation](#DATA_PREPARATION)
* [1.1 Costom Dataset](#Costom_Dataset) * [1.1 Custom Dataset](#Custom_Dataset)
* [1.2 Dataset Download](#Dataset_download) * [1.2 Dataset Download](#Dataset_download)
* [1.3 Dictionary](#Dictionary) * [1.3 Dictionary](#Dictionary)
* [1.4 Add Space Category](#Add_space_category) * [1.4 Add Space Category](#Add_space_category)
......
...@@ -164,7 +164,7 @@ ...@@ -164,7 +164,7 @@
"\n", "\n",
"<br>\n", "<br>\n",
"\n", "\n",
"一般的KIE方法基于命名实体识别(Named Entity Recognition,NER)[4]来研究,但是这类方法只利用了图像中的文本信息,缺少对视觉和结构信息的使用,因此精度不高。在此基础上,近几年的方法都开始将视觉和结构信息与文本信息融合到一起,按照对多模态信息进行融合时所采用的原理可以将这些方法分为下面四种:\n", "一般的KIE方法基于命名实体识别(Named Entity Recognition,NER)[4]来研究,但是这类方法只利用了图像中的文本信息,缺少对视觉和结构信息的使用,因此精度不高。在此基础上,近几年的方法都开始将视觉和结构信息与文本信息融合到一起,按照对多模态信息进行融合时所采用的原理可以将这些方法分为下面四种:\n",
"\n", "\n",
"- 基于Grid的方法\n", "- 基于Grid的方法\n",
"- 基于Token的方法\n", "- 基于Token的方法\n",
......
...@@ -2133,7 +2133,7 @@ ...@@ -2133,7 +2133,7 @@
"collapsed": false "collapsed": false
}, },
"source": [ "source": [
"根据配置文件中设置的 `save_model_dir` 字段,会有以下几种参数被保存下来:\n", "根据配置文件中设置的 `save_model_dir` 字段,会有以下几种参数被保存下来:\n",
"\n", "\n",
"```\n", "```\n",
"output/rec/ic15\n", "output/rec/ic15\n",
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
"\n", "\n",
"## 1 背景介绍\n", "## 1 背景介绍\n",
"\n", "\n",
"文本识别是OCR(Optical Character Recognition)的一个子任务,其任务为识别一个固定区域的文本内容。在OCR的两阶段方法里,它接在文本检测后面,将图像信息转换为文字信息。\n", "文本识别是OCR(Optical Character Recognition)的一个子任务,其任务为识别一个固定区域的文本内容。在OCR的两阶段方法里,它接在文本检测后面,将图像信息转换为文字信息。\n",
"\n", "\n",
"具体地,模型输入一张定位好的文本行,由模型预测出图片中的文字内容和置信度,可视化结果如下图所示:\n", "具体地,模型输入一张定位好的文本行,由模型预测出图片中的文字内容和置信度,可视化结果如下图所示:\n",
"\n", "\n",
......
...@@ -2915,7 +2915,7 @@ ...@@ -2915,7 +2915,7 @@
"\n", "\n",
"```yaml\n", "```yaml\n",
"Architecture:\n", "Architecture:\n",
" model_type: &model_type \"rec\" # 模型类别,rec、det等,每个子网络的模型类别都与\n", " model_type: &model_type \"rec\" # 模型类别,rec、det等,每个子网络的模型类别都与\n",
" name: DistillationModel # 结构名称,蒸馏任务中,为DistillationModel,用于构建对应的结构\n", " name: DistillationModel # 结构名称,蒸馏任务中,为DistillationModel,用于构建对应的结构\n",
" algorithm: Distillation # 算法名称\n", " algorithm: Distillation # 算法名称\n",
" Models: # 模型,包含子网络的配置信息\n", " Models: # 模型,包含子网络的配置信息\n",
...@@ -2915,7 +2915,7 @@ ...@@ -2915,7 +2915,7 @@
"\n", "\n",
"```yaml\n", "```yaml\n",
"Architecture:\n", "Architecture:\n",
" model_type: &model_type \"rec\" # 模型类别,rec、det等,每个子网络的模型类别都与\n", " model_type: &model_type \"rec\" # 模型类别,rec、det等,每个子网络的模型类别都与\n",
" name: DistillationModel # 结构名称,蒸馏任务中,为DistillationModel,用于构建对应的结构\n", " name: DistillationModel # 结构名称,蒸馏任务中,为DistillationModel,用于构建对应的结构\n",
" algorithm: Distillation # 算法名称\n", " algorithm: Distillation # 算法名称\n",
" Models: # 模型,包含子网络的配置信息\n", " Models: # 模型,包含子网络的配置信息\n",
...@@ -327,7 +327,7 @@ ...@@ -327,7 +327,7 @@
"<img src=\"https://ai-studio-static-online.cdn.bcebos.com/899470ba601349fbbc402a4c83e6cdaee08aaa10b5004977b1f684f346ebe31f\" width=\"800\"/></center>\n", "<img src=\"https://ai-studio-static-online.cdn.bcebos.com/899470ba601349fbbc402a4c83e6cdaee08aaa10b5004977b1f684f346ebe31f\" width=\"800\"/></center>\n",
"<center>图 18: SER,RE任务示例</center>\n", "<center>图 18: SER,RE任务示例</center>\n",
"\n", "\n",
"一般的KIE方法基于命名实体识别(Named Entity Recognition,NER)[4]来研究,但是这类方法只利用了图像中的文本信息,缺少对视觉和结构信息的使用,因此精度不高。在此基础上,近几年的方法都开始将视觉和结构信息与文本信息融合到一起,按照对多模态信息进行融合时所采用的原理可以将这些方法分为下面三种:\n", "一般的KIE方法基于命名实体识别(Named Entity Recognition,NER)[4]来研究,但是这类方法只利用了图像中的文本信息,缺少对视觉和结构信息的使用,因此精度不高。在此基础上,近几年的方法都开始将视觉和结构信息与文本信息融合到一起,按照对多模态信息进行融合时所采用的原理可以将这些方法分为下面三种:\n",
"\n", "\n",
"1. 基于Grid的方法\n", "1. 基于Grid的方法\n",
"1. 基于Token的方法\n", "1. 基于Token的方法\n",
......
...@@ -136,7 +136,7 @@ ...@@ -136,7 +136,7 @@
"<br><center>Figure 11: LOMO frame diagram</center>\n", "<br><center>Figure 11: LOMO frame diagram</center>\n",
"\n", "\n",
"\n", "\n",
"Contournet [18] is based on the proposed modeling of text contour points to obtain a curved text detection frame. This method first uses Adaptive-RPN to obtain the proposal features of the text area, and then designs a local orthogonal texture perception LOTM module to learn horizontal and vertical textures. The feature is represented by contour points. Finally, by considering the feature responses in two orthogonal directions at the same time, the Point Re-Scoring algorithm can effectively filter out the prediction of strong unidirectional or weak orthogonal activation, and the final text contour can be used as a A group of high-quality contour points are shown.\n", "Contournet [18] is based on the proposed modeling of text contour points to obtain a curved text detection frame. This method first uses Adaptive-RPN to obtain the proposal features of the text area, and then designs a local orthogonal texture perception LOTM module to learn horizontal and vertical textures. The feature is represented by contour points. Finally, by considering the feature responses in two orthogonal directions at the same time, the Point Re-Scoring algorithm can effectively filter out the prediction of strong unidirectional or weak orthogonal activation, and the final text contour can be used as a group of high-quality contour points are shown.\n",
"<center><img src=\"https://ai-studio-static-online.cdn.bcebos.com/1f59ab5db899412f8c70ba71e8dd31d4ea9480d6511f498ea492c97dd2152384\"\n", "<center><img src=\"https://ai-studio-static-online.cdn.bcebos.com/1f59ab5db899412f8c70ba71e8dd31d4ea9480d6511f498ea492c97dd2152384\"\n",
"width=\"600\" ></center>\n", "width=\"600\" ></center>\n",
"<br><center>Figure 12: Contournet frame diagram</center>\n", "<br><center>Figure 12: Contournet frame diagram</center>\n",
......
...@@ -82,7 +82,7 @@ def polygon_iou(poly1, poly2): ...@@ -82,7 +82,7 @@ def polygon_iou(poly1, poly2):
except shapely.geos.TopologicalError: except shapely.geos.TopologicalError:
# except Exception as e: # except Exception as e:
# print(e) # print(e)
print('shapely.geos.TopologicalError occured, iou set to 0') print('shapely.geos.TopologicalError occurred, iou set to 0')
iou = 0 iou = 0
return iou return iou
......
...@@ -59,7 +59,7 @@ def polygon_iou(poly1, poly2): ...@@ -59,7 +59,7 @@ def polygon_iou(poly1, poly2):
except shapely.geos.TopologicalError: except shapely.geos.TopologicalError:
# except Exception as e: # except Exception as e:
# print(e) # print(e)
print('shapely.geos.TopologicalError occured, iou set to 0') print('shapely.geos.TopologicalError occurred, iou set to 0')
iou = 0 iou = 0
return iou return iou
......
...@@ -133,7 +133,7 @@ def main(): ...@@ -133,7 +133,7 @@ def main():
else: else:
config["Architecture"]["Models"][key]["Head"][ config["Architecture"]["Models"][key]["Head"][
"out_channels"] = char_num "out_channels"] = char_num
# just one final tensor needs to to exported for inference # just one final tensor needs to exported for inference
config["Architecture"]["Models"][key][ config["Architecture"]["Models"][key][
"return_all_feats"] = False "return_all_feats"] = False
elif config['Architecture']['Head'][ elif config['Architecture']['Head'][
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册