PaddlePaddle / PaddleOCR

Awesome multilingual OCR toolkits based on PaddlePaddle (practical ultra lightweight OCR system, support 80+ languages recognition, provide data annotation and synthesis tools, support training and deployment among server, mobile, embedded and IoT devices)
https://paddlepaddle.github.io/PaddleOCR/
Apache License 2.0
43.9k stars 7.8k forks source link

PGNet训练中文弯曲数据集,文字识别准确率一直为0 #2764

Closed chujian521 closed 2 years ago

chujian521 commented 3 years ago

image 如图,检测的准确率还可以,端到端文字识别一直为0. gt_1202_3 这是使用 tools/infer_e2e.py 预测以后的结果,文字识别全是??? 请问这是什么原因呢

LDOUBLEV commented 3 years ago

更新为中文字典

chujian521 commented 3 years ago

你好,我用的就是中文字典

chujian521 commented 3 years ago

配置文件中有两处需要更改字典的地方均已修改

chujian521 commented 3 years ago

character_dict_path: ppocr/utils/hanzi.txt #需要手动添加这个文件,这是我自己制作的中文字符集,如果显存够大可以使用ppocr_keys_v1.txt character_type: ch Metric: name: E2EMetric mode: A # two ways for eval, A: label from txt, B: label from gt_mat gt_mat_dir: ./train_data/total_text/gt # the dir of gt_mat character_dict_path: ppocr/utils/hanzi.txt

klw2020 commented 3 years ago

@LDOUBLEV 我训练完也是这样,但是里面的数字能显示,中文都是???,问号的个数跟中文一样长的

KampauCheung commented 3 years ago

这个应该是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)

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)

src_im= cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2BGR)

klw2020 commented 3 years ago

感谢!可以正常显示了!

chujian521 commented 3 years ago

感谢!确实可以正常显示了,你们训练的准确率高嘛?我训练的目前那张图片只有北京市三个字是对的...

KampauCheung commented 3 years ago

感谢!确实可以正常显示了,你们训练的准确率高嘛?我训练的目前那张图片只有北京市三个字是对的...

我正在训练中文数据集,端到端的文字识别精度也是0,而且训练的时候ctc_loss是0,然后border_loss非常大,不知道咋回事

chujian521 commented 3 years ago

感谢!确实可以正常显示了,你们训练的准确率高嘛?我训练的目前那张图片只有北京市三个字是对的...

我正在训练中文数据集,端到端的文字识别精度也是0,而且训练的时候ctc_loss是0,然后border_loss非常大,不知道咋回事

这个我知道!你需要修改部分代码 PaddleOCR/ppocr/modeling/heads/e2e_pg_head.py /中181行的out_channels=37设置成字符集数目+1 ppocr/losses/e2e_pg_loss.py中93行改为字符集数目+1,94和97行改为字符集数目 配置文件中要改字符集改成自己的中文字符集,Loss:里面的下面的参数要改 pad_num: 36 # the length of dict for pad 字符集字典长度 具体可以参考FAQ里面有相关介绍

klw2020 commented 3 years ago

pad_num: 3012 # the length of dict for pad 之前试过这里忘记改就显示ctc_loss=0

klw2020 commented 3 years ago

感谢!确实可以正常显示了,你们训练的准确率高嘛?我训练的目前那张图片只有北京市三个字是对的...

简单场景下准确率跟其他的差不多 99%+

chujian521 commented 3 years ago

感谢!确实可以正常显示了,你们训练的准确率高嘛?我训练的目前那张图片只有北京市三个字是对的...

简单场景下准确率跟其他的差不多 99%+

这么棒的嘛,你训练的是弯曲文本嘛?

klw2020 commented 3 years ago

感谢!确实可以正常显示了,你们训练的准确率高嘛?我训练的目前那张图片只有北京市三个字是对的...

简单场景下准确率跟其他的差不多 99%+

这么棒的嘛,你训练的是弯曲文本嘛?

不是,四边形的

chujian521 commented 3 years ago

不是,四边形的 嗷嗷,我训练的弯曲文本的,正确率超低QAQ

KampauCheung commented 3 years ago

pad_num: 3012 # the length of dict for pad 之前试过这里忘记改就显示ctc_loss=0

感谢,确实忘记修改这里了,其他地方都改了

KampauCheung commented 3 years ago

感谢!确实可以正常显示了,你们训练的准确率高嘛?我训练的目前那张图片只有北京市三个字是对的...

我正在训练中文数据集,端到端的文字识别精度也是0,而且训练的时候ctc_loss是0,然后border_loss非常大,不知道咋回事

这个我知道!你需要修改部分代码 PaddleOCR/ppocr/modeling/heads/e2e_pg_head.py /中181行的out_channels=37设置成字符集数目+1 ppocr/losses/e2e_pg_loss.py中93行改为字符集数目+1,94和97行改为字符集数目 配置文件中要改字符集改成自己的中文字符集,Loss:里面的下面的参数要改 pad_num: 36 # the length of dict for pad 字符集字典长度 具体可以参考FAQ里面有相关介绍

感谢,pad_num忘记改啦

KampauCheung commented 3 years ago

不是,四边形的 嗷嗷,我训练的弯曲文本的,正确率超低QAQ

我训练的弯曲文本正确率也很低

KampauCheung commented 3 years ago

不是,四边形的 嗷嗷,我训练的弯曲文本的,正确率超低QAQ

你的弯曲文本是自己标注的吗,还是用的数据集

chujian521 commented 3 years ago

不是,四边形的 嗷嗷,我训练的弯曲文本的,正确率超低QAQ

你的弯曲文本是自己标注的吗,还是用的数据集

我用的是数据集,ArT里面筛选出来的中文部分

KampauCheung commented 3 years ago

不是,四边形的 嗷嗷,我训练的弯曲文本的,正确率超低QAQ

你的弯曲文本是自己标注的吗,还是用的数据集

我用的是数据集,ArT里面筛选出来的中文部分

我用的也是数据集,用了ArT, RCTW-17, LSVT, ReCTS四个,训练精度也比较低,不过在慢慢提高,估计要训练好久才行

KEVIN666666666 commented 3 years ago

感谢!确实可以正常显示了,你们训练的准确率高嘛?我训练的目前那张图片只有北京市三个字是对的...

我正在训练中文数据集,端到端的文字识别精度也是0,而且训练的时候ctc_loss是0,然后border_loss非常大,不知道咋回事

这个我知道!你需要修改部分代码 PaddleOCR/ppocr/modeling/heads/e2e_pg_head.py /中181行的out_channels=37设置成字符集数目+1 ppocr/losses/e2e_pg_loss.py中93行改为字符集数目+1,94和97行改为字符集数目 配置文件中要改字符集改成自己的中文字符集,Loss:里面的下面的参数要改 pad_num: 36 # the length of dict for pad 字符集字典长度 具体可以参考FAQ里面有相关介绍

请问 FAQ 哪里有相关介绍?

klw2020 commented 3 years ago

https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.1/doc/doc_ch/FAQ.md#q3160-pgnet%E6%9C%89%E4%B8%AD%E6%96%87%E9%A2%84%E8%AE%AD%E7%BB%83%E6%A8%A1%E5%9E%8B%E5%90%97

KEVIN666666666 commented 3 years ago

https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.1/doc/doc_ch/FAQ.md#q3160-pgnet%E6%9C%89%E4%B8%AD%E6%96%87%E9%A2%84%E8%AE%AD%E7%BB%83%E6%A8%A1%E5%9E%8B%E5%90%97

收到,感谢!不知道咋回事之前没找到

chujian521 commented 3 years ago

@KampauCheung 好兄弟,我看issues里面你也试过好多方法了,我这边PGNet弯曲中文文本效果不是很好,你那边有啥好的方案嘛?

superdu12138 commented 3 years ago

character_dict_path: ppocr/utils/hanzi.txt #需要手动添加这个文件,这是我自己制作的中文字符集,如果显存够大可以使用ppocr_keys_v1.txt character_type: ch Metric: name: E2EMetric mode: A # two ways for eval, A: label from txt, B: label from gt_mat gt_mat_dir: ./train_data/total_text/gt # the dir of gt_mat character_dict_path: ppocr/utils/hanzi.txt

你好,这个gt_mat的数据格式是怎么样的

chujian521 commented 3 years ago

character_dict_path: ppocr/utils/hanzi.txt #需要手动添加这个文件,这是我自己制作的中文字符集,如果显存够大可以使用ppocr_keys_v1.txt character_type: ch Metric: name: E2EMetric mode: A # two ways for eval, A: label from txt, B: label from gt_mat gt_mat_dir: ./train_data/total_text/gt # the dir of gt_mat character_dict_path: ppocr/utils/hanzi.txt

你好,这个gt_mat的数据格式是怎么样的

你好,我也不清楚,我们没用totaltext数据集

superdu12138 commented 3 years ago

character_dict_path: ppocr/utils/hanzi.txt #需要手动添加这个文件,这是我自己制作的中文字符集,如果显存够大可以使用ppocr_keys_v1.txt character_type: ch Metric: name: E2EMetric mode: A # two ways for eval, A: label from txt, B: label from gt_mat gt_mat_dir: ./train_data/total_text/gt # the dir of gt_mat character_dict_path: ppocr/utils/hanzi.txt

你好,这个gt_mat的数据格式是怎么样的

你好,我也不清楚,我们没用totaltext数据集

我也是用自己的数据集,也是识别率一直为0,其他的都按照你的方法改了,这个地方我不知道填什么

chujian521 commented 3 years ago

character_dict_path: ppocr/utils/hanzi.txt #需要手动添加这个文件,这是我自己制作的中文字符集,如果显存够大可以使用ppocr_keys_v1.txt character_type: ch Metric: name: E2EMetric mode: A # two ways for eval, A: label from txt, B: label from gt_mat gt_mat_dir: ./train_data/total_text/gt # the dir of gt_mat character_dict_path: ppocr/utils/hanzi.txt

你好,这个gt_mat的数据格式是怎么样的

你好,我也不清楚,我们没用totaltext数据集

我也是用自己的数据集,也是识别率一直为0,其他的都按照你的方法改了,这个地方我不知道填什么

应该是中文太复杂了,识别率确实是0,基本没有一字不差都正确的

kuli-cyd commented 3 years ago

character_dict_path: ppocr/utils/hanzi.txt #需要手动添加这个文件,这是我自己制作的中文字符集,如果显存够大可以使用ppocr_keys_v1.txt character_type: ch Metric: name: E2EMetric mode: A # two ways for eval, A: label from txt, B: label from gt_mat gt_mat_dir: ./train_data/total_text/gt # the dir of gt_mat character_dict_path: ppocr/utils/hanzi.txt

你好,这个gt_mat的数据格式是怎么样的

你好,我也不清楚,我们没用totaltext数据集

我也是用自己的数据集,也是识别率一直为0,其他的都按照你的方法改了,这个地方我不知道填什么

应该是中文太复杂了,识别率确实是0,基本没有一字不差都正确的

我这边训练中文弯曲文本端到端准确率也一直是0,请问楼主现在解决了嘛?而且用百万数据训练中文速度太慢了

Gmgge commented 3 years ago

目前来说,弯曲的中文好像很难解决,不知道有没有小伙伴尝试使用单个字符的检测来间接的解决这个问题

KyleWang-Hunter commented 2 years ago

不是,四边形的 嗷嗷,我训练的弯曲文本的,正确率超低QAQ

你的弯曲文本是自己标注的吗,还是用的数据集

我用的是数据集,ArT里面筛选出来的中文部分

我用的也是数据集,用了ArT, RCTW-17, LSVT, ReCTS四个,训练精度也比较低,不过在慢慢提高,估计要训练好久才行

请问最终的效果怎样呢?

paddle-bot-old[bot] commented 2 years ago

Since you haven\'t replied for more than 3 months, we have closed this issue/pr. If the problem is not solved or there is a follow-up one, please reopen it at any time and we will continue to follow up. It is recommended to pull and try the latest code first. 由于您超过三个月未回复,我们将关闭这个issue/pr。 若问题未解决或有后续问题,请随时重新打开(建议先拉取最新代码进行尝试),我们会继续跟进。

aleaaaa commented 2 years ago

[2022/03/14 10:41:34] root ERROR: When parsing line 3, error happened with msg: setting an array element with a sequence. The requested array has an inhomogeneous shape after 1 dimensions. The detected shape was (7,) + inhomogeneous part. [2022/03/14 10:41:34] root ERROR: When parsing line 8, error happened with msg: setting an array element with a sequence. The requested array has an inhomogeneous shape after 1 dimensions. The detected shape was (6,) + inhomogeneous part. [2022/03/14 10:41:34] root ERROR: When parsing line 6, error happened with msg: setting an array element with a sequence. The requested array has an inhomogeneous shape after 1 dimensions. The detected shape was (10,) + inhomogeneous part. [2022/03/14 10:41:34] root ERROR: When parsing line 5, error happened with msg: setting an array element with a sequence. The requested array has an inhomogeneous shape after 1 dimensions. The detected shape was (7,) + inhomogeneous part. 我想训练ICDAR_2019_Art,就出现这个问题,请问这是数据标注问题吗?改怎么解决啊?

KingJames1999 commented 2 years ago

请问我能改的地方都改了,它识别还是只识别弯曲英文

aleaaaa commented 2 years ago

请问训练中文数据集会用到预训练模型吗

aleaaaa commented 2 years ago

请问训练中文数据集会用到预训练模型吗

KingJames1999 commented 2 years ago

请问弯曲中文数据集可以分享下吗

chujian521 commented 2 years ago

请问训练中文数据集会用到预训练模型吗

当时我是用到了

chujian521 commented 2 years ago

请问弯曲中文数据集可以分享下吗

数据集我是从公开数据集筛选出来的中文数据训练的

aleaaaa commented 2 years ago

请问预训练模型用的是官方的,还是自己的,官方的好像是英文的预训练模型,训练的话没有问题吗

KingJames1999 commented 2 years ago

请问弯曲中文数据集可以分享下吗

数据集我是从公开数据集筛选出来的中文数据训练的

你好,能分享一下你筛选出来的数据集嘛,有偿。我从ICDAR2019-ArT中筛选有点摸不着头脑了

chujian521 commented 2 years ago

请问弯曲中文数据集可以分享下吗

数据集我是从公开数据集筛选出来的中文数据训练的

你好,能分享一下你筛选出来的数据集嘛,有偿。我从ICDAR2019-ArT中筛选有点摸不着头脑了

最简单的方法就是直接对标注进行筛选,从标注中挑出中文字符,用于训练即可。数据集ICDAR2019-ArT只有13750个中文图片,数据量其实很小。 image

chujian521 commented 2 years ago

请问预训练模型用的是官方的,还是自己的,官方的好像是英文的预训练模型,训练的话没有问题吗

这个你问问开发者吧,再开一个issue,我也不是很清楚,最后由于我们中文数据量太小,放弃使用这个端到端模型了。

aleaaaa commented 2 years ago

那我能冒昧的问一下,您对中文弯曲文本识别之后做了什么工作嘛

chujian521 commented 2 years ago

那我能冒昧的问一下,您对中文弯曲文本识别之后做了什么工作嘛

做的是一个校企合作项目,最后完成指标就交付了,如果数据量足够可以考虑用这个端到端算法的,我们是直接用的弯曲文本定位+CRNN文本识别