专栏算法工具链模型验证时遇到node->input size == attr_input_index fail

模型验证时遇到node->input size == attr_input_index fail

已解决
七秒²⁰²² ༄2025-07-07
76
19

1. 芯片型号:J6E

2. 板卡类型:J6E开发板

3. 天工开物开发包 OpenExplorer 版本:v3.0.22

4. 问题定位:PTQ模型验证

在使用hb_compile  --model  onnx_model  --march  "nash-e"  --input-shape input.1  1x3x512x960时,

终端log信息:

INFO:saving model to ***_original_float_model.onnx.   

ERROR: error-occur-during hmct.api.build_model , error message: GetAttrValue: assertion 'node_->inputs().size() == attr_input_index_' failed.

the error model has been saved as eliminate_node_with_same_shape_pass_fail.onnx

我将原始模型通过onnxsim做了简化,导致这个问题原因是什么呢?

算法工具链
征程6
评论1
0/1000
  • Huanghui
    Lv.5

    你好,你的意思是用经过onnxsim简化过的模型用工具链去编译吗?

    2025-07-08
    0
    18
    • 七秒²⁰²² ༄回复Huanghui:

      是的

      2025-07-08
      0
    • 七秒²⁰²² ༄回复Huanghui:

      在编译的时候会提示opset is 11, try converting to opset 19,所以我在使用onnxsim时,将输出model的opset设置=19再保存,再次hb_compile的时候,error提示是:invalid_graph, in node (unsqueeze, "", -1): ("6513": tensor(float), ) -> ("6542": tensor(float), ), error node (unsqueeze_4145) with schema(::unsqueeze:13) has input size 1 not in range [min=2, max=2]

      2025-07-08
      0
    • Huanghui回复七秒²⁰²² ༄:

      如果不用onnxsim简化原始模型呢?直接编译onnx,如果能通过,说明经过onnxsim简化过的onnx里面可能有不支持的算子或者 简化过的ONNX 图结构不规范 导致错误 。

      2025-07-08
      0
    • 七秒²⁰²² ༄回复Huanghui:

      模型有很多input是int64类型,以及还有float64/boolean类型,在指导文档里面没有找到对应的--input-shape设置

      2025-07-08
      0
    • 七秒²⁰²² ༄回复Huanghui:

      这些input大多和主干网络无关,只有三个是相关的,其中有两个是int64,我在onnxsim的把这两个input改成了固定值,将input就改成了非输入节点

      2025-07-08
      0
    • Huanghui回复七秒²⁰²² ༄:

      你想转换成什么数据类型?建议在pytorch模型那里提前转好,训练好,导出来符合输入数据要求的onnx模型。

      2025-07-08
      0
    • 七秒²⁰²² ༄回复Huanghui:

      就是像tensor: int64这样的input 是没有对应的( hb_compile --input-shape[optional]) optional 选项是吗?

      2025-07-08
      0
    • Huanghui回复七秒²⁰²² ༄:

      这个是没有的 ,要么onnx模型前面加cast转换节点,要么pytorch模型那里就提前弄好。建议在原始pytorch模型这里弄好。

      2025-07-08
      0
    • 七秒²⁰²² ༄回复Huanghui:

      ok,我们再改改,谢谢

      2025-07-08
      0
    • 七秒²⁰²² ༄回复Huanghui:

      再问下,input 是tensor: float32 的有对应的--input-shape 吗?

      2025-07-08
      0
    • Huanghui回复七秒²⁰²² ༄:

      你用hb_compile编译时候要去config指定输入的数据类型,如rgb,bgr,featuremap等等,前二者是在模型内部进行数据预处理,这也就是为什么需要指定mean_value scale_value。建议使用featuremap格式,数据提前预处理好。以免出现预处理错误。你说的float32有对应的input-shape不太理解什么意思。比如你做模型验证,

      就是这样用的,这个是多输入的,你只要指定输入名字以及形状就行,在config文件里面也是

      2025-07-08
      0
    • 七秒²⁰²² ༄回复Huanghui:
      用hb_model_info 命令看模型信息的时候,输入是
      input.1input [1, 3, 512, 960]FLOAT32
      15input []INT64
      16input []INT64
      所以,说的是15和16这两个输入 怎么给相应的input-shape
      2025-07-08
      0
    • 七秒²⁰²² ༄回复Huanghui:

      遇到这个node->input size == attr_input_index fail问题,有没有可以定位到是哪个算子的方法呢?

      2025-07-08
      0
    • Huanghui回复七秒²⁰²² ༄:

      15,16这两个输入,hrt_model_exec查看应该会显示模型输入的形状吧,或者你用netron查看onnx模型的各个输入形状,来确定输入shape,如果你是做实际的编译,15,16,后面是int64,那么你准备的校准集数据也的是int64.

      2025-07-08
      0
    • Huanghui回复七秒²⁰²² ༄:

      你做模型验证也不需要指定类型。编译器会自动根据你的模型实际输入生成对应的数据喂给模型

      2025-07-08
      0
    • Huanghui:

      根据模型信息,把NCHW替换就行

      2025-07-08
      0
    • 七秒²⁰²² ༄回复Huanghui:

      通过netron可视化的时候,在模型输出的上面有一些node之间的连线上显示了类似 unk_299x4 这种信息,会对模型造成影响吗?

      2025-07-08
      0
    • Huanghui回复七秒²⁰²² ༄:

      hbruntime推理下就知道了,这个unk应该是未知维度。

      2025-07-08
      0