HarmonyOS 鸿蒙Next中onnx模型转om模型报错
HarmonyOS 鸿蒙Next中onnx模型转om模型报错 我有一个多输入多输出的onnx模型,转om模型报错如下,请问如何解决:
(base) c00853367@a46:~/hiai/DDK-tools-next-5.1.1.0/tools/tools_omg$ sh trans_model.sh
INFO: execute command: /home/c00853367/hiai/DDK-tools-next-5.1.1.0/tools/tools_omg/master/omg --model /home/c00853367/code/3D/Depth-Anything-V2-main/onnx/depth_anything_vits_294_168_v7_for_video.onnx --framework 5 --output /home/c00853367/code/3D/Depth-Anything-V2-main/onnx/om/depth_anything_vits_294_168_v7_for_video
I/AI_FMK (1826273): cl_register.cpp CLRegister(56)::"CLRegister start! clName:FMK_CL"
I/AI_FMK (1826273): cl_register.cpp RegisterComputeLibraryFunc(39)::"RegisterComputeLibraryFunc funName:Initialize"
I/AI_FMK (1826273): cl_register.cpp RegisterComputeLibraryFunc(39)::"RegisterComputeLibraryFunc funName:Finalize"
I/AI_FMK (1826273): cl_register.cpp RegisterComputeLibraryFunc(39)::"RegisterComputeLibraryFunc funName:SetOnServiceDiedCallback"
I/AI_FMK (1826273): cl_register.cpp RegisterComputeLibraryFunc(39)::"RegisterComputeLibraryFunc funName:GetOpsKernelInfoStores"
I/AI_FMK (1826273): cl_register.cpp RegisterComputeLibraryFunc(39)::"RegisterComputeLibraryFunc funName:GetGraphOptimizerObjs"
I/AI_FMK (1826273): cl_register.cpp RegisterComputeLibraryFunc(39)::"RegisterComputeLibraryFunc funName:GetGraphCompilerObjs"
I/AI_FMK (1826273): cl_register.cpp RegisterComputeLibraryFunc(39)::"RegisterComputeLibraryFunc funName:GetGraphExecutorFactoryObjs"
I/AI_FMK (1826273): cl_register.cpp RegisterComputeLibraryFunc(39)::"RegisterComputeLibraryFunc funName:GetCompatibleHelperObjs"
I/AI_FMK (1826273): cl_register.cpp RegisterComputeLibraryFunc(39)::"RegisterComputeLibraryFunc funName:GetDeviceEventHandlerObjs"
I/AI_FMK (1826273): cl_register.cpp RegisterComputeLibraryFunc(39)::"RegisterComputeLibraryFunc funName:GetCompiledTargetSaverObjs"
I/AI_FMK (1826273): cl_register.cpp RegisterComputeLibraryFunc(39)::"RegisterComputeLibraryFunc funName:GetTunedTargetCompilerObjs"
I/AI_FMK (1826273): cl_register.cpp RegisterComputeLibraryFunc(39)::"RegisterComputeLibraryFunc funName:GetPlatformInfoStoreObjs"
I/OMG_TOOL (1826273): main.cpp main(18)::"OMG run begin."
I/OMG_TOOL (1826273): command_util.cpp CheckHiaiVersionValid(868)::"set _version ir."
I/AI_FMK (1826273): omg.cpp Generate(210)::"Generate begin."
I/AI_FMK (1826273): ops_kernel_store_manager.cpp DlopenComputeLibrary(38)::"Open ComputeLibrary so: libcpucl_host.so"
I/AI_FMK (1826273): ops_kernel_store_manager.cpp DlopenComputeLibrary(38)::"Open ComputeLibrary so: libai_npucore_itf.so"
W/AI_FMK (1826273): ops_kernel_store_manager.cpp DlopenComputeLibrary(41)::"dlopen so failed: libai_npucore_itf.so: cannot open shared object file: No such file or directory"
I/AI_FMK (1826273): ops_kernel_store_manager.cpp DlCloseComputeLibrary(83)::"handle is null, not need to close library"
I/AI_FMK (1826273): model_util.cpp BuildOrigin2IRGraph(234)::"ModelUtil::BuildOrigin2IRGraph from file"
I/AI_FMK (1826273): proto_util.cpp ReadBytesFromBinaryFile(195)::"Read size:53476700"
W/AI_FMK (1826273): parser_factory.cpp LoadCustomOpLib(59)::"dlerror: libcustom_op.so: cannot open shared object file: No such file or directory"
E/AI_INFRA (1826273): onnx_graph_parser.cpp UpdateUserSetNodeNames(631)::"opIndex != context.tensorOperator.end()" "false, return FAIL."
E/AI_INFRA (1826273): model_util.cpp ParseOriginBuffer2IrGraph(482)::"ret == SUCCESS" "false, return ret."
E/AI_INFRA (1826273): model_util.cpp ParseOriginONNX2IrGraph(548)::"ParseOriginBuffer2IrGraph(inputOptions, srcbuffer, irGraph) == SUCCESS" "false, return FAIL."
E/AI_INFRA (1826273): model_util.cpp BuildOrigin2IRGraph(238)::"ret == SUCCESS" "false, return ret."
E/AI_FMK (1826273): omg.cpp GenerateIRModel(140)::"Failed to generator IR graph!."
E/OMG_TOOL (1826273): command_util.cpp ProcessCommand(1284)::"OMG Generate execute failed!!"
E/OMG_TOOL (1826273): main.cpp main(21)::"OMG generate offline model failed. Please see the log or pre-checking report for more details."
I/AI_FMK (1826273): ops_kernel_store_manager.cpp ~OpKernelStoreManager(208)::"~OpKernelStoreManager"
转换命令如下:
./omg --model /home/c00853367/code/3D/Depth-Anything-V2-main/onnx/depth_anything_vits_294_168_v7_for_video.onnx --framework 5 --output /home/c00853367/code/3D/Depth-Anything-V2-main/onnx/om/depth_anything_vits_294_168_v7_for_video
更多关于HarmonyOS 鸿蒙Next中onnx模型转om模型报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html
已解决,解决方法:
pip install onnx-simplifier
python -m onnxsim depth_anything_vits_294_168_v7_for_video.onnx depth_anything_sim.onnx
更多关于HarmonyOS 鸿蒙Next中onnx模型转om模型报错的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
这类 ONNX 转 OM 的问题要先定位真正的 ERROR 行,前面 CLRegister、Initialize 之类日志通常只是工具启动和计算库注册,不一定是根因。
建议按这个顺序排:1. 用 onnx.checker 和 onnxsim 先确认 ONNX 本身合法,并尽量固定输入 shape;2. 多输入多输出模型需要确认转换脚本里是否把所有输入名、输入 shape 都传完整,动态维度不要留给工具猜;3. 看报错是否指向 unsupported op、shape infer 失败或 dtype 不支持,Depth-Anything 这类模型常见卡点在 Resize、GridSample、LayerNorm、动态切片等算子;4. 如果是算子不支持,优先改导出参数或替换子图,而不是只改 omg 参数。
可以把最后 20 行脱敏错误贴出来,尤其是第一个 ERROR/Exception 位置。只看当前这段启动日志,还不能判断是模型结构问题、shape 问题还是工具版本兼容问题。
加上输入维度,输出节点命令如下:
./omg --model /home/c00853367/code/3D/Depth-Anything-V2-main/onnx/depth_anything_vits_294_168_v7_for_video.onnx --framework 5 --output /home/c00853367/code/3D/Depth-Anything-V2-main/onnx/om/depth_anything_vits_294_168_v7_for_video --input_shape="image:1,3,168,294;cache0:1,3,253,384;cache1:1,3,253,384;cache2:1,3,253,384" --out_nodes="depth;newcache0;newcache1;newcache2"
报错如下:
E/AI_INFRA (1842711): model_util.cpp ParseOriginBuffer2IrGraph(475)::"ret == SUCCESS" "false, return ret."
E/AI_INFRA (1842711): model_util.cpp ParseOriginONNX2IrGraph(541)::"ParseOriginBuffer2IrGraph(inputOptions, srcbuffer, irGraph, hiai::FrameworkType::ONNX) == SUCCESS" "false, return FAIL."
E/AI_INFRA (1842711): model_util.cpp BuildOrigin2IRGraph(233)::"ret == SUCCESS" "false, return ret."
E/AI_FMK (1842711): omg.cpp GenerateIRModel(113)::"Failed to generator IR graph!."
E/OMG_TOOL (1842711): command_util.cpp ProcessCommand(1226)::"OMG Generate execute failed!!"
E/OMG_TOOL (1842711): main.cpp main(21)::"OMG generate offline model failed. Please see the log or pre-checking report for more details."
I/AI_FMK (1842711): ops_kernel_store_manager.cpp ~OpKernelStoreManager(206)::"~OpKernelStoreManager"
onnx转om报错常见原因:算子未适配昇腾AI处理器或ONNX opset版本不兼容。请检查模型是否包含昇腾不支持的算子(如FusedBatchNorm、部分Reduce操作),并确认onnx2om工具版本与CANN包匹配。建议使用atc工具时添加 --input_shape 参数固化动态维度,或通过PyTorch导出时设置opset11以下版本。
错误源于OMG工具解析ONNX图时,onnx_graph_parser.cpp 中算子索引映射失败。通常是因为模型中包含不支持的算子,或输入/输出名称未正确指定,导致图构建时找不到对应算子。
解决方法:
- 用 Netron 查看模型结构,识别并替换或移除不支持的算子(如 GridSample、自定义域算子),可使用
onnx-simplifier简化模型。 - 转换命令中显式指定
--input_shape和--output的输出节点名(多输出时用逗号分隔),例如:
--input_shape "input1:1,3,224,224;input2:1,3,224,224" --output "out1,out2" - 若模型用到自定义算子,确保
libcustom_op.so在库路径下,或通过--custom_op参数加载。 - 仍失败可尝试升级 DDK 工具或使用 ONNX 版本兼容性调整后重新导出。

