公司动态
[ERROR] Failed to convert PaddlePaddle model: (Unimplemented) the 0th elementwise MUST be ir::FloatA
在转化paddleocrv5的det模型时遇到此问题。[问题版本]在这里(https://blog.csdn.net/m0_52113979/article/details/163163417?spm1001.2014.3001.5501)建议用兼容的CPU版本转化原因分析Paddle2ONNX 在新版 PaddlePaddle3.x下解析 PIR 格式的模型时遇到了不支持的 attribute 类型。nearest_interp 的 scale 属性是 a_f64 类型“#”: “0.a_f64”而 Paddle2ONNX 期望的是 a_f32FloatAttribute。Op 572 (1.nearest_interp): A[scale] array, [0] type 0.a_f64, val {#: 0.a_f64, D: 2.0} Op 574 (1.nearest_interp): A[scale] array, [0] type 0.a_f64, val {#: 0.a_f64, D: 2.0} Op 576 (1.nearest_interp): A[scale] array, [0] type 0.a_f64, val {#: 0.a_f64, D: 2.0}解决方案手动将a_f64转化为a_f32格式代码由AI提供这次做了检查可以正常推理 将 a_f64 改为 a_f32保持值不变 importjsonimportosimportshutil model_pathaddleOCR-main\\output\\PP-OCRv5_mobile_det\\best_model\\inference.jsonbackup_pathmodel_path.bak# 备份shutil.copy2(model_path,backup_path)print(f已备份到:{backup_path})withopen(model_path,r,encodingutf-8)asf:datajson.load(f)opsdata[program][regions][0][blocks][0][ops]changes[]fori,opinenumerate(ops):ifAnotinop:continueattrsop[A]forattr_entryinattrs:ifnotisinstance(attr_entry,dict)orATnotinattr_entry:continueatattr_entry[AT]ifnotisinstance(at,dict):continue# 1. a_f64 - a_f32 (保持数值)ifat.get(#)0.a_f64:old_valat[D]at[#]0.a_f32op_nameop.get(#,?)attr_nameattr_entry.get(N,?)changes.append(fOp{i}({op_name}):{attr_name}a_f64{old_val}- a_f32{old_val})# 2. a_array 中的子元素类型也需要检查ifat.get(#)0.a_array:valsat.get(D,[])forj,vinenumerate(vals):ifisinstance(v,dict)andv.get(#)0.a_f64:old_valv[D]v[#]0.a_f32op_nameop.get(#,?)attr_nameattr_entry.get(N,?)changes.append(fOp{i}({op_name}):{attr_name}[{j}] a_f64{old_val}- a_f32{old_val})print(f\n共修改{len(changes)}处:)forcinchanges:print(f{c})# 保存withopen(model_path,w,encodingutf-8)asf:json.dump(data,f,ensure_asciiFalse)print(f\n已保存修改到:{model_path})