PaddlePaddle / Paddle2ONNX

ONNX Model Exporter for PaddlePaddle
Apache License 2.0
732 stars 172 forks source link

请问paddlehub中的模型FCN_HRNet_W18_Face_Seg怎么转成onnx格式 #629

Open 471417367 opened 2 years ago

471417367 commented 2 years ago

paddlepaddle-gpu==0.0.0.post110 paddlehub==2.1.1

以下方式都失败了: 方式1: import paddlehub as hub

human_seg = hub.Module(name="FCN_HRNet_W18_Face_Seg") human_seg.save_inference_model(dirname="output/", model_filename="output/inference.pdmodel", params_filename="output/inference.pdiparams") 报错:RuntimeError: Module FCN_HRNet_W18_Face_Seg lacks input_spec, please specify it when calling save_inference_model.

方式2: import paddlehub as hub import paddle

human_seg = hub.Module(name="FCN_HRNet_W18_Face_Seg") human_seg.save_inference_model(dirname="output/", model_filename="output/inference.pdmodel", params_filename="output/inference.pdiparams", input_spec=[None, 3, 384, 384]) 报错:ValueError: The decorated function forward requires 0 arguments: [], but received 4 with (None, 3, 384, 384).

方式3: import paddlehub as hub import paddle

human_seg = hub.Module(name="FCN_HRNet_W18_Face_Seg") input_spec = paddle.static.InputSpec(shape=[None, 3, 384, 384], dtype='float32', name='FCN_HRNet_W18_Face_Seg') paddle.onnx.export(human_seg, 'model', input_spec=[input_spec], opset_version=11) 报错:ValueError: The decorated function forward requires 0 arguments: [], but received 1 with (InputSpec(shape=(-1, 3, 384, 384), dtype=paddle.float32, name=FCN_HRNet_W18_Face_Seg),).

另外也尝试过网上能找到的一些模型加载后再保存的方式都失败,请问有转换成功的可以分享下吗? paddle2onnx的转换对只有一个seg_model_384.pdparams模型文件的怎么转换呢? PaddleSeg中利用export.py转模型需要传configs的,yml文件,没有FCN_HRNet_W18_Face_Seg的。

yeliang2258 commented 2 years ago

用户你好,

  1. paddlehub提供了导出为onnx的接口。参见:https://github.com/PaddlePaddle/PaddleHub/blob/df850a187e53c2a1a9318ad1d3da5dd716773619/docs/docs_ch/api/module.rst
  2. seg_model_384.pdparams只是一个参数文件,不能单独用于转换。
  3. FCN_HRNet_W18_Face_Seg的config.yaml文件可以到paddleseg下提issue询问。
yeliang2258 commented 2 years ago

你可以试一下如下脚本:

import paddlehub as hub from paddle.static import InputSpec

in_spec = InputSpec([None, 3, 384, 384], 'float32') human_seg = hub.Module(name="FCN_HRNet_W18_Face_Seg") human_seg.export_onnx_model(dirname="output/model", input_spec=[in_spec])

471417367 commented 2 years ago

已解决,谢谢啦。 https://github.com/PaddlePaddle/PaddleHub/issues/1809

yeliang2258 commented 2 years ago

另外,请问你们导出为ONNX的用途是?用什么推理引擎进行部署呢?

471417367 commented 2 years ago

@yeliang2258 使用的环境比较杂,经常涉及到Paddle,pytorch(yolov5),tensorflow(bert)等为了部署的时候简单,都统一转onnx。