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
42.44k stars 7.66k forks source link

超大分辨率10000*10000图像ocr检测识别问题若干!!! #11888

Closed gengyanlei closed 4 months ago

gengyanlei commented 5 months ago

前提: 一般情况下,大一点的图像直接resize即可,效果还可以,但是对于超大分辨率的ocr文本检测识别,目前存在一些疑问。 对于一些问题,https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.7/doc/doc_ch/FAQ.md 这里就可以解决。 实际问题: [1] ppocr 对于这种彩色的检测效果超级差,设置了dilation、slow后显著提升检测效果,如下图是设置参数后的效果,之前这一块图像完全检测不出。明明都是比较清楚的文字,为什么就是检测不出,设置了低阈值也是不行!有时候感觉就是很玄学!对于百度图片随便一张检测效果都挺好。 image [2] 超大分辨率下,文本检测识别,即使设置了det_limit_side_len也不可能,实现这么大尺寸的图像中文本检测;那么就需要滑动窗口来实现,这一块由于DB是分割的,所以减少了nms等代码的编写,相关代码也如下:(下一个回复) [3] 超大分辨率下 多尺度检测问题,DB是分割,那么采用np.maxmium取不同尺度的检测结果,按理说效果应该更好,但是无论检测框个数还是实际效果都不如某个单尺度的检测效果。

gengyanlei commented 5 months ago

超大分辨率下,DB或分割体系下的文本检测代码:这样就可以实现超大分辨率下的文本检测了(这里是兼容多尺度的,但是多尺度效果不好,why???) image

image

gengyanlei commented 5 months ago

另外将图像旋转90,检测效果更差!

期待检测效果不好的、多尺度的解决思路,还是说是检测数据集的问题,必须要这种场景下的检测数据集。即使转成灰度图效果依旧不好。

tink2123 commented 5 months ago

对于超大分辨率的图片,目前可用的方案是去除最长边限制。 可以尝试注释掉下面三行代码: https://github.com/PaddlePaddle/PaddleOCR/blob/fa93f61cc5a49f8e2c80c665d2e57bb1cd15acfc/tools/infer/predict_det.py#L43-L45

tink2123 commented 5 months ago

另外将图像旋转90,检测效果更差!

期待检测效果不好的、多尺度的解决思路,还是说是检测数据集的问题,必须要这种场景下的检测数据集。即使转成灰度图效果依旧不好。

对于旋转90度的图像,推荐在预处理阶段使用方向分类器转正,而不是通过文本检测模型解决。

gengyanlei commented 5 months ago

@tink2123 非常感谢回答,但像有的检测就是检测不出,我用PPOCRLabel标注时,就是识别;说明文本识别效果可以满足;但是文本检测效果不佳(需要fine-tune了吧)

tink2123 commented 5 months ago

@tink2123 非常感谢回答,但像有的检测就是检测不出,我用PPOCRLabel标注时,就是识别;说明文本识别效果可以满足;但是文本检测效果不佳(需要fine-tune了吧)

是的,如果有一些检测的框无法检出推荐就基于自己的数据进行finetune哈

gengyanlei commented 5 months ago

@tink2123 我测试了半天,为什么多尺度的不如单尺度的检测效果呢,看了半天代码没有看出啥来。 image

取消最长边限制,这个如果超出太多效果感觉不如滑动窗口的好呢

tink2123 commented 5 months ago

多尺度和单尺度分别是什么呢? 滑动窗口需要考虑下图片切分不要破坏语义,超大分辨率的问题比较特殊,可能需要多尝试几个方案对比效果最好的就可以

gengyanlei commented 4 months ago

@tink2123 我直接设置最长边为16000,或注释掉你说的3行代码;直接预测的效果和我滑动窗口的效果基本上检测框个数一致(576),但是互有检测不到的地方(有的区域前者检测的好 有的后者检测的好)。

我看了DB的论文和ppcor后处理代码,那么多尺度以1600尺寸和960尺寸窗口进行滑动,这个模型的输出是一个[1,1,H,W]的概率图(0-1范围内),我滑动窗口时,采用np.maximum取它们之间最大值,为啥预测的结果就没有提高。(滑动窗口我设置尺寸1600,步长800,这样可以保留部分被截断的语义)

gengyanlei commented 4 months ago

@tink2123

另外,ppocr默认是DB检测、SVTR_LCNet识别;对于CRNN模型ppocrv3 v4里面没有;需要去另外的models列表里面下载,然后再指定model_dict等信息。看了半天参数代码,ppocrv3和v4的模型为什么在参数里面设置rec_algorithm='CRNN'也没影响,原来推理时,这个参数没用(ppocrv34的识别模型是'SVTR_LCNet'),哎,这代码写的让我误解了。查看好几个readme最后才明白。愿意用哪个模型用哪个,只需要指定model_dir_path这3个参数即可!用不到推理yaml文件

UserWangZz commented 4 months ago

感谢您的讨论

lwinhong commented 1 month ago

@tink2123

另外,ppocr默认是DB检测、SVTR_LCNet识别;对于CRNN模型ppocrv3 v4里面没有;需要去另外的models列表里面下载,然后再指定model_dict等信息。看了半天参数代码,ppocrv3和v4的模型为什么在参数里面设置rec_algorithm='CRNN'也没影响,原来推理时,这个参数没用(ppocrv34的识别模型是'SVTR_LCNet'),哎,这代码写的让我误解了。查看好几个readme最后才明白。愿意用哪个模型用哪个,只需要指定model_dir_path这3个参数即可!用不到推理yaml文件

请问你最后用了哪个模型, 我也遇到了同样的问题,我的表格很大