diff --git a/README_ch.md b/README_ch.md index c8829f0b..7e0c3c13 100644 --- a/README_ch.md +++ b/README_ch.md @@ -4,7 +4,7 @@ PaddleOCR旨在打造一套丰富、领先、且实用的OCR工具库,助力使用者训练出更好的模型,并应用落地。 **近期更新** -- 2020.11.2 [FAQ](./doc/doc_ch/FAQ.md)新增5个高频问题,共计99个常见问题及解答,并且计划以后每周一都会更新,欢迎大家持续关注。 +- 2020.11.9 [FAQ](./doc/doc_ch/FAQ.md)新增5个高频问题,共计104个常见问题及解答,并且计划以后每周一都会更新,欢迎大家持续关注。 - 2020.9.22 更新PP-OCR技术文章,https://arxiv.org/abs/2009.09941 - 2020.9.19 更新超轻量压缩ppocr_mobile_slim系列模型,整体模型3.5M(详见[PP-OCR Pipeline](#PP-OCR)),适合在移动端部署使用。[模型下载](#模型下载) - 2020.9.17 更新超轻量ppocr_mobile系列和通用ppocr_server系列中英文ocr模型,媲美商业效果。[模型下载](#模型下载) @@ -13,7 +13,6 @@ PaddleOCR旨在打造一套丰富、领先、且实用的OCR工具库,助力 - 2020.8.21 更新8月18日B站直播课回放和PPT,课节2,易学易用的OCR工具大礼包,[获取地址](https://aistudio.baidu.com/aistudio/education/group/info/1519) - [More](./doc/doc_ch/update.md) - ## 特性 - PPOCR系列高质量预训练模型,准确的识别效果 @@ -98,8 +97,8 @@ PaddleOCR旨在打造一套丰富、领先、且实用的OCR工具库,助力 - [效果展示](#效果展示) - FAQ - [【精选】OCR精选10个问题](./doc/doc_ch/FAQ.md) - - [【理论篇】OCR通用24个问题](./doc/doc_ch/FAQ.md) - - [【实战篇】PaddleOCR实战65个问题](./doc/doc_ch/FAQ.md) + - [【理论篇】OCR通用25个问题](./doc/doc_ch/FAQ.md) + - [【实战篇】PaddleOCR实战69个问题](./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 27c4fb26..1c29192d 100644 --- a/doc/doc_ch/FAQ.md +++ b/doc/doc_ch/FAQ.md @@ -11,46 +11,44 @@ * [近期更新(2020.11.02)](#近期更新) * [【精选】OCR精选10个问题](#OCR精选10个问题) -* [【理论篇】OCR通用24个问题](#OCR通用问题) +* [【理论篇】OCR通用25个问题](#OCR通用问题) * [基础知识6题](#基础知识) - * [数据集4题](#数据集) + * [数据集5题](#数据集) * [模型训练调优6题](#模型训练调优) * [预测部署8题](#预测部署) -* [【实战篇】PaddleOCR实战65个问题](#PaddleOCR实战问题) - * [使用咨询20题](#使用咨询) +* [【实战篇】PaddleOCR实战69个问题](#PaddleOCR实战问题) + * [使用咨询19题](#使用咨询) * [数据集10题](#数据集) - * [模型训练调优18题](#模型训练调优) - * [预测部署17题](#预测部署) + * [模型训练调优21题](#模型训练调优) + * [预测部署19题](#预测部署) -## 近期更新(2020.11.02) +## 近期更新(2020.11.09) -#### Q3.4.17: 预测内存泄漏问题 +#### Q2.1.6 预处理部分,图片的长和宽为什么要处理成32的倍数? +* 以检测中的resnet骨干网络为例,图像输入网络之后,需要经过5次2倍降采样,共32倍,因此建议输入的图像尺寸为32的倍数。 -**A**:1. 使用hubserving出现内存泄漏,该问题为已知问题,预计在paddle2.0正式版中解决。相关讨论见[issue](https://github.com/PaddlePaddle/PaddleHub/issues/682) +#### 3.1.19:训练的时候报错`reader raised an exception`,但是具体不知道是啥问题? -2. C++ 预测出现内存泄漏,该问题已经在paddle2.0rc版本中解决,建议安装paddle2.0rc版本,并更新PaddleOCR代码到最新。 +**A**:这个一般是因为标注文件格式有问题或者是标注文件中的图片路径有问题导致的,在[tools/train.py](../../tools/train.py)文件中有一个`test_reader`的函数,基于基于这个去检查一下数据的格式以及标注,确认没问题之后再进行模型训练。 -#### Q3.3.18: cpp_infer 在Windows下使用vs2015编译不通过 +#### Q3.3.21: 使用合成数据精调小模型后,效果可以,但是还没开源的小infer模型效果好,这是为什么呢? -**A**:1. windows上建议使用VS2019工具编译,具体编译细节参考[链接](https://github.com/PaddlePaddle/PaddleOCR/blob/develop/deploy/cpp_infer/docs/windows_vs2019_build.md) +**A**:1. 要保证使用的配置文件和pretrain weights是对应的; -2. 在release模式下而不是debug模式下编译,参考[issue](https://github.com/PaddlePaddle/PaddleOCR/issues/1023) +**A**:2. 在微调时,一般都需要真实数据,如果使用合成数据,效果反而可能会有下降,PaddleOCR中放出的识别inference模型也是基于预训练模型在真实数据上微调得到的,效果提升比较明显; -#### Q3.3.19: No module named 'tools.infer' +**A**:3. 在训练的时候,文本长度超过25的训练图像都会被丢弃,因此需要看下真正参与训练的图像有多少,太少的话也容易过拟合。 -**A**:1. 确保在PaddleOCR/目录下执行的指令,执行'export PYTHONPATH=.' +#### Q3.4.18:对于一些尺寸较大的文档类图片,在检测时会有较多的漏检,怎么避免这种漏检的问题呢? -2. 拉取github上最新代码,这个问题在10月底已修复。 +**A**:PaddleOCR中在图像最长边大于960时,将图像等比例缩放为长边960的图像再进行预测,对于这种图像,可以通过修改det_max_side_len,增大检测的最长边:[tools/infer/utility.py#L45](../../tools/infer/utility.py#L45) -#### Q3.3.20: 训练模型和测试模型的检测结果差距较大 -**A**:1. 检查两个模型使用的后处理参数是否是一样的,训练的后处理参数在配置文件中的[PostProcess](https://github.com/PaddlePaddle/PaddleOCR/blob/e9d533fc1fdf7bbce79947dde54b05011bb1e135/configs/det/det_mv3_db_v1.1.yml#L54)部分,测试模型的后处理参数在[tools/infer/utility.py](https://github.com/PaddlePaddle/PaddleOCR/blob/e9d533fc1fdf7bbce79947dde54b05011bb1e135/tools/infer/utility.py#L47)中,最新代码中两个后处理参数已保持一致。 +#### Q3.4.19:在使用训练好的识别模型进行预测的时候,发现有很多重复的字,这个怎么解决呢? -#### Q2.2.5: 文本行较紧密的情况下如何准确检测? - -**A**:使用基于分割的方法,如DB,检测密集文本行时,最好收集一批数据进行训练,并且在训练时,并将生成二值图像的[shrink_ratio](https://github.com/PaddlePaddle/PaddleOCR/blob/e9d533fc1fdf7bbce79947dde54b05011bb1e135/ppocr/data/det/make_shrink_map.py#L46)参数调小一些; +**A**:可以看下训练的尺度和预测的尺度是否相同,如果训练的尺度为`[3, 32, 320]`,预测的尺度为`[3, 64, 640]`,则会有比较多的重复识别现象。 @@ -163,6 +161,10 @@ #### Q2.1.5 多语言的字典里是混合了不同的语种,这个是有什么讲究吗?统一到一个字典里会对精度造成多大的损失? **A**:统一到一个字典里,会造成最后一层FC过大,增加模型大小。如果有特殊需求的话,可以把需要的几种语言合并字典训练模型,合并字典之后如果引入过多的形近字,可能会造成精度损失,字符平衡的问题可能也需要考虑一下。在PaddleOCR里暂时将语言字典分开。 +#### Q2.1.6 预处理部分,图片的长和宽为什么要处理成32的倍数? +* 以检测中的resnet骨干网络为例,图像输入网络之后,需要经过5次2倍降采样,共32倍,因此建议输入的图像尺寸为32的倍数。 + + ### 数据集 #### Q2.2.1:支持空格的模型,标注数据的时候是不是要标注空格?中间几个空格都要标注出来么? @@ -183,7 +185,7 @@ #### Q2.2.5: 文本行较紧密的情况下如何准确检测? -**A**:使用基于分割的方法,如DB,检测密集文本行时,最好收集一批数据进行训练,并且在训练时,并将生成二值图像的shrink_ratio参数调小一些; +**A**:使用基于分割的方法,如DB,检测密集文本行时,最好收集一批数据进行训练,并且在训练时,并将生成二值图像的shrink_ratio参数调小一些。 ### 模型训练调优 @@ -353,6 +355,11 @@ 5. 将上面四个步骤里新添加的类或函数参照yml文件写到配置中 +#### 3.1.19:训练的时候报错`reader raised an exception`,但是具体不知道是啥问题? + +**A**:这个一般是因为标注文件格式有问题或者是标注文件中的图片路径有问题导致的,在[tools/train.py](../../tools/train.py)文件中有一个`test_reader`的函数,基于基于这个去检查一下数据的格式以及标注,确认没问题之后再进行模型训练。 + + ### 数据集 #### Q3.2.1:如何制作PaddleOCR支持的数据格式 @@ -436,7 +443,7 @@ unclip_ratio: 文本框扩张的系数,关系到文本框的大小`` **A**:可以通过下面的脚本终止所有包含train.py字段的进程, -``` +```shell ps -axu | grep train.py | awk '{print $2}' | xargs kill -9 ``` @@ -519,6 +526,15 @@ return paddle.reader.multiprocess_reader(readers, False, queue_size=320) **A**:1. 检查两个模型使用的后处理参数是否是一样的,训练的后处理参数在配置文件中的PostProcess部分,测试模型的后处理参数在tools/infer/utility.py中,最新代码中两个后处理参数已保持一致。 +#### Q3.3.21: 使用合成数据精调小模型后,效果可以,但是还没开源的小infer模型效果好,这是为什么呢? + +**A**:1. 要保证使用的配置文件和pretrain weights是对应的; + +**A**:2. 在微调时,一般都需要真实数据,如果使用合成数据,效果反而可能会有下降,PaddleOCR中放出的识别inference模型也是基于预训练模型在真实数据上微调得到的,效果提升比较明显; + +**A**:3. 在训练的时候,文本长度超过25的训练图像都会被丢弃,因此需要看下真正参与训练的图像有多少,太少的话也容易过拟合。 + + ### 预测部署 #### Q3.4.1:如何pip安装opt模型转换工具? @@ -598,3 +614,12 @@ return paddle.reader.multiprocess_reader(readers, False, queue_size=320) **A**:1. 使用hubserving出现内存泄漏,该问题为已知问题,预计在paddle2.0正式版中解决。相关讨论见[issue](https://github.com/PaddlePaddle/PaddleHub/issues/682) **A**:2. C++ 预测出现内存泄漏,该问题已经在paddle2.0rc版本中解决,建议安装paddle2.0rc版本,并更新PaddleOCR代码到最新。 + +#### Q3.4.18:对于一些尺寸较大的文档类图片,在检测时会有较多的漏检,怎么避免这种漏检的问题呢? + +**A**:PaddleOCR中在图像最长边大于960时,将图像等比例缩放为长边960的图像再进行预测,对于这种图像,可以通过修改det_max_side_len,增大检测的最长边:[tools/infer/utility.py#L45](../../tools/infer/utility.py#L45) + + +#### Q3.4.19:在使用训练好的识别模型进行预测的时候,发现有很多重复的字,这个怎么解决呢? + +**A**:可以看下训练的尺度和预测的尺度是否相同,如果训练的尺度为`[3, 32, 320]`,预测的尺度为`[3, 64, 640]`,则会有比较多的重复识别现象。 diff --git a/requirments.txt b/requirements.txt similarity index 100% rename from requirments.txt rename to requirements.txt