VIM3 NPU推理支持浮点输入吗?

通过自定义的模型预处理方式输出的浮点数据,能直接使用aml nn api推理吗?当前我用如下方式进行,但好像结果有些问题?
nn_input in_data;
in_data.input_index = 0;
in_data.size = 32x32x1;
in_data.input = (uchar*)(float_data_ptr); // 该数据为自定义预处理输出的32x32x1的浮点数据
in_data.input_type = BINARY_RAW_DATA;
aml_module_input_set(context, &in_data);

@crouchggj

  1. amlogic nn api 已经停止维护了。
  2. 尽量不要使用浮点数据输入,这样子就失去使用NPU的意义了。理论上是支持float16输入的,但是也是需要转换成整形再传入的

感谢回复。
主要是我们的预处理方式比较特殊,NPU本身的归一化方式不太能够支持。
对于这种自定义的预处理方式,有什么比较好的处理方式用于模型推理呢?

@crouchggj 建议自己在预处理时就处理成整形,不要用浮点,说实话,浮点无论是精度还是效率在NPU上都很低。非常不建议这么使用。建议采用近似的方法弄成整形。如果一定要使用float,可以使用float16,这里有个float16和float32转换的代码给你参考

float Float16ToFloat32(signed short src)
{   
    signed int t1;
    signed int t2;
    signed int t3;
    float out;
    int i; 
        t1 = src & 0x7fff;                       // Non-sign bits
        t2 = src & 0x8000;                       // Sign bit
        t3 = src & 0x7c00;                       // Exponent

        t1 <<= 13;                              // Align mantissa on MSB
        t2 <<= 16;                              // Shift sign bit into position

        t1 += 0x38000000;                       // Adjust bias

        t1 = (t3 == 0 ? 0 : t1);                // Denormals-as-zero

        t1 |= t2;
        *((unsigned int*)&out) = t1;                 // Re-insert sign bit
    return out;
}

多谢!! :grinning: 我参考下
另外“amlogic nn api 已经停止维护了”,那现在推荐用什么api来做nn推理呢

@crouchggj 推荐使用原始的API

如果使用python,可以使用ksnn