nndeploy icon indicating copy to clipboard operation
nndeploy copied to clipboard

使用openvino 跑ocr 的demo,程序崩溃退出。

Open qiumeng6 opened this issue 1 month ago • 11 comments

执行命令 ./nndeploy_demo_ocr
--name nndeploy::ocr::DetectorGraph
--inference_type kInferenceTypeOpenVino
--device_type kDeviceTypeCodeX86:0
--model_type kModelTypeOnnx
--is_path
--classifier_model_value ./cls_inference.onnx
--detector_model_value ./det_inference.onnx
--recognizer_model_value ./rec_inference.onnx
--character_txt_value ./rec_config.json
--codec_flag kCodecFlagImage
--parallel_type kParallelTypeTask
--detector_model_inputs x
--detector_model_outputs fetch_name_0
--classifier_model_inputs x
--classifier_model_outputs softmax_0.tmp_0
--recognizer_model_inputs x
--recognizer_model_outputs fetch_name_0
--input_path /home/long/qiumeng/cpp_dev/nndeploy/image/test.jpeg \

结果:

Image

debug发现,应该是目标检测阶段没有box输出导致的崩溃。 但是实在找不到为啥openvino后端检测阶段有问题了。 (onnxruntime正常输出)

qiumeng6 avatar Nov 09 '25 15:11 qiumeng6

目前开发该算法插件的同学比较忙,可能需要等他忙过这段时间,才能来具体看看问题

Alwaysssssss avatar Nov 12 '25 02:11 Alwaysssssss

你通过工作流的方式能运行吗

Alwaysssssss avatar Nov 12 '25 02:11 Alwaysssssss

你是说前端页面那个工作流吗, onnxruntime可以运行 但是某些infer节点换成openvino会一直运行等待,不成功。

qiumeng6 avatar Nov 12 '25 04:11 qiumeng6

忘了问前提了:你编译的时候打开了openvino吗

Alwaysssssss avatar Nov 12 '25 12:11 Alwaysssssss

遇到同样的问题,openvino 别的模型都正常只有 ocr 不行。 debug 了一下发现 onnx 初始化 is_input_dynamic_ 是 true,输入 shape 为空,应该是推理时确定。 openvino 初始化 is_input_dynamic_ 是 false,输入 shape 是 [0,3,0,0],进推理后卡在推理阶段

xxf1ow avatar Nov 13 '25 01:11 xxf1ow

忘了问前提了:你编译的时候打开了openvino吗

打开了0.0

qiumeng6 avatar Nov 13 '25 02:11 qiumeng6

遇到同样的问题,openvino 别的模型都正常只有 ocr 不行。 debug 了一下发现 onnx 初始化 is_input_dynamic_ 是 true,输入 shape 为空,应该是推理时确定。 openvino 初始化 is_input_dynamic_ 是 false,输入 shape 是 [0,3,0,0],进推理后卡在推理阶段

好的,感谢提供的信息,我等一下再看看。主要是我自己编译的openvino运行时没有日志输出,也不知道openvino内部有没有啥警告。

qiumeng6 avatar Nov 13 '25 02:11 qiumeng6

用onnxsim,给原始模型做下shape inference就可以解决该问题呢

Alwaysssssss avatar Nov 13 '25 04:11 Alwaysssssss

好的,我试试。

qiumeng6 avatar Nov 13 '25 05:11 qiumeng6

用onnxsim,给原始模型做下shape inference就可以解决该问题呢

onnxsim 需要带什么参数吗? 我用的命令 python3 -m onnxsim ./ppocrv5_det.onnx ./ppocrv5_det.sim.onnx 试了之后发现还是跑不通,输出 tensor 的形状是 [0 1 0 0]

xxf1ow avatar Nov 13 '25 07:11 xxf1ow

我用onnxsim 后面带 --overwrite-input-shape 根据某张图固定了输入尺寸,暂时算是通了。但是ocr中识别等一些阶段应该是需要动态batch维度的。但是动态输入的model都会hang住或者没输出,后面仔细看一下为啥吧。

qiumeng6 avatar Nov 13 '25 11:11 qiumeng6

我用onnxsim 后面带 --overwrite-input-shape 根据某张图固定了输入尺寸,暂时算是通了。但是ocr中识别等一些阶段应该是需要动态batch维度的。但是动态输入的model都会hang住或者没输出,后面仔细看一下为啥吧。

这个demo动态shape没有输出,是因为框架里 openvino 后端在初始化的时候 就通过ov的api拿到输出tensor shape了。但此时拿到的shape如果是动态的,是默认0占位的。 我把shape获取改成每次推理后再拿,就通了。大概是这个问题。不过这demo 性能和官方还是有点差距啊 0.0

qiumeng6 avatar Nov 24 '25 11:11 qiumeng6