caffe_xilinx YOLOv3转ONNX时无deephi_resize_param字段报错如何解决
问题原因
google.protobuf.text_format.ParseError: 2027:3 : Message type "caffe.LayerParameter" has no field named "deephi_resize_param"
该报错是因为caffe_xilinx为标准Caffe扩展了专属的deephi_resize_param字段,而官方caffe2onnx默认使用标准Caffe的Protobuf协议定义,无法识别该自定义扩展字段。
解决方法
方案1:替换Caffe Proto定义(最适配方案)
- 找到本地Python环境中caffe2onnx的安装路径,通常为
{Python安装目录}/Lib/site-packages/caffe2onnx - 从你的caffe_xilinx源码路径中,找到
caffe/proto/caffe.proto文件,替换caffe2onnx目录下自带的标准版本caffe.proto - 在caffe2onnx目录下执行编译命令生成新的Proto Python代码:
protoc --python_out=./ caffe.proto - 重新执行模型转换命令即可识别自定义字段。
方案2:修改模型配置文件(临时快速方案)
如果不需要保留deephi_resize层的特殊参数逻辑,可手动修改模型prototxt文件:
- 全局搜索prototxt中所有
deephi_resize_param字段所在的层 - 将层类型替换为标准Caffe支持的
Resize类型,用标准resize_param字段替换deephi_resize_param,原有参数值保持不变 - 保存修改后的prototxt文件后重新执行转换。
方案3:新增自定义层转换规则(精度最优方案)
如果前两种方案转换后模型精度不符合预期,需要手动添加层映射逻辑:
- 在caffe2onnx的
ops目录下新增DeephiResize层的转换函数,将deephi_resize_param的参数映射到ONNX Resize算子的对应入参 - 在caffe2onnx的层注册逻辑中,新增
DeephiResize层类型到你写的转换函数的映射规则 - 重新运行转换命令即可。
内容的提问来源于stack exchange,提问作者Rajaalakshmi
相关产品推荐
相关产品推荐

