Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
s920243400
PaddleOCR
提交
3115d89a
P
PaddleOCR
项目概览
s920243400
/
PaddleOCR
与 Fork 源项目一致
Fork自
PaddlePaddle / PaddleOCR
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
PaddleOCR
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
3115d89a
编写于
5月 24, 2021
作者:
M
MissPenguin
提交者:
GitHub
5月 24, 2021
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #2882 from littletomatodonkey/2.1/add_faq_20210524
add faq 2021-05-24
上级
1ef7dbc9
c0c71ffa
变更
2
显示空白变更内容
内联
并排
Showing
2 changed file
with
59 addition
and
32 deletion
+59
-32
README_ch.md
README_ch.md
+4
-4
doc/doc_ch/FAQ.md
doc/doc_ch/FAQ.md
+55
-28
未找到文件。
README_ch.md
浏览文件 @
3115d89a
...
...
@@ -4,11 +4,11 @@
PaddleOCR旨在打造一套丰富、领先、且实用的OCR工具库,助力使用者训练出更好的模型,并应用落地。
## 注意
PaddleOCR同时支持动态图与静态图两种编程范式
-
动态图版本:release/2.1(默认分支,开发分支为dygraph分支),需将paddle版本升级至2.0.0(
[
快速安装
](
./doc/doc_ch/installation.md
)
)
-
动态图版本:release/2.1(默认分支,开发分支为dygraph分支),需将paddle版本升级至2.0.0
或以上版本
(
[
快速安装
](
./doc/doc_ch/installation.md
)
)
-
静态图版本:develop分支
**近期更新**
-
2021.5.
17
[
FAQ
](
./doc/doc_ch/FAQ.md
)
新增5个高频问题,总数223
个,每周一都会更新,欢迎大家持续关注。
-
2021.5.
24
[
FAQ
](
./doc/doc_ch/FAQ.md
)
新增5个高频问题,总数228
个,每周一都会更新,欢迎大家持续关注。
-
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.8 正式发布PaddleOCRv2.0(branch release/2.0)并设置为推荐用户使用的默认分支. 发布的详细内容,请参考: https://github.com/PaddlePaddle/PaddleOCR/releases/tag/v2.0.0
...
...
@@ -104,8 +104,8 @@ PaddleOCR同时支持动态图与静态图两种编程范式
-
[
效果展示
](
#效果展示
)
-
FAQ
-
[
【精选】OCR精选10个问题
](
./doc/doc_ch/FAQ.md
)
-
[
【理论篇】OCR通用4
3
个问题
](
./doc/doc_ch/FAQ.md
)
-
[
【实战篇】PaddleOCR实战17
0
个问题
](
./doc/doc_ch/FAQ.md
)
-
[
【理论篇】OCR通用4
4
个问题
](
./doc/doc_ch/FAQ.md
)
-
[
【实战篇】PaddleOCR实战17
4
个问题
](
./doc/doc_ch/FAQ.md
)
-
[
技术交流群
](
#欢迎加入PaddleOCR技术交流群
)
-
[
参考文献
](
./doc/doc_ch/reference.md
)
-
[
许可证书
](
#许可证书
)
...
...
doc/doc_ch/FAQ.md
浏览文件 @
3115d89a
...
...
@@ -9,14 +9,14 @@
## PaddleOCR常见问题汇总(持续更新)
*
[
近期更新(2021.5.
17
)
](
#近期更新
)
*
[
近期更新(2021.5.
24
)
](
#近期更新
)
*
[
【精选】OCR精选10个问题
](
#OCR精选10个问题
)
*
[
【理论篇】OCR通用4
3
个问题
](
#OCR通用问题
)
*
[
【理论篇】OCR通用4
4
个问题
](
#OCR通用问题
)
*
[
基础知识13题
](
#基础知识
)
*
[
数据集9题
](
#数据集2
)
*
[
模型训练调优2
1
题
](
#模型训练调优2
)
*
[
【实战篇】PaddleOCR实战17
0
个问题
](
#PaddleOCR实战问题
)
*
[
使用咨询
68
题
](
#使用咨询
)
*
[
模型训练调优2
2
题
](
#模型训练调优2
)
*
[
【实战篇】PaddleOCR实战17
4
个问题
](
#PaddleOCR实战问题
)
*
[
使用咨询
72
题
](
#使用咨询
)
*
[
数据集18题
](
#数据集3
)
*
[
模型训练调优36题
](
#模型训练调优3
)
*
[
预测部署48题
](
#预测部署3
)
...
...
@@ -24,38 +24,34 @@
<a
name=
"近期更新"
></a>
## 近期更新(2021.5.17)
### Q
3.1.66: iaa里面添加的数据增强方式,是每张图像训练都会做增强还是随机的?如何添加一个数据增强方法
?
### Q
2.3.22: 目前知识蒸馏有哪些主要的实践思路
?
**A**
:iaa增强的训练配置参考:
[
链接
](
https://github.com/PaddlePaddle/PaddleOCR/blob/0ccc1720c252beb277b9e522a1b228eb6abffb8a/configs/det/ch_ppocr_v2.0/ch_det_mv3_db_v2.0.yml#L82
)
其中{ 'type': Fliplr, 'args': { 'p': 0.5 } } p是概率。新增数据增强,可以参考这个
[
方法
](
https://github.com/PaddlePaddle/PaddleOCR/blob/release%2F2.1/doc/doc_ch/add_new_algorithm.md#%E6%95%B0%E6%8D%AE%E5%8A%A0%E8%BD%BD%E5%92%8C%E5%A4%84%E7%90%86
)
**A**
:知识蒸馏即利用教师模型指导学生模型的训练,目前有3种主要的蒸馏思路:
1.
基于输出结果的蒸馏,即让学生模型学习教师模型的软标签(分类或者OCR识别等任务中)或者概率热度图(分割等任务中)。
2.
基于特征图的蒸馏,即让学生模型学习教师模型中间层的特征图,拟合中间层的一些特征。
3.
基于关系的蒸馏,针对不同的样本(假设个数为N),教师模型会有不同的输出,那么可以基于不同样本的输出,计算一个NxN的相关性矩阵,可以让学生模型去学习教师模型关于不同样本的相关性矩阵。
### Q3.1.67: PGNet训练中文弯曲数据集,可视化时弯曲文本无法显示
。
当然,知识蒸馏方法日新月异,也欢迎大家提出更多的总结与建议
。
**A**
: 可能是因为安装的OpenCV里,cv2.putText不能显示中文的原因,可以尝试用Pillow来添加显示中文,需要改draw_e2e_res函数里面的代码,可以参考如下代码:
```
box = box.astype(np.int32).reshape((-1, 1, 2))
cv2.polylines(src_im, [box], True, color=(255, 255, 0), thickness=2)
### Q3.1.69: 怎么加速训练过程呢?
from PIL import ImageFont, ImageDraw, Image
img = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
draw = ImageDraw.Draw(img)
fontStyle = ImageFont.truetype(
"font/msyh.ttc", 16, encoding="utf-8")
draw.text((int(box[0, 0, 0]), int(box[0, 0, 1])), text, (0, 255, 0), font=fontStyle)
**A**
:OCR模型训练过程中一般包含大量的数据增广,这些数据增广是比较耗时的,因此可以离线生成大量增广后的图像,直接送入网络进行训练,机器资源充足的情况下,也可以使用分布式训练的方法,可以参考
[
分布式训练教程文档
](
https://github.com/PaddlePaddle/PaddleOCR/blob/dygraph/doc/doc_ch/distributed_training.md
)
。
src_im= cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2BGR)
```
### Q3.1.68: 用PGNet做进行端到端训练时,数据集标注的点的个数必须都是统一一样的吗? 能不能随意标点数,只要能够按顺时针从左上角开始标这样?
**A**
: 目前代码要求标注为统一的点数。
### Q3.1.70: 文字识别模型模型的输出矩阵需要进行解码才能得到识别的文本。代码中实现为preds_idx = preds.argmax(axis=2),也就是最佳路径解码法。这是一种贪心算法,是每一个时间步只将最大概率的字符作为当前时间步的预测输出,但得到的结果不一定是最好的。为什么不使用beam search这种方式进行解码呢?
#### Q3.4.47: 请教如何优化检测阶段时长?
**A**
:实验发现,使用贪心的方法去做解码,识别精度影响不大,但是速度方面的优势比较明显,因此PaddleOCR中使用贪心算法去做识别的解码。
**A**
: 预测单张图会慢一点,如果批量预测,第一张图比较慢,后面就快了,因为最开始一些初始化操作比较耗时。服务部署的话,访问一次后,后面再访问就不会初始化了,推理的话每次都需要初始化的。
### Q3.1.71: 遇到中英文识别模型不支持的字符,该如何对模型做微调?
### Q3.4.48: paddle serving 本地启动调用失败,怎么判断是否正常工作?
**A**
:如果希望识别中英文识别模型中不支持的字符,需要更新识别的字典,并完成微调过程。比如说如果希望模型能够进一步识别罗马数字,可以按照以下步骤完成模型微调过程。
1.
准备中英文识别数据以及罗马数字的识别数据,用于训练,同时保证罗马数字和中英文识别数字的效果;
2.
修改默认的字典文件,在后面添加罗马数字的字符;
3.
下载PaddleOCR提供的预训练模型,配置预训练模型和数据的路径,开始训练。
**A**
:没有打印出预测结果,说明启动失败。可以参考这篇文档重新配置下动态图的paddle serving:https://github.com/PaddlePaddle/PaddleOCR/blob/dygraph/deploy/pdserving/README_CN.md
### Q3.1.72: 文字识别主要有CRNN和Attention两种方式,但是在我们的说明文档中,CRNN有对应的论文,但是Attention没看到,这个具体在哪里呢?
**A**
:文字识别主要有CTC和Attention两种方式,基于CTC的算法有CRNN、Rosetta、StarNet,基于Attention的方法有RARE、其他的算法PaddleOCR里没有提供复现代码。论文的链接可以参考:
[
PaddleOCR文本识别算法教程文档
](
https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.1/doc/doc_ch/algorithm_overview.md#%E6%96%87%E6%9C%AC%E8%AF%86%E5%88%AB%E7%AE%97%E6%B3%95
)
...
...
@@ -340,6 +336,16 @@ src_im= cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2BGR)
#### Q2.3.21: 端到端算法PGNet是否支持中文识别,速度会很慢嘛?
**A**
:目前开源的PGNet算法模型主要是用于检测英文数字,对于中文的识别需要自己训练,大家可以使用开源的端到端中文数据集,而对于复杂文本(弯曲文本)的识别,也可以自己构造一批数据集针对进行训练,对于推理速度,可以先将模型转换为inference再进行预测,速度应该会相当可观。
### Q2.3.22: 目前知识蒸馏有哪些主要的实践思路?
**A**
:知识蒸馏即利用教师模型指导学生模型的训练,目前有3种主要的蒸馏思路:
1.
基于输出结果的蒸馏,即让学生模型学习教师模型的软标签(分类或者OCR识别等任务中)或者概率热度图(分割等任务中)。
2.
基于特征图的蒸馏,即让学生模型学习教师模型中间层的特征图,拟合中间层的一些特征。
3.
基于关系的蒸馏,针对不同的样本(假设个数为N),教师模型会有不同的输出,那么可以基于不同样本的输出,计算一个NxN的相关性矩阵,可以让学生模型去学习教师模型关于不同样本的相关性矩阵。
当然,知识蒸馏方法日新月异,也欢迎大家提出更多的总结与建议。
<a
name=
"PaddleOCR实战问题"
></a>
## 【实战篇】PaddleOCR实战问题
...
...
@@ -693,6 +699,27 @@ src_im= cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2BGR)
**A**
: 目前代码要求标注为统一的点数。
### Q3.1.69: 怎么加速训练过程呢?
**A**
:OCR模型训练过程中一般包含大量的数据增广,这些数据增广是比较耗时的,因此可以离线生成大量增广后的图像,直接送入网络进行训练,机器资源充足的情况下,也可以使用分布式训练的方法,可以参考
[
分布式训练教程文档
](
https://github.com/PaddlePaddle/PaddleOCR/blob/dygraph/doc/doc_ch/distributed_training.md
)
。
### Q3.1.70: 文字识别模型模型的输出矩阵需要进行解码才能得到识别的文本。代码中实现为preds_idx = preds.argmax(axis=2),也就是最佳路径解码法。这是一种贪心算法,是每一个时间步只将最大概率的字符作为当前时间步的预测输出,但得到的结果不一定是最好的。为什么不使用beam search这种方式进行解码呢?
**A**
:实验发现,使用贪心的方法去做解码,识别精度影响不大,但是速度方面的优势比较明显,因此PaddleOCR中使用贪心算法去做识别的解码。
### Q3.1.71: 遇到中英文识别模型不支持的字符,该如何对模型做微调?
**A**
:如果希望识别中英文识别模型中不支持的字符,需要更新识别的字典,并完成微调过程。比如说如果希望模型能够进一步识别罗马数字,可以按照以下步骤完成模型微调过程。
1.
准备中英文识别数据以及罗马数字的识别数据,用于训练,同时保证罗马数字和中英文识别数字的效果;
2.
修改默认的字典文件,在后面添加罗马数字的字符;
3.
下载PaddleOCR提供的预训练模型,配置预训练模型和数据的路径,开始训练。
### Q3.1.72: 文字识别主要有CRNN和Attention两种方式,但是在我们的说明文档中,CRNN有对应的论文,但是Attention没看到,这个具体在哪里呢?
**A**
:文字识别主要有CTC和Attention两种方式,基于CTC的算法有CRNN、Rosetta、StarNet,基于Attention的方法有RARE、其他的算法PaddleOCR里没有提供复现代码。论文的链接可以参考:
[
PaddleOCR文本识别算法教程文档
](
https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.1/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
name=
"数据集3"
></a>
### 数据集
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录