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)
Apache License 2.0
39.34k stars 7.35k forks source link

识别时内存一直涨 溢出 #303

Closed LinJing517 closed 3 years ago

LinJing517 commented 3 years ago

进行多张图像识别时,发现内存会一直涨,没有回收。测试/doc/imgs下的18张图片,内存会到3G左右,CPU环境下。不知道该如何解决?

dyning commented 3 years ago

感谢反馈,主要有由于开启了MKL数学库和多线程加速导致的问题,该问题我们已经在跟进修复。

临时解决方案有两种: (1)注释掉数学库的使用,但是速度慢一倍,注释方法,https://github.com/PaddlePaddle/PaddleOCR/blob/develop/tools/infer/utility.py 文件中,注释掉94,95行 image (2)定期释放和初始化TextSystem这个类(频率根据实际情况设置),速度略微受影响。 可以参考如下代码,修改 https://github.com/PaddlePaddle/PaddleOCR/blob/develop/tools/infer/predict_system.py 中main函数代码,

def main(args):
    image_file_list = get_image_file_list(args.image_dir)
    text_sys = TextSystem(args)
    is_visualize = True
    count = 0
    for image_file in image_file_list:
        img = cv2.imread(image_file)
        if img is None:
            logger.info("error in loading image:{}".format(image_file))
            continue
        count += 1
        if count % 30 == 0:
            text_sys = TextSystem(args)
        starttime = time.time()
        dt_boxes, rec_res = text_sys(img)
        elapse = time.time() - starttime
dyning commented 3 years ago

@PakchoiFood 内部测试发现MKLDNN有问题,连续预测结果有diff,请先注释掉94行,关闭mkldnn相关功能。该问题已经在跟进修复。

172184221 commented 3 years ago

我有一张图片62k,用了5g多的内存,最后一致卡着不懂,没有任何输出,就这么静静的持续下去了

LinJing517 commented 3 years ago

收到,谢谢。我这边测试下,感觉注释掉94行作用不大,把96行解注config.enable_memory_optim() ,效果明显,内存可以保持在1.3G左右

dyning commented 3 years ago

我有一张图片62k,用了5g多的内存,最后一致卡着不懂,没有任何输出,就这么静静的持续下去了

更新下代码,目前使用MKL,多线程没问题,也就是去掉config.enable_mkldnn()没有问题。 使用MKLDNN加速有问题,还在跟进修复中。

dyning commented 3 years ago

收到,谢谢。我这边测试下,感觉注释掉94行作用不大,把96行解注config.enable_memory_optim() ,效果明显,内存可以保持在1.3G左右

更新下代码,目前使用MKL,多线程没问题,也就是去掉config.enable_mkldnn()没有问题。 使用MKLDNN加速有问题,还在跟进修复中。

LinJing517 commented 3 years ago

收到,谢谢。我这边测试下,感觉注释掉94行作用不大,把96行解注config.enable_memory_optim() ,效果明显,内存可以保持在1.3G左右

更新下代码,目前使用MKL,多线程没问题,也就是去掉config.enable_mkldnn()没有问题。 使用MKLDNN加速有问题,还在跟进修复中。

@dyning 收到,谢谢!做了测试,这种方式问题依然存在,不知道是否跟环境有关?win10+python3.6.1

dyning commented 3 years ago

更新到最新代码,按 https://github.com/PaddlePaddle/PaddleOCR/blob/develop/doc/doc_ch/benchmark.md 再试试,里面用使用mkldnn的方法

LinJing517 commented 3 years ago

收到谢谢

cuiyong127 commented 3 years ago

收到,谢谢。我这边测试下,感觉注释掉94行作用不大,把96行解注config.enable_memory_optim() ,效果明显,内存可以保持在1.3G左右

@PakchoiFood 内部测试发现MKLDNN有问题,连续预测结果有diff,请先注释掉94行,关闭mkldnn相关功能。该问题已经在跟进修复。

未使用MKLDNN,在GPU环境下测试,也会有同样的问题,内存慢慢增加,请问是否有其他解决办法?

NanZhang1991 commented 3 years ago

我也遇到这个问题.paddleocr 中文识别要比pytesseract 准确的多,但是多张图容易内存溢出。上述方法我试了但是内存还是达到99%。还有就是paddleocr 识别出来的最多只能区分行,没有带换行符 无法区分段落

suparek commented 3 years ago

我的版本

paddleocr 2.0.2 paddlepaddle-gpu 2.0.0.post101

GPU模式下还是存在这个问题,用掉的GPU memory不释放。

suparek commented 3 years ago

我的版本

paddleocr 2.0.2 paddlepaddle-gpu 2.0.0.post101

GPU模式下还是存在这个问题,用掉的GPU memory不释放。

@LDOUBLEV 请问有什么修复的办法吗?

kealennieh commented 3 years ago

有什么更新么?我这边使用的时候,显存也会不停的增加,直到把所有的显存占完

whz11 commented 2 years ago

我这边开启mkldnn加速,内存占用67%,服务器16g内存 paddleocr 2.0.6

xbbkok commented 2 years ago

我这边每次测一张图,显存就增加一点,最后显存爆掉,系统自动 关闭程序

wu0211 commented 2 years ago

我这边每次测一张图,显存就增加一点,最后显存爆掉,系统自动 关闭程序

有解决了吗

xbbkok commented 2 years ago

我这边每次测一张图,显存就增加一点,最后显存爆掉,系统自动 关闭程序

有解决了吗

还没有,求解决方式

wu0211 commented 2 years ago

我这边每次测一张图,显存就增加一点,最后显存爆掉,系统自动 关闭程序

有解决了吗

还没有,求解决方式

在线等👌

saymyname77 commented 2 years ago

@cuiyong127 @suparek @kealennieh 爆显存的问题现在有解决办法没

saymyname77 commented 2 years ago

@xbbkok @wu0211 爆显存的问题现在有解决办法没

Isaebella commented 1 year ago

识别多张图像cpu内存持续增加,这个问题得到解决了吗?

ZhangYuef commented 11 months ago

使用 PaddlePadlle CPU 推理遇到同样的问题

lgh1998 commented 6 months ago

我这边到现在更新的2.7还是会有这个问题,内存一直增加

abasi20 commented 5 months ago

这个问题有解决方案吗

FastBCSD commented 5 months ago

@dyning 你好,推理的时候每识别一张图内存一直涨。有办法解决吗。 self.ocr_infer_model = PaddleOCR(rec_algorithm='SVTR_LCNet', det_algorithm='DB', ocr_version='PP-OCRv4', det_db_thresh=0.1, det_db_box_thresh=0.5, use_angle_cls=True, show_log=False, lang=self.ocr_lang, use_gpu=self.use_gpu, use_dilation=True, det_db_score_mode="slow", det_limit_side_len=3000, det_limit_type='max', )

Firestick-Xia commented 2 months ago

识别显存一直涨的这个问题,还是存在

bleachyin commented 1 month ago

问题同在

younger027 commented 1 month ago

问题还是依旧在,只能分批重启处理吗? 版本 :paddleocr 2.7.0.3

MrJson1 commented 3 weeks ago

paddleocr 2.7.3 问题依然存在 image 直接干到内存吃完为止

bleachyin commented 3 weeks ago

paddleocr 2.7.3 问题依然存在 image 直接干到内存吃完为止

我已经切换成google的ocr服务了,放弃paddle,没人维护了这玩意,如果你还想用,我之前的解决方案可以这样: 初始化预热,用一个你能接受的最大的图片size,后续不要超过size,锁定tensor的维度,他就不会重复生成向量了,这样可以守住内存

bleachyin commented 3 weeks ago

如果后面图片尺寸过大,就把图片resize回你的上限内

MrJson1 commented 3 weeks ago

paddleocr 2.7.3 问题依然存在 image 直接干到内存吃完为止

我已经切换成google的ocr服务了,放弃paddle,没人维护了这玩意,如果你还想用,我之前的解决方案可以这样: 初始化预热,用一个你能接受的最大的图片size,后续不要超过size,锁定tensor的维度,他就不会重复生成向量了,这样可以守住内存

这个怎么实现呢,上面的记录没有翻到 “初始化预热,用一个你能接受的最大的图片size,后续不要超过size,锁定tensor的维度,他就不会重复生成向量了,这样可以守住内存”

bleachyin commented 3 weeks ago

paddleocr 2.7.3 问题依然存在 image 直接干到内存吃完为止

我已经切换成google的ocr服务了,放弃paddle,没人维护了这玩意,如果你还想用,我之前的解决方案可以这样: 初始化预热,用一个你能接受的最大的图片size,后续不要超过size,锁定tensor的维度,他就不会重复生成向量了,这样可以守住内存

这个怎么实现呢,上面的记录没有翻到 “初始化预热,用一个你能接受的最大的图片size,后续不要超过size,锁定tensor的维度,他就不会重复生成向量了,这样可以守住内存”

很简单,比如你的最大图片是1024*1024的,至少先用这个触发一次ocr调用。然后剩余图片如果超过这个size,就用pil库resize到这个范围内,你的tensor就不会无限增长了。

MingsYang commented 1 week ago

真的很无语,没想到这么个问题从20年到24年,还没解决