提交 a114d53a 编写于 作者: T tink2123

update faq

上级 e0c8b889
......@@ -9,48 +9,48 @@
## PaddleOCR常见问题汇总(持续更新)
* [近期更新(2020.11.09](#近期更新)
* [近期更新(2020.11.16](#近期更新)
* [【精选】OCR精选10个问题](#OCR精选10个问题)
* [【理论篇】OCR通用25个问题](#OCR通用问题)
* [基础知识6](#基础知识)
* [【理论篇】OCR通用27个问题](#OCR通用问题)
* [基础知识7](#基础知识)
* [数据集5题](#数据集)
* [模型训练调优6](#模型训练调优)
* [模型训练调优7](#模型训练调优)
* [预测部署8题](#预测部署)
* [【实战篇】PaddleOCR实战69个问题](#PaddleOCR实战问题)
* [【实战篇】PaddleOCR实战72个问题](#PaddleOCR实战问题)
* [使用咨询19题](#使用咨询)
* [数据集10题](#数据集)
* [模型训练调优21题](#模型训练调优)
* [预测部署19](#预测部署)
* [预测部署21](#预测部署)
<a name="近期更新"></a>
## 近期更新(2020.11.09)
#### Q2.1.6 预处理部分,图片的长和宽为什么要处理成32的倍数
**A**以检测中的resnet骨干网络为例,图像输入网络之后,需要经过5次2倍降采样,共32倍,因此建议输入的图像尺寸为32的倍数
#### Q3.4.20:文档场景中,使用DB模型会出现整行漏检的情况应该怎么解决
**A**可以在预测时调小 det_db_box_thresh 阈值,默认为0.5, 可调小至0.3观察效果
#### 3.1.19:训练的时候报错`reader raised an exception`,但是具体不知道是啥问题?
#### Q2.1.7:类似泰语这样的小语种,部分字会占用两个字符甚至三个字符,请问如何制作字典。
**A**这个一般是因为标注文件格式有问题或者是标注文件中的图片路径有问题导致的,在[tools/train.py](../../tools/train.py)文件中有一个`test_reader`的函数,基于这个去检查一下数据的格式以及标注,确认没问题之后再进行模型训练
**A**处理字符的时候,把多字符的当作一个字就行,字典中每行是一个字
#### Q3.3.21: 使用合成数据精调小模型后,效果可以,但是还没开源的小infer模型效果好,这是为什么呢
#### Q2.3.7:识别训练时,训练集精度已经到达90了,但验证集精度一直在70,涨不上去怎么办
**A**
**A**训练集精度90,测试集70多的话,应该是过拟合了,有两个可尝试的方法:
(1)要保证使用的配置文件和pretrain weights是对应的;
(1)加入更多的增广方式或者调大增广prob的[概率](https://github.com/PaddlePaddle/PaddleOCR/blob/a501603d54ff5513fc4fc760319472e59da25424/ppocr/data/rec/img_tools.py#L307),默认为0.4。
(2)在微调时,一般都需要真实数据,如果使用合成数据,效果反而可能会有下降,PaddleOCR中放出的识别inference模型也是基于预训练模型在真实数据上微调得到的,效果提升比较明显;
(2)调大系统的[l2 dcay值](https://github.com/PaddlePaddle/PaddleOCR/blob/a501603d54ff5513fc4fc760319472e59da25424/configs/rec/ch_ppocr_v1.1/rec_chinese_lite_train_v1.1.yml#L47)
(3)在训练的时候,文本长度超过25的训练图像都会被丢弃,因此需要看下真正参与训练的图像有多少,太少的话也容易过拟合。
#### Q3.4.18:对于一些尺寸较大的文档类图片,在检测时会有较多的漏检,怎么避免这种漏检的问题呢?
**A**:PaddleOCR中在图像最长边大于960时,将图像等比例缩放为长边960的图像再进行预测,对于这种图像,可以通过修改det_max_side_len,增大检测的最长边:[tools/infer/utility.py#L45](../../tools/infer/utility.py#L45)
#### Q3.4.21:自己训练的det模型,在同一张图片上,inference模型与eval模型结果差别很大,为什么?
**A**:这是由于图片预处理不同造成的。如果训练的det模型图片输入并不是默认的shape[600, 600],
eval的程序中图片预处理方式与train时一致(由xxx_reader.yml中的test_image_shape参数决定缩放大小)
但predict_eval.py中的图片预处理方式由程序里的preprocess_params决定,最好不要传入max_side_len,而是传入和训练时一样大小的test_image_shape。
#### Q3.4.19:在使用训练好的识别模型进行预测的时候,发现有很多重复的字,这个怎么解决呢
#### Q3.4.22:训练ccpd车牌数据集,训练集准确率高,测试均是错误的,这是什么原因
**A**可以看下训练的尺度和预测的尺度是否相同,如果训练的尺度为`[3, 32, 320]`,预测的尺度为`[3, 64, 640]`,则会有比较多的重复识别现象
**A**这是因为训练时将shape修改为[3, 70, 220], 预测时对图片resize,会把高度压缩至32,影响测试结果。注释掉[resize代码](https://github.com/PaddlePaddle/PaddleOCR/blob/ed4313d611b7708a7763d4612f00cb7f318a0e1f/tools/infer/predict_rec.py#L54-L55)可以解决问题
<a name="OCR精选10个问题"></a>
......@@ -166,6 +166,9 @@
#### Q2.1.6 预处理部分,图片的长和宽为什么要处理成32的倍数?
**A**:以检测中的resnet骨干网络为例,图像输入网络之后,需要经过5次2倍降采样,共32倍,因此建议输入的图像尺寸为32的倍数。
#### Q2.1.7:类似泰语这样的小语种,部分字会占用两个字符甚至三个字符,请问如何制作字典。
**A**:处理字符的时候,把多字符的当作一个字就行,字典中每行是一个字。
### 数据集
......@@ -223,6 +226,14 @@
**A**:在中文识别模型训练时,并不是采用直接将训练样本缩放到[3,32,320]进行训练,而是先等比例缩放图像,保证图像高度为32,宽度不足320的部分补0,宽高比大于10的样本直接丢弃。预测时,如果是单张图像预测,则按上述操作直接对图像缩放,不做宽度320的限制。如果是多张图预测,则采用batch方式预测,每个batch的宽度动态变换,采用这个batch中最长宽度。
#### Q2.3.7:识别训练时,训练集精度已经到达90了,但验证集精度一直在70,涨不上去怎么办?
**A**:训练集精度90,测试集70多的话,应该是过拟合了,有两个可尝试的方法:
(1)加入更多的增广方式或者调大增广prob的[概率](https://github.com/PaddlePaddle/PaddleOCR/blob/a501603d54ff5513fc4fc760319472e59da25424/ppocr/data/rec/img_tools.py#L307),默认为0.4。
(2)调大系统的[l2 dcay值](https://github.com/PaddlePaddle/PaddleOCR/blob/a501603d54ff5513fc4fc760319472e59da25424/configs/rec/ch_ppocr_v1.1/rec_chinese_lite_train_v1.1.yml#L47)
### 预测部署
#### Q2.4.1:请问对于图片中的密集文字,有什么好的处理办法吗?
......@@ -266,6 +277,7 @@
**A**:表格目前学术界比较成熟的解决方案不多 ,可以尝试下分割的论文方案。
<a name="PaddleOCR实战问题"></a>
## 【实战篇】PaddleOCR实战问题
......@@ -349,7 +361,7 @@
|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|
#### 3.1.18:如何加入自己的检测算法?
#### Q3.1.18:如何加入自己的检测算法?
**A**:1. 在ppocr/modeling对应目录下分别选择backbone,head。如果没有可用的可以新建文件并添加
2. 在ppocr/data下选择对应的数据处理处理方式,如果没有可用的可以新建文件并添加
3. 在ppocr/losses下新建文件并编写loss
......@@ -357,7 +369,7 @@
5. 将上面四个步骤里新添加的类或函数参照yml文件写到配置中
#### 3.1.19:训练的时候报错`reader raised an exception`,但是具体不知道是啥问题?
#### Q3.1.19:训练的时候报错`reader raised an exception`,但是具体不知道是啥问题?
**A**:这个一般是因为标注文件格式有问题或者是标注文件中的图片路径有问题导致的,在[tools/train.py](../../tools/train.py)文件中有一个`test_reader`的函数,基于这个去检查一下数据的格式以及标注,确认没问题之后再进行模型训练。
......@@ -623,7 +635,20 @@ return paddle.reader.multiprocess_reader(readers, False, queue_size=320)
**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]`,则会有比较多的重复识别现象。
#### Q3.4.20:文档场景中,使用DB模型会出现整行漏检的情况应该怎么解决?
**A**:可以在预测时调小 det_db_box_thresh 阈值,默认为0.5, 可调小至0.3观察效果。
#### Q3.4.21:自己训练的det模型,在同一张图片上,inference模型与eval模型结果差别很大,为什么?
**A**:这是由于图片预处理不同造成的。如果训练的det模型图片输入并不是默认的shape[600, 600],eval的程序中图片预处理方式与train时一致
(由xxx_reader.yml中的test_image_shape参数决定缩放大小,但predict_eval.py中的图片预处理方式由程序里的preprocess_params决定,
最好不要传入max_side_len,而是传入和训练时一样大小的test_image_shape。
#### Q3.4.22:训练ccpd车牌数据集,训练集准确率高,测试均是错误的,这是什么原因?
**A**:这是因为训练时将shape修改为[3, 70, 220], 预测时对图片resize,会把高度压缩至32,影响测试结果。注释掉[resize代码](https://github.com/PaddlePaddle/PaddleOCR/blob/ed4313d611b7708a7763d4612f00cb7f318a0e1f/tools/infer/predict_rec.py#L54-L55)可以解决问题。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册