专栏算法工具链J6怎么推理一个只有一个算子网络的输出

J6怎么推理一个只有一个算子网络的输出

已解决
默认401922025-03-24
206
28
  1. 芯片型号:J6

  2. 板卡类型:x86模拟器

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

  4. 问题定位:模型推理

我想测试单个算子用J6推理后的输出结果的精度;目前我采用的方法是搭建了一个只有单算子(sigmoid)的onnx模型(1,3,20,20),然后转换成hbm模型,用hrt_model_exec infer --model_file=sigmoid_float32_model_nv12.hbm --input_file=1.jpg,1.jpg --input_img_properties=Y,UV --input_stride="640,32,1,1;320,32,2,1" frame_count 1 去推理 。
其中1.jpg是(20,20,3)的(没有影响吧,因为我想让数据是float的从0到199,这样好对比输出精度);
Description
最后结果只能显示推理模型的时间,请问如何得到具体的模型输出结果呢,或者如何实现我想测试单算子的输出结果的目的呢?
谢谢
算法工具链
征程6技术深度解析
评论2
0/1000
  • DR_KAN
    Lv.4

    你这样推理感觉有点奇怪,用featuremap作为输入可能更合适

    2025-03-24
    0
    1
    • 默认40192回复DR_KAN:

      确实应该改为featuremap,否则后面用HBRuntime推理时还要手动把数据分为Y和UV

      2025-03-24
      0
  • Huanghui
    Lv.5

    你好,具体的输出结果需要你自己去hi先后处理逻辑代码,x_86,OE包里面提供了HB_runtime,里面有推理的示例代码,不过最后结果需要你自己实现后处理。

    2025-03-24
    0
    25
    • 默认40192回复Huanghui:

      请问示例代码是cls_inference.py吗?还是在哪里,另外我想实现在int8、int16、float三种类型下的sigmoid算子输出结果推理,请问具体要传的是哪个模型?int8和int16推理bc或hbm;float32推理量化后的onnx?

      2025-03-24
      0
    • Huanghui回复默认40192:
      PTQ下面的HBruntime推理库
      2025-03-24
      0
    • Huanghui回复默认40192:

      是的int8,int16推理hbm模型,如果要测试float32,那你直接推onnx就可以 ,HBruntime推离苦支持BC,HBM,ONNX三种模型推理

      2025-03-24
      0
    • Huanghui回复默认40192:

      推理结果应该是个list。

      2025-03-24
      0
    • 默认40192回复Huanghui:

      好的 我去看一下 麻烦了,有问题再咨询您~

      2025-03-24
      0
    • 默认40192回复Huanghui:

      你好,我用普通的单个sigmoid算子的模型,和咱们的ptq伪量化模型、bc、hbm模型(这三个模型的输出是一模一样的),用HBRuntime进行推理的结果如上表,为什么当输入值超过[-1.0,1.0]的范围时,值就固定了,是sigmoid算子本身加了一个[-1.0,1.0]的截断吗?

      2025-03-24
      0
    • Huanghui回复默认40192:

      sigmoid算子的输出值范围就是[0,1]呀,你看你输出都在[0,1]之间

      2025-03-24
      0
    • Huanghui回复默认40192:

      你看你的输入 ,越小,输入越接近0,当输入为无穷小时候,输出就接近0了,反之也是。越大越接近1

      2025-03-24
      0
    • 默认40192回复Huanghui:
      我的意思是输入kuxiao_org.svg,你看当我input为1.1 1.3 1.5 1.7 1.9的时候输出结果都是0.7310590;

      当我输入为-1.1 -1.3 -1.5 -1.7 -1.9 的时候输出结果都是0.2689350

      2025-03-24
      0
    • 默认40192回复Huanghui:

      所以想问一下是不是内部算子做了截断,将输入值大于1 或者小于-1的时候都设置为了1/-1,所以出现了输出值都相同的情况

      2025-03-24
      0
    • Huanghui回复默认40192:

      我感觉这个跟量化内部有关,可能是在同一个量化尺度范围内,导致量化之后结果一样

      2025-03-25
      0
    • 默认40192回复Huanghui:

      是我传入模型的输入的设置问题吗?我设置的是featuremap的1,3,20,20的float32输入,三个通道数值相同,0.1,-0.1,0.2,-0.2,...,20,-20;没做预处理直接将这个输入传进模型,下面是我的yaml、测试代码和模型(在sigmoid前加一个卷积我也试过了一样有截断)

      2025-03-26
      0
    • Huanghui回复默认40192:

      你的校准集处理方式是怎么样的

      2025-03-26
      0
    • 默认40192回复Huanghui:

      设置的skip,直接跳过的,没放校准集,是这个的问题吗?

      2025-03-26
      0
    • Huanghui回复默认40192:

      你试下正常校准流程,看下是否还是这个问题

      2025-03-30
      0
    • 默认40192回复Huanghui:
      第二天就试了没有截断这个问题了haha_org.svg 但是后面输出的精度会和校准数据集的输入有关,比如我推理模型时的图片数据是分布在0,20内的,但我校准数据集设置为0-200内纯随机的数据,精度损失就会比较大,如果校准数据集的数据也在0,20内,就会比较小,咱们和这个精度损失主要和哪些因素有关呢?

      另外我发现是不是有一个dump的参数,可以查看模型每层的输出值?

      2025-03-31
      0
    • Huanghui回复默认40192:

      看来这个是与数据分布有关,精度损失主要就是和搜集的校准集有关,一般用来量化的校准集都是采用训练集里面的一部分,然后就是要保证数据前处理要一样。不然数据分布不同。

      2025-03-31
      0
    • Huanghui回复默认40192:

      最后那个 dump,因该是dump_intermediate参数, dump_intermediate =0默认关闭, 为1时 模型中每一层节点输入数据输出数据以 bin 方式保存, 其中节点输入输出为 stride 数据 。为2时 模型中每一层节点输入数据和输出数据以 bin 和 txt 两种方式保存,其中节点输入输出为 stride 数据。 为3时 每一层节点输入数据和输出数据以bin和txt两种方式保存,其中节点输入输出为valid数据。

      2025-03-31
      0
    • Huanghui回复默认40192:

      这个参数控制用在hrt_model_exec上的

      2025-03-31
      0
    • 默认40192回复Huanghui:

      好的 我去手册看一看 感谢

      2025-03-31
      0
    • Huanghui回复默认40192:

      不客气

      2025-03-31
      0
    • 默认40192回复Huanghui:

      请问stride和vaild数据都是什么含义呢?我传了一个单sigmoid算子的模型,用dump_intermediate 3 ,然后第一层的输入输出是下列两张图,请问为什么0.1对应的是297,以此类推

      以sigmoid的输出为什么是下面的对应关系

      并且如果我设置dump_intermediate 2的话 输出的是stride,和valid区别如下,有什么含义呢?(左边有零的是stride,右边是valid,和我的输入数据float有关吗?我输入是float32,传到sigmoid量化为了int16)

      麻烦帮忙看一下,谢谢~

      2025-04-02
      0
    • 默认40192回复Huanghui:

      我刚刚试了一下,输入的值,比如0.100503去除sigmoid算子前的量化算子的scale,就是297;

      输出的值17206去乘sigmoid算子后的反量化算子的scale好像就是0.525093..请问是这个意思吗?

      2025-04-02
      0
    • Huanghui回复默认40192:

      dump_intermediate 的数据与输入数据无关,stide表示是每个维度单个的字节数,含PADDING数据,valid也 是每个维度单个的字节数 ,但不含PADDING。

      2025-05-04
      0
    • Huanghui回复默认40192:

      客户您好,长时间未收到你的答复,相信问题已解。如对此尚存疑问欢迎新帖讨论,感谢您的参与!

      2025-05-04
      0