专栏算法工具链对onnx模型进行check.sh提示feature size in axis 4 should in range [1, 65536]. But given size 91224

对onnx模型进行check.sh提示feature size in axis 4 should in range [1, 65536]. But given size 91224

hgkfjdgfb2023-08-24
62
12

芯片型号:J5

天工开物开发包OpenExplorer版本:horizon_j5_open_explorer_v1.1.57-py38_20230625

问题定位:模型转换流程中在执行 01_check.sh检测原始onnx模型中的提示
4.问题具体描述:任务是将 ultra fast lane detection v2 模型的onnx文件,先进行转换得到量化的quantized onnx与板端bin模型,之后编写c++ runtime代码加载板端模型推理。原始ultra fast lane detection v2 ufldv2-culane-res18-320x1600.onnx下载链接https://pan.baidu.com/s/1b68-q_NX2PQPHZQn2h-x2A提取码:jfwn

在转换的流程中,第一步check脚本执行提示Layer /cls/cls.3/Gemm

/cls/cls.3/Gemm layer, feature size in axis 4 should in range [1, 65536]. But given size 91224

Layer /Slice

/Slice layer, feature size in axis 4 should in range [1, 65536]. But given size 91224

Layer /Slice_1

/Slice_1 layer, feature size in axis 4 should in range [1, 65536]. But given size 91224

Layer /Slice_2

/Slice_2 layer, feature size in axis 4 should in range [1, 65536]. But given size 91224

Layer /Slice_3

/Slice_3 layer, feature size in axis 4 should in range [1, 65536]. But given size 91224

Layer /Slice

/Slice layer, feature size in axis 4 should in range [1, 65536]. But given size 91224

Layer /Slice_1

/Slice_1 layer, feature size in axis 4 should in range [1, 65536]. But given size 91224

Layer /Slice_2

/Slice_2 layer, feature size in axis 4 should in range [1, 65536]. But given size 91224

Layer /Slice_3

/Slice_3 layer, feature size in axis 4 should in range [1, 65536]. But given size 91224

Layer /Slice

/Slice layer, feature size in axis 4 should in range [1, 65536]. But given size 91224

Layer /Slice_1

/Slice_1 layer, feature size in axis 4 should in range [1, 65536]. But given size 91224

Layer /Slice_2

/Slice_2 layer, feature size in axis 4 should in range [1, 65536]. But given size 91224

Layer /Slice_3

/Slice_3 layer, feature size in axis 4 should in range [1, 65536]. But given size 91224

Layer /Slice

/Slice layer, feature size in axis 4 should in range [1, 65536]. But given size 91224

Layer /Slice_1

/Slice_1 layer, feature size in axis 4 should in range [1, 65536]. But given size 91224

Layer /Slice_2

/Slice_2 layer, feature size in axis 4 should in range [1, 65536]. But given size 91224

Layer /Slice_3

/Slice_3 layer, feature size in axis 4 should in range [1, 65536]. But given size 91224

后续在板端推理生成的bin模型时,结果有误,不知道是否由该问题引起。如何解决

算法工具链
评论1
0/1000
  • 颜值即正义
    Lv.2

    你好,出现上述提示是因为算子不满足BPU的约束,跑在了CPU上。

    关于 后续在板端推理生成的bin模型时,结果有误,建议参考这篇文章进行精度调优:https://developer.horizon.cc/forumDetail/71036815603174578
    2023-08-24
    0
    11
    • hgkfjdgfb回复颜值即正义:

      我在c++ runtime主函数中 run_inference代码之前。设置开始时间戳,在run_inference代码块结束之后,设置结束时间戳,在开发板运行推理时两者相减高达1200ms左右,这是什么原因引起的,仅仅是因为feature size in axis 4 should be in range[1,65536] but given 91224的算子运行在CPU上引起的吗?还是有其它原因?维度超过65536的这类算子无法强制运行在BPU上吧

      2023-08-24
      0
    • 颜值即正义回复hgkfjdgfb:

      是的,维度超出限制无法强制运行在BPU上,除非调整网络结构。

      关于耗时问题,建议使用hrt_model_exec perf去测试一下模型的latency,注意配置profile_path参数,具体可参考在线文档:https://developer.horizon.cc/api/v1/fileData/horizon_j5_open_explorer_cn_doc/oe_mapper/source/ptq/ptq_usage/performance_evaluation.html#id3
      2023-08-24
      0
    • hgkfjdgfb回复颜值即正义:

      我写了一份验证quantized_onnx的代码,从preprocess.py引入对图像的处理步骤infer_transformers,与infer_image_process函数,之后再docker中执行该函数获得推理结果,结果有误,我的infer_transformers,infer_image_process配置如下:推理图片如下:

      2023-08-24
      0
    • hgkfjdgfb回复hgkfjdgfb:

      根据culane数据集,infer_transformers,设置是否错误呢。model_height我已经设为320,model_width我已经设为1600

      2023-08-24
      0
    • 颜值即正义回复hgkfjdgfb:

      这三步都已经验证,精度没问题是嘛?

      2023-08-24
      0
    • 颜值即正义回复hgkfjdgfb:

      注意,自己模型的话,前后处理不要直接复用OE包中提供的示例代码,需要匹配自己的前后处理!

      2023-08-24
      0
    • hgkfjdgfb回复颜值即正义:

      我一直很困惑infer_transformers里的BGR2RGB,BGR2NV12,NV122YUV444,这些之类的设置有什么原则以及先后顺序呢,挺含糊

      2023-08-24
      0
    • hgkfjdgfb回复颜值即正义:

      没有验证,因为我从pytorch导出的onnx在onnxruntime上正常推理,因此我对转换出的float_onnx,optimize_onnx没有验证,只验证了quantized-onnx结果不太对,我的yaml设置如下:

      model_parameters:

      onnx_model: "../../../01_common/model_zoo/mapper/segmentation/ufld/ufldv2.onnx"

      march: "bayes"

      layer_out_dump: False

      log_level: 'debug'

      working_dir: 'model_output'

      output_model_file_prefix: 'ufldv2_output_nv12'

      #remove_node_type: "Reshape; Cast; Transpose"

      input_parameters:

      input_name: ""

      input_type_rt: 'nv12'

      #input_layout_rt: ''

      input_type_train: 'rgb'

      input_layout_train: 'NCHW'

      input_shape: '1x3x320x1600'

      # 网络输入的预处理方法,主要有以下几种:

      norm_type: 'data_mean_and_scale'

      # 图像减去的均值, 如果是通道均值,value之间必须用空格分隔

      mean_value: 123.675 116.28 103.53

      # 图像预处理缩放比例,如果是通道缩放比例,value之间必须用空格分隔

      scale_value: 0.01712475 0.017507 0.01742919

      # 模型量化相关参数

      # -----------------------------

      # model calibration parameters

      calibration_parameters:

      cal_data_dir: './calibration_data_rgb_f32'

      # 校准数据二进制文件的数据存储类型,可选值为:float32, uint8

      # calibration data binary file save type, available options: float32, uint8

      cal_data_type: 'float32'

      calibration_type: 'max'

      max_percentile: 0.99999

      # 编译器相关参数

      debug: False

      optimize_level: 'O3'

      2023-08-24
      0
    • 颜值即正义回复hgkfjdgfb:

      这个是数据变换的过程,读取时什是BGR,你的train数据类型是rgb,板端输入是nv12,在x86模拟时,需要准备到中间数据类型,故到yuv444

      2023-08-24
      0
    • 颜值即正义回复hgkfjdgfb:

      建议验证一下,进而定位问题出现在哪儿

      2023-08-24
      0
    • hgkfjdgfb回复颜值即正义:

      好的谢谢我继续定位问题所在

      2023-08-24
      0