diff --git a/README_ch.md b/README_ch.md index 890a36f78ce28d93313e109c2ed4efe0302cfa92..ad0914eb5cafc3fbae5324eb2acb64081a51c79d 100755 --- a/README_ch.md +++ b/README_ch.md @@ -8,7 +8,7 @@ PaddleOCR同时支持动态图与静态图两种编程范式 - 静态图版本:develop分支 **近期更新** -- 2021.3.22 [FAQ](./doc/doc_ch/FAQ.md)新增5个高频问题,总数193个,每周一都会更新,欢迎大家持续关注。 +- 2021.4.6 [FAQ](./doc/doc_ch/FAQ.md)新增5个高频问题,总数198个,每周一都会更新,欢迎大家持续关注。 - 2021.2.8 正式发布PaddleOCRv2.0(branch release/2.0)并设置为推荐用户使用的默认分支. 发布的详细内容,请参考: https://github.com/PaddlePaddle/PaddleOCR/releases/tag/v2.0.0 - 2021.1.26,28,29 PaddleOCR官方研发团队带来技术深入解读三日直播课,1月26日、28日、29日晚上19:30,[直播地址](https://live.bilibili.com/21689802) - 2021.1.21 更新多语言识别模型,目前支持语种超过27种,[多语言模型下载](./doc/doc_ch/models_list.md),包括中文简体、中文繁体、英文、法文、德文、韩文、日文、意大利文、西班牙文、葡萄牙文、俄罗斯文、阿拉伯文等,后续计划可以参考[多语言研发计划](https://github.com/PaddlePaddle/PaddleOCR/issues/1048) @@ -104,8 +104,8 @@ PaddleOCR同时支持动态图与静态图两种编程范式 - [效果展示](#效果展示) - FAQ - [【精选】OCR精选10个问题](./doc/doc_ch/FAQ.md) - - [【理论篇】OCR通用37个问题](./doc/doc_ch/FAQ.md) - - [【实战篇】PaddleOCR实战141个问题](./doc/doc_ch/FAQ.md) + - [【理论篇】OCR通用41个问题](./doc/doc_ch/FAQ.md) + - [【实战篇】PaddleOCR实战147个问题](./doc/doc_ch/FAQ.md) - [技术交流群](#欢迎加入PaddleOCR技术交流群) - [参考文献](./doc/doc_ch/reference.md) - [许可证书](#许可证书) diff --git a/deploy/cpp_infer/CMakeLists.txt b/deploy/cpp_infer/CMakeLists.txt index 1188336730ea9fbaac11a84250a3be3e418ec5f5..90f62345de8524143bd7a6f2631b64f3f8fb0d02 100644 --- a/deploy/cpp_infer/CMakeLists.txt +++ b/deploy/cpp_infer/CMakeLists.txt @@ -40,6 +40,7 @@ endif() if (WIN32) include_directories("${PADDLE_LIB}/paddle/fluid/inference") include_directories("${PADDLE_LIB}/paddle/include") + link_directories("${PADDLE_LIB}/paddle/lib") link_directories("${PADDLE_LIB}/paddle/fluid/inference") find_package(OpenCV REQUIRED PATHS ${OPENCV_DIR}/build/ NO_DEFAULT_PATH) @@ -136,22 +137,22 @@ else() set(MATH_LIB ${PADDLE_LIB}/third_party/install/openblas/lib/libopenblas${CMAKE_STATIC_LIBRARY_SUFFIX}) endif() -# Note: libpaddle_inference_api.so/a must put before libpaddle_fluid.so/a +# Note: libpaddle_inference_api.so/a must put before libpaddle_inference.so/a if(WITH_STATIC_LIB) if(WIN32) set(DEPS - ${PADDLE_LIB}/paddle/lib/paddle_fluid${CMAKE_STATIC_LIBRARY_SUFFIX}) + ${PADDLE_LIB}/paddle/lib/paddle_inference${CMAKE_STATIC_LIBRARY_SUFFIX}) else() set(DEPS - ${PADDLE_LIB}/paddle/lib/libpaddle_fluid${CMAKE_STATIC_LIBRARY_SUFFIX}) + ${PADDLE_LIB}/paddle/lib/libpaddle_inference${CMAKE_STATIC_LIBRARY_SUFFIX}) endif() else() if(WIN32) set(DEPS - ${PADDLE_LIB}/paddle/lib/paddle_fluid${CMAKE_SHARED_LIBRARY_SUFFIX}) + ${PADDLE_LIB}/paddle/lib/paddle_inference${CMAKE_SHARED_LIBRARY_SUFFIX}) else() set(DEPS - ${PADDLE_LIB}/paddle/lib/libpaddle_fluid${CMAKE_SHARED_LIBRARY_SUFFIX}) + ${PADDLE_LIB}/paddle/lib/libpaddle_inference${CMAKE_SHARED_LIBRARY_SUFFIX}) endif() endif(WITH_STATIC_LIB) diff --git a/deploy/cpp_infer/readme.md b/deploy/cpp_infer/readme.md index f81d9c75e93808b81f0659ccf46b629091b2c9fb..3e5c12867d2845d46972b435a8ec85eed226f0ba 100644 --- a/deploy/cpp_infer/readme.md +++ b/deploy/cpp_infer/readme.md @@ -119,7 +119,8 @@ build/paddle_inference_install_dir/ #### 1.2.2 直接下载安装 -* [Paddle预测库官网](https://www.paddlepaddle.org.cn/documentation/docs/zh/advanced_guide/inference_deployment/inference/build_and_install_lib_cn.html)上提供了不同cuda版本的Linux预测库,可以在官网查看并选择合适的预测库版本。 +* [Paddle预测库官网](https://www.paddlepaddle.org.cn/documentation/docs/zh/advanced_guide/inference_deployment/inference/build_and_install_lib_cn.html)上提供了不同cuda版本的Linux预测库,可以在官网查看并选择合适的预测库版本(*建议选择paddle版本>=2.0.1版本的预测库* )。 + * 下载之后使用下面的方法解压。 diff --git a/deploy/cpp_infer/readme_en.md b/deploy/cpp_infer/readme_en.md index 8a0bd62ecc6bf617c6e2954d1080bf97a6582acd..a51977326c2ee848773be34b17e396b6a166f80b 100644 --- a/deploy/cpp_infer/readme_en.md +++ b/deploy/cpp_infer/readme_en.md @@ -78,7 +78,7 @@ opencv3/ #### 1.2.1 Compile from the 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. +* 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. * You can refer to [Paddle inference library] (https://www.paddlepaddle.org.cn/documentation/docs/en/advanced_guide/inference_deployment/inference/build_and_install_lib_en.html) to get the Paddle source code from github, and then compile To generate the latest inference library. The method of using git to access the code is as follows. diff --git a/deploy/cpp_infer/tools/config.txt b/deploy/cpp_infer/tools/config.txt index 24e4ef0de7d844ba4bd6c11f2cba08766c0e5ddf..28085ca408d279fc61a1bce1abf1df9c05115c78 100644 --- a/deploy/cpp_infer/tools/config.txt +++ b/deploy/cpp_infer/tools/config.txt @@ -3,7 +3,7 @@ use_gpu 0 gpu_id 0 gpu_mem 4000 cpu_math_library_num_threads 10 -use_mkldnn 0 +use_mkldnn 1 # det config max_side_len 960 diff --git a/doc/doc_ch/FAQ.md b/doc/doc_ch/FAQ.md index e698d20422bb46be1be7f7be82354595633c1ccf..aedd8e5fd0582f38b3f8c3d5d5c443473d760574 100755 --- a/doc/doc_ch/FAQ.md +++ b/doc/doc_ch/FAQ.md @@ -9,34 +9,34 @@ ## PaddleOCR常见问题汇总(持续更新) -* [近期更新(2021.3.22)](#近期更新) +* [近期更新(2021.4.6)](#近期更新) * [【精选】OCR精选10个问题](#OCR精选10个问题) -* [【理论篇】OCR通用40个问题](#OCR通用问题) +* [【理论篇】OCR通用41个问题](#OCR通用问题) * [基础知识13题](#基础知识) * [数据集8题](#数据集2) - * [模型训练调优19题](#模型训练调优2) -* [【实战篇】PaddleOCR实战143个问题](#PaddleOCR实战问题) - * [使用咨询54题](#使用咨询) + * [模型训练调优20题](#模型训练调优2) +* [【实战篇】PaddleOCR实战147个问题](#PaddleOCR实战问题) + * [使用咨询56题](#使用咨询) * [数据集18题](#数据集3) - * [模型训练调优32题](#模型训练调优3) - * [预测部署39题](#预测部署3) + * [模型训练调优33题](#模型训练调优3) + * [预测部署40题](#预测部署3) -## 近期更新(2021.3.22) -#### Q2.1.13: PaddleOCR提供的文本识别算法包括哪些? -**A**: PaddleOCR主要提供五种文本识别算法,包括CRNN\StarNet\RARAE\Rosetta和SRN, 其中CRNN\StarNet和Rosetta是基于ctc的文字识别算法,RARE是基于attention的文字识别算法;SRN为百度自研的文本识别算法,引入了语义信息,显著提升了准确率。 详情可参照如下页面:[文本识别算法](https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.0/doc/doc_ch/algorithm_overview.md#%E6%96%87%E6%9C%AC%E8%AF%86%E5%88%AB%E7%AE%97%E6%B3%95) +## 近期更新(2021.4.6) +#### Q3.4.40: 使用hub_serving部署,延时较高,可能的原因是什么呀? +**A**: 首先,测试的时候第一张图延时较高,可以多测试几张然后观察后几张图的速度;其次,如果是在cpu端部署serving端模型(如backbone为ResNet34),耗时较慢,建议在cpu端部署mobile(如backbone为MobileNetV3)模型。 -#### Q2.2.8: DBNet如果想使用多边形作为输入,数据标签格式应该如何设定? -**A**:如果想使用多边形作为DBNet的输入,数据标签也应该用多边形来表示。这样子可以更好得拟合弯曲文本。PPOCRLabel暂时只支持矩形框标注和四边形框标注。 +#### Q2.3.20: 如何根据不同的硬件平台选用不同的backbone? +**A**:在不同的硬件上,不同的backbone的速度优势不同,可以根据不同平台的速度-精度图来确定backbone,这里可以参考[PaddleClas模型速度-精度图](https://github.com/PaddlePaddle/PaddleClas/tree/release/2.0/docs/zh_CN/models)。 -#### Q2.3.19: 参照文档做实际项目时,是重新训练还是在官方训练的基础上进行训练?具体如何操作? -**A**: 基于官方提供的模型,进行finetune的话,收敛会更快一些。 具体操作上,以识别模型训练为例:如果修改了字符文件,可以设置pretraind_model为官方提供的预训练模型 +#### Q3.1.55: 目前PaddleOCR有知识蒸馏的demo吗? +**A**: 目前我们还没有提供PaddleOCR知识蒸馏的相关demo,PaddleClas开源了一个效果还不错的方案,可以移步[SSLD知识蒸馏方案](https://github.com/PaddlePaddle/PaddleClas/blob/release%2F2.0/docs/zh_CN/advanced_tutorials/distillation/distillation.md), paper: https://arxiv.org/abs/2103.05959 关于PaddleOCR的蒸馏,我们也会在未来支持。 -#### Q3.1.53: 预测时提示图像过大,显存、内存溢出了,应该如何处理? -**A**: 可以按照这个PR的修改来缓解显存、内存占用 [#2230](https://github.com/PaddlePaddle/PaddleOCR/pull/2230) +#### Q3.3.33: 训练识别和检测时学习率要加上warmup,目的是什么? +**A**: Warmup机制先使学习率从一个较小的值逐步升到一个较大的值,而不是直接就使用较大的学习率,这样有助于模型的稳定收敛。在OCR检测和OCR识别中,一般会带来精度~0.5%的提升。 -#### Q3.1.54: 用c++来部署,目前支持Paddle2.0的模型吗? -**A**: PPOCR 2.0的模型在arm上运行可以参照该PR [#1877](https://github.com/PaddlePaddle/PaddleOCR/pull/1877) +#### Q3.1.56: 在使用PPOCRLabel的时候,如何标注倾斜的文字? +**A**: 如果矩形框标注后空白冗余较多,可以尝试PPOCRLabel提供的四点标注,可以标注各种倾斜角度的文本。 ## 【精选】OCR精选10个问题 @@ -177,7 +177,7 @@ **A**: PubTabNet是IBM提出的基于图片格式的表格识别数据集,包含 56.8 万张表格数据的图像,以及图像对应的 html 格式的注释。该数据集的发布推动了表格结构化算法的研发和落地应用。 #### Q2.1.13: PaddleOCR提供的文本识别算法包括哪些? -**A**: PaddleOCR主要提供五种文本识别算法,包括CRNN\StarNet\RARAE\Rosetta和SRN, 其中CRNN\StarNet和Rosetta是基于ctc的文字识别算法,RARE是基于attention的文字识别算法;SRN为百度自研的文本识别算法,引入了语义信息,显著提升了准确率。 详情可参照如下页面: [文本识别算法](https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.0/doc/doc_ch/algorithm_overview.md#%E6%96%87%E6%9C%AC%E8%AF%86%E5%88%AB%E7%AE%97%E6%B3%95) +**A**: PaddleOCR主要提供五种文本识别算法,包括CRNN\StarNet\RARE\Rosetta和SRN, 其中CRNN\StarNet和Rosetta是基于ctc的文字识别算法,RARE是基于attention的文字识别算法;SRN为百度自研的文本识别算法,引入了语义信息,显著提升了准确率。 详情可参照如下页面: [文本识别算法](https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.0/doc/doc_ch/algorithm_overview.md#%E6%96%87%E6%9C%AC%E8%AF%86%E5%88%AB%E7%AE%97%E6%B3%95) ### 数据集 @@ -310,6 +310,9 @@ #### Q2.3.19: 参照文档做实际项目时,是重新训练还是在官方训练的基础上进行训练?具体如何操作? **A**: 基于官方提供的模型,进行finetune的话,收敛会更快一些。 具体操作上,以识别模型训练为例:如果修改了字符文件,可以设置pretraind_model为官方提供的预训练模型 +#### Q2.3.20: 如何根据不同的硬件平台选用不同的backbone? +**A**:在不同的硬件上,不同的backbone的速度优势不同,可以根据不同平台的速度-精度图来确定backbone,这里可以参考[PaddleClas模型速度-精度图](https://github.com/PaddlePaddle/PaddleClas/tree/release/2.0/docs/zh_CN/models)。 + ## 【实战篇】PaddleOCR实战问题 @@ -595,6 +598,13 @@ repo中config.yml文件的前后处理参数和inference预测默认的超参数 #### Q3.1.54: 用c++来部署,目前支持Paddle2.0的模型吗? **A**: PPOCR 2.0的模型在arm上运行可以参照该PR [#1877](https://github.com/PaddlePaddle/PaddleOCR/pull/1877) +#### Q3.1.55: 目前PaddleOCR有知识蒸馏的demo吗? +**A**: 目前我们还没有提供PaddleOCR知识蒸馏的相关demo,PaddleClas开源了一个效果还不错的方案,可以移步[SSLD知识蒸馏方案](https://github.com/PaddlePaddle/PaddleClas/blob/release%2F2.0/docs/zh_CN/advanced_tutorials/distillation/distillation.md), paper: https://arxiv.org/abs/2103.05959 关于PaddleOCR的蒸馏,我们也会在未来支持。 + +#### Q3.1.56: 在使用PPOCRLabel的时候,如何标注倾斜的文字? +**A**: 如果矩形框标注后空白冗余较多,可以尝试PPOCRLabel提供的四点标注,可以标注各种倾斜角度的文本。 + + ### 数据集 @@ -861,8 +871,12 @@ lr: warmup_epoch: 2 ``` +#### Q3.3.33: 训练识别和检测时学习率要加上warmup,目的是什么? +**A**: Warmup机制先使学习率从一个较小的值逐步升到一个较大的值,而不是直接就使用较大的学习率,这样有助于模型的稳定收敛。在OCR检测和OCR识别中,一般会带来精度~0.5%的提升。 + + ### 预测部署 #### Q3.4.1:如何pip安装opt模型转换工具? @@ -1053,3 +1067,7 @@ nvidia-smi --lock-gpu-clocks=1590 -i 0 #### Q3.4.39:内网环境如何进行服务化部署呢? **A**:仍然可以使用PaddleServing或者HubServing进行服务化部署,保证内网地址可以访问即可。 + +#### Q3.4.40: 使用hub_serving部署,延时较高,可能的原因是什么呀? + +**A**: 首先,测试的时候第一张图延时较高,可以多测试几张然后观察后几张图的速度;其次,如果是在cpu端部署serving端模型(如backbone为ResNet34),耗时较慢,建议在cpu端部署mobile(如backbone为MobileNetV3)模型。 diff --git a/tools/infer/predict_system.py b/tools/infer/predict_system.py index de7ee9d342063161f2e329c99d2428051c0ecf8c..ea622fac5e5870437907ee8c5b8068d77ecd3c0c 100755 --- a/tools/infer/predict_system.py +++ b/tools/infer/predict_system.py @@ -176,6 +176,8 @@ def main(args): draw_img_save = "./inference_results/" if not os.path.exists(draw_img_save): os.makedirs(draw_img_save) + if flag: + image_file = image_file[:-3] + "png" cv2.imwrite( os.path.join(draw_img_save, os.path.basename(image_file)), draw_img[:, :, ::-1])