PaddleOCR 并发场景下识别batch推理环节resize_norm_img会使同一张图在不同batch里的处理结果不同导致识别结果会变化

gk7wooem  于 2022-11-05  发布在  其他
关注(0)|答案(4)|浏览(305)

PaddleOCR/tools/infer/predict_rec.py

Line 110 in a67a6fa

| | imgW=int((32*max_wh_ratio)) |

PaddleOCR/tools/infer/predict_rec.py

Line 117 in a67a6fa

| | ifmath.ceil(imgH*ratio) >imgW: |

PaddleOCR/tools/infer/predict_rec.py

Line 120 in a67a6fa

| | resized_w=int(math.ceil(imgH*ratio)) |

假设一张图片A的size是(3, 39, 305)
情况一:batch内的max_wh_ratio即为A的ratio
那么imgW = int(32*(305/39) = 250,即图片A在此batch内的resized_w = 250
情况二:batch内的A的ratio不是最大,假设max_wh_ratio=10
那么imgW = int(32*10) = 320, 此时图片A会执行resized_w = int(math.ceil(imgH * ratio)) ,图片在此batch内的resize_w = 251

在并发的场景下,同一张图片在不同的batch里可能会得到不同的处理结果,从而导致同一张图多次调用会出现不同的识别结果

解决方法:
将上述三行代码统一,统一都用math.ceil()上取整,或者都不用直接用int()取整

2jcobegt

2jcobegt1#

这个识别结果差别会很大吗?有具体实验的结果示例吗?

zvokhttg

zvokhttg2#

这个识别结果差别会很大吗?有具体实验的结果示例吗?

上图是连着两次的调用,一次识别成L,一次识别成I(后处理成的1)

r9f1avp5

r9f1avp53#

这个识别结果差别会很大吗?有具体实验的结果示例吗?

主要问题是同一张图输出会有不同识别结果返回这有点不合常理- -

gcxthw6b

gcxthw6b4#

更新一下最新代码试试

相关问题