diff --git a/PPOCRLabel/PPOCRLabel.py b/PPOCRLabel/PPOCRLabel.py index f09a998a9dcbddb3d1239ec61c7a194751362618..523661b635ed4eaaf8d2b4ac05aaf60b2abc8541 100644 --- a/PPOCRLabel/PPOCRLabel.py +++ b/PPOCRLabel/PPOCRLabel.py @@ -1492,7 +1492,7 @@ class MainWindow(QMainWindow): event.ignore() else: 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: settings[SETTING_FILENAME] = self.filePath if self.filePath else '' else: diff --git a/deploy/cpp_infer/readme.md b/deploy/cpp_infer/readme.md index d37a708bd5e2f60c91e06a2745f1c2257630571a..ddd15d49558454a5ffb0731665b118c929e607f0 100644 --- a/deploy/cpp_infer/readme.md +++ b/deploy/cpp_infer/readme.md @@ -104,7 +104,7 @@ opencv3/ 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 * 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. diff --git a/deploy/cpp_infer/readme_ch.md b/deploy/cpp_infer/readme_ch.md index 9462eb705c627bd33b783d627c0b4cefcba17879..e5a4869eca1d35765013e63011c680e59b33ac00 100644 --- a/deploy/cpp_infer/readme_ch.md +++ b/deploy/cpp_infer/readme_ch.md @@ -12,7 +12,7 @@ - [2.3 运行demo](#23) - [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模型部署。 diff --git a/deploy/slim/prune/README_en.md b/deploy/slim/prune/README_en.md index ceb9e204a74b5460d74766e8df154d22f39bd843..a2ee2cba48b6c4cf9c00630504bbb30bc932499a 100644 --- a/deploy/slim/prune/README_en.md +++ b/deploy/slim/prune/README_en.md @@ -1,7 +1,7 @@ # 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. [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. diff --git a/doc/doc_ch/FAQ.md b/doc/doc_ch/FAQ.md index ef7394ee182aec7168a66511e376243dc5f0a8aa..24f8a3e92be1c003ec7c37b74d14f4ae4117086a 100644 --- a/doc/doc_ch/FAQ.md +++ b/doc/doc_ch/FAQ.md @@ -114,7 +114,7 @@ A: PGNet不需要字符级别的标注,NMS操作以及ROI操作。同时提出 (3)端到端统计: 端对端召回率:准确检测并正确识别文本行在全部标注文本行的占比; 端到端准确率:准确检测并正确识别文本行在 检测到的文本行数量 的占比; -准确检测的标准是检测框与标注框的IOU大于某个阈值,正确识别的的检测框中的文本与标注的文本相同。 +准确检测的标准是检测框与标注框的IOU大于某个阈值,正确识别的检测框中的文本与标注的文本相同。 diff --git a/doc/doc_ch/algorithm_inference.md b/doc/doc_ch/algorithm_inference.md index 0222dec85a0be0973b2546cbb6e5347852242093..d8457ea364d9875d9f0796283d42c0b4b10aaa53 100755 --- a/doc/doc_ch/algorithm_inference.md +++ b/doc/doc_ch/algorithm_inference.md @@ -296,7 +296,7 @@ Predicts of ./doc/imgs_words_en/word_336.png:('super', 0.9999073) **注意**:由于上述模型是参考[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"。 diff --git a/doc/doc_ch/algorithm_rec_crnn.md b/doc/doc_ch/algorithm_rec_crnn.md index 70aadd3d684e40ebd1d6e627a26b95b35b544d75..490485ec10311b63032fadad599d764ea67e68f9 100644 --- a/doc/doc_ch/algorithm_rec_crnn.md +++ b/doc/doc_ch/algorithm_rec_crnn.md @@ -94,7 +94,7 @@ Predicts of ./doc/imgs_words_en/word_336.png:('super', 0.9999073) **注意**:由于上述模型是参考[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"。 diff --git a/doc/doc_ch/algorithm_rec_seed.md b/doc/doc_ch/algorithm_rec_seed.md index 94c877ffac3f9716786cdf6618d335511d38325a..710e92272dc3169bf373d273534441a15c6be01c 100644 --- a/doc/doc_ch/algorithm_rec_seed.md +++ b/doc/doc_ch/algorithm_rec_seed.md @@ -78,23 +78,23 @@ python3 tools/infer_rec.py -c configs/rec/rec_resnet_stn_bilstm_att.yml -o Globa ### 4.1 Python推理 -comming soon +coming soon ### 4.2 C++推理 -comming soon +coming soon ### 4.3 Serving服务化部署 -comming soon +coming soon ### 4.4 更多推理部署 -comming soon +coming soon ## 5. FAQ diff --git a/doc/doc_ch/algorithm_rec_starnet.md b/doc/doc_ch/algorithm_rec_starnet.md index c9d7706988763a8ac257129ab54915afe11250ac..c1ca761a0780b6bb8d15c12c820902c27d11d029 100644 --- a/doc/doc_ch/algorithm_rec_starnet.md +++ b/doc/doc_ch/algorithm_rec_starnet.md @@ -94,7 +94,7 @@ Predicts of ./doc/imgs_words_en/word_336.png:('super', 0.9999073) **注意**:由于上述模型是参考[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"。 diff --git a/doc/doc_ch/benchmark.md b/doc/doc_ch/benchmark.md index 39b9724abe04494c3e61f54597c64400a132e30b..bd11838a5ac2e09c1102f50ef0b1f47b9ddef6ef 100644 --- a/doc/doc_ch/benchmark.md +++ b/doc/doc_ch/benchmark.md @@ -13,7 +13,7 @@ 说明: -- 检测输入图像的的长边尺寸是960。 +- 检测输入图像的长边尺寸是960。 - 评估耗时阶段为图像预测耗时,不包括图像的预处理和后处理。 - `Intel至强6148`为服务器端CPU型号,测试中使用Intel MKL-DNN 加速。 - `骁龙855`为移动端处理平台型号。 diff --git a/doc/doc_ch/config.md b/doc/doc_ch/config.md index 3c62acea7734ab629c71d515127aff4fcfb62d34..41ba8c1f7bd7b9032c531720d2db3817d9a47233 100644 --- a/doc/doc_ch/config.md +++ b/doc/doc_ch/config.md @@ -94,7 +94,7 @@ | name | 网络loss类名 | CTCLoss | 目前支持`CTCLoss`,`DBLoss`,`ClsLoss` | | balance_loss | DBLossloss中是否对正负样本数量进行均衡(使用OHEM) | True | \ | | 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 | \ | | beta | DBLossloss中threshold_map_loss的系数 | 10 | \ | diff --git a/doc/doc_ch/knowledge_distillation.md b/doc/doc_ch/knowledge_distillation.md index eba2ff90249a6d949abf2cacb132f42269c9760d..76ab5e62e0136bb8707a51537bf6693fc5687047 100644 --- a/doc/doc_ch/knowledge_distillation.md +++ b/doc/doc_ch/knowledge_distillation.md @@ -1,23 +1,23 @@ # 知识蒸馏 -+ [知识蒸馏](#0) - + [1. 简介](#1) - - [1.1 知识蒸馏介绍](#11) - - [1.2 PaddleOCR知识蒸馏简介](#12) - + [2. 配置文件解析](#2) - + [2.1 识别配置文件解析](#21) - - [2.1.1 模型结构](#211) - - [2.1.2 损失函数](#212) - - [2.1.3 后处理](#213) - - [2.1.4 指标计算](#214) - - [2.1.5 蒸馏模型微调](#215) - + [2.2 检测配置文件解析](#22) - - [2.2.1 模型结构](#221) - - [2.2.2 损失函数](#222) - - [2.2.3 后处理](#223) - - [2.2.4 蒸馏指标计算](#224) - - [2.2.5 检测蒸馏模型Fine-tune](#225) +- [知识蒸馏](#知识蒸馏) + - [1. 简介](#1-简介) + - [1.1 知识蒸馏介绍](#11-知识蒸馏介绍) + - [1.2 PaddleOCR知识蒸馏简介](#12-paddleocr知识蒸馏简介) + - [2. 配置文件解析](#2-配置文件解析) + - [2.1 识别配置文件解析](#21-识别配置文件解析) + - [2.1.1 模型结构](#211-模型结构) + - [2.1.2 损失函数](#212-损失函数) + - [2.1.3 后处理](#213-后处理) + - [2.1.4 指标计算](#214-指标计算) + - [2.1.5 蒸馏模型微调](#215-蒸馏模型微调) + - [2.2 检测配置文件解析](#22-检测配置文件解析) + - [2.2.1 模型结构](#221-模型结构) + - [2.2.2 损失函数](#222-损失函数) + - [2.2.3 后处理](#223-后处理) + - [2.2.4 蒸馏指标计算](#224-蒸馏指标计算) + - [2.2.5 检测蒸馏模型finetune](#225-检测蒸馏模型finetune) ## 1. 简介 @@ -69,7 +69,7 @@ PaddleOCR中集成了知识蒸馏的算法,具体地,有以下几个主要 ```yaml Architecture: - model_type: &model_type "rec" # 模型类别,rec、det等,每个子网络的的模型相同 + model_type: &model_type "rec" # 模型类别,rec、det等,每个子网络的模型类别都与 name: DistillationModel # 结构名称,蒸馏任务中,为DistillationModel,用于构建对应的结构 algorithm: Distillation # 算法名称 Models: # 模型,包含子网络的配置信息 diff --git a/doc/doc_ch/recognition.md b/doc/doc_ch/recognition.md index 0b58beb0b008e28d7fecbef8fea84e3d8fcb5964..8457df69ff4c09b196b0f0f91271a92344217d75 100644 --- a/doc/doc_ch/recognition.md +++ b/doc/doc_ch/recognition.md @@ -3,31 +3,30 @@ 本文提供了PaddleOCR文本识别任务的全流程指南,包括数据准备、模型训练、调优、评估、预测,各个阶段的详细说明: - [1. 数据准备](#1-数据准备) - * [1.1 自定义数据集](#11-自定义数据集) - * [1.2 数据下载](#12-数据下载) - * [1.3 字典](#13-字典) - * [1.4 添加空格类别](#14-添加空格类别) - * [1.5 数据增强](#15-数据增强) + - [1.1. 准备数据集](#11-准备数据集) + - [1.2. 自定义数据集](#12-自定义数据集) + - [1.3. 数据下载](#13-数据下载) + - [1.4. 字典](#14-字典) + - [1.5. 添加空格类别](#15-添加空格类别) + - [1.6. 数据增强](#16-数据增强) - [2. 开始训练](#2-开始训练) - * [2.1 启动训练](#21-----) - * [2.2 断点训练](#22-----) - * [2.3 更换Backbone 训练](#23---backbone---) - * [2.4 混合精度训练](#24---amp---) - * [2.5 分布式训练](#25---fleet---) - * [2.6 知识蒸馏训练](#26---distill---) - * [2.7 多语言模型训练](#27-多语言模型训练) - * [2.8 其他训练环境(Windows/macOS/Linux DCU)](#28---other---) -- [3. 模型评估与预测](#3--------) - * [3.1 指标评估](#31-----) - * [3.2 测试识别效果](#32-------) -- [4. 模型导出与预测](#4--------) + - [2.1. 启动训练](#21-启动训练) + - [2.2. 断点训练](#22-断点训练) + - [2.3. 更换Backbone 训练](#23-更换backbone-训练) + - [2.4. 混合精度训练](#24-混合精度训练) + - [2.5. 分布式训练](#25-分布式训练) + - [2.6. 知识蒸馏训练](#26-知识蒸馏训练) + - [2.7. 多语言模型训练](#27-多语言模型训练) + - [2.8. 其他训练环境](#28-其他训练环境) +- [3. 模型评估与预测](#3-模型评估与预测) + - [3.1. 指标评估](#31-指标评估) + - [3.2. 测试识别效果](#32-测试识别效果) +- [4. 模型导出与预测](#4-模型导出与预测) - [5. FAQ](#5-faq) - - # 1. 数据准备 -### 1.1 准备数据集 +## 1.1. 准备数据集 PaddleOCR 支持两种数据格式: - `lmdb` 用于训练以lmdb格式存储的数据集(LMDBDataSet); @@ -42,8 +41,8 @@ ln -sf /train_data/dataset mklink /d /train_data/dataset ``` - -## 1.1 自定义数据集 +## 1.2. 自定义数据集 + 下面以通用数据集为例, 介绍如何准备数据集: * 训练集 @@ -98,8 +97,7 @@ train_data/rec/train/word_002.jpg 用科技让复杂的世界更简单 | ... ``` - -## 1.2 数据下载 +## 1.3. 数据下载 - ICDAR2015 @@ -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 * [google drive](https://drive.google.com/file/d/18cSWX7wXSy4G0tbKJ0d9PuIaiwRLHpjA/view) - - -## 1.3 字典 +## 1.4. 字典 最后需要提供一个字典({word_dict_name}.txt),使模型在训练时,可以将所有出现的字符映射为字典的索引。 @@ -175,13 +171,11 @@ PaddleOCR内置了一部分字典,可以按需使用。 如需自定义dic文件,请在 `configs/rec/PP-OCRv3/en_PP-OCRv3_rec.yml` 中添加 `character_dict_path` 字段, 指向您的字典路径。 - -## 1.4 添加空格类别 +## 1.5. 添加空格类别 如果希望支持识别"空格"类别, 请将yml文件中的 `use_space_char` 字段设置为 `True`。 - -## 1.5 数据增强 +## 1.6. 数据增强 PaddleOCR提供了多种数据增强方式,默认配置文件中已经添加了数据增广。 @@ -191,13 +185,11 @@ PaddleOCR提供了多种数据增强方式,默认配置文件中已经添加 *由于OpenCV的兼容性问题,扰动操作暂时只支持Linux* - # 2. 开始训练 PaddleOCR提供了训练脚本、评估脚本和预测脚本,本节将以 PP-OCRv3 英文识别模型为例: - -## 2.1 启动训练 +## 2.1. 启动训练 首先下载pretrain model,您可以下载训练好的模型在 icdar2015 数据上进行finetune @@ -297,9 +289,7 @@ Eval: ``` **注意,预测/评估时的配置文件请务必与训练一致。** - - -## 2.2 断点训练 +## 2.2. 断点训练 如果训练程序中断,如果希望加载训练中断的模型从而恢复训练,可以通过指定Global.checkpoints指定要加载的模型路径: ```shell @@ -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`指定的模型。 - -## 2.3 更换Backbone 训练 +## 2.3. 更换Backbone 训练 PaddleOCR将网络划分为四部分,分别在[ppocr/modeling](../../ppocr/modeling)下。 进入网络的数据将按照顺序(transforms->backbones->necks->heads)依次通过这四个部分。 @@ -355,8 +344,7 @@ args1: args1 **注意**:如果要更换网络的其他模块,可以参考[文档](./add_new_algorithm.md)。 - -## 2.4 混合精度训练 +## 2.4. 混合精度训练 如果您想进一步加快训练速度,可以使用[自动混合精度训练](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 \ Global.use_amp=True Global.scale_loss=1024.0 Global.use_dynamic_loss_scaling=True ``` - -## 2.5 分布式训练 +## 2.5. 分布式训练 多机多卡训练时,通过 `--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 **注意:** 采用多机多卡训练时,需要替换上面命令中的ips值为您机器的地址,机器之间需要能够相互ping通。另外,训练时需要在多个机器上分别启动命令。查看机器ip地址的命令为`ifconfig`。 - - -## 2.6 知识蒸馏训练 +## 2.6. 知识蒸馏训练 PaddleOCR支持了基于知识蒸馏的文本识别模型训练过程,更多内容可以参考[知识蒸馏说明文档](./knowledge_distillation.md)。 - - -## 2.7 多语言模型训练 +## 2.7. 多语言模型训练 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: ... ``` - -## 2.8 其他训练环境 +## 2.8. 其他训练环境 - Windows GPU/CPU 在Windows平台上与Linux平台略有不同: @@ -456,12 +438,9 @@ Windows平台只支持`单卡`的训练与预测,指定GPU进行训练`set CUD - Linux DCU DCU设备上运行需要设置环境变量 `export HIP_VISIBLE_DEVICES=0,1,2,3`,其余训练评估预测命令与Linux GPU完全相同。 - - # 3. 模型评估与预测 - -## 3.1 指标评估 +## 3.1. 指标评估 训练中模型参数默认保存在`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` 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 ``` - -## 3.2 测试识别效果 +## 3.2. 测试识别效果 使用 PaddleOCR 训练好的模型,可以通过以下脚本进行快速预测。 默认预测图片存储在 `infer_img` 里,通过 `-o Global.checkpoints` 加载训练好的参数文件: -根据配置文件中设置的的 `save_model_dir` 和 `save_epoch_step` 字段,会有以下几种参数被保存下来: +根据配置文件中设置的 `save_model_dir` 和 `save_epoch_step` 字段,会有以下几种参数被保存下来: ``` output/rec/ @@ -531,8 +509,6 @@ infer_img: doc/imgs_words/ch/word_1.jpg result: ('韩国小馆', 0.997218) ``` - - # 4. 模型导出与预测 inference 模型(`paddle.jit.save`保存的模型) @@ -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" ``` - - # 5. FAQ Q1: 训练模型转inference 模型之后预测效果不一致? diff --git a/doc/doc_ch/training.md b/doc/doc_ch/training.md index d46b9af701ee1c605526c18d6994842b3faf8e14..f5bfcf0cfde95e5c3704ccf72a94948f3d093761 100644 --- a/doc/doc_ch/training.md +++ b/doc/doc_ch/training.md @@ -4,16 +4,16 @@ 同时会简单介绍PaddleOCR模型训练数据的组成部分,以及如何在垂类场景中准备数据finetune模型。 -- [1.配置文件说明](#配置文件) -- [2. 基本概念](#基本概念) - * [2.1 学习率](#学习率) - * [2.2 正则化](#正则化) - * [2.3 评估指标](#评估指标) -- [3. 数据与垂类场景](#数据与垂类场景) - * [3.1 训练数据](#训练数据) - * [3.2 垂类场景](#垂类场景) - * [3.3 自己构建数据集](#自己构建数据集) -* [4. 常见问题](#常见问题) +- [1. 配置文件说明](#1-配置文件说明) +- [2. 基本概念](#2-基本概念) + - [2.1 学习率](#21-学习率) + - [2.2 正则化](#22-正则化) + - [2.3 评估指标](#23-评估指标) +- [3. 数据与垂类场景](#3-数据与垂类场景) + - [3.1 训练数据](#31-训练数据) + - [3.2 垂类场景](#32-垂类场景) + - [3.3 自己构建数据集](#33-自己构建数据集) +- [4. 常见问题](#4-常见问题) @@ -68,7 +68,7 @@ Optimizer: (2)识别阶段: 字符识别准确率,即正确识别的文本行占标注的文本行数量的比例,只有整行文本识别对才算正确识别。 -(3)端到端统计: 端对端召回率:准确检测并正确识别文本行在全部标注文本行的占比; 端到端准确率:准确检测并正确识别文本行在 检测到的文本行数量 的占比; 准确检测的标准是检测框与标注框的IOU大于某个阈值,正确识别的的检测框中的文本与标注的文本相同。 +(3)端到端统计: 端对端召回率:准确检测并正确识别文本行在全部标注文本行的占比; 端到端准确率:准确检测并正确识别文本行在 检测到的文本行数量 的占比; 准确检测的标准是检测框与标注框的IOU大于某个阈值,正确识别的检测框中的文本与标注的文本相同。 diff --git a/doc/doc_en/recognition_en.md b/doc/doc_en/recognition_en.md index 68ffc39121eee4dde4eecdd577200effdb3bdb05..60b4a1b26b373adc562ab9624e55ffe59a775a35 100644 --- a/doc/doc_en/recognition_en.md +++ b/doc/doc_en/recognition_en.md @@ -1,7 +1,7 @@ # Text Recognition - [1. Data Preparation](#DATA_PREPARATION) - * [1.1 Costom Dataset](#Costom_Dataset) + * [1.1 Custom Dataset](#Custom_Dataset) * [1.2 Dataset Download](#Dataset_download) * [1.3 Dictionary](#Dictionary) * [1.4 Add Space Category](#Add_space_category) diff --git "a/notebook/notebook_ch/1.introduction/OCR\346\212\200\346\234\257\345\257\274\350\256\272.ipynb" "b/notebook/notebook_ch/1.introduction/OCR\346\212\200\346\234\257\345\257\274\350\256\272.ipynb" index 37098ab63ea0f5ca2d033b4dc6c46b14ef2eadd9..96c91b11b7bfe04e754b58b1204a339e983de9c1 100644 --- "a/notebook/notebook_ch/1.introduction/OCR\346\212\200\346\234\257\345\257\274\350\256\272.ipynb" +++ "b/notebook/notebook_ch/1.introduction/OCR\346\212\200\346\234\257\345\257\274\350\256\272.ipynb" @@ -164,7 +164,7 @@ "\n", "
\n", "\n", - "一般的KIE方法基于命名实体识别(Named Entity Recognition,NER)[4]来研究,但是这类方法只利用了图像中的文本信息,缺少对视觉和结构信息的使用,因此精度不高。在此基础上,近几年的方法都开始将视觉和结构信息与文本信息融合到一起,按照对多模态信息进行融合时所采用的的原理可以将这些方法分为下面四种:\n", + "一般的KIE方法基于命名实体识别(Named Entity Recognition,NER)[4]来研究,但是这类方法只利用了图像中的文本信息,缺少对视觉和结构信息的使用,因此精度不高。在此基础上,近几年的方法都开始将视觉和结构信息与文本信息融合到一起,按照对多模态信息进行融合时所采用的原理可以将这些方法分为下面四种:\n", "\n", "- 基于Grid的方法\n", "- 基于Token的方法\n", diff --git "a/notebook/notebook_ch/3.text_recognition/\346\226\207\346\234\254\350\257\206\345\210\253\345\256\236\350\267\265\351\203\250\345\210\206.ipynb" "b/notebook/notebook_ch/3.text_recognition/\346\226\207\346\234\254\350\257\206\345\210\253\345\256\236\350\267\265\351\203\250\345\210\206.ipynb" index 8a6cb2d788719c238fb14703a4cfb2616da1a95b..b48f90bf54f02a0f74e10505f56919c202fab859 100644 --- "a/notebook/notebook_ch/3.text_recognition/\346\226\207\346\234\254\350\257\206\345\210\253\345\256\236\350\267\265\351\203\250\345\210\206.ipynb" +++ "b/notebook/notebook_ch/3.text_recognition/\346\226\207\346\234\254\350\257\206\345\210\253\345\256\236\350\267\265\351\203\250\345\210\206.ipynb" @@ -2133,7 +2133,7 @@ "collapsed": false }, "source": [ - "根据配置文件中设置的的 `save_model_dir` 字段,会有以下几种参数被保存下来:\n", + "根据配置文件中设置的 `save_model_dir` 字段,会有以下几种参数被保存下来:\n", "\n", "```\n", "output/rec/ic15\n", diff --git "a/notebook/notebook_ch/3.text_recognition/\346\226\207\346\234\254\350\257\206\345\210\253\347\220\206\350\256\272\351\203\250\345\210\206.ipynb" "b/notebook/notebook_ch/3.text_recognition/\346\226\207\346\234\254\350\257\206\345\210\253\347\220\206\350\256\272\351\203\250\345\210\206.ipynb" index dd6af90a35945a7b2ffd79be6fa8d2fe6665d2c5..6913a65533a9e12b338b92b324d6ca4225b477ef 100644 --- "a/notebook/notebook_ch/3.text_recognition/\346\226\207\346\234\254\350\257\206\345\210\253\347\220\206\350\256\272\351\203\250\345\210\206.ipynb" +++ "b/notebook/notebook_ch/3.text_recognition/\346\226\207\346\234\254\350\257\206\345\210\253\347\220\206\350\256\272\351\203\250\345\210\206.ipynb" @@ -22,7 +22,7 @@ "\n", "## 1 背景介绍\n", "\n", - "文本识别是OCR(Optical Character Recognition)的一个子任务,其任务为识别一个固定区域的的文本内容。在OCR的两阶段方法里,它接在文本检测后面,将图像信息转换为文字信息。\n", + "文本识别是OCR(Optical Character Recognition)的一个子任务,其任务为识别一个固定区域的文本内容。在OCR的两阶段方法里,它接在文本检测后面,将图像信息转换为文字信息。\n", "\n", "具体地,模型输入一张定位好的文本行,由模型预测出图片中的文字内容和置信度,可视化结果如下图所示:\n", "\n", diff --git "a/notebook/notebook_ch/4.ppcor_system_strategy/PP-OCR\347\263\273\347\273\237\345\217\212\344\274\230\345\214\226\347\255\226\347\225\245.ipynb" "b/notebook/notebook_ch/4.ppcor_system_strategy/PP-OCR\347\263\273\347\273\237\345\217\212\344\274\230\345\214\226\347\255\226\347\225\245.ipynb" index 4160b077b3ef2939ffd2ac88867bb12c93438c61..17b7d9f5b845dd7ea07050bffd9ddc57c8ade721 100644 --- "a/notebook/notebook_ch/4.ppcor_system_strategy/PP-OCR\347\263\273\347\273\237\345\217\212\344\274\230\345\214\226\347\255\226\347\225\245.ipynb" +++ "b/notebook/notebook_ch/4.ppcor_system_strategy/PP-OCR\347\263\273\347\273\237\345\217\212\344\274\230\345\214\226\347\255\226\347\225\245.ipynb" @@ -2915,7 +2915,7 @@ "\n", "```yaml\n", "Architecture:\n", - " model_type: &model_type \"rec\" # 模型类别,rec、det等,每个子网络的的模型类别都与\n", + " model_type: &model_type \"rec\" # 模型类别,rec、det等,每个子网络的模型类别都与\n", " name: DistillationModel # 结构名称,蒸馏任务中,为DistillationModel,用于构建对应的结构\n", " algorithm: Distillation # 算法名称\n", " Models: # 模型,包含子网络的配置信息\n", diff --git "a/notebook/notebook_ch/4.ppocr_system_strategy/PP-OCR\347\263\273\347\273\237\345\217\212\344\274\230\345\214\226\347\255\226\347\225\245.ipynb" "b/notebook/notebook_ch/4.ppocr_system_strategy/PP-OCR\347\263\273\347\273\237\345\217\212\344\274\230\345\214\226\347\255\226\347\225\245.ipynb" index 4160b077b3ef2939ffd2ac88867bb12c93438c61..17b7d9f5b845dd7ea07050bffd9ddc57c8ade721 100644 --- "a/notebook/notebook_ch/4.ppocr_system_strategy/PP-OCR\347\263\273\347\273\237\345\217\212\344\274\230\345\214\226\347\255\226\347\225\245.ipynb" +++ "b/notebook/notebook_ch/4.ppocr_system_strategy/PP-OCR\347\263\273\347\273\237\345\217\212\344\274\230\345\214\226\347\255\226\347\225\245.ipynb" @@ -2915,7 +2915,7 @@ "\n", "```yaml\n", "Architecture:\n", - " model_type: &model_type \"rec\" # 模型类别,rec、det等,每个子网络的的模型类别都与\n", + " model_type: &model_type \"rec\" # 模型类别,rec、det等,每个子网络的模型类别都与\n", " name: DistillationModel # 结构名称,蒸馏任务中,为DistillationModel,用于构建对应的结构\n", " algorithm: Distillation # 算法名称\n", " Models: # 模型,包含子网络的配置信息\n", diff --git "a/notebook/notebook_ch/6.document_analysis/\346\226\207\346\241\243\345\210\206\346\236\220\347\220\206\350\256\272.ipynb" "b/notebook/notebook_ch/6.document_analysis/\346\226\207\346\241\243\345\210\206\346\236\220\347\220\206\350\256\272.ipynb" index ae49cbc9052b15b30b80aecd493dadfcc7ceac77..2ddd4776c1f7526aca1240b170be60a7d376453f 100644 --- "a/notebook/notebook_ch/6.document_analysis/\346\226\207\346\241\243\345\210\206\346\236\220\347\220\206\350\256\272.ipynb" +++ "b/notebook/notebook_ch/6.document_analysis/\346\226\207\346\241\243\345\210\206\346\236\220\347\220\206\350\256\272.ipynb" @@ -327,7 +327,7 @@ "\n", "
图 18: SER,RE任务示例
\n", "\n", - "一般的KIE方法基于命名实体识别(Named Entity Recognition,NER)[4]来研究,但是这类方法只利用了图像中的文本信息,缺少对视觉和结构信息的使用,因此精度不高。在此基础上,近几年的方法都开始将视觉和结构信息与文本信息融合到一起,按照对多模态信息进行融合时所采用的的原理可以将这些方法分为下面三种:\n", + "一般的KIE方法基于命名实体识别(Named Entity Recognition,NER)[4]来研究,但是这类方法只利用了图像中的文本信息,缺少对视觉和结构信息的使用,因此精度不高。在此基础上,近几年的方法都开始将视觉和结构信息与文本信息融合到一起,按照对多模态信息进行融合时所采用的原理可以将这些方法分为下面三种:\n", "\n", "1. 基于Grid的方法\n", "1. 基于Token的方法\n", diff --git a/notebook/notebook_en/2.text_detection/text_detection_theory.ipynb b/notebook/notebook_en/2.text_detection/text_detection_theory.ipynb index 64a4c669f0598887b6557f66ea72cd1cb9a0773b..5916ebed9eeafcfc7ce146bf802df84ad32bc26e 100644 --- a/notebook/notebook_en/2.text_detection/text_detection_theory.ipynb +++ b/notebook/notebook_en/2.text_detection/text_detection_theory.ipynb @@ -136,7 +136,7 @@ "
Figure 11: LOMO frame diagram
\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", "
\n", "
Figure 12: Contournet frame diagram
\n", diff --git a/ppstructure/vqa/tools/eval_with_label_end2end.py b/ppstructure/vqa/tools/eval_with_label_end2end.py index 3aa439acb269d74165543fac7e0042cfc213f08d..b13ffb568fd9610fee5d5a246c501ed5b90de91a 100644 --- a/ppstructure/vqa/tools/eval_with_label_end2end.py +++ b/ppstructure/vqa/tools/eval_with_label_end2end.py @@ -82,7 +82,7 @@ def polygon_iou(poly1, poly2): except shapely.geos.TopologicalError: # except Exception as e: # print(e) - print('shapely.geos.TopologicalError occured, iou set to 0') + print('shapely.geos.TopologicalError occurred, iou set to 0') iou = 0 return iou diff --git a/tools/end2end/eval_end2end.py b/tools/end2end/eval_end2end.py index 6e7573ca472503e5d2216723c056ddf42c77e0aa..dd37940845b60d55291b40b8cd50d6afd5b91f94 100644 --- a/tools/end2end/eval_end2end.py +++ b/tools/end2end/eval_end2end.py @@ -59,7 +59,7 @@ def polygon_iou(poly1, poly2): except shapely.geos.TopologicalError: # except Exception as e: # print(e) - print('shapely.geos.TopologicalError occured, iou set to 0') + print('shapely.geos.TopologicalError occurred, iou set to 0') iou = 0 return iou diff --git a/tools/export_model.py b/tools/export_model.py index 1f9f29e396fe4960914ae802769b65d20c103bd3..e971f6cb20025d529d0387d287ec87a76abbdbe7 100755 --- a/tools/export_model.py +++ b/tools/export_model.py @@ -133,7 +133,7 @@ def main(): else: config["Architecture"]["Models"][key]["Head"][ "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][ "return_all_feats"] = False elif config['Architecture']['Head'][