mindspore-lab / mindocr

A toolbox of ocr models and algorithms based on MindSpore

Home Page:https://mindspore-lab.github.io/mindocr/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

模型离线推理精度低

adamzhg opened this issue · comments

--环境
华为鲲鹏服务器,atlas 300I推理卡(3010)
Os:Ubuntu 20.04.6
Python:3.8

--首先使用cpu运行了mindspore模型:

参考https://gitee.com/mindspore-lab/mindocr#1-%E6%96%87%E5%AD%97%E6%A3%80%E6%B5%8B%E5%92%8C%E8%AF%86%E5%88%AB%E7%A4%BA%E4%BE%8B,
使用python tools/infer/text/predict_system.py --image_dir {path_to_img or dir_to_imgs}
--det_algorithm DB++
--rec_algorithm CRNN
然后设置ms.set_context(device_target="CPU")为cpu推断,
使用了DB++、ch_pp_det_OCRv4、SVTR_PPOCRv3_CH进行尝试,效果较好:

1_res

--按照官网描述进行了离线推理尝试:
1、使用PPOCR
1.1参考https://gitee.com/mindspore-lab/mindocr/blob/main/docs/cn/inference/inference_thirdparty_quickstart.md
分别试了ch_pp_det_OCRv4、ch_pp_det_OCRv3、ch_pp_rec_OCRv4、ch_pp_rec_OCRv3
效果均很差。
1.2
参考https://www.mindspore.cn/lite/docs/zh-CN/master/use/cloud_infer/converter_tool_ascend.html
修改precision_mode为enforce_fp32和enforce_origin都进行了尝试
效果一样很差

2、使用MindOCR的原生模型
参考https://gitee.com/mindspore-lab/mindocr/blob/main/docs/cn/inference/inference_quickstart.md#12-%E6%96%87%E6%9C%AC%E8%AF%86%E5%88%AB
分别试了DB++ ResNet-50(ch+en),CRNN ResNet34_vd(ch),SVTR Tiny
效果同样很差

离线推理的效果基本如下图:
1

1

离线推理的精度差了很多,基本不可用,请问是mindspore lite的模型转换导致的精度问题吗?是否有什么方法可以
在atlas 300I推理卡(3010)上取得类似于mindspore模型(没有进行离线转换的模型)的精度?

从结果来看,可能是det阶段就又比较大的精度问题

  1. 由于atlas 300I推理卡(3010)目前对离线推理的动态shape支持不完善,需要接受固定wh的shape。而ppocr系列对于det的预处理,是对长边等比例缩放到960。所以ppocr系列的模型在离线推理效果不佳。
  2. db++ResNet-50(ch+en)的模型转换,可否提供converte_lite时的config.txt文件内容?该模型的input_shape是[1,3,1152,2048]

1、Mindocr的原生模型之前弄错了,使用db++ResNet-50(ch+en)的模型,做converte_lite转换时,即使不提供config.txt文件,使用如下转换命令:
converter_lite
--saveType=MINDIR
--fmk=MINDIR
--optimize=ascend_oriented
--modelFile=./dbnetpp_resnet50_ch_en_general-884ba5b9-b3f52398.mindir
--outputFile=./dbnetpp_resnet50_ch_lite
出来的结果就比较好。
又做了些尝试,比如增加config.txt文件,进而调整precision_mode等参数,发现基本没有效果,和默认的效果差不多。

2、针对ch_pp_det_OCRv3,做converte_lite转换时做了很多尝试,比如修改input_shape,换成动态shape分档,调整precision_mode精度等。列出其中几个config.txt文件如下:
[ascend_context]
input_format=NCHW
input_shape=x:[1,3,960,960]
precision_mode=enforce_fp32
op_select_impl_mode=high_precision
output_type=FP32

[ascend_context]
input_format=NCHW
input_shape=x:[1,3,-1,-1]
dynamic_dims=[736,1280],[768,1280],[896,1280],[960,960],[1024,1280]
precision_mode=enforce_fp32

但结果都差不多,识别效果都很差。
我安装的mindspore和mindspore-Lite的版本都是2.2.10,在converte_lite过程中,无论使用什么样的设置,都会报很多warnning:
[WARNING] LITE(1596253,ffff86313010,converter_lite):2024-04-26-12:30:06.616.711 [mindspore/lite/build/tools/converter/parser/onnx/onnx_op_parser.cc:1409] GetConvChannel] not find node: conv2d_43.w_0
[WARNING] LITE(1596253,ffff86313010,converter_lite):2024-04-26-12:30:06.616.854 [mindspore/lite/build/tools/converter/parser/onnx/onnx_op_parser.cc:1409] GetConvChannel] not find node: conv2d_44.w_0
[WARNING] LITE(1596253,ffff86313010,converter_lite):2024-04-26-12:30:06.616.992 [mindspore/lite/build/tools/converter/parser/onnx/onnx_op_parser.cc:1409] GetConvChannel] not find node: conv2d_45.w_0
[WARNING] LITE(1596253,ffff86313010,converter_lite):2024-04-26-12:30:06.617.091 [mindspore/lite/build/tools/converter/parser/onnx/onnx_op_parser.cc:1409] GetConvChannel] not find node: conv2d_46.w_0
[WARNING] LITE(1596253,ffff86313010,converter_lite):2024-04-26-12:30:06.617.231 [mindspore/lite/build/tools/converter/parser/onnx/onnx_op_parser.cc:1409] GetConvChannel] not find node: conv2d_65.w_0
[WARNING] LITE(1596253,ffff86313010,converter_lite):2024-04-26-12:30:06.617.342 [mindspore/lite/build/tools/converter/parser/onnx/onnx_op_parser.cc:1409] GetConvChannel] not find node: conv2d_66.w_0
[WARNING] LITE(1596253,ffff86313010,converter_lite):2024-04-26-12:30:06.617.419 [mindspore/lite/build/tools/converter/parser/onnx/onnx_op_parser.cc:1409] GetConvChannel] not find node: conv2d_67.w_0
[WARNING] LITE(1596253,ffff86313010,converter_lite):2024-04-26-12:30:06.617.538 [mindspore/lite/build/tools/converter/parser/onnx/onnx_op_parser.cc:1409] GetConvChannel] not find node: conv2d_59.w_0
[WARNING] LITE(1596253,ffff86313010,converter_lite):2024-04-26-12:30:06.617.630 [mindspore/lite/build/tools/converter/parser/onnx/onnx_op_parser.cc:1409] GetConvChannel] not find node: conv2d_60.w_0
[WARNING] LITE(1596253,ffff86313010,converter_lite):2024-04-26-12:30:06.617.703 [mindspore/lite/build/tools/converter/parser/onnx/onnx_op_parser.cc:1409] GetConvChannel] not find node: conv2d_61.w_0
[WARNING] LITE(1596253,ffff86313010,converter_lite):2024-04-26-12:30:06.617.805 [mindspore/lite/build/tools/converter/parser/onnx/onnx_op_parser.cc:1409] GetConvChannel] not find node: conv2d_53.w_0
[WARNING] LITE(1596253,ffff86313010,converter_lite):2024-04-26-12:30:06.617.894 [mindspore/lite/build/tools/converter/parser/onnx/onnx_op_parser.cc:1409] GetConvChannel] not find node: conv2d_54.w_0
[WARNING] LITE(1596253,ffff86313010,converter_lite):2024-04-26-12:30:06.617.963 [mindspore/lite/build/tools/converter/parser/onnx/onnx_op_parser.cc:1409] GetConvChannel] not find node: conv2d_55.w_0
[WARNING] LITE(1596253,ffff86313010,converter_lite):2024-04-26-12:30:06.618.068 [mindspore/lite/build/tools/converter/parser/onnx/onnx_op_parser.cc:1409] GetConvChannel] not find node: conv2d_47.w_0
[WARNING] LITE(1596253,ffff86313010,converter_lite):2024-04-26-12:30:06.618.155 [mindspore/lite/build/tools/converter/parser/onnx/onnx_op_parser.cc:1409] GetConvChannel] not find node: conv2d_48.w_0
[WARNING] LITE(1596253,ffff86313010,converter_lite):2024-04-26-12:30:06.618.225 [mindspore/lite/build/tools/converter/parser/onnx/onnx_op_parser.cc:1409] GetConvChannel] not find node: conv2d_49.w_0
[WARNING] LITE(1596253,ffff86313010,converter_lite):2024-04-26-12:30:06.618.467 [mindspore/lite/build/tools/converter/parser/onnx/onnx_op_parser.cc:1409] GetConvChannel] not find node: conv2d_68.w_0
[WARNING] LITE(1596253,ffff86313010,converter_lite):2024-04-26-12:30:06.618.558 [mindspore/lite/build/tools/converter/parser/onnx/onnx_op_parser.cc:1409] GetConvChannel] not find node: conv2d_69.w_0
[WARNING] LITE(1596253,ffff86313010,converter_lite):2024-04-26-12:30:06.618.634 [mindspore/lite/build/tools/converter/parser/onnx/onnx_op_parser.cc:1409] GetConvChannel] not find node: conv2d_70.w_0
[WARNING] LITE(1596253,ffff86313010,converter_lite):2024-04-26-12:30:06.618.741 [mindspore/lite/build/tools/converter/parser/onnx/onnx_op_parser.cc:1409] GetConvChannel] not find node: conv2d_62.w_0
[WARNING] LITE(1596253,ffff86313010,converter_lite):2024-04-26-12:30:06.618.827 [mindspore/lite/build/tools/converter/parser/onnx/onnx_op_parser.cc:1409] GetConvChannel] not find node: conv2d_63.w_0
[WARNING] LITE(1596253,ffff86313010,converter_lite):2024-04-26-12:30:06.618.898 [mindspore/lite/build/tools/converter/parser/onnx/onnx_op_parser.cc:1409] GetConvChannel] not find node: conv2d_64.w_0
[WARNING] LITE(1596253,ffff86313010,converter_lite):2024-04-26-12:30:06.619.014 [mindspore/lite/build/tools/converter/parser/onnx/onnx_op_parser.cc:1409] GetConvChannel] not find node: conv2d_56.w_0
[WARNING] LITE(1596253,ffff86313010,converter_lite):2024-04-26-12:30:06.619.107 [mindspore/lite/build/tools/converter/parser/onnx/onnx_op_parser.cc:1409] GetConvChannel] not find node: conv2d_57.w_0
[WARNING] LITE(1596253,ffff86313010,converter_lite):2024-04-26-12:30:06.619.180 [mindspore/lite/build/tools/converter/parser/onnx/onnx_op_parser.cc:1409] GetConvChannel] not find node: conv2d_58.w_0
[WARNING] LITE(1596253,ffff86313010,converter_lite):2024-04-26-12:30:06.619.284 [mindspore/lite/build/tools/converter/parser/onnx/onnx_op_parser.cc:1409] GetConvChannel] not find node: conv2d_50.w_0
[WARNING] LITE(1596253,ffff86313010,converter_lite):2024-04-26-12:30:06.619.407 [mindspore/lite/build/tools/converter/parser/onnx/onnx_op_parser.cc:1409] GetConvChannel] not find node: conv2d_51.w_0
[WARNING] LITE(1596253,ffff86313010,converter_lite):2024-04-26-12:30:06.619.490 [mindspore/lite/build/tools/converter/parser/onnx/onnx_op_parser.cc:1409] GetConvChannel] not find node: conv2d_52.w_0
[WARNING] LITE(1596253,ffff86313010,converter_lite):2024-04-26-12:30:06.619.675 [mindspore/lite/build/tools/converter/parser/onnx/onnx_op_parser.cc:1409] GetConvChannel] not find node: conv2d_71.w_0
[WARNING] LITE(1596253,ffff86313010,converter_lite):2024-04-26-12:30:06.619.793 [mindspore/lite/build/tools/converter/parser/onnx/onnx_op_parser.cc:1660] Parse] parsing of channelIn/Out is delayed.
[WARNING] LITE(1596253,ffff86313010,converter_lite):2024-04-26-12:30:06.619.916 [mindspore/lite/build/tools/converter/parser/onnx/onnx_op_parser.cc:1660] Parse] parsing of channelIn/Out is delayed.
[WARNING] LITE(1596253,ffff86313010,converter_lite):2024-04-26-12:30:07.306.819 [mindspore/lite/tools/converter/adapter/acl/mapper/primitive_mapper.cc:66] AttrAdjust] GlobalAveragePool has no attr kernel_size
[WARNING] LITE(1596253,ffff86313010,converter_lite):2024-04-26-12:30:07.307.096 [mindspore/lite/tools/converter/adapter/acl/mapper/primitive_mapper.cc:66] AttrAdjust] GlobalAveragePool has no attr kernel_size
[WARNING] LITE(1596253,ffff86313010,converter_lite):2024-04-26-12:30:07.307.449 [mindspore/lite/tools/converter/adapter/acl/mapper/primitive_mapper.cc:66] AttrAdjust] GlobalAveragePool has no attr kernel_size
[WARNING] LITE(1596253,ffff86313010,converter_lite):2024-04-26-12:30:07.307.763 [mindspore/lite/tools/converter/adapter/acl/mapper/primitive_mapper.cc:66] AttrAdjust] GlobalAveragePool has no attr kernel_size
[WARNING] LITE(1596253,ffff86313010,converter_lite):2024-04-26-12:30:07.308.062 [mindspore/lite/tools/converter/adapter/acl/mapper/primitive_mapper.cc:66] AttrAdjust] GlobalAveragePool has no attr kernel_size
[WARNING] LITE(1596253,ffff86313010,converter_lite):2024-04-26-12:30:07.308.358 [mindspore/lite/tools/converter/adapter/acl/mapper/primitive_mapper.cc:66] AttrAdjust] GlobalAveragePool has no attr kernel_size
[WARNING] LITE(1596253,ffff86313010,converter_lite):2024-04-26-12:30:07.308.653 [mindspore/lite/tools/converter/adapter/acl/mapper/primitive_mapper.cc:66] AttrAdjust] GlobalAveragePool has no attr kernel_size
[WARNING] LITE(1596253,ffff86313010,converter_lite):2024-04-26-12:30:07.308.949 [mindspore/lite/tools/converter/adapter/acl/mapper/primitive_mapper.cc:66] AttrAdjust] GlobalAveragePool has no attr kernel_size
CONVERT RESULT SUCCESS:0

效果差的原因是这些warnning导致的吗?
模型转换时同样都限制了固定shape,但是mindocr原生的db++ResNet-50(ch+en)模型就不会报任何warnning,是说mindspore-lite现在对ppocr的支持,尤其是模型转换这块还不好的原因吗?
还是说mindspore-lite版本的问题?
这个效果的话,没有办法在Atlas 300I上使用ppocr了。

另外,使用离线推断,即使是使用db++ResNet-50(ch+en)的det模型和CRNN ResNet34 ch的rec模型,识别效果依旧不是很理想:
1
7-6
一些长的、较小的内容会识别不出来;而第二个图的长文本在一些行的末尾也会出错。

另外,通过 ms.set_context(device_target="CPU")的方式也试了一下Mindspore下执行MindOCR:
-det用的dbnetpp_resnet50_ch_en_general-884ba5b9.ckpt
-rec用的crnn_resnet34_ch
但是结果也没比上面使用atlas 300I npu推断的效果更好,有些地方甚至还不如:
1_res
7-6_res

想咨询一下,如何才能获得更好的精度效果,比如x86+nvidia上直接跑ppocrv4,不做任何调整都是默认选项即可的效果?

您好,针对ch_pp_det_OCRv3,ch_pp_det_OCRv4等检测模型,在310上暂不支持动态shape。ppocr预处理会将图片,按长边缩放到960,维持长宽比不变。所以进行分档时,可以固定长边为960,只对短边进行分档,类似于

[ascend_context]
input_format=NCHW
input_shape=x:[1,3,-1,-1]
dynamic_dims=[552,960],[576,960],[672,960],[768,960],[960,960]

这样的配置可以让预处理结果比较契合模型输入。转换过程的WARNING一般不会导致效果差的,其实上在910或310P上的动态shape转换也会有类似的WARNING抛出,但不影响结果。

从您提供的结果,db++ResNet-50(ch+en)的det模型和CRNN ResNet34 ch的rec模型文本识别,在bbox边缘的文本容易识别错误,可以尝试以下方法

  • 调整扩张比例,适当扩张bbox,避免bbox框出的文字不全。改设置位于yaml文件中的postprocess.expand_ratio,将它调整到更大的比例。如dbpp_r50_icdar15.yaml

    system:
        ...
    model:
        ...
    postprocess:
        ...
        expand_ratio: 1.5       # coefficient for expanding predictions
  • rec部分的crnn_resnet34_ch精度满意满足要求,可以尝试用ppocr的识别模型ch_pp_rec_OCRv4,替代crnn_resnet34_ch。ch_pp_rec_OCRv4接受固定shape的输入,为48x320。

【您好,针对ch_pp_det_OCRv3,ch_pp_det_OCRv4等检测模型,在310上暂不支持动态shape。ppocr预处理会将图片,按长边缩放到960,维持长宽比不变。所以进行分档时,可以固定长边为960,只对短边进行分档,类似于】
您好,您说的这个处理实际上针对mindocr的原生模型也是同样的,/mindspore/mindocr/deploy/py_infer/src/data_process/preprocess/transforms/det_transforms.py中,DetResize类里:
super().init(
target_size=None,
keep_ratio=keep_ratio,
padding=padding,
limit_type="none",
limit_side_len=960,
force_divisable=False,
interpolation=interpolation,
**kwargs,
)
limit_type设定的是none,这样在推断的时候,会根据[ascend_context]中设定的shape来对图像进行resize。
原生模型db++ResNet-50(ch+en)也是会先按照(1152,2048)的固定shape来进行resize。但同样的处理,ppocr的明显要差很多,不知道是为什么。
而在x86+nvidia的服务器上,打印ch_pp_det_OCRv4的处理,同样的在输入模型前也是将图像进行了按照长边对齐到960的处理。也就是说输入给模型的内容,arm+npu和x86+nvidia上的没有区别。
但在两个平台上效果差异很大,不知道是为什么?

另外,ch_pp_rec_OCRv4在做convert的时候报错。
我的是CANN7.0.0,convert的格式如下:
converter_lite
--saveType=MINDIR
--fmk=ONNX
--optimize=ascend_oriented
--modelFile=./rec_crnn.onnx
--outputFile=./rec_crnn_dynamic_output
--configFile=./dynamic_config.txt

[ascend_context]
input_format=NCHW
input_shape=x:[1,3,48,320]
precision_mode=enforce_fp32

错误如下:
[ERROR] ME(109261,ffff7eb87010,converter_lite):2024-04-29-18:25:39.217.344 [mindspore/ccsrc/cxx_api/model/acl/model_converter.cc:155] BuildAirModel] Call aclgrphBuildModel fail: EE1001: The argument is invalid.Reason: rtGetDevMsg execute failed, reason=[context pointer null]
Solution: 1.Check the input parameter range of the function. 2.Check the function invocation relationship.
TraceBack (most recent call last):
[Node:p2o.Reshape.67] Check shape failed, as x-input shape is [1,40,360], with shape size(14400), is input dynamic shape[0]. Shape-input shape is [5], with shape size(5). Y-output shape inferred is [0,40,3,8,15], with shape size(0).[FUNC:ReshapeInfer][FILE:array_ops.cc][LINE:1717]
Call InferShapeAndType for node:p2o.Reshape.67(Reshape) failed[FUNC:Infer][FILE:infershape_pass.cc][LINE:119]
process pass InferShapePass on node:p2o.Reshape.67 failed, ret:4294967295[FUNC:RunPassesOnNode][FILE:base_pass.cc][LINE:571]
build graph failed, graph id:0, ret:1343242270[FUNC:BuildModelWithGraphId][FILE:ge_generator.cc][LINE:1615]
ctx is NULL![FUNC:GetDevErrMsg][FILE:api_impl.cc][LINE:4541]
The argument is invalid.Reason: rtGetDevMsg execute failed, reason=[context pointer null]

[ERROR] ME(109261,ffff7eb87010,converter_lite):2024-04-29-18:25:40.355.736 [mindspore/ccsrc/cxx_api/model/acl/model_converter.cc:238] operator()] Convert model from MindIR to OM failed
[ERROR] ME(109261,ffff7eb87010,converter_lite):2024-04-29-18:25:40.356.721 [mindspore/ccsrc/cxx_api/model/model_converter_utils/multi_process.cc:140] ChildProcess] Child process process failed
[WARNING] ME(109235,ffff55bf7950,converter_lite):2024-04-29-18:25:40.409.148 [mindspore/ccsrc/cxx_api/model/model_converter_utils/multi_process.cc:228] HeartbeatThreadFuncInner] Peer stopped
[ERROR] ME(109235,ffff7eb87010,converter_lite):2024-04-29-18:25:40.409.296 [mindspore/ccsrc/cxx_api/model/acl/model_converter.cc:218] operator()] Receive result model from child process failed
[ERROR] ME(109235,ffff7eb87010,converter_lite):2024-04-29-18:25:40.410.447 [mindspore/ccsrc/cxx_api/model/model_converter_utils/multi_process.cc:118] ParentProcess] Parent process process failed
[ERROR] ME(109235,ffff7eb87010,converter_lite):2024-04-29-18:25:41.415.798 [mindspore/ccsrc/cxx_api/model/acl/model_converter.cc:251] LoadMindIR] Convert MindIR model to OM model failed
[ERROR] LITE(109235,ffff7eb87010,converter_lite):2024-04-29-18:25:41.415.976 [mindspore/lite/tools/converter/adapter/acl/src/acl_pass_impl.cc:805] ConvertGraphToOm] Model converter load mindir failed.
[ERROR] LITE(109235,ffff7eb87010,converter_lite):2024-04-29-18:25:41.416.008 [mindspore/lite/tools/converter/adapter/acl/src/acl_pass_impl.cc:854] BuildGraph] Convert graph to om failed.
[ERROR] LITE(109235,ffff7eb87010,converter_lite):2024-04-29-18:25:41.416.037 [mindspore/lite/tools/converter/adapter/acl/src/acl_pass_impl.cc:1112] Run] Build graph failed.
[ERROR] LITE(109235,ffff7eb87010,converter_lite):2024-04-29-18:25:41.416.073 [mindspore/lite/tools/converter/adapter/acl/acl_pass.cc:42] Run] Acl pass impl run failed.
[ERROR] LITE(109235,ffff7eb87010,converter_lite):2024-04-29-18:25:41.416.104 [mindspore/lite/tools/converter/anf_transform.cc:469] RunConvertPass] Acl pass failed.
[ERROR] LITE(109235,ffff7eb87010,converter_lite):2024-04-29-18:25:41.416.150 [mindspore/lite/tools/converter/anf_transform.cc:662] RunPass] Run convert pass failed.
[ERROR] LITE(109235,ffff7eb87010,converter_lite):2024-04-29-18:25:41.416.175 [mindspore/lite/tools/converter/anf_transform.cc:766] TransformFuncGraph] Proc online transform failed.
[ERROR] LITE(109235,ffff7eb87010,converter_lite):2024-04-29-18:25:41.416.403 [mindspore/lite/tools/converter/anf_transform.cc:858] Transform] optimizer failed.
[ERROR] LITE(109235,ffff7eb87010,converter_lite):2024-04-29-18:25:41.416.430 [mindspore/lite/tools/converter/converter_funcgraph.cc:489] Optimize] Transform anf graph failed.
[ERROR] LITE(109235,ffff7eb87010,converter_lite):2024-04-29-18:25:41.416.478 [mindspore/lite/tools/converter/converter.cc:1030] HandleGraphCommon] Optimize func graph failed: -2 NULL pointer returned.
[ERROR] LITE(109235,ffff7eb87010,converter_lite):2024-04-29-18:25:41.416.516 [mindspore/lite/tools/converter/converter.cc:980] Convert] Handle graph failed: -2 NULL pointer returned.
[ERROR] LITE(109235,ffff7eb87010,converter_lite):2024-04-29-18:25:41.416.543 [mindspore/lite/tools/converter/converter.cc:1168] RunConverter] Convert model failed
[ERROR] LITE(109235,ffff7eb87010,converter_lite):2024-04-29-18:25:41.416.579 [mindspore/lite/tools/converter/cxx_api/converter.cc:374] Convert] Convert model failed, ret=NULL pointer returned.
ERROR [mindspore/lite/tools/converter/converter_lite/main.cc:104] main] Convert failed. Ret: NULL pointer returned.
Convert failed. Ret: NULL pointer returned.

请问有没有经过验证的,在atlas 300I卡上能精准识别发票票据的模型组合?之前在x86+nvidia上就是用ppocrv4,默认的识别率已经能够满足要求了。项目赶工,跪求一个在atlas 300I卡上能精准识别发票票据的模型组合。

抱歉久等了,期间我们在跟进您所提的问题。

  1. 针对上述的问题,
    ”/mindspore/mindocr/deploy/py_infer/src/data_process/preprocess/transforms/det_transforms.py中,DetResize类里:
    super().init(
    target_size=None,
    keep_ratio=keep_ratio,
    padding=padding,
    limit_type="none",
    limit_side_len=960,
    force_divisable=False,
    interpolation=interpolation,
    **kwargs,
    )
    limit_type设定的是none,这样在推断的时候,会根据[ascend_context]中设定的shape来对图像进行resize。“
    这部分的limit_type的策略,是从yaml文件中的predict.dataset.transform_pipeline.DetResize传入,而非固定是none。

  2. ch_pp_rec_OCRv4在310上支持似乎存在问题,我们复验之后,ch_pp_rec_OCRv3可以转换成功。可以进行尝试。但当前离线推理的前后处理是对齐ppocrv4的,所以推理结果仍会与ppocrv3有差异的,如要使用,需适配对齐ppocrv3的前后处理。且ppocrv3中预处理未对图片放缩到固定长宽,可能潜在有动态shape的问题对不齐的问题。潜在工作量较大。

  3. 由于mindocr在300I上看护和验证比较少,推荐用300Ipro。其在ch_pp_det_OCRv4+ch_pp_rec_OCRv4,这一个组合我们验证过精度更贴合ppocrv4。建议可以找一台300Ipro的机器,验证一下精度是否满足需求。

收到,多谢,我们试试