diff --git a/README.md b/README.md old mode 100644 new mode 100755 index a5c52bdb356fa765931fa7046aca5e4ef72caa95..b5f3381e999550f2c91cae174948088f04cd33dd --- a/README.md +++ b/README.md @@ -5,14 +5,16 @@ PaddleOCR aims to create multilingual, awesome, leading, and practical OCR tools ## Notice PaddleOCR supports both dynamic graph and static graph programming paradigm -- Dynamic graph: dygraph branch (default), **supported by paddle 2.0.0 ([installation](./doc/doc_en/installation_en.md))** +- Dynamic graph: release/2.1 (default), **supported by paddle 2.0.0 ([installation](./doc/doc_en/installation_en.md))** - Static graph: develop branch **Recent updates** +- **Notice: PaddleOCR R & D team will conduct in-depth technical interpretation of the latest version at 19:00 P.M. on April 13. ([live address](https://live.bilibili.com/21689802))** +- 2021.4.8 Release PaddleOCRv2.1(branch release/2.1). Newly released AAAI 2021 end-to-end algorithm [PGNet](./doc/doc_ch/pgnet.md) and [Multi language recognition model](./doc/doc_ch/multi_languages.md), support more than 80 language recognition. +- 2021.2.8 Release PaddleOCRv2.0 (branch release/2.0). Refer to [release note](https://github.com/PaddlePaddle/PaddleOCR/releases/tag/v2.0.0) for more details. - 2021.1.21 update more than 25+ multilingual recognition models [models list](./doc/doc_en/models_list_en.md), including:English, Chinese, German, French, Japanese,Spanish,Portuguese Russia Arabic and so on. Models for more languages will continue to be updated [Develop Plan](https://github.com/PaddlePaddle/PaddleOCR/issues/1048). - 2020.12.15 update Data synthesis tool, i.e., [Style-Text](./StyleText/README.md),easy to synthesize a large number of images which are similar to the target scene image. - 2020.11.25 Update a new data annotation tool, i.e., [PPOCRLabel](./PPOCRLabel/README.md), which is helpful to improve the labeling efficiency. Moreover, the labeling results can be used in training of the PP-OCR system directly. -- 2020.9.22 Update the PP-OCR technical article, https://arxiv.org/abs/2009.09941 - [more](./doc/doc_en/update_en.md) ## Features @@ -78,12 +80,14 @@ For a new language request, please refer to [Guideline for new language_requests ## Tutorials - [Installation](./doc/doc_en/installation_en.md) -- [Quick Start](./doc/doc_en/quickstart_en.md) +- [Chinese OCR Quick Start](./doc/doc_en/quickstart_en.md) +- [Multi-language OCR Quick Start](./doc/doc_en/multi_languages_en.md) - [Code Structure](./doc/doc_en/tree_en.md) - Algorithm Introduction - [Text Detection Algorithm](./doc/doc_en/algorithm_overview_en.md) - [Text Recognition Algorithm](./doc/doc_en/algorithm_overview_en.md) - [PP-OCR Pipeline](#PP-OCR-Pipeline) + - [End2End Algorithm *PGNet*](./doc/doc_en/pgnet_en.md) - Model Training/Evaluation - [Text Detection](./doc/doc_en/detection_en.md) - [Text Recognition](./doc/doc_en/recognition_en.md) diff --git a/README_ch.md b/README_ch.md index 0430fe759f62155ad97d73db06445bbfe551c181..00853060c7d65bb58ab7aab8f87fb804e16e2ca8 100755 --- a/README_ch.md +++ b/README_ch.md @@ -4,17 +4,15 @@ PaddleOCR旨在打造一套丰富、领先、且实用的OCR工具库,助力使用者训练出更好的模型,并应用落地。 ## 注意 PaddleOCR同时支持动态图与静态图两种编程范式 -- 动态图版本:dygraph分支(默认),需将paddle版本升级至2.0.0([快速安装](./doc/doc_ch/installation.md)) +- 动态图版本:release/2.1(默认分支,开发分支为dygraph分支),需将paddle版本升级至2.0.0([快速安装](./doc/doc_ch/installation.md)) - 静态图版本:develop分支 **近期更新** -- 【预告】 PaddleOCR研发团队对最新发版内容技术深入解读,4月13日晚上19:00,[直播地址](https://live.bilibili.com/21689802) +- **【预告】 PaddleOCR研发团队对最新发版内容技术深入解读,4月13日晚上19:00,[直播地址](https://live.bilibili.com/21689802)** - 2021.4.8 release 2.1版本,新增AAAI 2021论文[端到端识别算法PGNet](./doc/doc_ch/pgnet.md)开源,[多语言模型](./doc/doc_ch/multi_languages.md)支持种类增加到80+。 -- 2021.2.1 [FAQ](./doc/doc_ch/FAQ.md)新增5个高频问题,总数162个,每周一都会更新,欢迎大家持续关注。 -- 2021.1.21 更新多语言识别模型,目前支持语种超过27种,包括中文简体、中文繁体、英文、法文、德文、韩文、日文、意大利文、西班牙文、葡萄牙文、俄罗斯文、阿拉伯文等,后续计划可以参考[多语言研发计划](https://github.com/PaddlePaddle/PaddleOCR/issues/1048) -- 2020.12.15 更新数据合成工具[Style-Text](./StyleText/README_ch.md),可以批量合成大量与目标场景类似的图像,在多个场景验证,效果明显提升。 -- 2020.11.25 更新半自动标注工具[PPOCRLabel](./PPOCRLabel/README_ch.md),辅助开发者高效完成标注任务,输出格式与PP-OCR训练任务完美衔接。 -- 2020.9.22 更新PP-OCR技术文章,https://arxiv.org/abs/2009.09941 +- 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) - [More](./doc/doc_ch/update.md) @@ -106,8 +104,8 @@ PaddleOCR同时支持动态图与静态图两种编程范式 - [效果展示](#效果展示) - FAQ - [【精选】OCR精选10个问题](./doc/doc_ch/FAQ.md) - - [【理论篇】OCR通用32个问题](./doc/doc_ch/FAQ.md) - - [【实战篇】PaddleOCR实战110个问题](./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/doc/doc_ch/FAQ.md b/doc/doc_ch/FAQ.md index 2af9006ad19c4f89d4798b581c0ebfedef7984f7..aedd8e5fd0582f38b3f8c3d5d5c443473d760574 100755 --- a/doc/doc_ch/FAQ.md +++ b/doc/doc_ch/FAQ.md @@ -9,38 +9,34 @@ ## PaddleOCR常见问题汇总(持续更新) -* [近期更新(2021.2.1)](#近期更新) +* [近期更新(2021.4.6)](#近期更新) * [【精选】OCR精选10个问题](#OCR精选10个问题) -* [【理论篇】OCR通用32个问题](#OCR通用问题) - * [基础知识7题](#基础知识) - * [数据集7题](#数据集2) - * [模型训练调优18题](#模型训练调优2) -* [【实战篇】PaddleOCR实战120个问题](#PaddleOCR实战问题) - * [使用咨询38题](#使用咨询) +* [【理论篇】OCR通用41个问题](#OCR通用问题) + * [基础知识13题](#基础知识) + * [数据集8题](#数据集2) + * [模型训练调优20题](#模型训练调优2) +* [【实战篇】PaddleOCR实战147个问题](#PaddleOCR实战问题) + * [使用咨询56题](#使用咨询) * [数据集18题](#数据集3) - * [模型训练调优30题](#模型训练调优3) - * [预测部署34题](#预测部署3) - + * [模型训练调优33题](#模型训练调优3) + * [预测部署40题](#预测部署3) -## 近期更新(2021.2.1) - -#### Q3.2.18: PaddleOCR动态图版本如何finetune? -**A**:finetune需要将配置文件里的 Global.load_static_weights设置为false,如果没有此字段可以手动添加,然后将模型地址放到Global.pretrained_model字段下即可。 - - -#### Q3.3.29: 微调v1.1预训练的模型,可以直接用文字垂直排列和上下颠倒的图片吗?还是必须要水平排列的? -**A**:1.1和2.0的模型一样,微调时,垂直排列的文字需要逆时针旋转 90° 后加入训练,上下颠倒的需要旋转为水平的。 +## 近期更新(2021.4.6) +#### Q3.4.40: 使用hub_serving部署,延时较高,可能的原因是什么呀? +**A**: 首先,测试的时候第一张图延时较高,可以多测试几张然后观察后几张图的速度;其次,如果是在cpu端部署serving端模型(如backbone为ResNet34),耗时较慢,建议在cpu端部署mobile(如backbone为MobileNetV3)模型。 -#### Q3.3.30: 模型训练过程中如何得到 best_accuracy 模型? -**A**:配置文件里的eval_batch_step字段用来控制多少次iter进行一次eval,在eval完成后会自动生成 best_accuracy 模型,所以如果希望很快就能拿到best_accuracy模型,可以将eval_batch_step改小一点(例如,10)。 +#### Q2.3.20: 如何根据不同的硬件平台选用不同的backbone? +**A**:在不同的硬件上,不同的backbone的速度优势不同,可以根据不同平台的速度-精度图来确定backbone,这里可以参考[PaddleClas模型速度-精度图](https://github.com/PaddlePaddle/PaddleClas/tree/release/2.0/docs/zh_CN/models)。 -#### Q3.4.33: 如何多进程运行paddleocr? -**A**:实例化多个paddleocr服务,然后将服务注册到注册中心,之后通过注册中心统一调度即可,关于注册中心,可以搜索eureka了解一下具体使用,其他的注册中心也行。 +#### 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.3.33: 训练识别和检测时学习率要加上warmup,目的是什么? +**A**: Warmup机制先使学习率从一个较小的值逐步升到一个较大的值,而不是直接就使用较大的学习率,这样有助于模型的稳定收敛。在OCR检测和OCR识别中,一般会带来精度~0.5%的提升。 -#### Q3.4.34: 2.0训练出来的模型,能否在1.1版本上进行部署? -**A**:这个是不建议的,2.0训练出来的模型建议使用dygraph分支里提供的部署代码。 +#### Q3.1.56: 在使用PPOCRLabel的时候,如何标注倾斜的文字? +**A**: 如果矩形框标注后空白冗余较多,可以尝试PPOCRLabel提供的四点标注,可以标注各种倾斜角度的文本。 ## 【精选】OCR精选10个问题 @@ -76,8 +72,7 @@ **A**:(1)在人眼确认可识别的条件下,对于背景有干扰的文字,首先要保证检测框足够准确,如果检测框不准确,需要考虑是否可以通过过滤颜色等方式对图像预处理并且增加更多相关的训练数据;在识别的部分,注意在训练数据中加入背景干扰类的扩增图像。 -(2)如果MobileNet模型不能满足需求,可以尝试ResNet系列大模型来获得更好的效果 -。 +(2)如果MobileNet模型不能满足需求,可以尝试ResNet系列大模型来获得更好的效果。 #### Q1.1.6:OCR领域常用的评估指标是什么? @@ -161,6 +156,29 @@ **A**:处理字符的时候,把多字符的当作一个字就行,字典中每行是一个字。 +#### Q2.1.8: 端到端的场景文本识别方法大概分为几种? + +**A**:端到端的场景文本识别方法大概分为2种:基于二阶段的方法和基于字符级别的方法。基于两阶段的方法一般先检测文本块,然后提取文本块中的特征用于识别,例如ABCNet;基于字符级别方法直接进行字符检测与识别,直接输出单词的文本框,字符框以及对应的字符类别,例如CharNet。 + +#### Q2.1.9: 二阶段的端到端的场景文本识别方法的不足有哪些? + +**A**: 这类方法一般需要设计针对ROI提取特征的方法,而ROI操作一般比较耗时。 + +#### Q2.1.10: 基于字符级别的端到端的场景文本识别方法的不足有哪些? + +**A**: 这类方法一方面训练时需要加入字符级别的数据,一般使用合成数据,但是合成数据和真实数据有分布Gap。另一方面,现有工作大多数假设文本阅读方向,从上到下,从左到右,没有解决文本方向预测问题。 + +#### Q2.1.11: AAAI 2021最新的端到端场景文本识别PGNet算法有什么特点? + +**A**: PGNet不需要字符级别的标注,NMS操作以及ROI操作。同时提出预测文本行内的阅读顺序模块和基于图的修正模块来提升文本识别效果。该算法是百度自研,近期会在PaddleOCR开源。 + +#### Q2.1.12: PubTabNet 数据集关注的是什么问题? + +**A**: PubTabNet是IBM提出的基于图片格式的表格识别数据集,包含 56.8 万张表格数据的图像,以及图像对应的 html 格式的注释。该数据集的发布推动了表格结构化算法的研发和落地应用。 + +#### Q2.1.13: PaddleOCR提供的文本识别算法包括哪些? +**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) + ### 数据集 @@ -192,6 +210,9 @@ **A**:SRNet是借鉴GAN中图像到图像转换、风格迁移的想法合成文本数据。不同于通用GAN的方法只选择一个分支,SRNet将文本合成任务分解为三个简单的子模块,提升合成数据的效果。这三个子模块为不带背景的文本风格迁移模块、背景抽取模块和融合模块。PaddleOCR计划将在2020年12月中旬开源基于SRNet的实用模型。 +#### Q2.2.8: DBNet如果想使用多边形作为输入,数据标签格式应该如何设定? +**A**:如果想使用多边形作为DBNet的输入,数据标签也应该用多边形来表示。这样子可以更好得拟合弯曲文本。PPOCRLabel暂时只支持矩形框标注和四边形框标注。 + ### 模型训练调优 @@ -286,6 +307,12 @@ **A**:SE模块是MobileNetV3网络一个重要模块,目的是估计特征图每个特征通道重要性,给特征图每个特征分配权重,提高网络的表达能力。但是,对于文本检测,输入网络的分辨率比较大,一般是640\*640,利用SE模块估计特征图每个特征通道重要性比较困难,网络提升能力有限,但是该模块又比较耗时,因此在PP-OCR系统中,文本检测的骨干网络没有使用SE模块。实验也表明,当去掉SE模块,超轻量模型大小可以减小40%,文本检测效果基本不受影响。详细可以参考PP-OCR技术文章,https://arxiv.org/abs/2009.09941. +#### 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实战问题 @@ -361,13 +388,13 @@ (2)inference模型下载时,如果没有安装wget,可直接点击模型链接或将链接地址复制到浏览器进行下载,并解压放置到相应目录。 #### Q3.1.17:PaddleOCR开源的超轻量模型和通用OCR模型的区别? -**A**:目前PaddleOCR开源了2个中文模型,分别是9.4M超轻量中文模型和通用中文OCR模型。两者对比信息如下: +**A**:目前PaddleOCR开源了2个中文模型,分别是8.6M超轻量中文模型和通用中文OCR模型。两者对比信息如下: - 相同点:两者使用相同的**算法**和**训练数据**; - 不同点:不同之处在于**骨干网络**和**通道参数**,超轻量模型使用MobileNetV3作为骨干网络,通用模型使用Resnet50_vd作为检测模型backbone,Resnet34_vd作为识别模型backbone,具体参数差异可对比两种模型训练的配置文件. |模型|骨干网络|检测训练配置|识别训练配置| |-|-|-|-| -|9.4M超轻量中文OCR模型|MobileNetV3+MobileNetV3|det_mv3_db.yml|rec_chinese_lite_train.yml| +|8.6M超轻量中文OCR模型|MobileNetV3+MobileNetV3|det_mv3_db.yml|rec_chinese_lite_train.yml| |通用中文OCR模型|Resnet50_vd+Resnet34_vd|det_r50_vd_db.yml|rec_chinese_common_train.yml| #### Q3.1.18:如何加入自己的检测算法? @@ -482,7 +509,104 @@ StyleText的用途主要是:提取style_image中的字体、背景等style信 **A**:Paddle版本问题,请安装2.0版本Paddle:pip install paddlepaddle==2.0.0。 +#### Q3.1.39: 字典中没有的字应该如何标注,是用空格代替还是直接忽略掉? + +**A**:可以直接按照图片内容标注,在编码的时候,会忽略掉字典中不存在的字符。 + +#### Q3.1.40: dygraph、release/2.0-rc1-0、release/2.0 这三个分支有什么区别? + +**A**:dygraph是动态图分支,并且适配Paddle-develop,当然目前在Paddle2.0上也可以运行,新特性我们会在这里更新。 +release/2.0-rc1-0是基于Paddle 2.0rc1的稳定版本,release/2.0是基于Paddle2.0的稳定版本,如果希望版本或者代 +码稳定的话,建议使用release/2.0分支,如果希望可以实时拿到一些最新特性,建议使用dygraph分支。 + +#### Q3.1.41: style-text 融合模块的输入是生成的前景图像以及背景特征权重吗? + +**A**:目前版本是直接输入两个图像进行融合的,没有用到feature_map,替换背景图片不会影响效果。 + +#### Q3.1.42: 训练识别任务的时候,在CPU上运行时,报错`The setting of Parameter-Server must has server_num or servers`。 + +**A**:这是训练任务启动方式不对造成的。 + +1. 在使用CPU或者单块GPU训练的时候,可以直接使用`python3 tools/train.py -c xxx.yml`的方式启动。 +2. 在使用多块GPU训练的时候,需要使用`distributed.launch`的方式启动,如`python3 -m paddle.distributed.launch --gpus '0,1,2,3' tools/train.py -c xxx.yml`,这种方式需要安装NCCL库,如果没有的话会报错。 + +#### Q3.1.43:使用StyleText进行数据合成时,文本(TextInput)的长度远超StyleInput的长度,该怎么处理与合成呢? + +**A**:在使用StyleText进行数据合成的时候,建议StyleInput的长度长于TextInput的长度。有2种方法可以处理上述问题: + +1. 将StyleInput按列的方向进行复制与扩充,直到其超过TextInput的长度。 +2. 将TextInput进行裁剪,保证每段TextInput都稍短于StyleInput,分别合成之后,再拼接在一起。 + +实际使用中发现,使用第2种方法的效果在长文本合成的场景中的合成效果更好,StyleText中提供的也是第2种数据合成的逻辑。 + + +#### Q3.1.44: 文字识别训练,设置图像高度不等于32时报错 + +**A**:ctc decode的时候,输入需要是1维向量,因此降采样之后,建议特征图高度为1,ppocr中,特征图会降采样32倍,之后高度正好为1,所以有2种解决方案 +- 指定输入shape高度为32(推荐) +- 在backbone的mv3中添加更多的降采样模块,保证输出的特征图高度为1 + +#### Q3.1.45: 增大batch_size模型训练速度没有明显提升 + +**A**:如果batch_size打得太大,加速效果不明显的话,可以试一下增大初始化内存的值,运行代码前设置环境变量: +``` +export FLAGS_initial_cpu_memory_in_mb=2000 # 设置初始化内存约2G左右 +``` + +#### Q3.1.46: 动态图分支(dygraph,release/2.0),训练模型和推理模型效果不一致 + +**A**:当前问题表现为:使用训练完的模型直接测试结果较好,但是转换为inference model后,预测结果不一致;出现这个问题一般是两个原因: +1. 预处理函数设置的不一致 +2. 后处理参数不一致 +repo中config.yml文件的前后处理参数和inference预测默认的超参数有不一致的地方,建议排查下训练模型预测和inference预测的前后处理, +参考[issue](https://github.com/PaddlePaddle/PaddleOCR/issues/2080)。 + +#### Q3.1.47: paddleocr package 报错 FatalError: `Process abort signal` is detected by the operating system + +**A**:首先,按照[安装文档](./installation.md)安装PaddleOCR的运行环境;另外,检查python环境,python3.6/3.8上可能会出现这个问题,建议用python3.7, +参考[issue](https://github.com/PaddlePaddle/PaddleOCR/issues/2069)。 + +#### Q3.1.48: 下载的识别模型解压后缺失文件,没有期望的inference.pdiparams, inference.pdmodel等文件 + +**A**:用解压软件解压可能会出现这个问题,建议二次解压下或者用命令行解压`tar xf ` + +#### Q3.1.49: 只想要识别票据中的部分片段,重新训练它的话,只需要训练文本检测模型就可以了吗?问文本识别,方向分类还是用原来的模型这样可以吗? + +**A**:可以的。PaddleOCR的检测、识别、方向分类器三个模型是独立的,在实际使用中可以优化和替换其中任何一个模型。 + +#### Q3.1.50: 为什么在checkpoints中load下载的预训练模型会报错? + +**A**: 这里有两个不同的概念: +- pretrained_model:指预训练模型,是已经训练完成的模型。这时会load预训练模型的参数,但并不会load学习率、优化器以及训练状态等。如果需要finetune,应该使用pretrained。 +- checkpoints:指之前训练的中间结果,例如前一次训练到了100个epoch,想接着训练。这时会load尝试所有信息,包括模型的参数,之前的状态等。 + +这里应该使用pretrained_model而不是checkpoints + +#### Q3.1.51: 如何用PaddleOCR识别视频中的文字? + +**A**: 目前PaddleOCR主要针对图像做处理,如果需要视频识别,可以先对视频抽帧,然后用PPOCR识别。 + +#### Q3.1.52: 相机采集的图像为四通道,应该如何处理? + +**A**: 有两种方式处理: +- 如果没有其他需要,可以在解码数据的时候指定模式为三通道,例如如果使用opencv,可以使用cv::imread(img_path, cv::IMREAD_COLOR)。 +- 如果其他模块需要处理四通道的图像,那也可以在输入PaddleOCR模块之前进行转换,例如使用cvCvtColor(&img,img3chan,CV_RGBA2RGB)。 + +#### Q3.1.53: 预测时提示图像过大,显存、内存溢出了,应该如何处理? +**A**: 可以按照这个PR的修改来缓解显存、内存占用 [#2230](https://github.com/PaddlePaddle/PaddleOCR/pull/2230) + +#### 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提供的四点标注,可以标注各种倾斜角度的文本。 + + + ### 数据集 #### Q3.2.1:如何制作PaddleOCR支持的数据格式 @@ -576,6 +700,7 @@ StyleText的用途主要是:提取style_image中的字体、背景等style信 #### Q3.2.18: PaddleOCR动态图版本如何finetune? **A**:finetune需要将配置文件里的 Global.load_static_weights设置为false,如果没有此字段可以手动添加,然后将模型地址放到Global.pretrained_model字段下即可。 + ### 模型训练调优 @@ -725,10 +850,33 @@ ps -axu | grep train.py | awk '{print $2}' | xargs kill -9 **A**:1.1和2.0的模型一样,微调时,垂直排列的文字需要逆时针旋转 90°后加入训练,上下颠倒的需要旋转为水平的。 #### Q3.3.30: 模型训练过程中如何得到 best_accuracy 模型? + **A**:配置文件里的eval_batch_step字段用来控制多少次iter进行一次eval,在eval完成后会自动生成 best_accuracy 模型,所以如果希望很快就能拿到best_accuracy模型,可以将eval_batch_step改小一点,如改为[10,10],这样表示第10次迭代后,以后没隔10个迭代就进行一次模型的评估。 +#### Q3.3.31: Cosine学习率的更新策略是怎样的?训练过程中为什么会在一个值上停很久? + +**A**: Cosine学习率的说明可以参考[这里](https://www.paddlepaddle.org.cn/documentation/docs/zh/api/paddle/optimizer/lr/CosineAnnealingDecay_cn.html#cosineannealingdecay) + +在PaddleOCR中,为了让学习率更加平缓,我们将其中的epoch调整成了iter。 +学习率的更新会和总的iter数量有关。当iter比较大时,会经过较多iter才能看出学习率的值有变化。 + +#### Q3.3.32: 之前的CosineWarmup方法为什么不见了? + +**A**: 我们对代码结构进行了调整,目前的Cosine可以覆盖原有的CosineWarmup的功能,只需要在配置文件中增加相应配置即可。 +例如下面的代码,可以设置warmup为2个epoch: +``` +lr: + name: Cosine + learning_rate: 0.001 + warmup_epoch: 2 +``` + +#### Q3.3.33: 训练识别和检测时学习率要加上warmup,目的是什么? +**A**: Warmup机制先使学习率从一个较小的值逐步升到一个较大的值,而不是直接就使用较大的学习率,这样有助于模型的稳定收敛。在OCR检测和OCR识别中,一般会带来精度~0.5%的提升。 + + ### 预测部署 #### Q3.4.1:如何pip安装opt模型转换工具? @@ -841,7 +989,8 @@ ps -axu | grep train.py | awk '{print $2}' | xargs kill -9 **A**:使用EAST或SAST模型进行推理预测时,需要在命令中指定参数--det_algorithm="EAST" 或 --det_algorithm="SAST",使用DB时不用指定是因为该参数默认值是"DB":https://github.com/PaddlePaddle/PaddleOCR/blob/e7a708e9fdaf413ed7a14da8e4a7b4ac0b211e42/tools/infer/utility.py#L43 #### Q3.4.25: PaddleOCR模型Python端预测和C++预测结果不一致? -正常来说,python端预测和C++预测文本是一致的,如果预测结果差异较大, + +**A**:正常来说,python端预测和C++预测文本是一致的,如果预测结果差异较大, 建议首先排查diff出现在检测模型还是识别模型,或者尝试换其他模型是否有类似的问题。 其次,检查python端和C++端数据处理部分是否存在差异,建议保存环境,更新PaddleOCR代码再试下。 如果更新代码或者更新代码都没能解决,建议在PaddleOCR微信群里或者issue中抛出您的问题。 @@ -889,3 +1038,36 @@ Paddle2ONNX支持转换的[模型列表](https://github.com/PaddlePaddle/Paddle2 #### Q3.4.34: 2.0训练出来的模型,能否在1.1版本上进行部署? **A**:这个是不建议的,2.0训练出来的模型建议使用dygraph分支里提供的部署代码。 + +#### Q3.4.35: 怎么解决paddleOCR在T4卡上有越预测越慢的情况? +**A**: +1. T4 GPU没有主动散热,因此在测试的时候需要在每次infer之后需要sleep 30ms,否则机器容易因为过热而降频(inference速度会变慢),温度过高也有可能会导致宕机。 +2. T4在不使用的时候,也有可能会降频,因此在做benchmark的时候需要锁频,下面这两条命令可以进行锁频。 +``` +nvidia-smi -i 0 -pm ENABLED +nvidia-smi --lock-gpu-clocks=1590 -i 0 +``` + +#### Q3.4.36: DB有些框太贴文本了反而去掉了一些文本的边角影响识别,这个问题有什么办法可以缓解吗? + +**A**:可以把后处理的参数unclip_ratio适当调大一点。 + +#### Q3.4.37: 在windows上进行cpp inference的部署时,总是提示找不到`paddle_fluid.dll`和`opencv_world346.dll`, +**A**:有2种方法可以解决这个问题: + +1. 将paddle预测库和opencv库的地址添加到系统环境变量中。 +2. 将提示缺失的dll文件拷贝到编译产出的`ocr_system.exe`文件夹中。 + + +#### Q3.4.38:想在Mac上部署,从哪里下载预测库呢? + +**A**:Mac上的Paddle预测库可以从这里下载:[https://paddle-inference-lib.bj.bcebos.com/mac/2.0.0/cpu_avx_openblas/paddle_inference.tgz](https://paddle-inference-lib.bj.bcebos.com/mac/2.0.0/cpu_avx_openblas/paddle_inference.tgz) + + +#### Q3.4.39:内网环境如何进行服务化部署呢? + +**A**:仍然可以使用PaddleServing或者HubServing进行服务化部署,保证内网地址可以访问即可。 + +#### Q3.4.40: 使用hub_serving部署,延时较高,可能的原因是什么呀? + +**A**: 首先,测试的时候第一张图延时较高,可以多测试几张然后观察后几张图的速度;其次,如果是在cpu端部署serving端模型(如backbone为ResNet34),耗时较慢,建议在cpu端部署mobile(如backbone为MobileNetV3)模型。 diff --git a/doc/doc_ch/multi_languages.md b/doc/doc_ch/multi_languages.md old mode 100644 new mode 100755 index a8f7c2b77f64285e0edfbd22c248e84f0bb84d42..5785ae3fbee826643fc7d64a1404100342e3bb39 --- a/doc/doc_ch/multi_languages.md +++ b/doc/doc_ch/multi_languages.md @@ -11,13 +11,13 @@ - [2 快速使用](#快速使用) - [2.1 命令行运行](#命令行运行) - - [2.1.1 整图预测](#bash_检测+识别) - - [2.1.2 识别预测](#bash_识别) - - [2.1.3 检测预测](#bash_检测) + - [2.1.1 整图预测](#bash_检测+识别) + - [2.1.2 识别预测](#bash_识别) + - [2.1.3 检测预测](#bash_检测) - [2.2 python 脚本运行](#python_脚本运行) - - [2.2.1 整图预测](#python_检测+识别) - - [2.2.2 识别预测](#python_识别) - - [2.2.3 检测预测](#python_检测) + - [2.2.1 整图预测](#python_检测+识别) + - [2.2.2 识别预测](#python_识别) + - [2.2.3 检测预测](#python_检测) - [3 自定义训练](#自定义训练) - [4 支持语种及缩写](#语种缩写) diff --git a/doc/doc_ch/update.md b/doc/doc_ch/update.md old mode 100644 new mode 100755 index 3fe8a0c9ace4be31882b22fe75b88f18848e1ad9..39ee5862e824b9367394609dddf5671c2ccfbde8 --- a/doc/doc_ch/update.md +++ b/doc/doc_ch/update.md @@ -1,4 +1,9 @@ # 更新 +- 2021.4.8 release 2.1版本,新增AAAI 2021论文[端到端识别算法PGNet](./doc/doc_ch/pgnet.md)开源,[多语言模型](./doc/doc_ch/multi_languages.md)支持种类增加到80+。 +- 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种,包括中文简体、中文繁体、英文、法文、德文、韩文、日文、意大利文、西班牙文、葡萄牙文、俄罗斯文、阿拉伯文等,后续计划可以参考[多语言研发计划](https://github.com/PaddlePaddle/PaddleOCR/issues/1048) - 2020.12.15 更新数据合成工具[Style-Text](../../StyleText/README_ch.md),可以批量合成大量与目标场景类似的图像,在多个场景验证,效果明显提升。 - 2020.12.07 [FAQ](../../doc/doc_ch/FAQ.md)新增5个高频问题,总数124个,并且计划以后每周一都会更新,欢迎大家持续关注。 - 2020.11.25 更新半自动标注工具[PPOCRLabel](../../PPOCRLabel/README_ch.md),辅助开发者高效完成标注任务,输出格式与PP-OCR训练任务完美衔接。 diff --git a/doc/doc_en/multi_languages_en.md b/doc/doc_en/multi_languages_en.md old mode 100644 new mode 100755 index d1c4583f66f611fbef7191d52d32e02187853c9b..c56a429639f300ad94419498b497697803e02133 --- a/doc/doc_en/multi_languages_en.md +++ b/doc/doc_en/multi_languages_en.md @@ -5,21 +5,21 @@ -2021.4.9 supports the detection and recognition of 80 languages -2021.4.9 supports **lightweight high-precision** English model detection and recognition --[1 Installation](#Install) - -[1.1 paddle installation](#paddleinstallation) - -[1.2 paddleocr package installation](#paddleocr_package_install) - --[2 Quick Use](#Quick_Use) - -[2.1 Command line operation](#Command_line_operation) - -[2.1.1 Prediction of the whole image](#bash_detection+recognition) - -[2.1.2 Recognition](#bash_Recognition) - -[2.1.3 Detection](#bash_detection) - -[2.2 python script running](#python_Script_running) - -[2.2.1 Whole image prediction](#python_detection+recognition) - -[2.2.2 Recognition](#python_Recognition) - -[2.2.3 Detection](#python_detection) --[3 Custom Training](#Custom_Training) --[4 Supported languages and abbreviations](#language_abbreviations) +- [1 Installation](#Install) + - [1.1 paddle installation](#paddleinstallation) + - [1.2 paddleocr package installation](#paddleocr_package_install) + +- [2 Quick Use](#Quick_Use) + - [2.1 Command line operation](#Command_line_operation) + - [2.1.1 Prediction of the whole image](#bash_detection+recognition) + - [2.1.2 Recognition](#bash_Recognition) + - [2.1.3 Detection](#bash_detection) + - [2.2 python script running](#python_Script_running) + - [2.2.1 Whole image prediction](#python_detection+recognition) + - [2.2.2 Recognition](#python_Recognition) + - [2.2.3 Detection](#python_detection) +- [3 Custom Training](#Custom_Training) +- [4 Supported languages and abbreviations](#language_abbreviations) ## 1 Installation diff --git a/doc/doc_en/update_en.md b/doc/doc_en/update_en.md old mode 100644 new mode 100755 index 1e80012e0608f0e28291d0f57b5a5d0beffe2e8c..10aa2c7d658d659b9cd6e10bcef6b64b9650287f --- a/doc/doc_en/update_en.md +++ b/doc/doc_en/update_en.md @@ -1,4 +1,7 @@ # RECENT UPDATES +- 2021.4.8 Release PaddleOCRv2.1(branch release/2.1). Newly released AAAI 2021 end-to-end algorithm [PGNet](./doc/doc_ch/pgnet.md) and [Multi language recognition model](./doc/doc_ch/multi_languages.md), support more than 80 language recognition. +- 2021.2.8 Release PaddleOCRv2.0 (branch release/2.0). Refer to [release note](https://github.com/PaddlePaddle/PaddleOCR/releases/tag/v2.0.0) for more details. +- 2021.1.21 update more than 25+ multilingual recognition models [models list](./doc/doc_en/models_list_en.md), including:English, Chinese, German, French, Japanese,Spanish,Portuguese Russia Arabic and so on. Models for more languages will continue to be updated [Develop Plan](https://github.com/PaddlePaddle/PaddleOCR/issues/1048). - 2020.12.15 update Data synthesis tool, i.e., [Style-Text](../../StyleText/README.md),easy to synthesize a large number of images which are similar to the target scene image. - 2020.11.25 Update a new data annotation tool, i.e., [PPOCRLabel](../../PPOCRLabel/README.md), which is helpful to improve the labeling efficiency. Moreover, the labeling results can be used in training of the PP-OCR system directly. - 2020.9.22 Update the PP-OCR technical article, https://arxiv.org/abs/2009.09941